Skip to main content
Glama
get-mcp-ads

Amazon Ads MCP Server

Amazon Ads MCP server

Bring your Amazon Ads profiles into your MCP client.

Read Sponsored Products, Brands and Display configuration, request performance reports and prepare changes for explicitly selected advertising profiles.

Release CI License: Apache 2.0 Node

Watch the film · What's new · Install · Tool reference · Try hosted getmcpads

Watch the getmcpads film: every ad account in one conversation with your AI assistant

Play the 45-second film

The film shows hosted getmcpads with sample data. Its MCP Apps, from creative galleries and alerts to Google Sheets exports and bulk launches, belong to the hosted product. This repository provides the standalone native API tools.

31 read tools · 77 write tools, disabled by default.

Run locally with your own Login with Amazon application and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the Amazon Ads API. For managed connections, including supported ChatGPT setups, use the hosted option.

What's new

v1.0.1: Zod 4 security update · October 26, 2026

  • Update zod to 4.6.7. Every Zod release before 4.6.6 is covered by the high-severity advisory GHSA-mrhx-c7xc-m3w5: validating an oversized constrained collection can exhaust memory, and no Zod 3 release carries the fix. npm audit --omit=dev reports no vulnerability again.

  • Keep the Zod 3 validation behaviour. A parameter default is still validated and completed before use, so an omitted object must still supply its required fields.

  • Keep each parameter's own description when the parameter is optional or has a default. Zod 4 stores a description on the wrapped schema only, so the shared fallback description could otherwise replace it.

  • Tool names, parameters and descriptions published over MCP are unchanged. server-card.json is regenerated with Zod 4's JSON Schema output, which spells some constraints differently.

Earlier releases

Version

Date

Highlights

1.0.0

October 23, 2026

First standalone release

Full changelog · All releases

Source synchronization: SOURCE_SYNC.md.

Upgrade notes

Requires Node.js 22.23.4, 24.22.1, 26.12.1 or a newer release. These carry the October 2026 security fixes, and the server prints a warning on stderr when it runs on an older one. CI covers Node 22, 24 and 26.

This is the first release. Arguments saved from hosted getmcpads use region-qualified account IDs such as EU:1234567890; they are accepted when the region matches AMAZON_ADS_REGION.

Related MCP server: OpenAI Ads MCP server

Install this release

This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.

git clone --branch v1.0.1 --depth 1 https://github.com/get-mcp-ads/amazon-ads-mcp-server.git
cd amazon-ads-mcp-server
npm ci
npm run build

Configure your MCP client to run node with the absolute path to dist/cli.js and the credentials documented below.

Prefer a managed connection? Use Amazon Ads with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.

Configuration

Provide these environment variables through the client's secret configuration:

Variable

Purpose

AMAZON_ADS_CLIENT_ID

Client ID of a Login with Amazon security profile that has Amazon Ads API access.

AMAZON_ADS_CLIENT_SECRET

Client secret of that security profile.

AMAZON_ADS_REFRESH_TOKEN

Refresh token from the authorization grant. It starts with Atzr|. An access token (Atza|) is refused, because it expires after an hour.

AMAZON_ADS_REGION

NA, EU or FE. Selects the API host and the token URL. Use the region of the profiles below.

AMAZON_ADS_PROFILE_IDS

Required comma-separated advertising profile IDs. Every other profile is refused before any request, reads included.

AMAZON_ADS_ENABLE_WRITES

Defaults to false. Only the exact value true exposes the write tools.

To obtain these values, follow Amazon's own guides:

  1. Onboard to the Amazon Ads API and note the client ID and secret of your Login with Amazon security profile.

  2. Create an authorization grant with the scope advertising::campaign_management, then generate access and refresh tokens. Amazon documents that refresh tokens issued on or after July 30, 2026 expire 365 days after advertiser consent.

  3. Retrieve your profile IDs and list the ones this server may use in AMAZON_ADS_PROFILE_IDS.

This package does not run an OAuth browser flow. It exchanges the refresh token for access tokens in memory, renews them a minute before they expire and keeps any refresh token Amazon returns in memory only. When the refresh token is revoked or expires, authorize again, update the variable and restart the server.

A Claude Desktop entry looks like this:

{
  "mcpServers": {
    "amazon-ads": {
      "command": "npx",
      "args": ["-y", "@getmcpads/amazon-ads-mcp-server"],
      "env": {
        "AMAZON_ADS_CLIENT_ID": "amzn1.application-oa2-client.your-client-id",
        "AMAZON_ADS_CLIENT_SECRET": "your-client-secret",
        "AMAZON_ADS_REFRESH_TOKEN": "Atzr|your-refresh-token",
        "AMAZON_ADS_REGION": "EU",
        "AMAZON_ADS_PROFILE_IDS": "1234567890"
      }
    }
  }
}

With a source install, replace npx and its arguments with node and the absolute path to dist/cli.js. Run npm run doctor to check the configuration without contacting Amazon; it never prints a value.

Safety and coverage

Writes preview by default. Most writes return a previewToken bound to the exact change and to the entity as read from Amazon at preview time. Repeat the call with confirm: true and that token within ten minutes. A changed request, a changed entity or an expired token is refused before anything is sent. amazon_ads_update_campaign_status uses expectedStatus from its preview instead, and the rename tools need only confirm: true.

New Sponsored Products campaigns, ad groups, product ads, keywords and targets are created paused. Sponsored Brands and Display creates that carry a state must be paused, and creates without a state field require a paused parent. Negative keywords and targets start enabled because they suppress traffic. Previews mark a change that starts delivery with activationMaySpend. Archiving is irreversible.

An HTTP 207 response with any item error is reported as a failure. A change whose outcome is uncertain is never retried automatically; read the entity and reconcile it first. A read that receives HTTP 401 renews the access token once and repeats; a change does not. HTTP 429 responses report Amazon's Retry-After value and are not retried.

The profile allowlist is checked before every request, and amazon_ads_list_profiles returns only allowlisted profiles. Unknown arguments are refused. Amounts are in the profile currency, not micros. Large integer IDs are kept as strings so no digit is lost. Configuration lists return one page and say so with partial; follow nextToken or nextStartIndex.

Reports are asynchronous. amazon_ads_create_report returns a jobToken; call amazon_ads_get_report about 30 seconds later. A pending report is not an empty account. Sponsored Products purchases and sales use the click attribution window you choose. Brands and Display use their native 14-day attribution. Report files and asset uploads use signed Amazon S3 URLs, which must be HTTPS S3 hosts, are fetched without any Amazon credential and never follow a redirect.

This server covers Sponsored Products, Sponsored Brands, Sponsored Display, Reporting v3, the creative asset library and product metadata. It does not cover DSP, Amazon Marketing Cloud, billing, account management or portfolios. Hosted creative galleries, alerts, exports, the campaign launcher and MCP Apps UI are excluded. Use tools/list, server-card.json or the amazon-ads://write-contracts resource for exact schemas, and Amazon's API reference for provider details.

Amazon's own MCP server

Amazon announced the Amazon Ads MCP Server in open beta on February 2, 2026, for Amazon Ads partners with active API credentials. The comparison below uses only Amazon's own pages: the announcement, the overview, Connecting to the Amazon Ads MCP Server, the Lite version, Connecting using OAuth 2.1 and the MCP tool reference, as read on October 23, 2026.

Amazon Ads MCP Server

This server

Where it runs

Hosted by Amazon at regional endpoints such as https://advertising-ai.amazon.com/mcp, built and updated by Amazon Ads.

Runs on your machine over stdio and calls the Amazon Ads API directly.

Credentials

A Login with Amazon access token and client ID in request headers, or OAuth 2.1 with a browser login.

Client ID, client secret and refresh token in environment variables. Access tokens are renewed in memory.

Account selection

Dynamic mode, where the assistant supplies account identifiers, or fixed mode, where headers pin one account.

A fixed allowlist of profile IDs in one region, checked before every request.

Coverage

Tool groups for account management, campaign management, reporting, billing, Amazon Marketing Cloud, eligibility, users and more, plus skills and a Lite version with three discovery tools.

Sponsored Products, Brands and Display entities, Reporting v3, the creative asset library and product metadata, as 108 individual tools.

Writes

Campaign management tools that create, update and delete. Amazon's guide shows how to disable individual tools, such as delete_campaign, in the Kiro CLI configuration.

Off unless AMAZON_ADS_ENABLE_WRITES=true. Every write previews first, and new campaigns, ad groups and ads are created paused.

Use Amazon's server for DSP, Amazon Marketing Cloud, billing or account management, which this server does not cover.

Hosted option

getmcpads for Amazon Ads manages the hosted connection and account selection. Hosted and source releases can differ. Contact: hello@getmcpads.com.

Development

npm run typecheck
npm run lint
npm run build
npm test
npm run catalog

All tests run offline with a mocked fetch and synthetic responses. No live account is read or changed.

Tools

Every tool is listed below. See server-card.json for complete parameter and output schemas.

Profiles

Tool

Purpose

amazon_ads_list_profiles

List the advertising profiles in AMAZON_ADS_PROFILE_IDS that these credentials can reach in AMAZON_ADS_REGION, with marketplace, account type, currency and timezone.

amazon_ads_get_profile

Read the selected Amazon Ads profile: marketplace, account type, currency and timezone.

Sponsored Products configuration

Tool

Purpose

amazon_ads_get_campaigns

Read one page of Amazon Sponsored Products campaigns, including paused and archived entities by default.

amazon_ads_get_ad_groups

Read one page of Amazon Sponsored Products ad groups, including paused and archived entities by default.

amazon_ads_get_product_ads

Read one page of Amazon Sponsored Products product ads, including paused and archived entities by default.

amazon_ads_get_keywords

Read one page of Amazon Sponsored Products keywords, including paused and archived entities by default.

amazon_ads_get_targets

Read one page of Amazon Sponsored Products targets, including paused and archived entities by default.

amazon_ads_get_negative_keywords

Read one page of Amazon Sponsored Products negative keywords, including paused and archived entities by default.

amazon_ads_get_negative_targets

Read one page of Amazon Sponsored Products negative targets, including paused and archived entities by default.

amazon_ads_get_campaign_negative_keywords

Read one page of Amazon Sponsored Products campaign negative keywords, including paused and archived entities by default.

amazon_ads_get_campaign_negative_targets

Read one page of Amazon Sponsored Products campaign negative targets, including paused and archived entities by default.

Sponsored Brands configuration

Tool

Purpose

amazon_ads_get_brands

List brands eligible for Sponsored Brands in this selected profile.

amazon_ads_get_sb_campaigns

Read one page of Sponsored Brands campaigns.

amazon_ads_get_sb_ad_groups

Read one page of Sponsored Brands ad groups.

amazon_ads_get_sb_ads

Read one page of Sponsored Brands ads.

amazon_ads_get_sb_ad_creatives

Read native Sponsored Brands creative versions for one ad: headline, ASINs, brand logo and image or video asset references.

amazon_ads_get_sb_keywords

List one page of Sponsored Brands keywords, including archived entities.

amazon_ads_get_sb_negative_keywords

List one page of Sponsored Brands negative keywords, including archived entities.

amazon_ads_get_sb_targets

List one page of Sponsored Brands targets, including archived entities.

amazon_ads_get_sb_negative_targets

List one page of Sponsored Brands negative targets, including archived entities.

Sponsored Display configuration

Tool

Purpose

amazon_ads_get_sd_campaigns

Read one page of Sponsored Display campaigns.

amazon_ads_get_sd_ad_groups

Read one page of Sponsored Display ad groups.

amazon_ads_get_sd_product_ads

Read one page of Sponsored Display product ads.

amazon_ads_get_sd_targets

Read one page of Sponsored Display targets.

amazon_ads_get_sd_negative_targets

Read one page of Sponsored Display negative targets.

amazon_ads_get_sd_creatives

Read one page of Sponsored Display creatives.

Reporting

Tool

Purpose

amazon_ads_create_report

Request an asynchronous Amazon performance report: Sponsored Products campaigns, ad groups, placements, search terms or advertised products; Brands campaigns, ads or search terms; Display campaigns or products.

amazon_ads_get_report

Check an Amazon report once and, when complete, read its native rows.

Creative assets and catalog

Tool

Purpose

amazon_ads_list_creative_assets

Search the Amazon creative asset library: images, logos and videos, native download or playback URLs, sizes and moderation metadata.

amazon_ads_get_creative_asset

Refresh one native Amazon image or video asset in the selected profile.

amazon_ads_get_product_metadata

Read advertised product titles, native image URLs, stock, price and eligibility from the advertiser's Amazon catalog.

Registered only with AMAZON_ADS_ENABLE_WRITES=true. Every call previews unless confirm: true is passed, and most writes also need the previewToken from that preview.

Sponsored Products

Tool

Purpose

amazon_ads_create_campaign

Create one Sponsored Products campaign in PAUSED state.

amazon_ads_update_campaign

Update Sponsored Products campaign name, state, dates or bidding strategy.

amazon_ads_update_campaign_budget

Change one Sponsored Products daily budget in profile currency.

amazon_ads_update_campaign_status

Pause or enable one Amazon Sponsored Products campaign.

amazon_ads_create_ad_group

Create a PAUSED Sponsored Products ad group with a default bid in profile currency.

amazon_ads_update_ad_group

Update one Sponsored Products ad group: state and bid.

amazon_ads_create_product_ad

Create one Sponsored Products product ad.

amazon_ads_update_product_ad

Update one Sponsored Products product ad: state.

amazon_ads_create_keyword

Create one Sponsored Products keyword.

amazon_ads_update_keyword

Update one Sponsored Products keyword: state and bid.

amazon_ads_create_target

Create one Sponsored Products target.

amazon_ads_update_target

Update one Sponsored Products target: state and bid.

amazon_ads_create_negative_keyword

Create one Sponsored Products negative keyword.

amazon_ads_update_negative_keyword

Change the state of a Sponsored Products negative keyword.

amazon_ads_create_negative_target

Create one Sponsored Products negative target.

amazon_ads_update_negative_target

Change the state of a Sponsored Products negative target.

amazon_ads_create_campaign_negative_keyword

Create one Sponsored Products campaign negative keyword.

amazon_ads_update_campaign_negative_keyword

Change the state of a Sponsored Products campaign negative keyword.

amazon_ads_create_campaign_negative_target

Create one Sponsored Products campaign negative target.

amazon_ads_update_campaign_negative_target

Change the state of a Sponsored Products campaign negative target.

Sponsored Brands

Tool

Purpose

amazon_ads_create_sb_campaign

Create one Sponsored Brands campaign.

amazon_ads_update_sb_campaign

Update one Sponsored Brands campaign.

amazon_ads_create_sb_ad_group

Create one Sponsored Brands ad group.

amazon_ads_update_sb_ad_group

Update one Sponsored Brands ad group.

amazon_ads_update_sb_ad

Update one Sponsored Brands ad.

amazon_ads_create_sb_ad_product_collection

Create one Sponsored Brands product collection ad.

amazon_ads_create_sb_ad_product_collection_extended

Create one Sponsored Brands product collection extended ad.

amazon_ads_create_sb_ad_video

Create one Sponsored Brands video ad.

amazon_ads_create_sb_ad_brand_video

Create one Sponsored Brands brand video ad.

amazon_ads_create_sb_ad_store_spotlight

Create one Sponsored Brands store spotlight ad.

amazon_ads_create_sb_ad_auto_collection

Create one Sponsored Brands auto collection ad.

amazon_ads_create_sb_ad_manual_collection

Create one Sponsored Brands manual collection ad.

amazon_ads_update_sb_ad_creative_product_collection

Replace the creative of one Sponsored Brands product collection ad.

amazon_ads_update_sb_ad_creative_product_collection_extended

Replace the creative of one Sponsored Brands product collection extended ad.

amazon_ads_update_sb_ad_creative_video

Replace the creative of one Sponsored Brands video ad.

amazon_ads_update_sb_ad_creative_brand_video

Replace the creative of one Sponsored Brands brand video ad.

amazon_ads_update_sb_ad_creative_store_spotlight

Replace the creative of one Sponsored Brands store spotlight ad.

amazon_ads_update_sb_ad_creative_auto_collection

Replace the creative of one Sponsored Brands auto collection ad.

amazon_ads_update_sb_ad_creative_manual_collection

Replace the creative of one Sponsored Brands manual collection ad.

amazon_ads_create_sb_keyword

Create one Sponsored Brands keyword.

amazon_ads_update_sb_keyword

Update one Sponsored Brands keyword.

amazon_ads_create_sb_negative_keyword

Create one Sponsored Brands negative keyword.

amazon_ads_update_sb_negative_keyword

Update one Sponsored Brands negative keyword.

amazon_ads_create_sb_target

Create one Sponsored Brands target.

amazon_ads_update_sb_target

Update one Sponsored Brands target.

amazon_ads_create_sb_negative_target

Create one Sponsored Brands negative target.

amazon_ads_update_sb_negative_target

Update one Sponsored Brands negative target.

Sponsored Display

Tool

Purpose

amazon_ads_create_sd_campaign

Create one Sponsored Display campaign.

amazon_ads_update_sd_campaign

Update one Sponsored Display campaign.

amazon_ads_create_sd_ad_group

Create one Sponsored Display ad group.

amazon_ads_update_sd_ad_group

Update one Sponsored Display ad group.

amazon_ads_create_sd_product_ad

Create one Sponsored Display product ad.

amazon_ads_update_sd_product_ad

Update one Sponsored Display product ad.

amazon_ads_create_sd_target

Create one Sponsored Display target.

amazon_ads_update_sd_target

Update one Sponsored Display target.

amazon_ads_create_sd_negative_target

Create one Sponsored Display negative target.

amazon_ads_update_sd_negative_target

Update one Sponsored Display negative target.

amazon_ads_create_sd_creative

Create one Sponsored Display creative.

amazon_ads_update_sd_creative

Update one Sponsored Display creative.

Archive (irreversible)

Tool

Purpose

amazon_ads_archive_sb_campaign

Permanently archive one Sponsored Brands campaign.

amazon_ads_archive_sb_ad_group

Permanently archive one Sponsored Brands ad group.

amazon_ads_archive_sb_ad

Permanently archive one Sponsored Brands ad.

amazon_ads_archive_sb_keyword

Permanently archive one Sponsored Brands keyword.

amazon_ads_archive_sb_negative_keyword

Permanently archive one Sponsored Brands negative keyword.

amazon_ads_archive_sb_target

Permanently archive one Sponsored Brands target.

amazon_ads_archive_sb_negative_target

Permanently archive one Sponsored Brands negative target.

amazon_ads_archive_sd_campaign

Permanently archive one Sponsored Display campaign.

amazon_ads_archive_sd_ad_group

Permanently archive one Sponsored Display ad group.

amazon_ads_archive_sd_product_ad

Permanently archive one Sponsored Display product ad.

amazon_ads_archive_sd_target

Permanently archive one Sponsored Display target.

amazon_ads_archive_sd_negative_target

Permanently archive one Sponsored Display negative target.

Creative asset uploads

Tool

Purpose

amazon_ads_prepare_asset_upload

Prepare an Amazon image or video upload for this profile.

amazon_ads_upload_asset_bytes

Upload supplied image or video bytes to the native S3 URL bound to the opaque uploadToken from amazon_ads_prepare_asset_upload.

amazon_ads_register_uploaded_asset

Register bytes already uploaded to the Amazon URL from amazon_ads_prepare_asset_upload.

Renames

Tool

Purpose

amazon_ads_rename_campaign

Rename one Amazon Sponsored Products, Brands or Display campaign.

amazon_ads_rename_ad_group

Rename one Amazon Sponsored Products, Brands or Display ad group.

amazon_ads_rename_ad

Rename one Amazon Sponsored Brands ad.

Resources

Resource

Content

amazon-ads://guide

Scope, pagination, attribution, preview and confirmation rules, and the renaming matrix.

amazon-ads://report-catalog

Report types, metric columns and grouping fields used by amazon_ads_create_report.

amazon-ads://write-contracts

The 39 pinned Amazon request contracts behind the Sponsored Brands and Display write tools.

License

Apache License 2.0. See NOTICE.

More from getmcpads

Meta Ads · Google Ads · Google Analytics 4 · Google Search Console · TikTok Ads · Pinterest Ads · X Ads

Maintained by Emmanuel at getmcpads. Questions: hello@getmcpads.com.

Available Tools

31 tools
amazon_ads_create_reportamazon ads create reportA
Read-onlyIdempotent

Request an asynchronous Amazon performance report: Sponsored Products campaigns, ad groups, placements, search terms or advertised products; Brands campaigns, ads or search terms; Display campaigns or products. Brands legacy campaign reports exclude multi-ad-group campaigns. Does not change advertising or budgets. Choose the attribution window explicitly, keep jobToken and call amazon_ads_get_report later. No polling loop, no cross-platform attribution and no automatic sums.

NameRequiredDescriptionDefault
endDateYesLast day of the report, YYYY-MM-DD, at most 30 days after startDate.
timeUnitNoDaily rows, or one aggregate row per grouping over the requested range.DAILY
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startDateYesFirst day of the report, YYYY-MM-DD, in the profile timezone.
reportTypeNoNative report type. sp* reports cover Sponsored Products, sb* Sponsored Brands and sd* Sponsored Display.spCampaigns
attributionDaysYesNative click attribution window in days for purchases and sales. Brands and Display accept 14 only. Never compare different windows as equivalent.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint/idempotentHint annotations: it discloses asynchronous execution, the jobToken persistence requirement, that no polling loop is provided, that attribution windows are not comparable, and that no automatic sums or cross-platform attribution occur. It also reinforces the non-mutating nature with 'Does not change advertising or budgets'. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the verb and resource, followed by scope, constraints, and the follow-up call. Dense but every clause carries information; the sentence listing every report type is long but is doing necessary disambiguation work.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the async lifecycle is fully covered (create here, retrieve via get_report). Minor gaps remain: no mention of the 30-day max range or the region-qualified accountId form, though both are handled in the schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter, and the description correctly does not repeat it. It adds interpretive guidance on the one ambiguous choice — 'Choose the attribution window explicitly. Never compare different windows as equivalent' — which is semantics the enum alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Request an asynchronous Amazon performance report') and enumerates exactly which report families are covered (SP campaigns/ad groups/placements/search terms/products, SB campaigns/ads/search terms, SD campaigns/products). The async nature plus the jobToken handoff cleanly separates it from the get_* entity-listing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit follow-up path is given ('keep jobToken and call amazon_ads_get_report later'), along with exclusions ('No polling loop', 'no cross-platform attribution', 'Brands legacy campaign reports exclude multi-ad-group campaigns') and the instruction to choose an attribution window explicitly. It lacks an explicit statement of when to prefer this over the many get_campaigns/get_targets siblings, but the performance-vs-configuration split is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_ad_groupsamazon ads get ad groupsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products ad groups, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is covered. The description adds real behavioral context beyond that: default inclusion of archived entities, the requirement to keep paging until nextToken is absent, and the warning that a single page is not a total. It does not mention failure modes or auth prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool returns and immediately followed by the two operational facts that prevent misuse (pagination, archived default). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is fully annotated, so return shapes need no explanation. The description covers scope, pagination, and entity type; the only gap is no mention of prerequisites such as resolving accountId via the profiles tool, though the schema hints at it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema. The description restates the archived default and the nextToken continuation loop, adding emphasis but no new semantics about filters or account scoping. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one page of Amazon Sponsored Products ad groups') and pins the platform to Sponsored Products, which distinguishes it from the sd_/sb_ ad group siblings. It also names the entity type precisely (configuration records, not metrics), so an agent knows exactly what it retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives useful usage context — default includes paused/archived, page through with nextToken, and a page is not an account total — but never names an alternative tool or when not to use this one (e.g., metrics vs configuration). Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_brandsamazon ads get brandsA
Read-onlyIdempotent

List brands eligible for Sponsored Brands in this selected profile. Use the returned brandEntityId in campaign and creative configuration; never invent a brand ID.

NameRequiredDescriptionDefault
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds real value beyond that by clarifying the returned ID must be authentic and used verbatim, and that results are bound to the selected profile – something annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns, followed by the critical guardrail about the brandEntityId. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return structure; annotations cover the safety profile and the sole parameter is fully documented. The one missing agent-facing detail – never fabricating an ID – is already addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with accountId fully documented including profile ID and region-qualified form. The description only echoes 'this selected profile,' adding no new parameter detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List brands') plus the qualifier 'eligible for Sponsored Brands,' and scopes results to 'this selected profile.' No sibling is named, but 'brands' is a distinct resource within the sibling set, so confusion is unlikely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit downstream usage: 'Use the returned brandEntityId in campaign and creative configuration; never invent a brand ID.' This tells the agent what to do with the output, though it doesn't state prerequisites or an explicit when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_campaign_negative_keywordsamazon ads get campaign negative keywordsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products campaign negative keywords, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so safety is covered. The description adds genuinely non-obvious traits: the default inclusion of paused and archived entities and the fact that a single response is a page, not an account total. Return shape is left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the pagination caveat front-loaded alongside the resource statement. Every sentence carries distinct information (scope, pagination, category exclusion).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, full schema coverage, and an output schema handling return values, the description covers the remaining gaps: pagination is mandatory, defaults include archived states, and this is configuration data. Only the explicit routing to a reporting sibling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so state defaults, nextToken semantics, maxResults cap, and campaignIds filtering are already fully documented in the schema. The description restates the archived-by-default behavior but adds no new syntactic or format detail beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Read one page of Amazon Sponsored Products campaign negative keywords') with scoping detail (includes paused/archived). An agent can distinguish it from account-level get_negative_keywords and from get_campaign_negative_targets, though the sibling differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use boundary ('configuration records, not performance metrics'), which steers the agent away from this tool for reporting queries, and instructs the nextToken continuation loop. It stops short of naming a specific alternative tool for performance data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_campaign_negative_targetsamazon ads get campaign negative targetsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products campaign negative targets, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real value beyond them: the default includes paused and archived entities, and a single response is a partial page, not a complete total. It does not discuss rate limits or permission/profile requirements, but those are largely covered by schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the scope, then the pagination rule, then the semantic caveat. No filler and no restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the two things an agent could get wrong — treating one page as complete and assuming performance metrics. A pointer to the closest alternative tool would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description restates the archived-inclusive default and the nextToken continuation pattern, both of which the schema already documents in detail, so it contributes little semantic meaning beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Read ... Amazon Sponsored Products campaign negative targets') and distinguishes the record class from performance data. It does not explicitly contrast with the closest siblings (amazon_ads_get_negative_targets, amazon_ads_get_campaign_negative_keywords), leaving the campaign-level vs ad-group-level distinction to the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete operational guidance: paginate with nextToken until absent, one page is not an account total, and these are configuration records rather than metrics — which usefully steers the agent toward report tools for performance questions. It lacks an explicit 'use X instead when Y' statement against sibling negative-target tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_campaignsamazon ads get campaignsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products campaigns, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the burden is lighter. The description still adds real value beyond them: the default inclusion of paused and archived entities, and the pagination trap that a single page is not the full account result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the resource and scope, then pagination semantics, then the metric-vs-configuration caveat. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values need not be explained since an output schema exists, and the description covers scope, pagination, and defaults. The only residual gap is not naming which sibling to use for performance metrics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in structured fields, making 3 the baseline. The description reinforces the default state set and the nextToken continuation loop but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one page of Amazon Sponsored Products campaigns') with scope qualifiers, and explicitly disambiguates from the report sibling by declaring these are configuration records, not performance metrics. An agent can distinguish it from amazon_ads_get_sb_campaigns / amazon_ads_get_sd_campaigns by the 'Sponsored Products' qualifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational guidance: continue with nextToken until absent, and warns that one page is not an account total. It also implicitly routes metric-seeking callers away by noting these are configuration records, though it never names amazon_ads_get_report as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_creative_assetamazon ads get creative assetA
Read-onlyIdempotent

Refresh one native Amazon image or video asset in the selected profile. Returns every version and its files; no guessed URLs and no cross-profile fallback. Pass its native assetId from amazon_ads_list_creative_assets.

NameRequiredDescriptionDefault
assetIdYesNative asset library ID, starting with amzn1.assetlibrary.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description usefully adds that all versions and files are returned, that URLs are never guessed, and that there is no cross-profile fallback – good behavioral context beyond the annotations, though it says nothing about failure behavior when the asset is absent from the profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool does, and every clause carries information: return shape, no guessed URLs, no fallback, and where to get the ID. Nothing is redundant with the title or with what the schema already states.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the action, the scope (one profile, one asset), the source of the required ID, the return payload (every version and its files), and an important boundary (no cross-profile fallback). With an output schema present and full schema parameter documentation, nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are fully documented with patterns, so the schema does the heavy lifting. The description adds only mild value by stating the assetId is native and comes from amazon_ads_list_creative_assets, and that the profile is the 'selected' one – useful provenance but not format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific resource (one native Amazon image or video asset) and scopes it to a single profile, and the second sentence clarifies that this is a retrieval returning every version and its files. The verb 'Refresh' is slightly ambiguous for a read-only tool and could momentarily suggest re-uploading or regenerating the asset, which the sibling amazon_ads_list_creative_assets does not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly routes the agent to amazon_ads_list_creative_assets as the source of the assetId, which is real usage guidance, and warns there is no cross-profile fallback so the profile must be the right one. It doesn't explicitly say when to call this versus just using the list response, but the single-asset lookup intent is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_keywordsamazon ads get keywordsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products keywords, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive and openWorld, so the safety profile is covered. The description adds real value beyond that: pagination completeness semantics and the default inclusion of archived entities, which an agent would otherwise misjudge as a full result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, and the most decision-relevant facts (one page, pagination, config-vs-metrics) are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 100%-covered schema and an output schema present, the description only needed to cover pagination, default state inclusion, and the nature of the returned entities — all of which it does. Nothing an agent needs before calling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter carries its own description, so the schema does the heavy lifting. The description only reinforces the nextToken continuation contract; it adds no syntax or format detail beyond the schema, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read), resource (Amazon Sponsored Products keywords), scope (one page), and default behavior (includes paused and archived). The 'Sponsored Products' qualifier distinguishes it from the sibling SB/SD keyword tools such as amazon_ads_get_sb_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to page with nextToken until absent and warns that one page is not an account total. The 'configuration records, not performance metrics' sentence implicitly routes performance needs to amazon_ads_get_report, but no exclusion or alternative is named outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_negative_keywordsamazon ads get negative keywordsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products negative keywords, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real operational context: default inclusion of paused/archived states and the warning that a single page is not a complete account total, which prevents a common aggregation mistake. It does not mention throttling or result-size cost, so it stops short of 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: scope first, pagination obligation second, data-type disambiguation last. Nothing is repeated verbatim from the schema and every sentence carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be explained, and pagination plus default state coverage are handled well. The remaining gap is scope disambiguation against the campaign-level negative keyword sibling, which the agent would have to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description still adds value by tying nextToken and page size together semantically ('one page is not an account total'), clarifying what maxResults actually bounds beyond the schema's 'Maximum entities in this page'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Read one page of Amazon Sponsored Products negative keywords'), and the 'Sponsored Products' qualifier separates it from the SB/SD siblings (amazon_ads_get_sb_negative_keywords, amazon_ads_get_sd_negative_targets). It does not, however, clarify its relationship to amazon_ads_get_campaign_negative_keywords, so the level (campaign vs ad group) this returns is left ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete pagination procedure ('Continue with nextToken until absent; one page is not an account total'), which is the main usage trap for this tool. The closing exclusion 'configuration records, not performance metrics' steers agents away from using it for performance analysis, but no sibling is named explicitly as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_negative_targetsamazon ads get negative targetsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products negative targets, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, non-destructive, open-world read. The description adds useful behavior beyond annotations: paused and archived entities are included by default, results are paginated, and one page is not an account total. It also clarifies these are configuration records rather than performance metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tightly focused sentences. It front-loads the resource scope, then covers pagination and data nature, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full input schema, and an output schema, the description is nearly complete for correct invocation. The main remaining gap is that it does not explicitly distinguish this broad negative-targets endpoint from the campaign-specific negative-targets sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including states, nextToken, maxResults, and campaignIds. The description adds meaningful semantics for nextToken and pagination by saying to continue until the token is absent and that one page is not an account total.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read one page of Amazon Sponsored Products negative targets.' This distinguishes it from SD/SB negative-target siblings and from performance-report tools, but it does not explicitly clarify how it differs from the sibling 'amazon_ads_get_campaign_negative_targets'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear pagination usage rule: 'Continue with nextToken until absent; one page is not an account total.' It does not name alternatives or state exclusions relative to campaign-level negative-target or keyword tools, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_product_adsamazon ads get product adsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products product ads, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuine context beyond them: paused and archived entities are returned by default, results are paged rather than account totals, and the payload is configuration data. Missing only things like profile/region auth requirements, which the schema notes cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler: what it reads, how to paginate, and what the records are not. The pagination warning is front-loaded next to the scope statement so an agent cannot miss it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the two things an agent could get wrong (treating one page as a total, and expecting metrics). It says nothing about how the optional campaignIds/states filters combine with nextToken, but the schema handles those.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter (states, accountId, nextToken, maxResults, campaignIds) is documented inline, so the baseline of 3 applies. The description reinforces the nextToken continuation semantics but adds no syntax or format detail the schema does not already carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one page of Amazon Sponsored Products product ads') and names the scope of entity state included. The phrase 'Sponsored Products' disambiguates it from the SB/SD siblings (get_sb_ads, get_sd_product_ads), and 'configuration records, not performance metrics' separates it from get_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly rules out the performance-metrics use case and instructs continuation with nextToken until absent, which tells the agent how to use it correctly. It stops short of naming the alternative tool (amazon_ads_get_report / create_report) by name, so the routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_product_metadataamazon ads get product metadataA
Read-onlyIdempotent

Read advertised product titles, native image URLs, stock, price and eligibility from the advertiser's Amazon catalog. Retrieves Sponsored Products visuals without scraping retail pages. Page through pageIndex or Amazon's cursorToken; product images are not complete rendered ads.

NameRequiredDescriptionDefault
asinsNoExact ten-character ASINs to read. Use this or search, not both.
limitNoMaximum products in this page, up to 100.
searchNoFree-text catalog search. Use this or asins, not both.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
adProductNoAd product whose eligibility rules apply: SP Sponsored Products, SB Brands, SD Display.SP
pageIndexNoZero-based page number. Use nextPageIndex from the previous call.
cursorTokenNoOpaque cursor returned by Amazon. When present it replaces pageIndex.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, and the description adds real behavior context beyond them: it retrieves from the catalog without scraping retail pages, and warns that returned images 'are not complete rendered ads.' This caveat usefully sets expectations about output fidelity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, purpose front-loaded, followed by the scraping caveat and pagination mechanics. Each sentence earns its place; nothing is padded, though the phrasing is slightly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description only needs to convey what the tool reads and how it pages. It does both plus an image-fidelity caveat, leaving it complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents every parameter including the cursorToken-replaces-pageIndex rule. The description's pagination sentence reinforces but adds little new semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Read) plus an enumerated resource set (titles, native image URLs, stock, price, eligibility from the catalog), which clearly scopes this to catalog metadata rather than ad entities. It does not explicitly contrast with siblings like amazon_ads_get_product_ads, but the 'from the catalog' framing implicitly separates the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Page through pageIndex or Amazon's cursorToken' line gives pagination usage but there is no explicit when-to-use/when-not or named alternative tool. The 'use this or search, not both' guidance lives in the schema, not the description, so selection guidance here is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_profileamazon ads get profileA
Read-onlyIdempotent

Read the selected Amazon Ads profile: marketplace, account type, currency and timezone. API access does not establish eligibility for Sponsored Brands, Display or DSP.

NameRequiredDescriptionDefault
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new context by warning that API access does not establish eligibility for Sponsored Brands, Display or DSP — a non-obvious scope caveat an agent could otherwise over-assume.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste: the return payload is front-loaded and the eligibility caveat follows. Nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to document return values, and it still names the key fields. The only small gap is error behavior for an unknown or region-mismatched profile ID, which is partially but not fully covered by the schema pattern.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, with the schema itself explaining the ID format, the AMAZON_ADS_PROFILE_IDS source and the region-qualified form. The description adds no further meaning about accountId, so this sits at the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Read") and resource ("the selected Amazon Ads profile") and even enumerates the fields returned (marketplace, account type, currency, timezone). It implicitly contrasts with amazon_ads_list_profiles by taking a single selected profile, but never names that sibling, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the call to make once it has a profile ID from amazon_ads_list_profiles. There is no explicit when-to-use, no prerequisite statement (e.g., that accountId must come from the configured profile list), and no named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_reportamazon ads get reportA
Read-onlyIdempotent

Check an Amazon report once and, when complete, read its native rows. Use only the jobToken returned by amazon_ads_create_report for this profile. Downloads are bounded; pagination returns row offsets and marks partial results. Expired reports must be requested again.

NameRequiredDescriptionDefault
limitNoMaximum rows returned by this call, up to 1000.
offsetNoZero-based index of the first row to return. Use nextOffset from the previous call.
jobTokenYesOpaque job token returned by amazon_ads_create_report for this profile. Valid for seven days.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description adds real value by disclosing bounded download size, offset-based pagination with partial-result markers, and seven-day expiry semantics. It stops short of describing what a single check returns when the report is still incomplete, which is the main behavioral question for a poll tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place: check semantics first, token constraint second, pagination/bound behavior third, expiry fallback last. No filler or repetition of schema detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the remaining gaps an agent needs are expiry, bounded download, and offset pagination — all covered. Nothing required to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter (limit, offset, jobToken, accountId) is documented in the schema, including nextOffset guidance and region-qualified accountId form. The description's jobToken note largely restates the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check an Amazon report ... read its native rows') and positions itself relative to the sibling amazon_ads_create_report, which produces the jobToken. An agent can tell it is a fetch/poll tool rather than a report-creation tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit that only jobTokens from amazon_ads_create_report for the same profile are valid, and that expired reports must be re-requested, which is a clear exclusion path. It does not spell out the polling cadence or that a not-yet-complete report should be re-checked rather than recreated, so context is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_ad_creativesamazon ads get sb ad creativesA
Read-onlyIdempotent

Read native Sponsored Brands creative versions for one ad: headline, ASINs, brand logo and image or video asset references. Resolve asset IDs with amazon_ads_get_creative_asset and ASINs with amazon_ads_get_product_metadata. Requires Brands eligibility; no retail scraping.

NameRequiredDescriptionDefault
adIdYesSponsored Brands ad ID in the selected profile.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is read-only, idempotent, non-destructive, and open-world, so the description does not need to restate safety. It adds useful behavioral context beyond annotations: Brands eligibility is required, retail scraping is not used, and asset references need a follow-up resolution call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences: purpose first, dependency resolution second, eligibility/scope third. Every sentence adds useful information with no repeated or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full input-schema coverage, and rich annotations, the description supplies the remaining essentials: what creative data is returned, which dependency tools resolve references, and the Brands eligibility constraint. Nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter semantics are primarily carried by the schema. The description only implies the ad-scoping meaning through 'for one ad' and does not add detail about accountId, pagination, or limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: read Sponsored Brands creative versions for one ad, and enumerates the returned fields. It distinguishes this from SD creative tools by naming Sponsored Brands and from asset-listing tools by scoping to one ad and redirecting asset/ASIN resolution to dedicated siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context by naming the required Brands eligibility and explicitly routing asset ID resolution to amazon_ads_get_creative_asset and ASIN resolution to amazon_ads_get_product_metadata. It stops short of explicitly contrasting with amazon_ads_get_sd_creatives or amazon_ads_list_creative_assets, so it is not full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_ad_groupsamazon ads get sb ad groupsA
Read-onlyIdempotent

Read one page of Sponsored Brands ad groups. Requires Brands eligibility in this profile. Includes all states by default; follow nextToken. Configuration is not performance.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the description's job is to add context — and it does: Brands eligibility gating, all-states default, and nextToken pagination. It does not describe page-size behavior or what the payload contains, but the output schema covers returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four terse, front-loaded sentences with no filler; the scope and eligibility constraint lead. 'Configuration is not performance' is dense to the point of being slightly cryptic, costing a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full output schema, and 100% parameter coverage, the remaining burden is orientation — prerequisite, pagination, default scope, and data-type framing are all present. Only a hint about entity/field content or typical page size is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, including the states default and nextToken semantics. The description restates the all-states default and pagination guidance but adds no syntax or format detail beyond the schema — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope ('Read one page of Sponsored Brands ad groups'), immediately separating it from the Sponsored Display and generic ad-group siblings. The 'one page' framing also signals a paginated list rather than a full dump.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Requires Brands eligibility in this profile' is an explicit precondition, and 'Configuration is not performance' steers agents away from expecting metrics (i.e., toward the report tools). No sibling tool is named as an alternative, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_adsamazon ads get sb adsA
Read-onlyIdempotent

Read one page of Sponsored Brands ads. Requires Brands eligibility in this profile. Includes all states by default; follow nextToken. Configuration is not performance.

NameRequiredDescriptionDefault
adIdsNoRestrict results to these Sponsored Brands ad IDs, as decimal strings.
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the description is not obligated to restate safety. It adds non-obvious context the annotations lack: the Brands-eligibility gate, the all-states-by-default scope (archived included), and the paging contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences with no filler; the core action and scope lead, then eligibility, then paging, then the reporting disambiguation. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers scope, eligibility, defaults, and pagination. The one residual gap is not pointing to the reporting sibling explicitly, but nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including adIds, campaignIds, states, nextToken and maxResults is already documented in the schema. The description's "includes all states by default" and "follow nextToken" merely restate schema defaults; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read one page of Sponsored Brands ads"), which cleanly separates it from sibling entity readers like amazon_ads_get_sb_campaigns and amazon_ads_get_sb_ad_groups. "Configuration is not performance" further rules out confusing it with amazon_ads_get_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real prerequisite ("Requires Brands eligibility in this profile") and pagination instruction ("follow nextToken"), plus an implicit redirect to reporting tools via "Configuration is not performance." It does not name the specific alternative to use for performance data, so routing is only implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_campaignsamazon ads get sb campaignsA
Read-onlyIdempotent

Read one page of Sponsored Brands campaigns. Requires Brands eligibility in this profile. Includes all states by default; follow nextToken. Configuration is not performance.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower, yet the description adds real behavioral content: an eligibility prerequisite, single-page pagination with a nextToken follow-up contract, and the non-obvious fact that archived campaigns are included by default. It also clarifies the returned data is configuration-only, not performance data. No mention of rate limits or error behavior keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, zero filler, with the most decision-relevant information (what it reads, eligibility, state defaults) front-loaded. Each sentence carries a distinct fact: scope, prerequisite, pagination/states, and data-type caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary, and the description covers scope, prerequisite, pagination, and default filtering. The only gap is that it does not explicitly tell the agent which sibling to use for Sponsored Products or Sponsored Display campaigns, leaving that inference to the naming convention.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains accountId, states, nextToken, maxResults, and campaignIds in detail. The description only reinforces the default-includes-all-states behavior and the nextToken follow-up, adding little semantic detail beyond what the parameters already document. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read one page of Sponsored Brands campaigns") and scopes it to a single page, which separates it from the paginated-agnostic campaign readers. The "Sponsored Brands" qualifier distinguishes it by resource family from the Sponsored Display and unqualified campaign siblings, though it never names those alternatives directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Requires Brands eligibility in this profile" gives a concrete precondition an agent can check before calling, and "Configuration is not performance" steers the agent away from using this for metrics (the report tools are the implied alternative). It stops short of explicitly naming the report sibling or stating when not to call it, so it is clear context rather than a full routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_keywordsamazon ads get sb keywordsA
Read-onlyIdempotent

List one page of Sponsored Brands keywords, including archived entities. Follow the returned cursor or offset; one page is not the whole inventory.

NameRequiredDescriptionDefault
limitNoMaximum entities in this page, up to 100.
statesNoStates to include, in Amazon's lower case. Defaults to every state.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
adGroupIdsNoRestrict results to these ad group IDs, as decimal strings.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the meaningful behavioral fact that results are paginated and partial, plus archived inclusion. It says nothing about permission/profile requirements or result ordering, so it adds context but not rich detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. The resource and scope come first, followed immediately by the pagination caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paginated list tool with full schema coverage and an output schema covering return values, the description supplies the essential facts: what is listed, archived inclusion, and that pagination must be continued. The only gap is differentiation from sibling keyword/target listing tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented, including limit, startIndex, states, and the ID filters. The description only alludes to the cursor/offset (startIndex) concept and adds no syntax or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List one page of Sponsored Brands keywords') and adds the useful scope detail that archived entities are included. It does not explicitly distinguish itself from the generic amazon_ads_get_keywords or amazon_ads_get_sb_negative_keywords siblings, so the SB-vs-generic boundary is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives pagination guidance ('follow the returned cursor or offset; one page is not the whole inventory'), which is real usage advice. It offers no when-to-use or when-not-to-use versus the many sibling list tools (e.g., amazon_ads_get_keywords, amazon_ads_get_sb_targets), leaving that choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_negative_keywordsamazon ads get sb negative keywordsA
Read-onlyIdempotent

List one page of Sponsored Brands negative keywords, including archived entities. Follow the returned cursor or offset; one page is not the whole inventory.

NameRequiredDescriptionDefault
limitNoMaximum entities in this page, up to 100.
statesNoStates to include, in Amazon's lower case. Negative criteria are enabled or archived.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
adGroupIdsNoRestrict results to these ad group IDs, as decimal strings.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, idempotent=true, destructive=false, so safety is covered. The description adds a genuinely useful caveat that results are paginated and incomplete per call, but does not cover return shape or anything about archived-entity semantics beyond what the schema default states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource statement front-loaded and the pagination warning second; no filler. Slight redundancy with the schema's default of enabled+archived for the 'including archived entities' clause keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema and 100% parameter coverage, the description covers what it must: what list this is and that results are paged. The remaining gap is disambiguation from the large set of sibling negative-keyword/target tools, which it leaves implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are fully documented in the schema (limit, states, accountId, adGroupIds, startIndex, campaignIds). The description adds nothing parameter-specific beyond the pagination hint, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) and resource (Sponsored Brands negative keywords) with scope ('one page', 'including archived entities'). The 'Sponsored Brands' qualifier implicitly distinguishes it from sibling get_negative_keywords and get_sd_negative_targets, though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives pagination guidance ('follow the returned cursor or offset; one page is not the whole inventory') which is useful operational context, but it gives no when-to-use/when-not guidance nor names any alternative among the many sibling list tools. Usage is only implied by the tool being a filtered lister.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_negative_targetsamazon ads get sb negative targetsA
Read-onlyIdempotent

List one page of Sponsored Brands negative targets, including archived entities. Follow the returned cursor or offset; one page is not the whole inventory.

NameRequiredDescriptionDefault
limitNoMaximum entities in this page, up to 100.
statesNoStates to include, in Amazon's lower case. Negative criteria are enabled or archived.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
adGroupIdsNoRestrict results to these ad group IDs, as decimal strings.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds only the archived-inclusion note and pagination caveat; it says nothing about rate limits, result ordering, or what the page envelope looks like. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, both front-loaded with the essential fact (what is listed) followed by the pagination warning. No filler, nothing repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary, and the pagination caveat plus archived note cover the key behavioral facts. The remaining gap is explicit routing among the many sibling listing tools, which the description leaves implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters already carry documentation and this is the baseline case. The mention of 'cursor or offset' loosely maps to nextToken, but the description adds no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List one page of Sponsored Brands negative targets'), and the 'Sponsored Brands' qualifier distinguishes it from amazon_ads_get_sd_negative_targets and amazon_ads_get_negative_targets. It does not explicitly name those siblings, so it falls short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent how to page ('Follow the returned cursor or offset; one page is not the whole inventory'), which is useful operational guidance. But it never states when to choose this over the SD negative targets or SB negative keywords tools, so the alternative-selection guidance is only implied by the entity name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sb_targetsamazon ads get sb targetsA
Read-onlyIdempotent

List one page of Sponsored Brands targets, including archived entities. Follow the returned cursor or offset; one page is not the whole inventory.

NameRequiredDescriptionDefault
limitNoMaximum entities in this page, up to 100.
statesNoStates to include, in Amazon's lower case. Defaults to every state.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
adGroupIdsNoRestrict results to these ad group IDs, as decimal strings.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and open-world. The description adds genuinely useful behavior not in annotations: archived entities are returned and a single response is only one page, so callers must continue paginating. It stops short of describing return shape, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource and followed immediately by the pagination caveat. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a fully described 6-parameter schema and an output schema, the description covers the essentials plus the pagination pitfall. Missing only explicit routing guidance relative to the many sibling list tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents limit, states, accountId, nextToken, and the ID filters. The description only restates the continuation concept, adding little detail beyond the field descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List one page of Sponsored Brands targets") and adds an important scope note that archived entities are included. The 'sb' qualifier distinguishes it from amazon_ads_get_sd_targets and amazon_ads_get_targets, though no sibling is explicitly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource, and the description does give operational guidance ("Follow the returned cursor or offset"). It never states when to prefer this over amazon_ads_get_targets or the SD equivalents, which is the main ambiguity an agent faces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_ad_groupsamazon ads get sd ad groupsA
Read-onlyIdempotent

Read one page of Sponsored Display ad groups. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

This description provides rich behavioral context not found in annotations or schema, specifically how pagination works ('startIndex, not a cursor') and a critical data nuance ('these records are not performance metrics').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, delivering four distinct but interrelated pieces of critical operational information in an efficient, front-loaded manner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It is highly complete for a list-reading operation. By detailing the pagination method and the nature of the returned data (non-performance metrics), it preemptively answers common agent questions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the input schema provides 100% coverage of the parameters, the baseline score of 3 is appropriate. The description does not add specific semantic meaning to any individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Read') and the specific resource ('Sponsored Display ad groups'), which helps distinguish this tool from other general 'get ad groups' siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear usage constraint by stating the required condition: 'Requires Display eligibility.' This helps the agent determine if the tool is applicable before execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_campaignsamazon ads get sd campaignsA
Read-onlyIdempotent

Read one page of Sponsored Display campaigns. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, but the description goes well beyond them: it discloses a non-obvious quirk (full pages are conservatively marked partial) that would otherwise confuse a downstream agent, and it explicitly warns that creative-native media references are not performance metrics, preventing misuse. These are exactly the behavioral details structured fields cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the resource and eligibility gate before pagination and caveat details; nothing is padded. The creatives caveat is slightly tangential to a campaigns endpoint, keeping it just short of ideal tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shape need not be described. The description covers the eligibility precondition, the pagination model, and the partial-page caveat, which is everything an agent needs to call this correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so accountId, count, and startIndex are already fully documented in the schema, including the 'use nextStartIndex' hint. The description's note that pagination uses startIndex rather than a cursor adds only a small amount of framing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Read one page of Sponsored Display campaigns'), which immediately separates it from the Sponsored Brands variants (get_sb_campaigns) and the generic get_campaigns sibling. An agent can pick the right tool from the ad-product qualifier alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one real prerequisite ('Requires Display eligibility'), which helps the agent decide whether the call will succeed. But there is no explicit when-to-use/when-not guidance and no reference to alternative tools such as amazon_ads_get_report for performance data, leaving selection partly implied by the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_creativesamazon ads get sd creativesA
Read-onlyIdempotent

Read one page of Sponsored Display creatives. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
adGroupIdsYesSponsored Display ad group IDs whose creatives to read. Required by Amazon.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely non-obvious behavior: pagination is offset-based rather than cursor-based, full pages are conservatively flagged partial (so the agent must not treat 'partial' as truncation), and the returned records carry native media references rather than metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose, then prerequisites, then paging behavior, then a scope caveat about the payload. Nothing is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description only needs to cover eligibility, paging, and payload scope — and it does all three, including the misleading-'partial'-flag quirk an agent would otherwise misread.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter baseline is 3, but the description still adds value by stating that paging is via startIndex rather than a cursor, disambiguating how count/startIndex combine. It does not add anything beyond the schema for accountId or adGroupIds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read'), resource ('Sponsored Display creatives'), and scope ('one page'), which cleanly separates it from the many other Amazon Ads readers in the sibling set. Within the SD family, creatives vs ad groups/campaigns/targets is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real precondition — 'Requires Display eligibility' — which tells the agent when the call will apply. It does not, however, route the agent away from near-neighbors such as amazon_ads_get_sd_product_ads or amazon_ads_get_sb_ad_creatives, leaving the creative-vs-ad distinction to be inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_negative_targetsamazon ads get sd negative targetsA
Read-onlyIdempotent

Read one page of Sponsored Display negative targets. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the description's added value is in the operational details: eligibility gating, offset-based rather than cursor pagination, and the non-obvious trait that full pages are conservatively flagged as partial. It also warns that these records carry no performance metrics, which prevents a common misinterpretation. Return shape and failure modes are left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the operation and eligibility constraint front-loaded, followed by pagination and scope caveats. The 'creatives include native media references' sentence is the weakest link for a negative-targets resource but still contributes disambiguation rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no prose. Given that, the description covers the remaining agent-relevant gaps: eligibility precondition, pagination mechanics and its partial-page quirk, and the fact that these are targeting records rather than metrics. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines count, accountId, and startIndex, making 3 the baseline. The description earns a bump by clarifying that pagination is startIndex-based and not cursor-based and by explaining the partial-page marking behavior, which is semantics the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence pairs a specific verb ('Read one page of') with a precisely qualified resource ('Sponsored Display negative targets'), which separates it from amazon_ads_get_sd_targets (positive) and amazon_ads_get_sb_negative_targets (Sponsored Brands). It stops short of explicitly naming those siblings, so differentiation is achieved through the resource qualifier rather than direct routing language.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Requires Display eligibility' is a genuine precondition that tells the agent when the call can succeed. However, there is no explicit statement of when to prefer this over positive-target or SB negative-target siblings, and no exclusions or error guidance; usage is only implied by the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_product_adsamazon ads get sd product adsA
Read-onlyIdempotent

Read one page of Sponsored Display product ads. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: offset pagination instead of a cursor, and the non-obvious fact that full pages may be conservatively flagged partial. It also warns the returned creatives carry media references rather than metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying a distinct fact (scope, eligibility, pagination model, record type) with the core scope front-loaded. No filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full annotation coverage, the description covers what an agent needs to call it correctly and interpret the page flags. A note on looping through pages or page-completeness expectations would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above it by calling out that paging uses startIndex rather than a cursor, a constraint the schema does not state. It does not add new meaning to count or accountId beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one page of Sponsored Display product ads') with page-scoped semantics, which separates it from report and creative siblings. It does not name a sibling by name, but the 'SD product ads' qualifier is specific enough to route an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite ('Requires Display eligibility') and implicitly excludes the metrics/reporting use case with 'these records are not performance metrics', which steers toward the report tool. It stops short of naming an explicit alternative for performance data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_sd_targetsamazon ads get sd targetsA
Read-onlyIdempotent

Read one page of Sponsored Display targets. Requires Display eligibility. Pagination uses startIndex, not a cursor; full pages are conservatively marked partial. Creatives include native media references; these records are not performance metrics.

NameRequiredDescriptionDefault
countNoMaximum entities in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
startIndexNoZero-based offset of the first entity. Use nextStartIndex from the previous page.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond that: offset-based paging, the counterintuitive rule that full pages are 'conservatively marked partial', and a caveat that returned creative records are not performance metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core verb+resource and the eligibility gate before the paging and content caveats. No filler, though the final clause about native media references is somewhat loosely connected to the tool's primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation; the description instead covers the things structure cannot: eligibility, pagination mechanics, the partial-page flag, and the nature of the records. An agent has enough to call it correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented, including nextStartIndex chaining. The description's paging note largely restates the schema's startIndex guidance, so the required baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Read one page of Sponsored Display targets'), which cleanly separates it from siblings like amazon_ads_get_sd_campaigns and amazon_ads_get_sd_product_ads. It does not explicitly distinguish itself from amazon_ads_get_sd_negative_targets, leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States a hard prerequisite ('Requires Display eligibility') and explains the pagination model ('startIndex, not a cursor'), both of which tell the agent when and how to call it. It stops short of naming alternatives or exclusions, so it is clear context without full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_get_targetsamazon ads get targetsA
Read-onlyIdempotent

Read one page of Amazon Sponsored Products targets, including paused and archived entities by default. Continue with nextToken until absent; one page is not an account total. These are configuration records, not performance metrics.

NameRequiredDescriptionDefault
statesNoDelivery states to include. Defaults to every state, archived included.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.
maxResultsNoMaximum entities in this page, up to 100. Follow the returned continuation value for the rest.
campaignIdsNoRestrict results to these campaign IDs, as decimal strings.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: archived entities are included by default and a single response is not the account total. Permissions/auth requirements are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core scope front-loaded and the pagination caveat immediately after. Each sentence carries distinct, useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained. The description covers scope, default state inclusion, and pagination well; the only minor gap is no explicit pointer to the metrics tool or mention of rate/volume expectations for a large account.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are well documented in the schema itself, setting the baseline at 3. The description reinforces pagination semantics but adds no syntax or format detail beyond what the schema already provides for states, nextToken, or campaignIds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read one page of Amazon Sponsored Products targets') and names the scope precisely, distinguishing it from the sibling sd_targets/sb_targets tools by platform. The default state inclusion is baked into the purpose statement, so an agent knows exactly what set it gets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear pagination guidance ('Continue with nextToken until absent; one page is not an account total') and implicitly redirects metric-seeking agents by noting these are 'configuration records, not performance metrics.' It stops short of explicitly naming amazon_ads_get_report or amazon_ads_create_report as the alternative for performance data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_list_creative_assetsamazon ads list creative assetsA
Read-onlyIdempotent

Search the Amazon creative asset library: images, logos and videos, native download or playback URLs, sizes and moderation metadata. One page; continue with nextToken using the same filters. Uploaded assets are not proof of campaign use or delivery. Sponsored Products images come from amazon_ads_get_product_metadata instead.

NameRequiredDescriptionDefault
textNoOptional free-text search over asset names and tags.
limitNoMaximum assets in this page, up to 100.
accountIdYesAdvertising profile ID listed in AMAZON_ADS_PROFILE_IDS, such as 1234567890. The region-qualified form used by hosted getmcpads, such as EU:1234567890, is accepted when its region matches AMAZON_ADS_REGION.
assetTypeNoRestrict results to images or videos.
nextTokenNoOpaque continuation token from the previous page for this same profile and filters. Omit on the first request.

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavior beyond them: single-page pagination with token continuation and a caveat that uploaded assets are not proof of campaign use or delivery. Reduces the risk of an agent treating library presence as delivery evidence; only return-shape detail is left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose, then pagination, then the caveat and alternative. Dense and mostly waste-free, though the compressed telegraphic phrasing ('native download or playback URLs, sizes and moderation metadata') reads as a list fragment rather than a sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, paginated list tool with a full input schema, output schema, and annotations, the description covers the essentials: scope, pagination protocol, and the misleading-inference caveat. Minor gaps remain, such as whether unfiltered search spans all asset types or whether moderation status can be filtered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (text, limit, accountId, assetType, nextToken) is already documented with constraints and enum values. The description only reinforces that nextToken must reuse 'the same filters'; it adds no search-syntax or matching semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the Amazon creative asset library') and enumerates what is returned: images, logos, videos, download/playback URLs, sizes, moderation metadata. It also routes an adjacent case away ('Sponsored Products images come from amazon_ads_get_product_metadata instead'), so the agent can separate it from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating instructions: one page, continue with nextToken using the same filters, and an explicit alternative for Sponsored Products images. It does not, however, contrast itself with the sibling amazon_ads_get_creative_asset (single-asset fetch) or explain when searching by text vs assetType is preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

amazon_ads_list_profilesamazon ads list profilesA
Read-onlyIdempotent

List the advertising profiles in AMAZON_ADS_PROFILE_IDS that these credentials can reach in AMAZON_ADS_REGION, with marketplace, account type, currency and timezone. Profiles outside the allowlist are never returned or counted. Configured IDs that Amazon does not return are listed in missingProfileIds.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYesOriginal tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral facts: the allowlist filtering guarantee, that out-of-allowlist profiles are neither returned nor counted, and that configured-but-absent IDs surface in missingProfileIds. That last detail is important because it tells the agent how to distinguish 'not permitted' from 'not found'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the scope and filtering rule front-loaded, then the returned fields, then the missingProfileIds edge case. No filler and no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be fully spelled out, yet the description still names the key returned attributes and the missingProfileIds field. Combined with annotations covering the safety profile, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description still adds meaning by naming the two ambient configuration inputs (AMAZON_ADS_PROFILE_IDS and AMAZON_ADS_REGION) that determine the result set, which the empty object schema cannot convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (advertising profiles) plus the scoping axes (AMAZON_ADS_PROFILE_IDS allowlist, AMAZON_ADS_REGION). It is clearly the collection-level counterpart to the singular amazon_ads_get_profile sibling, so an agent can route between them without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for the tool's role: it returns only allowlisted profiles in the configured region, and profiles outside the allowlist are never returned or counted. It stops short of explicitly naming amazon_ads_get_profile as the alternative for fetching a single profile, so there is a small inference gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 31 tool updatesv1.0.1
    • Changedamazon_ads_create_report4 fields changed
      • removedInput schema / properties / endDate / $ref
        Removed value: -"#/properties/startDate"
      • addedInput schema / properties / endDate / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / endDate / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_ad_groups1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_brands1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_campaign_negative_keywords1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_campaign_negative_targets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_campaigns1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_creative_asset1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_keywords1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_negative_keywords1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_negative_targets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_product_ads1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_product_metadata1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_profile1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_report1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_ad_creatives1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_ad_groups1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_ads4 fields changed
      • removedInput schema / properties / campaignIds / items / $ref
        Removed value: -"#/properties/adIds/items"
      • addedInput schema / properties / campaignIds / items / pattern
        Added value: +"^[1-9]\\d{0,19}$"
      • addedInput schema / properties / campaignIds / items / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_campaigns1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_keywords4 fields changed
      • removedInput schema / properties / adGroupIds / items / $ref
        Removed value: -"#/properties/campaignIds/items"
      • addedInput schema / properties / adGroupIds / items / pattern
        Added value: +"^[1-9]\\d{0,19}$"
      • addedInput schema / properties / adGroupIds / items / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_negative_keywords4 fields changed
      • removedInput schema / properties / adGroupIds / items / $ref
        Removed value: -"#/properties/campaignIds/items"
      • addedInput schema / properties / adGroupIds / items / pattern
        Added value: +"^[1-9]\\d{0,19}$"
      • addedInput schema / properties / adGroupIds / items / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_negative_targets4 fields changed
      • removedInput schema / properties / adGroupIds / items / $ref
        Removed value: -"#/properties/campaignIds/items"
      • addedInput schema / properties / adGroupIds / items / pattern
        Added value: +"^[1-9]\\d{0,19}$"
      • addedInput schema / properties / adGroupIds / items / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sb_targets4 fields changed
      • removedInput schema / properties / adGroupIds / items / $ref
        Removed value: -"#/properties/campaignIds/items"
      • addedInput schema / properties / adGroupIds / items / pattern
        Added value: +"^[1-9]\\d{0,19}$"
      • addedInput schema / properties / adGroupIds / items / type
        Added value: +"string"
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_ad_groups1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_campaigns1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_creatives1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_negative_targets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_product_ads1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_sd_targets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_get_targets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_list_creative_assets1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedamazon_ads_list_profiles1 field changed
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "items": {},
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 31 tool updatesv1.0.0
    • First observedamazon_ads_create_report
    • First observedamazon_ads_get_ad_groups
    • First observedamazon_ads_get_brands
    • First observedamazon_ads_get_campaign_negative_keywords
    • First observedamazon_ads_get_campaign_negative_targets
    • First observedamazon_ads_get_campaigns
    • First observedamazon_ads_get_creative_asset
    • First observedamazon_ads_get_keywords
    • First observedamazon_ads_get_negative_keywords
    • First observedamazon_ads_get_negative_targets
    • First observedamazon_ads_get_product_ads
    • First observedamazon_ads_get_product_metadata
    • First observedamazon_ads_get_profile
    • First observedamazon_ads_get_report
    • First observedamazon_ads_get_sb_ad_creatives
    • First observedamazon_ads_get_sb_ad_groups
    • First observedamazon_ads_get_sb_ads
    • First observedamazon_ads_get_sb_campaigns
    • First observedamazon_ads_get_sb_keywords
    • First observedamazon_ads_get_sb_negative_keywords
    • First observedamazon_ads_get_sb_negative_targets
    • First observedamazon_ads_get_sb_targets
    • First observedamazon_ads_get_sd_ad_groups
    • First observedamazon_ads_get_sd_campaigns
    • First observedamazon_ads_get_sd_creatives
    • First observedamazon_ads_get_sd_negative_targets
    • First observedamazon_ads_get_sd_product_ads
    • First observedamazon_ads_get_sd_targets
    • First observedamazon_ads_get_targets
    • First observedamazon_ads_list_creative_assets
    • First observedamazon_ads_list_profiles

TDQS

A3.8/5.0

Scored across 31 tools

Disambiguation4/5

Tools are separated by ad program (SP/SB/SD) plus entity type, and descriptions explicitly state which program each tool reads, so most selections are unambiguous. A few pairs still require careful reading: amazon_ads_get_negative_keywords vs amazon_ads_get_campaign_negative_keywords (ad-group vs campaign level), and the unprefixed tools (get_campaigns, get_targets, get_product_ads) implicitly mean Sponsored Products, which could be mistaken for the generic or SB/SD variants.

Naming Consistency4/5

All 31 tools use a uniform amazon_ads_ snake_case verb_noun pattern with program prefixes (sb_, sd_) and consistent entity suffixes (campaigns, ad_groups, targets, negative_keywords). The only deviation is the arbitrary mix of list_ and get_ for read operations (list_profiles, list_creative_assets vs get_brands, get_keywords), which is cosmetic rather than confusing.

Tool Count3/5

31 tools is on the heavy side, but the surface mirrors the genuine breadth of the Amazon Ads API (three ad programs × seven-plus entity types plus reporting). Each tool maps to a distinct resource, though several near-identical read tools could arguably be collapsed into one parameterized entity-listing tool.

Completeness3/5

Read coverage is broad across Sponsored Products, Brands and Display, and asynchronous reporting covers performance metrics. However, the surface is essentially read-only: there are no create/update/pause operations for campaigns, ad groups, keywords, targets or bids/budgets, and no DSP, portfolio or budget-management tools, so an agent can analyze but not act.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to read ad account, campaign, ad group, and ad data plus performance insights, and optionally create, pause, activate, or update paused campaigns, ad groups, and ads through a secured Streamable HTTP endpoint.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to read App Store campaign and performance data and to prepare preview-first, opt-in changes for explicitly allowlisted ad accounts.
    312 npm
    1
    Apache 2.0