Skip to main content
Glama
Pinterest Ads MCP Server

Pinterest Ads MCP Server

Pinterest Ads MCP Server (read + write)

License: MIT Python 3.11+

An MCP server for the Pinterest API v5 (ads). Use it from Claude, ChatGPT, Cursor, Codex or any MCP client to report on and manage Pinterest ad accounts: campaigns, ad groups, ads, keywords, audiences, catalogs and product groups, analytics and reports.

Maintained by AI Shopping Feeds. It offers:

  • the advertiser workflow on API v5: ad accounts and business access, campaigns, ad groups, ads (promoted Pins) and catalog ads, keywords and negatives, targeting, audiences and customer lists, conversion tags, catalogs, feeds and product groups

  • analytics and reports: quick synchronous metrics, and async reports with one call that waits with progress and returns the rows

  • bulk changes: pause or activate many entities, adjust bids and budgets by a percentage, Pinterest bulk upsert and export

  • safety: dry-run, confirm words, spend guards, new campaigns paused by default, an audit log, read-only mode and tool groups

  • every other endpoint through a read-only and a confirm-gated raw request tool

Pinterest has announced its own hosted Pinterest MCP Server but it isn't available yet (sign-up only). This one runs on your own machine with your own Pinterest app, works now, and adds dry-run, confirm words, spend guards and an audit log.

Not affiliated with or endorsed by Pinterest.

Part of the AI Shopping Feeds MCP family: Google Ads · Google Merchant Centre · Google Analytics · YouTube Studio · Amazon Ads · Apple Ads · Microsoft Ads · TikTok Ads · Pinterest Ads · Snapchat Ads · OpenAI Ads · AppLovin.

Let your agent set it up

Paste this into Claude Code, Codex, Cursor or any agent that can read web pages and edit files:

Set up the Pinterest Ads MCP server for me by following https://raw.githubusercontent.com/AI-Shopping-Feeds/pinterest-ads-mcp/main/skills/pinterest-ads-mcp/SKILL.md

The agent checks whether it's already connected, installs the runner if you agree, walks you through creating and approving a Pinterest app and signing in, adds the server to your client's config without touching your other servers, and checks it works by calling pinterest_ads_health_check.

The same file is an Agent Skill, so your agent can keep it as a guide to using the tools well. For Claude Code, copy the folder into your skills:

git clone --depth 1 https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git /tmp/pinterest-ads-mcp
cp -r /tmp/pinterest-ads-mcp/skills/pinterest-ads-mcp ~/.claude/skills/

Other agents that support skills load the same skills/pinterest-ads-mcp folder from their own skills directory.

Related MCP server: Snapchat Ads MCP Server

What it can do

81 tools, all prefixed pinterest_ads_. The full list is in docs/tools.md.

Read

Area

Tools

Accounts

list_ad_accounts (owned and shared), get_ad_account, get_user_account, list_businesses, list_business_assets

Campaign structure

list_campaigns, list_ad_groups, list_ads, list_product_group_promotions, get_bid_floors

Pins for ads

list_pins, get_pin, list_boards, list_board_pins

Keywords

list_keywords, get_keyword_metrics, suggest_keywords

Targeting

get_targeting_options, list_targeting_templates, estimate_audience_size, list_audiences, get_audience, list_customer_lists, list_conversion_tags, get_conversion_tag

Catalogs

list_catalogs, list_catalog_feeds, list_feed_processing_results, list_item_issues, get_catalog_items, list_product_groups, list_product_group_products, get_product_group_product_counts

Analytics

get_analytics (account, campaign, ad group, ad or product group, with targeting breakdowns), list_metrics, get_metrics_ready_state, get_audience_insights

Reports

run_report (request, wait, return rows), create_report, get_report, download_report, list_report_templates, bulk_export, get_bulk_request

Anything else

read_request

Write

Area

Tools

Campaigns, ad groups, ads

create_campaigns, update_campaigns, archive_campaigns and the same for ad_groups and ads; create_product_group_promotions, update_product_group_promotions

Budgets, bids, status

set_statuses, adjust_ad_group_bids, adjust_budgets, bulk_upsert

Pins for ads

create_ad_pin (ad-only Pin from an image URL)

Keywords

create_keywords, create_negative_keywords (ad group, campaign or account level), archive_keywords

Audiences

create_audience, update_audience, delete_audience, create_customer_list, update_customer_list

Catalogs

batch_catalog_items, ingest_catalog_feed, create_product_group, update_product_group, delete_product_group

Anything else

request

Safety

  • Dry-run (PINTEREST_ADS_DRY_RUN=true or pinterest_ads_set_dry_run) records writes in the audit log and returns what would be sent, without sending it. Reads and reports still work.

  • Confirm words. Archives need confirm="ARCHIVE" (Pinterest can't un-archive), deletes confirm="DELETE". Batches over PINTEREST_ADS_BULK_THRESHOLD (10), bid or budget rises over PINTEREST_ADS_MAX_INCREASE_PCT (20%) or whose current value can't be read, values over PINTEREST_ADS_MAX_BUDGET / PINTEREST_ADS_MAX_BID, bulk upserts and raw writes need confirm="APPLY". Without it nothing is sent and the reply shows the old and new values.

  • Paused by default. New campaigns, ad groups, ads and product group promotions start PAUSED.

  • Audit log of every write (~/.pinterest-ads-mcp/logs/audit.jsonl, owner-only), with only the old values of the fields a write changed. Entries are pruned after PINTEREST_ADS_AUDIT_RETENTION_DAYS (30); pinterest-ads-mcp purge deletes it and the stored token.

  • Read-only mode (PINTEREST_ADS_READ_ONLY=true) and tool groups (PINTEREST_ADS_TOOL_GROUPS) limit what the agent can do.

  • Retiring objectives (CATALOG_SALES, WEB_CONVERSION) are refused: Pinterest stops API creation on 1 February 2027.

  • The HTTP transport refuses non-local addresses unless you set PINTEREST_ADS_ALLOW_REMOTE=true; customer-list identifiers are hashed locally; only Pinterest hosts are called.

  • What Pinterest's terms require and how the server follows them: docs/terms-and-data.md.

Supported clients

Client

Works?

How

Claude Code

✅

Local server, claude mcp add (below)

Claude Desktop

✅

Local server, claude_desktop_config.json

Cursor

✅

Local server, ~/.cursor/mcp.json

VS Code (Copilot)

✅

Local server, .vscode/mcp.json (uses servers instead of mcpServers)

Codex

✅

Local server, ~/.codex/config.toml

Gemini CLI

✅

Local server, ~/.gemini/settings.json

Windsurf and other local clients

✅

Local server, same JSON entry

Claude.ai and ChatGPT

❌ not yet

These need a remote server with sign-in. This server's HTTP transports have no sign-in, so don't expose them publicly. Use a local client.

Setup

1. Install uv

The server runs with uvx from uv (brew install uv on macOS) and needs Python 3.11 or later. It installs straight from this repository:

uvx --from git+https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git pinterest-ads-mcp version

Pin a release by adding @vX.Y.Z to the URL.

2. Get credentials

You need your own Pinterest app. Step by step, with review times and the Standard access upgrade: docs/setup-pinterest-ads-api.md.

  1. With a Pinterest business account, create an app at developers.pinterest.com (Connect app) and wait for Trial access approval. The app name can't contain "Pinterest".

  2. On the app's Configure tab, add the redirect URI http://localhost:8765/callback and note the App id and App secret key.

  3. Put PINTEREST_ADS_APP_ID=... and PINTEREST_ADS_APP_SECRET=... in ~/.pinterest-ads-mcp/.env (so the secret stays out of your shell history), then sign in once. It opens a browser and saves a refresh token to ~/.pinterest-ads-mcp/secrets/, owner-only:

    uvx --from git+https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git pinterest-ads-mcp auth
  4. For real use, upgrade the app to Standard access (needs a short video of the sign-in). Trial access allows 1,000 API calls a day.

3. Add it to your client

Replace the placeholders. Keep your other servers in each file. If the app ID and secret are already in ~/.pinterest-ads-mcp/.env, you can leave them out of the client config.

Claude Code

claude mcp add --scope user pinterest-ads \
  --env PINTEREST_ADS_APP_ID=your-app-id \
  --env PINTEREST_ADS_APP_SECRET=your-app-secret \
  --env PINTEREST_ADS_AD_ACCOUNT_ID=123456789 \
  --env PINTEREST_ADS_DRY_RUN=true \
  -- uvx --from git+https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git pinterest-ads-mcp

Claude Desktop, Cursor, Gemini CLI, Windsurf (and VS Code under servers)

{
  "mcpServers": {
    "pinterest-ads": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git", "pinterest-ads-mcp"],
      "env": {
        "PINTEREST_ADS_APP_ID": "your-app-id",
        "PINTEREST_ADS_APP_SECRET": "your-app-secret",
        "PINTEREST_ADS_AD_ACCOUNT_ID": "123456789",
        "PINTEREST_ADS_DRY_RUN": "true"
      }
    }
  }
}

Desktop apps often can't find uvx on the PATH; if the server doesn't start, use the full path from which uvx as the command.

Codex (~/.codex/config.toml)

[mcp_servers.pinterest-ads]
command = "uvx"
args = ["--from", "git+https://github.com/AI-Shopping-Feeds/pinterest-ads-mcp.git", "pinterest-ads-mcp"]
env = { PINTEREST_ADS_APP_ID = "your-app-id", PINTEREST_ADS_APP_SECRET = "your-app-secret", PINTEREST_ADS_AD_ACCOUNT_ID = "123456789", PINTEREST_ADS_DRY_RUN = "true" }

The refresh token stays in its file; the client config only needs the app ID and secret. If you keep the token file somewhere else, add PINTEREST_ADS_TOKEN_FILE=/abs/path/token.json.

4. Check it works

Restart or reload the client, then ask: "Which Pinterest ad accounts can you see?" It should call pinterest_ads_health_check and list them with their currency. Remove PINTEREST_ADS_DRY_RUN when you're ready for changes to go live.

Configuration

Variable

Required

What it does

PINTEREST_ADS_APP_ID, PINTEREST_ADS_APP_SECRET

yes

Your Pinterest app's ID and secret

PINTEREST_ADS_TOKEN_FILE

no

Refresh-token file written by auth (default ~/.pinterest-ads-mcp/secrets/pinterest-ads-token.json)

PINTEREST_ADS_REFRESH_TOKEN

no

The refresh token itself, instead of the file (the file is better: renewed tokens are saved there)

PINTEREST_ADS_ACCESS_TOKEN

no

A fixed access token (e.g. a test or Sandbox token) instead of OAuth; can't be refreshed

PINTEREST_ADS_AD_ACCOUNT_ID

no

Default ad account

PINTEREST_ADS_SANDBOX

no

true uses Pinterest's Sandbox (api-sandbox.pinterest.com)

PINTEREST_ADS_DRY_RUN

no

true previews writes without sending them

PINTEREST_ADS_READ_ONLY

no

true registers only read-only tools

PINTEREST_ADS_TOOL_GROUPS

no

Comma-separated groups: accounts, campaigns, ad_groups, ads, pins, keywords, targeting, conversions, catalogs, analytics, reporting, bulk, request. Unknown names stop the server at startup. Server tools are always on

PINTEREST_ADS_BULK_THRESHOLD

no

Items per write before confirm="APPLY" is needed (default 10)

PINTEREST_ADS_MAX_INCREASE_PCT

no

Bid or budget rise that needs confirm="APPLY" (default 20)

PINTEREST_ADS_MAX_BUDGET, PINTEREST_ADS_MAX_BID

no

Optional caps in the account currency (not micro-units)

PINTEREST_ADS_AUDIT_LOG

no

Audit log path (default ~/.pinterest-ads-mcp/logs/audit.jsonl)

PINTEREST_ADS_AUDIT_RETENTION_DAYS

no

Days to keep audit entries, pruned at startup (default 30; 0 keeps them)

PINTEREST_ADS_AUDIT_SNAPSHOTS

no

false stops keeping the old values of changed fields

PINTEREST_ADS_MAX_DOWNLOAD_MB

no

Largest report or export file to download (default 200)

PINTEREST_ADS_PAGE_SIZE, PINTEREST_ADS_TIMEOUT

no

List page size (100, max 250) and request timeout in seconds (30)

PINTEREST_ADS_TRANSPORT, PINTEREST_ADS_HOST, PINTEREST_ADS_PORT

no

stdio (default), streamable-http (served at /mcp) or sse (deprecated), and the bind address (default 127.0.0.1:8000)

PINTEREST_ADS_ALLOW_REMOTE

no

true (or --allow-remote) allows binding HTTP to a non-local address. There's no sign-in: only behind your own authenticating proxy

PINTEREST_ADS_HOME

no

Per-user folder for secrets/, logs/ and an optional .env (default ~/.pinterest-ads-mcp)

PINTEREST_ADS_LOG_LEVEL

no

DEBUG, INFO, WARNING or ERROR (logs go to stderr)

Settings are read from the environment, then --env FILE (or ./.env), then ~/.pinterest-ads-mcp/.env. CLI: pinterest-ads-mcp run (default), auth, purge, describe, version.

Example prompts

Which Pinterest campaigns spent the most last week, and what were their CTR and checkout ROAS?
Pause every ad group in the "Spring sale" campaign with no conversions in the last 14 days. Dry-run first and show me the list.
Create a SALES campaign with a 20 per day budget, one ad group targeting the UK, and an ad from my latest promoted Pin. Keep everything paused.
Run a daily report of spend and clicks by campaign for October and tell me which days spend dipped.

More docs

Contributing and licence

Issues and pull requests are welcome on this repository. See CONTRIBUTING.md.

Licensed under the MIT License.


Try out AI Shopping Feeds, our shopping feed management tool (including Google Shopping feeds).

Available Tools

81 tools
pinterest_ads_adjust_ad_group_bidsAdjust many ad group bidsA

Change many ad group bids at once, with progress.

Pass change_pct (e.g. -10 lowers each bid by 10%) or set_bid (one value for all, in the account currency, e.g. 0.85). New bids stay between min_bid and max_bid (currency units). Ad groups on automatic bidding have no bid and are skipped. Current bids are read first; the result lists old and new values.

Needs confirm='APPLY' for more than PINTEREST_ADS_BULK_THRESHOLD ad groups or any rise above PINTEREST_ADS_MAX_INCREASE_PCT. Run in dry-run first and show the user the table.

NameRequiredDescriptionDefault
idsYes
confirmNo
max_bidNo
min_bidNo
set_bidNo
change_pctNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (which only say non-read-only, non-idempotent, open-world), the description discloses that ad groups on automatic bidding are skipped, that auto-created bids are read first, that bids are clamped to min_bid/max_bid, and that the result carries old and new values. It also documents the gating rule requiring confirm='APPLY' above the PINTEREST_ADS_BULK_THRESHOLD count or any increase above PINTEREST_ADS_MAX_INCREASE_PCT, which is exactly the kind of safety context 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.

Conciseness4/5

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

Four short paragraphs, each front-loaded with its topic: mode selection, clamping/skip behavior, then the confirmation gate. Nearly every sentence earns its place; the only slack is the vague trailing phrase 'with progress' in the opening line.

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 7-parameter bulk mutation with an output schema present, the description covers the risk surface well: mode selection, boundaries, skipped entities, confirmation gating, and a dry-run-first workflow. The one real hole is ad_account_id, which is undocumented and potentially confusing given that ids alone are required.

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 0%, so the description must carry the meaning, and it does for change_pct (with a -10 = -10% example), set_bid (account-currency and a 0.85 example), min_bid/max_bid (clamping bounds in currency units), and confirm (literal 'APPLY' token). 'ids' is self-evident, but ad_account_id is left entirely unexplained in both schema and description.

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 opens with a specific verb and resource ('Change many ad group bids at once'), plus a scope qualifier ('many ... at once'), so an agent immediately knows this is a bulk bid mutation. It is inherently distinguishable from the sibling pinterest_ads_adjust_budgets by resource, but it never explicitly contrasts the two, which keeps it short of a 5.

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 states the two mutually exclusive operating modes ('pass change_pct ... or set_bid') and prescribes a workflow ('Run in dry-run first and show the user the table'), which is strong when-to-use guidance. It stops short of naming alternatives such as update_ad_groups for single-entity edits or adjust_budgets for budget changes.

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

pinterest_ads_adjust_budgetsAdjust many budgetsA

Change many campaign or ad group budgets at once, with progress.

entity: 'campaigns' (budget 'daily' -> daily_spend_cap, 'lifetime' -> lifetime_spend_cap) or 'ad_groups' (budget_in_micro_currency). Pass change_pct (e.g. 15 raises by 15%) or set_budget in the account currency (e.g. 40). Pinterest rejects daily rises smaller than 1.00 USD (or local equivalent).

Needs confirm='APPLY' for more than PINTEREST_ADS_BULK_THRESHOLD items, any rise above PINTEREST_ADS_MAX_INCREASE_PCT, or a value over PINTEREST_ADS_MAX_BUDGET.

NameRequiredDescriptionDefault
idsYes
budgetNodaily
entityYes
confirmNo
change_pctNo
set_budgetNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the write/non-idempotent/open-world profile; the description adds real value beyond them by naming the confirm='APPLY' gate tied to PINTEREST_ADS_BULK_THRESHOLD, PINTEREST_ADS_MAX_INCREASE_PCT, and PINTEREST_ADS_MAX_BUDGET, plus the Pinterest rejection of sub-1.00 USD daily increases. This is exactly the guardrail context an agent needs before a bulk mutation. It doesn't describe partial-failure behavior, which keeps it from 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.

Conciseness4/5

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

The purpose is front-loaded in one clause, followed by grouped parameter and guardrail notes with no filler. The parenthetical mapping and threshold sentence are dense but each earns its place. Structure is slightly ragged, with mixed inline parentheticals rather than clean separation of modes versus preconditions.

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 description covers mode selection, parameters, and confirmation thresholds for a 7-parameter bulk mutation. The gaps are the undocumented 'ids' input (how many, what happens on invalid IDs) and whether a bulk run is all-or-nothing or partially applied.

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?

With 0% schema description coverage, the description carries the full burden and largely succeeds: it defines entity values, budget modes, the meaning and example of change_pct (15 = +15%) and set_budget (40 = account currency), and the confirm token. However, 'ids' and 'ad_account_id' are never explained, leaving two of seven parameters undocumented anywhere.

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 with scope: 'Change many campaign or ad group budgets at once'. The entity mapping (campaigns -> daily_spend_cap/lifetime_spend_cap, ad_groups -> budget_in_micro_currency) makes it clearly distinguishable from siblings like pinterest_ads_update_campaigns or pinterest_ads_set_statuses.

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 usage conditions: pick 'campaigns' or 'ad_groups' via entity, then either pass change_pct for a relative change or set_budget for an absolute value in account currency. It also states prerequisites (confirm='APPLY' above env thresholds) and a Pinterest-side constraint. It doesn't explicitly say when to use this versus the single-object update tools, but the bulk framing makes that inference easy.

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

pinterest_ads_archive_ad_groupsArchive ad groupsA
DestructiveIdempotent

Archive ad groups by ID. Archived ad groups stop serving and Pinterest can't un-archive them, so this needs confirm='ARCHIVE' after the user agrees. To stop them temporarily, use pinterest_ads_set_statuses with PAUSED instead.

NameRequiredDescriptionDefault
idsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint/idempotentHint annotations, it discloses the consequences that actually drive a decision: archived groups stop serving and Pinterest cannot un-archive them. The required confirm='ARCHIVE' gate is a concrete behavioral requirement the annotations do not convey.

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 action and irreversibility front-loaded before the alternative. No redundant restatement of the title, though the confirm clause is slightly compressed into the consequence 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?

Output schema exists so return values need not be described, and annotations cover the safety profile; the description supplies irreversibility, the confirm gate, and the pause alternative. The remaining gap is scope-related: whether ad_account_id is required context and how partial failures across multiple ids behave.

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 0%, so the description must carry parameter meaning. It does well for 'confirm' by specifying the exact literal 'ARCHIVE', but says nothing about 'ad_account_id' or the id-array format, leaving one of three parameters undocumented everywhere.

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 ('Archive ad groups by ID') that an agent can immediately distinguish from siblings like pinterest_ads_archive_campaigns, pinterest_ads_archive_ads, and pinterest_ads_update_ad_groups.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use this to permanently archive, but use pinterest_ads_set_statuses with PAUSED for a temporary stop. It also states the precondition that the user must agree before calling, leaving nothing to inference.

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

pinterest_ads_archive_adsArchive adsA
DestructiveIdempotent

Archive ads by ID. Archived ads stop serving and Pinterest can't un-archive them, so this needs confirm='ARCHIVE' after the user agrees. To stop them temporarily, use pinterest_ads_set_statuses with PAUSED instead.

NameRequiredDescriptionDefault
idsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, so the safety profile is partly covered structurally. The description still adds genuinely new behavioral facts: archived ads stop serving and the action is irreversible on Pinterest's side ('can't un-archive'), plus a confirmation-token gate. It stops short of describing partial-batch failures or what happens to dependent entities, which keeps it below 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?

Three tight sentences: the action, the consequence plus required confirmation, then the alternative. The irreversible nature and the confirm requirement are front-loaded ahead of the redirect to set_statuses, so a skimming agent cannot miss them.

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 destructive mutation this covers the critical ground: preconditions, irreversibility, and the safer alternative, and an output schema exists so return values need no explanation. The only meaningful gap is scope handling for 'ad_account_id' when archiving ads across accounts, which an agent would have to guess.

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 0%, so the description must compensate, and it does explain the non-obvious 'confirm' parameter — the literal value 'ARCHIVE' is required. However, 'ids' is only implied by 'by ID' (no format, batch-size, or single-vs-multiple guidance) and 'ad_account_id' is never mentioned at all, leaving two of three parameters without added meaning.

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 opens with a specific verb and resource combination, 'Archive ads by ID', which tells an agent exactly what entity is affected and that the operation is batch/keyed. It does not need to distinguish itself from archive_campaigns or archive_ad_groups since the resource noun 'ads' does that work implicitly.

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

Usage Guidelines5/5

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

It gives an explicit when-not and the alternative: for a temporary stop, use pinterest_ads_set_statuses with PAUSED instead. It also states the precondition for calling it at all — the user must agree and confirm='ARCHIVE' must be supplied — leaving nothing to inference.

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

pinterest_ads_archive_campaignsArchive campaignsA
DestructiveIdempotent

Archive campaigns by ID. Archived campaigns stop serving and Pinterest can't un-archive them, so this needs confirm='ARCHIVE' after the user agrees. To stop them temporarily, use pinterest_ads_set_statuses with PAUSED instead.

NameRequiredDescriptionDefault
idsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds context the annotations cannot: archived campaigns stop serving and cannot be un-archived by Pinterest. It also discloses the confirmation gate, which is essential behavioral knowledge for a destructive write.

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: operation, irreversibility plus confirmation requirement, then the alternative. The irreversible-consequence warning is front-loaded where it matters most.

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?

The return values need no explanation since an output schema exists, and the destructive semantics are covered thoroughly. The only gap is that ad_account_id, an optional but meaningful scoping parameter for a destructive operation, is never mentioned.

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 0%, so the description must carry parameter meaning. It explains the confirm parameter's required literal value well, but leaves ad_account_id and the format of ids undocumented; the ids array is inferable from 'by ID' but account scoping is not addressed at all.

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 ('Archive campaigns by ID') and immediately distinguishes the irreversible archive from the reversible alternative, pinterest_ads_set_statuses with PAUSED. An agent can select this tool over its siblings without opening any schema.

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

Usage Guidelines5/5

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

It names the alternative tool and the condition that selects it ('to stop them temporarily, use ... PAUSED instead'), plus a precondition: the user must agree and confirm='ARCHIVE' must be passed. When-to-use and when-not-to-use are both explicit.

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

pinterest_ads_archive_keywordsArchive keywordsA
DestructiveIdempotent

Archive keywords or negative keywords by ID (find IDs with pinterest_ads_list_keywords).

Archived keywords stop applying and can't be restored, so this needs confirm='ARCHIVE' after the user agrees. Up to 1000 IDs per call.

NameRequiredDescriptionDefault
idsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true, idempotentHint=true and openWorldHint=true. However, the description goes beyond them by disclosing irreversibility ('can't be restored'), that keywords stop applying, the 1000-ID cap, and the required literal confirm='ARCHIVE', which the schema's bare string default does not 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?

Three short lines with no filler; the sibling pointer, the destructive nature, the confirm requirement and the batch limit are all front-loaded.

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 described because an output schema exists, and the destructive-call essentials are covered. The only meaningful omission is any explanation of ad_account_id, which is undocumented in both structured and natural-language form.

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 0%, so the description must carry the burden. It explains the ids parameter (keyword or negative keyword IDs, up to 1000 per call) and, importantly, the literal value confirm='ARCHIVE'. The ad_account_id parameter is left unexplained in both the schema and the description.

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 ('Archive keywords or negative keywords by ID') and names the sibling tool used to obtain the IDs. It is immediately distinguishable from create/update/list keyword tools.

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 the precondition (IDs come from pinterest_ads_list_keywords) and the user-agreement requirement before confirming. It does not mention alternatives such as pausing via set_statuses instead of an irreversible archive, so it stops short of full when-not guidance.

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

pinterest_ads_audit_lookupLook up an audit log entryA
Read-onlyIdempotent

Look up an audit log entry by ID: the request, response summary and old values of a write.

NameRequiredDescriptionDefault
audit_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine value by disclosing what the entry actually contains (request, response summary, old values of a write), but says nothing about behavior on missing IDs, retention windows, or error responses.

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?

A single front-loaded sentence with a colon-delimited payload list; every clause carries information and there is no filler or repetition of the tool 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?

For a one-parameter read tool with an output schema and full annotation coverage, the description supplies purpose and return-content semantics adequately. The only shortfall is the absence of sibling routing guidance relative to pinterest_ads_audit_tail.

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 0% schema description coverage, the description must carry the parameter burden. 'By ID' does clarify that audit_id is the audit log entry identifier rather than an account or campaign ID, which is meaningful, but it gives no format, length, or sourcing guidance.

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 pairs a specific verb ('Look up') with a specific resource ('an audit log entry by ID') and even names the entry's constituents (request, response summary, old values of a write). It is clearly distinguishable from listing-style siblings, though it does not explicitly name pinterest_ads_audit_tail as the alternative.

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: call this when you already have an audit ID. However, the description never states the alternative (pinterest_ads_audit_tail for browsing recent entries) or what to do when the ID is unknown, leaving the agent to infer the routing decision from sibling names alone.

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

pinterest_ads_audit_tailShow recent audit log entriesB
Read-onlyIdempotent

Show the most recent audit log entries (writes and dry-run rehearsals).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/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 behavior is covered without the description. The description adds genuine value by stating the log contains dry-run rehearsals as well as writes, but it omits ordering (newest first?), what happens when more entries exist than the limit, and any retention window.

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?

A single front-loaded sentence with the scoping detail in parentheses; nothing is wasted and the key noun phrase comes first. Appropriate size for a one-parameter read tool.

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

Completeness3/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 format need not be explained, and annotations cover the safety profile. Still, for a tool whose only knob is a truncation limit, the definition leaves limit behavior and sibling routing unexplained, which are the two things an agent most needs here.

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

Parameters2/5

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

There is one parameter, 'limit', with a default of 20 and 0% schema description coverage, so the description carries the full burden of explaining it. The description never mentions 'limit' at all — no maximum, no statement about the default, and no clarification whether it truncates to the newest N entries. An agent must infer this entirely.

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 ('Show') plus a specific resource ('the most recent audit log entries'), with the added scope clarification that entries cover both writes and dry-run rehearsals. It does not differentiate itself from the sibling pinterest_ads_audit_lookup, so an agent cannot tell from the description alone which of the two audit tools to reach for.

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 'most recent' (recency-oriented inspection), and the dry-run mention hints at a post-rehearsal verification use case. However, there is no explicit when-to-use statement and no guidance on when to prefer pinterest_ads_audit_lookup instead, which is the obvious alternative in the sibling list.

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

pinterest_ads_batch_catalog_itemsChange catalog items in a batchA
Destructive

Create, update, upsert or delete catalog items in one batch (up to 1000).

operation: CREATE, UPDATE (change some attributes), UPSERT (send every attribute) or DELETE. items: [{"item_id": "SKU1", "attributes": {"price": "24.99 GBP", "availability": "in stock"}}]; DELETE needs only item_id. If a feed manages the catalog, Pinterest recommends changing items through the feed. DELETE needs confirm='DELETE'; more than PINTEREST_ADS_BULK_THRESHOLD items need confirm='APPLY'. Returns a batch_id to check with pinterest_ads_get_catalog_items_batch.

NameRequiredDescriptionDefault
itemsYes
confirmNo
countryYes
languageYes
operationYes
catalog_idNo
catalog_typeNoRETAIL
ad_account_idNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag destructive and non-idempotent, and the description adds materially: the 1000-item cap, the confirm='DELETE' requirement for deletions, the confirm='APPLY' requirement above PINTEREST_ADS_BULK_THRESHOLD, and that the call is asynchronous, returning a batch_id to poll with pinterest_ads_get_catalog_items_batch. That is real behavioral context an agent cannot get from the annotations.

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?

Dense and front-loaded — verbs and cap first, then the item shape, then the feed caveat, then the confirm gates, then the return value. Nothing is filler, though the trailing fragment about the return value reads as tacked on rather than integrated.

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

Completeness3/5

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

For an eight-parameter, destructive, non-idempotent batch mutation with no output schema and 0% schema description coverage, key gaps remain: the roles of catalog_id vs ad_account_id, what catalog_type defaults to and affects, and what country/language constrain. The operational and confirmation story is complete; the parameter story is not.

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 0%, so the description must carry the load. It does well on operation, items (with a concrete example object and the note that DELETE needs only item_id) and confirm, but country, language, catalog_id, catalog_type and ad_account_id get no explanation at all, leaving five of eight parameters undocumented anywhere.

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 opens with a specific verb set and resource: create/update/upsert/delete catalog items in a batch, with a size ceiling of 1000. That distinguishes it from list/get siblings such as pinterest_ads_get_catalog_items and from the feed-based pinterest_ads_ingest_catalog_feed path.

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

Usage Guidelines5/5

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

It spells out the four operations and what each means in practice (UPDATE changes some attributes, UPSERT sends every attribute), and it names an explicit alternative: if a feed manages the catalog, change items through the feed instead. The confirm gates tell the agent the exact conditions required before a destructive or bulk apply proceeds.

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

pinterest_ads_bulk_exportExport ad entities in bulkA
Read-only

Export ad entities in bulk (one background job), wait with progress, return rows.

entity_types: up to 6 of CAMPAIGN, AD_GROUP, PRODUCT_GROUP, AD, KEYWORD, LABEL, SCHEDULE. Pinterest exports active entities only. campaign_filter e.g. {"campaign_status": ["RUNNING"], "objective_type": ["SALES"]}. updated_since is a timestamp string to export only recent changes. Changes nothing in the account.

NameRequiredDescriptionDefault
max_rowsNo
entity_idsNo
entity_typesYes
poll_secondsNo
ad_account_idNo
updated_sinceNo
campaign_filterNo
timeout_secondsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive, and the description reinforces rather than contradicts them ('Changes nothing in the account'). It adds genuinely non-obvious behavior: a single background job, blocking poll-with-progress execution, active-entities-only export scope, and incremental export via updated_since. It omits what happens on timeout or when max_rows is hit.

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?

Front-loaded: what it does and how it runs come first, then parameter notes. The telegraphic fragment style is efficient, though the 'up to 6 ... CAMPAIGN, ..., SCHEDULE' sentence misfires by listing seven items against a stated cap of six, which costs clarity.

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

Completeness3/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 described, and the job/polling model is explained. However, for an 8-parameter tool with 0% schema coverage, the description leaves key operational behavior (poll_seconds, timeout_seconds, max_rows truncation, entity_ids scoping) undocumented.

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 0%, so the description must carry parameter meaning; it covers entity_types (enumerated values), campaign_filter (with a concrete example shape), and updated_since (timestamp semantics). Five of eight parameters — max_rows, entity_ids, poll_seconds, timeout_seconds, ad_account_id — get no explanation at all, and 'up to 6 of' followed by seven listed values is internally inconsistent.

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 ('Export ad entities in bulk') and adds the distinguishing execution model ('one background job', waits with progress, returns rows), which separates it from the many pinterest_ads_list_* siblings. It does not explicitly name an alternative tool, so sibling differentiation is implied 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?

Implies the use case (bulk multi-entity extraction) but never states when to prefer this over pinterest_ads_list_campaigns / list_ads / list_keywords, nor when not to use it. The 'Pinterest exports active entities only' note is a useful usage constraint but is a data caveat, not selection guidance.

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

pinterest_ads_bulk_upsertCreate or update entities in bulkA
Destructive

Create and/or update many ad entities in one asynchronous Pinterest bulk job.

create / update: objects with lists under campaigns, ad_groups, ads, product_groups (product group promotions: {"ad_group_id", "product_group_promotion"}), keywords ({"parent_id", "keywords"}), catalog_product_groups, labels or schedules. Each entry uses the same fields as the matching create or update tool (updates need id). Campaign create entries without a status are sent PAUSED.

Pinterest applies the job in the background and this server can't check every change, so it always needs confirm='APPLY' (confirm='ARCHIVE' if anything is set to ARCHIVED). Returns a request_id to follow with pinterest_ads_get_bulk_request.

NameRequiredDescriptionDefault
createNo
updateNo
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Well beyond the annotations, it discloses that the job is applied asynchronously in the background, that this server cannot verify every resulting change, that a confirm token of 'APPLY' (or 'ARCHIVE' when anything is archived) is mandatory, and that campaigns created without a status land PAUSED. It also states the return contract (a request_id) and the tool to poll it with. That is exactly the extra risk and side-effect context an agent needs for a destructive, non-idempotent write.

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?

Front-loaded with purpose, then payload shape, then safety/confirmation, then return value — a sensible progression with no filler sentences. The middle paragraph is dense and slightly run-on, but every clause carries information the caller could not get from the empty-parameter 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?

For a 4-parameter bulk mutation with an output schema present, the description covers the async lifecycle, the confirmation gate, default status behavior, and the poll target, so an agent can call it correctly. Remaining holes are the unexplained ad_account_id and the absence of any statement about what happens when both create and update are omitted.

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 0%, so the description must carry parameter meaning — and it largely does: it explains the shape of 'create' and 'update' as objects keyed by entity family, gives concrete example payloads for product group promotions and keywords, and specifies the confirm values APPLY vs ARCHIVE. The gap is ad_account_id, which is never mentioned, and the fact that nothing says at least one of create/update is expected.

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 first sentence gives a specific verb pair (create and/or update), a specific resource (many ad entities), and a distinguishing mode (one asynchronous Pinterest bulk job). That 'bulk, many entities, one job' framing separates it cleanly from the single-entity siblings such as pinterest_ads_create_campaigns and pinterest_ads_update_ads.

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?

The description establishes clear context for use: it enumerates the entity families it can batch (campaigns, ad_groups, ads, product_groups, keywords, catalog_product_groups, labels, schedules) and tells the caller that each entry mirrors the matching create/update tool, with updates needing an id. It also names the required follow-up tool (pinterest_ads_get_bulk_request). What it lacks is an explicit 'use this instead of N single calls when...' statement or an exclusion, so the when-not side is left implicit.

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

pinterest_ads_create_ad_groupsCreate ad groupsA

Create ad groups (up to 500 per call, sent 30 at a time). Changes the live account.

items: one object per ad group, sent as-is. Example: {"name": "UK women 25-44", "campaign_id": "626747269410", "billable_event": "CLICKTHROUGH", "bid_strategy_type": "AUTOMATIC_BID", "budget_in_micro_currency": 10000000, "budget_type": "DAILY", "targeting_spec": {"LOCATION": ["GB"], "GENDER": ["female"], "AGE_BUCKET": ["25-34", "35-44"]}}. For SALES or LEADS campaigns set "optimization_goal_metadata": {"conversion_tag_v3_goal_metadata": {"conversion_tag_id": "...", "conversion_event": "CHECKOUT"}} (CHECKOUT or ADD_TO_CART for SALES, SIGNUP or LEAD for LEADS). targeting_spec needs LOCATION or GEO. Use pinterest_ads_get_targeting_options for valid codes. Money fields (budget_in_micro_currency, bid_in_micro_currency) are micro-units of the account currency (1.00 = 1000000). Items without a status are created PAUSED. Large batches and values over PINTEREST_ADS_MAX_BUDGET/PINTEREST_ADS_MAX_BID need confirm='APPLY'. Rehearse with dry-run first.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, openWorld=true, idempotent=false, destructive=false), the description discloses the batch mechanics, that items land in PAUSED when status is omitted, the confirm gate for oversized batches/values, the dry-run rehearsal path, and the account-currency micro-unit convention. These are exactly the operational traits an agent needs before mutating a live account.

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?

The impact and limits are front-loaded in the first line, then parameters and conditional rules follow in short, information-dense sentences. Nothing is filler, though the example payload plus the goal-metadata rules make it longer than strictly minimal.

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 mutation tool with three parameters, zero schema coverage and an output schema already present, the description covers payload shape, defaults, limits, escalation rules and the dry-run workflow — nearly everything needed to call it correctly. The only omission is what ad_account_id does and when it must be supplied versus inferred.

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 0% and 'items' is a free-form object with additionalProperties, so the description carries the full burden — and it does: a worked example, required targeting_spec keys, optimization_goal_metadata shapes per campaign objective, and micro-currency math. The third parameter, ad_account_id, is never mentioned, which is the only real gap.

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 opens with a specific verb and resource ('Create ad groups'), states the batch ceiling (500 per call, 30 at a time) and the side effect ('Changes the live account'), so an agent can immediately tell this apart from list/update/archive ad-group tools. It never names a sibling explicitly, but the create-vs-update-vs-archive distinction is unambiguous from the verb.

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 real routing guidance: use pinterest_ads_get_targeting_options for valid codes, rehearse with dry-run first, and supply confirm='APPLY' for large batches or values above the max budget/bid. It does not state when to prefer this over update_ad_groups, but the create context is clear from the verb and the per-item payload description.

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

pinterest_ads_create_ad_pinCreate an ad-only PinA

Create an ad-only Pin from an image URL, to use as an ad's pin_id.

Ad-only Pins sit on a protected 'Ad-only Pins' board: they can't be saved by others or shown organically. Pass ad_account_id so the Pin belongs to that ad account's profile. ai_disclosures: ['AI_MODIFIED'] and/or ['SYNTHETIC_PERFORMER'] when the image was made or changed with AI. Needs the pins:write scope (run pinterest-ads-mcp auth --scopes with it). Trial-access apps create Pins only their creator can see.

NameRequiredDescriptionDefault
linkYes
titleNo
alt_textNo
board_idNo
image_urlYes
descriptionNo
ad_account_idNo
ai_disclosuresNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the side effects of creation: the Pin lands on a protected 'Ad-only Pins' board and cannot be saved by others or shown organically. It also names the required auth scope with the exact command to grant it, and warns that trial-access apps produce Pins only the creator can see — auth, visibility, and side-effect context the readOnly/openWorld hints do not 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?

Front-loads the verb and resource, then layers on constraints and auth in compact sentences with no filler. Slightly dense and mixes operational instructions (the auth command) with conceptual explanation, but every sentence earns its place.

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 hard parts of a creation tool: auth scope, visibility semantics, and AI-disclosure obligations. The gap is the under-documented optional params, particularly board_id, which sits awkwardly against the stated fact that ad-only Pins live on a protected system board.

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 0% schema description coverage across 8 params, the description must carry all meaning, and it only covers a subset: ad_account_id (ownership), ai_disclosures (with the valid values AI_MODIFIED and SYNTHETIC_PERFORMER), and image_url implicitly. The remaining params — link, title, alt_text, description, and especially board_id — get no explanation of their role or relationship to the protected ad-only board.

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 ("Create an ad-only Pin from an image URL") and immediately gives its downstream role ("to use as an ad's pin_id"), which separates it from pinterest_ads_create_ads and the general Pin/board readers in the sibling list. The follow-up sentence defines what an 'ad-only Pin' actually is, so the agent isn't guessing at the concept.

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?

Explains the context in which this tool is appropriate (ad creative supply, not organic posting) and gives an operational instruction to pass ad_account_id so the Pin belongs to the right profile. It stops short of explicitly routing the agent to pinterest_ads_create_ads as the next step, so the workflow is implied rather than stated.

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

pinterest_ads_create_adsCreate ads from PinsA

Create ads (up to 500 per call, sent 30 at a time). Changes the live account.

items: one object per ad, sent as-is. Example: {"ad_group_id": "2680059592705", "pin_id": "813744226420795884", "creative_type": "REGULAR", "name": "Red trainers", "destination_url": "https://example.com/red-trainers"}. The Pin must belong to the ad account's profile (find one with pinterest_ads_list_pins or make one with pinterest_ads_create_ad_pin). creative_type follows the Pin: REGULAR (image), VIDEO, MAX_VIDEO, CAROUSEL, IDEA, COLLECTION, SHOPPING, QUIZ. Ads go through Pinterest's review before they serve. Items without a status are created PAUSED. Large batches and values over PINTEREST_ADS_MAX_BUDGET/PINTEREST_ADS_MAX_BID need confirm='APPLY'. Rehearse with dry-run first.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the 30-at-a-time batching, that changes hit the live account, that items without a status default to PAUSED, that Pinterest review gates serving, and that confirm='APPLY' is an escalation gate for large batches and over-max budget/bid values. These are exactly the operational traits an agent needs before invoking a write tool.

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?

Front-loaded with the mutating action and batch limit, then the payload shape, then the review and confirmation rules. Dense and telegraphic in places (e.g. the creative_type list), but nearly every clause carries operational meaning.

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?

For a batch-write tool with an output schema already present, the definition supplies everything else an agent needs: payload shape, Pin ownership requirement, creative_type mapping, default status, review delay, confirmation gate, and dry-run path. No material gap remains for correct invocation.

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 0%, so the description carries the load — and it does for items, with a full example object, field names (ad_group_id, pin_id, creative_type, name, destination_url), the creative_type enum, and the PAUSED default. It also explains confirm's escalation rule. The ad_account_id parameter, however, is never explained, so the compensation is strong but not total.

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 ('Create ads') plus concrete scope (up to 500 per call, sent 30 at a time). The description clearly delineates this from siblings like pinterest_ads_create_ad_pin (which makes the Pin media) and pinterest_ads_create_campaigns/ad_groups.

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 actionable when-to-use context: find a Pin with pinterest_ads_list_pins or create one with pinterest_ads_create_ad_pin, rehearse with dry-run first, and use confirm='APPLY' for large batches or out-of-range budgets/bids. It stops short of explicitly contrasting create_ads with pinterest_ads_bulk_upsert or update_ads as the alternative for edits.

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

pinterest_ads_create_audienceCreate an audienceA

Create an audience for targeting. Changes the live account.

audience_type and rule, for example:

  • CUSTOMER_LIST: {"customer_list_id": "..."}

  • VISITOR: {"visitor_source_id": "", "retention_days": 30, "event": "checkout"}

  • ENGAGEMENT: {"engager_type": 1, "retention_days": 180}

  • ACTALIKE: {"seed_id": [""], "country": "GB", "percentage": 5} Use only data you have the rights and consents to use under Pinterest's Ad Data Terms.

NameRequiredDescriptionDefault
nameYes
ruleYes
descriptionNo
ad_account_idNo
audience_typeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is known. The description adds real value beyond that by stating "Changes the live account" and by imposing a compliance constraint (use only data you have rights and consents for under Pinterest's Ad Data Terms), which is a behavioral restriction an agent could not infer from structured fields. It still omits permission requirements and validation behavior for malformed rules.

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 blocks: the effect statement first, then a compact per-type rule reference. Every line of the example block supplies distinct, non-redundant information, and there is 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, so return values need not be explained, and the annotations cover idempotency and safety. For a 5-parameter mutation with a free-form nested object, the description supplies the hardest missing piece (the rule shape per type) plus the live-account and data-rights warnings; only the identity/account parameters remain unaddressed.

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 0% and the nested `rule` object is merely additionalProperties:true, so the description carries the full burden here — and it does so well by enumerating the four audience_type values and giving a concrete JSON rule shape for each. It leaves name, description, and ad_account_id (nullable, presumably a default-account fallback) undocumented, which keeps it short of a 5.

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 opens with a specific verb and resource ("Create an audience for targeting"), which is clearly distinct from sibling operations like get_audience, list_audiences, and update_audience. It does not explicitly name those siblings, but the create-vs-read/update split is unambiguous from the verb 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?

The audience_type examples imply which kind of audience to build and when each rule shape applies, which is genuinely helpful context. However, there is no explicit routing guidance against alternatives such as pinterest_ads_create_customer_list, update_audience, or estimate_audience_size, and no stated prerequisites (permissions, ad account requirements).

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

pinterest_ads_create_campaignsCreate campaignsA

Create campaigns (up to 500 per call, sent 30 at a time). Changes the live account.

items: one object per campaign, sent as-is. Example: {"name": "Spring sale", "objective_type": "SALES", "intended_promotion_type": "STANDARD_AD", "daily_spend_cap": 20000000, "is_campaign_budget_optimization": true}. objective_type is one of AWARENESS, CONSIDERATION, VIDEO_COMPLETION, SALES, LEADS, APP_INSTALL; SALES and CONSIDERATION take intended_promotion_type STANDARD_AD (ads from Pins) or CATALOG (product group promotions). start_time/end_time are Unix seconds. Money fields (daily_spend_cap, lifetime_spend_cap) are micro-units of the account currency (1.00 = 1000000). Items without a status are created PAUSED. Large batches and values over PINTEREST_ADS_MAX_BUDGET/PINTEREST_ADS_MAX_BID need confirm='APPLY'. Rehearse with dry-run first.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations by disclosing that items without a status are created PAUSED, that changes hit the live account, that requests are throttled 30 at a time within a 500 cap, and that over-limit values require an explicit confirm token. These are exactly the side effects and guardrails an agent cannot derive from readOnlyHint=false / idempotentHint=false.

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?

Front-loads the batch limit and live-account warning, then moves into item semantics, units, and the confirm/dry-run guardrails — a sensible order with almost no filler. It reads as a dense paragraph rather than separated sections, which makes scanning slightly harder, but every sentence carries 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?

For a mutation tool with a free-form item payload and an output schema present (so return values need no explanation), this covers limits, defaults, units, enums, and confirmation requirements. What's missing is the meaning/role of ad_account_id and any note on partial-failure behavior in a 500-item batch.

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

Parameters5/5

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

Schema coverage is 0% and items is a free-form object array, so the description carries the full burden — and it does: it gives an example item, enumerates objective_type values, states the SALES/CONSIDERATION → STANDARD_AD/CATALOG constraint, defines Unix-second timestamps, and defines micro-unit money fields. It also explains the confirm value required. Only ad_account_id is left uninterpreted, which is a minor residual gap.

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 (create campaigns) plus the batch scope (up to 500 per call, sent 30 at a time) and the effect on the live account. The verb makes the split from pinterest_ads_update_campaigns and pinterest_ads_archive_campaigns obvious without needing to open any 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 concrete operating conditions: rehearse with dry-run first, and confirm='APPLY' is needed for large batches and values above PINTEREST_ADS_MAX_BUDGET/PINTEREST_ADS_MAX_BID. It stops short of explicitly naming an alternative tool (e.g. bulk_upsert or request) or stating when not to use it, so the agent must infer routing from names alone.

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

pinterest_ads_create_customer_listUpload a customer listA

Upload a customer list (emails or mobile ad IDs) for targeting. Changes the account.

list_type: EMAIL (default), MAID, IDFA, LR_ID, DLX_ID or HASHED_PINNER_ID. Emails and ad IDs are trimmed, lower-cased and SHA-256 hashed here before sending (unless already hashed). Up to 50,000 identifiers per call. Only upload people who agreed to this use; then turn the list into an audience with pinterest_ads_create_audience.

NameRequiredDescriptionDefault
nameYes
list_typeNoEMAIL
identifiersYes
ad_account_idNo
hash_identifiersNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say this is a non-read-only, non-idempotent, non-destructive open-world write; the description adds real behavior: the account is mutated, identifiers are trimmed, lower-cased and SHA-256 hashed server-side unless already hashed, and there is a hard 50,000-identifier cap per call. Those are exactly the side effects an agent cannot infer from the hints.

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?

Dense and front-loaded: purpose, then mutation warning, then allowed types, then processing behavior and limits, then the next step. The standalone 'Changes the account.' line is terse but deliberate; nothing is redundant, though the paragraph could be broken into tighter lines for scannability.

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 five-parameter write tool with an output schema, the description covers purpose, mutation semantics, accepted types, preprocessing, batch limit, compliance, and the downstream step. Minor gaps: what 'name' is used for and how ad_account_id defaults when omitted.

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 0%, so the description must carry the load, and it does for the two most consequential fields: it enumerates list_type values including the EMAIL default, and explains that identifiers are hashed unless already hashed (implicitly tying to hash_identifiers). It leaves 'name' and 'ad_account_id' unexplained, which keeps it short of a 5.

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 ('Upload a customer list') plus the accepted identifier domains (emails or mobile ad IDs), which separates it cleanly from pinterest_ads_create_audience, pinterest_ads_update_customer_list and pinterest_ads_list_customer_lists. An agent can pick this tool 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 an explicit follow-up path ('then turn the list into an audience with pinterest_ads_create_audience') and a consent precondition, which frames when the call is appropriate. It does not explicitly contrast against update_customer_list for appending to an existing list, so routing there is left to inference.

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

pinterest_ads_create_keywordsAdd keywords to an ad groupA

Add targeting keywords to an ad group. Changes the live account.

keywords: strings (use match_type, default BROAD) or objects like {"value": "linen dress", "match_type": "PHRASE"}. Match types: BROAD, PHRASE, EXACT. More than PINTEREST_ADS_BULK_THRESHOLD keywords need confirm='APPLY'.

NameRequiredDescriptionDefault
confirmNo
keywordsYes
match_typeNoBROAD
ad_group_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, and the description adds real context beyond them: it warns that the call mutates a live account and documents a confirmation gate for bulk inserts. It still does not say whether existing keywords are merged or replaced, which matters given idempotentHint=false.

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?

Front-loaded with purpose and the live-account warning, then scoped detail on keyword format and match types. The unusual blank-line/stanza layout adds a little noise but nothing is redundant.

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 no explanation, and the description covers the mutation, the input shape, the enum values and the bulk confirmation requirement. The remaining gap is the role of ad_account_id and merge-vs-replace semantics in a non-idempotent write.

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 0%, so the description must carry the load, and it does cover the hardest parameter well: keyword input may be plain strings (using match_type) or objects like {"value": ..., "match_type": ...}, with BROAD/PHRASE/EXACT enumerated and confirm='APPLY' explained. ad_group_id, ad_account_id and the default value of the confirm field are left entirely to the bare 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 states a specific verb and resource ('Add targeting keywords to an ad group') and makes the effect explicit ('Changes the live account'). It does not name the sibling alternatives (create_negative_keywords, suggest_keywords, list_keywords), so an agent must infer the boundary, but the operation itself 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 Guidelines3/5

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

Usage is implied by 'Add targeting keywords to an ad group', and the bulk threshold rule ('More than PINTEREST_ADS_BULK_THRESHOLD keywords need confirm=APPLY') gives a concrete precondition. There is no explicit when-not guidance or pointer to sibling tools for listing, suggesting, or adding negative keywords.

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

pinterest_ads_create_negative_keywordsAdd negative keywordsA

Add negative keywords so ads don't show on those searches. Changes the live account.

parent_id: an ad group ID, a campaign ID (applies to every ad group in it) or the ad account ID (applies to the whole account). match_type: PHRASE_NEGATIVE (default) or EXACT_NEGATIVE. More than PINTEREST_ADS_BULK_THRESHOLD keywords need confirm='APPLY'.

NameRequiredDescriptionDefault
confirmNo
keywordsYes
parent_idYes
match_typeNoPHRASE_NEGATIVE
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds the material detail that this mutates the live account and that a confirmation token is needed past a bulk threshold — context that isn't in the annotations or schema. It doesn't say whether additions can be reverted or how failures are reported, which keeps it from 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.

Conciseness4/5

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

The effect and the live-account warning are front-loaded in one sentence, followed by tight per-parameter notes with no filler. The line-wrapped parameter block is slightly awkward to scan but nothing is redundant.

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 5-parameter mutation tool with annotations and an output schema, the description covers the critical hazards (live changes, bulk confirmation) and the two ambiguous fields. The remaining gap — undocumented ad_account_id and keywords item format — is minor but real given 0% schema coverage.

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 0%, so the description must carry parameter meaning; it does explain parent_id's three levels (ad group / campaign / ad account) and match_type's values and default. However, ad_account_id is never mentioned and the expected shape of the keywords array is left implicit, so it only partially compensates.

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 ('Add negative keywords') plus the observable effect ('so ads don't show on those searches'), which cleanly separates it from pinterest_ads_create_keywords and the archive/list keyword siblings. The scope sentence ('Changes the live account') further pins down what kind of operation it is.

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 when this applies (excluding searches) and a concrete prerequisite: bulk requests above PINTEREST_ADS_BULK_THRESHOLD require confirm='APPLY'. It does not explicitly name an alternative tool or say when not to use it (e.g. vs pinterest_ads_create_keywords), so it stops short of full routing guidance.

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

pinterest_ads_create_product_groupCreate a product groupB

Create a catalog product group. Changes the account.

product_group, for a retail catalog: {"catalog_id": "...", "catalog_type": "RETAIL", "country": "GB", "locale": "en-GB", "name": "Trainers under 50", "filters": {"all_of": [{"PRODUCT_TYPE_0": {"values": ["shoes"]}}, {"MAX_PRICE": {"values": 50, "inclusion": true}}]}}. Feed-based groups use feed_id instead of catalog_id.

NameRequiredDescriptionDefault
ad_account_idNo
product_groupYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, open-world, non-idempotent mutation, so 'Changes the account' largely restates readOnlyHint=false. Beyond that, the description discloses nothing about required permissions/scopes, what happens on duplicate names (relevant since idempotentHint=false), or what identifier is returned, which are the behaviors an agent actually needs.

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?

The prose is two tight sentences front-loading the action and the account-mutation note, and the example earns its space for a free-form nested object. The multi-line JSON wrapping is slightly awkward to parse but contains no filler.

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

Completeness3/5

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

For a create tool with a nested free-form required object, no output schema, and no documented return value, the definition is only partially complete: it omits ad_account_id handling and any statement of what is returned (e.g., the new product group ID) or the catalog-vs-feed prerequisite chain. The payload example compensates for the biggest gap but not all of them.

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 0% schema description coverage the description must carry the parameter burden, and it does supply a concrete, annotated product_group example with catalog_id, country, locale, name, and nested filters/all_of clauses. However, ad_account_id is never mentioned, and the filters semantics (all_of, inclusion) are shown only by example rather than explained.

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 opens with a specific verb+resource: 'Create a catalog product group,' which is clearly distinguishable from the sibling update/delete/list product group tools. It does not explicitly name those alternatives, but the create verb leaves no ambiguity about the operation.

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 context is only implied; there is no explicit 'use this when... do not use this for...' guidance relative to update_product_group or the promotion tools. The one conditional hint ('Feed-based groups use feed_id instead of catalog_id') gives useful branch guidance but is buried inside the payload example rather than stated as a rule.

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

pinterest_ads_create_product_group_promotionsCreate product group promotionsA

Promote catalog product groups in an ad group (catalog ads). Changes the live account.

items: e.g. [{"catalog_product_group_id": "1231235", "creative_type": "SHOPPING", "bid_in_micro_currency": 1200000}]. Use with SALES or CONSIDERATION campaigns whose intended_promotion_type is CATALOG. Items without a status are created PAUSED. Values over PINTEREST_ADS_MAX_BID and large batches need confirm='APPLY'.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_group_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag a non-read-only, non-destructive, non-idempotent open-world write, so the bar is lower. The description still adds value beyond them: it warns that the live account changes, that items without a status are created PAUSED, and that bids above PINTEREST_ADS_MAX_BID or large batches require confirm='APPLY' — a real safety gate the schema does not express.

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 purpose and blast-radius warning are front-loaded in the first sentence, followed by the example and the confirm rule. Every sentence tightens a decision the caller must make; there is 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?

With an output schema present, return values need not be described, and the mutation path, default status, and confirm escalation are all covered. The only real hole is ad_account_id semantics for a tool that touches a live 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 0%, so the description carries the burden. It does well on 'items' (a worked example with catalog_product_group_id, creative_type, bid_in_micro_currency) and on confirm (APPLY required for oversized bids/batches), but never explains ad_account_id or how ad_group_id is resolved, leaving one of four parameters undocumented.

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 (promote catalog product groups in an ad group) and parenthesizes the ad product ('catalog ads'), which separates it from the plain create_product_group sibling. It does not explicitly contrast with list/update_product_group_promotions, but the create framing is unmistakable.

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 states a concrete precondition: use with SALES or CONSIDERATION campaigns whose intended_promotion_type is CATALOG. That is a real when-to-use gate. It stops short of naming siblings to use instead (e.g. update_product_group_promotions for edits, set_dry_run for rehearsal).

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

pinterest_ads_create_reportRequest an ads reportA
Read-only

Request an ads report. Pinterest builds it in the background: poll pinterest_ads_get_report with the returned token, then call pinterest_ads_download_report (or use pinterest_ads_run_report to do all three). Changes nothing in the account.

level: ADVERTISER, CAMPAIGN, AD_GROUP, PIN_PROMOTION (ads), KEYWORD, PRODUCT_GROUP, PRODUCT_ITEM, or a *_TARGETING level with targeting_types (up to 5, e.g. ['LOCATION']). Dates are YYYY-MM-DD; granularity TOTAL, DAY, WEEK, MONTH or HOUR. filters adds other request fields, e.g. {"campaign_ids": ["..."], "campaign_statuses": ["RUNNING"]} (campaign_objective_types should include SALES and LEADS, not only the retiring CATALOG_SALES and WEB_CONVERSION). report_format JSON (default) or CSV. To re-run a report saved in Ads Manager, pass template_id (see pinterest_ads_list_report_templates) with dates and granularity only.

Common columns: SPEND_IN_DOLLAR (account currency, despite the name), PAID_IMPRESSION, IMPRESSION_1, CLICKTHROUGH_1 (Pin clicks), OUTBOUND_CLICK_1, CTR, OUTBOUND_CTR_1, CPC_IN_MICRO_DOLLAR, CPM_IN_DOLLAR, TOTAL_ENGAGEMENT, TOTAL_CONVERSIONS, TOTAL_CHECKOUT, TOTAL_CHECKOUT_VALUE_IN_MICRO_DOLLAR, CHECKOUT_ROAS, TOTAL_ADD_TO_CART, TOTAL_LEAD, TOTAL_SIGNUP, CAMPAIGN_NAME, CAMPAIGN_ID. _1 metrics are paid, _2 earned (saves of ads). pinterest_ads_list_metrics lists every column with its definition. HOUR granularity no longer includes conversion metrics.

NameRequiredDescriptionDefault
levelNo
columnsNo
filtersNo
end_dateYes
start_dateYes
granularityNoDAY
template_idNo
ad_account_idNo
report_formatNoJSON
targeting_typesNo
view_window_daysNo
click_window_daysNo
reporting_timezoneNo
conversion_report_timeNo
engagement_window_daysNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Changes nothing in the account' while adding behavior annotations cannot express: the report is built in the background and requires polling plus a token handoff. It also discloses temporal quirks such as HOUR granularity no longer including conversion metrics, and warns that campaign_objective_types should include SALES and LEADS rather than the retiring values.

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?

The workflow and the 'changes nothing' reassurance are front-loaded, and the parameter guidance is grouped sensibly (level → dates → granularity → filters → format → template). The long column glossary is genuinely useful for choosing report columns, though it is dense enough to make the description read as a wall of text.

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?

For an async report-creation tool with 15 parameters and an output schema, the description covers the lifecycle, the sibling handoffs, the level/granularity/format choices, and common column semantics. Attribution-window parameters are the only notable omission, and the pointer to pinterest_ads_list_metrics for full column definitions closes the other documentation loop.

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 0%, so the description carries the full burden, and it does substantial work: valid level values, the ≤5 targeting_types link to *_TARGETING levels, date format YYYY-MM-DD, granularity enum, the shape of filters with concrete campaign_ids/campaign_statuses examples, report_format JSON/CSV, and template_id semantics. Six parameters remain unexplained — ad_account_id, view_window_days, click_window_days, engagement_window_days, reporting_timezone, and conversion_report_time — which is the main gap for a 15-parameter tool.

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?

Opens with a specific verb+resource ('Request an ads report') and immediately scopes it as an async job rather than an inline result. It distinguishes itself from pinterest_ads_get_report, pinterest_ads_download_report, and pinterest_ads_run_report by naming them and their roles, so an agent can place this tool in a workflow without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit decision path: call this, poll pinterest_ads_get_report with the returned token, then pinterest_ads_download_report — or use pinterest_ads_run_report to collapse all three. It also names an alternative mode (template_id for saved Ads Manager reports, with a pointer to pinterest_ads_list_report_templates) and the constraints on that mode (dates and granularity only).

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

pinterest_ads_delete_audienceRemove an audienceA
DestructiveIdempotent

Remove an audience. Ad groups targeting it lose that targeting, and it can't be undone, so this needs confirm='DELETE' after the user agrees.

NameRequiredDescriptionDefault
confirmNo
audience_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the bar for added context is higher, and the description clears it. It discloses the real-world blast radius (ad groups targeting the audience lose that targeting), states the operation is irreversible, and specifies the exact confirmation token required, plus the human-consent gate.

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, both earning their place: the first states the action, the second front-loads consequences and then the confirmation requirement. No filler or 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?

For a destructive, irreversible mutation with an output schema that covers return values, the description supplies impact, reversibility, and the confirmation protocol, which is nearly everything an agent needs. The only gap is the role of the optional ad_account_id context parameter.

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 0%, so the description must carry the parameter burden, and it does for the one genuinely non-obvious parameter: confirm must equal the literal "DELETE". The audience_id and optional ad_account_id are not elaborated, but their meaning is largely evident from their names.

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 opens with a specific verb+resource ("Remove an audience"), which is unambiguous against siblings like pinterest_ads_get_audience, pinterest_ads_update_audience and pinterest_ads_list_audiences. It stops short of distinguishing removal from archival semantics, which is the only nearby ambiguity, so it lands just under full marks.

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 usage precondition: the call requires confirm="DELETE" and only after the user has agreed, which tells an agent the surrounding workflow. It does not explicitly contrast with update_audience or archive-style alternatives, so it is clear context rather than a full when/when-not rule set.

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

pinterest_ads_delete_product_groupDelete a product groupA
DestructiveIdempotent

Delete a catalog product group. Ads promoting it stop, and it can't be undone, so this needs confirm='DELETE' after the user agrees.

NameRequiredDescriptionDefault
confirmNo
ad_account_idNo
product_group_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: the downstream consequence that ads promoting the group stop, and the irreversible nature of the operation. It also surfaces the confirm-token gate, which appears nowhere in the 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?

Two sentences, no filler. The operation and its destructive effect come first, with the confirmation requirement front-loaded in the second 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 destructive three-parameter mutation with no output schema, the description covers the essentials an agent needs: consequence, irreversibility, and the confirmation protocol. Only the ad_account_id parameter (likely optional/derived) is left unaddressed.

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 0%, so the description must carry the burden, and it only explains one of three parameters — the exact value required for confirm ('DELETE'), which is genuinely useful given the empty-string default. ad_account_id remains unexplained, and product_group_id is only implied by the tool name.

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: 'Delete a catalog product group.' The catalog/product-group scope cleanly separates it from the sibling set (list/create/update_product_group, delete_audience) without ambiguity about what operation is performed.

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 precondition: the call requires confirm='DELETE' and only after the user agrees. It does not name an alternative path (e.g., pause via update_product_group if the user only wants ads to stop), which is the one missing routing hint.

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

pinterest_ads_describe_serverDescribe the server configurationA
Read-onlyIdempotent

Show which API host, default ad account and safety settings this server uses.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is fully covered. The description adds content scope (API host, default ad account, safety settings) but nothing further about behavior; output details are covered by the output schema, so this is adequate rather than 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?

A single, front-loaded sentence with no filler. Every element (host, default account, safety settings) carries information about the return payload.

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 zero-argument read-only introspection tool with an output schema, naming the config categories it surfaces is sufficient to call it correctly. Only the relationship to the other diagnostics tools (health_check, audit_lookup) is left unstated.

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 there is no parameter semantics for the description to explain. Baseline 4 applies; nothing is misleading or missing.

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?

"Show which API host, default ad account and safety settings this server uses" gives a specific verb plus the exact contents of the report, so an agent knows this is a configuration introspection call. It does not name sibling diagnostics (health_check, audit_lookup) to sharpen the boundary, but the resource 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 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 it should call this to inspect server state before acting. There is no statement about when to prefer it over pinterest_ads_health_check or pinterest_ads_audit_lookup, nor any note that it requires no ad account context.

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

pinterest_ads_download_reportDownload a finished reportA
Read-onlyIdempotent

Download a FINISHED report and return its rows (up to max_rows), held in memory only.

row_count is the full count; truncated says whether rows were cut to max_rows. report_format must match the one the report was requested in.

NameRequiredDescriptionDefault
tokenYes
max_rowsNo
ad_account_idNo
report_formatNoJSON

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), so the description's added context is the differentiator: results are held in memory only, and row_count/truncated disclose how truncation to max_rows is signalled. That is useful behavior beyond the structured fields, though it omits what happens on a format mismatch or a non-finished report.

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 download action and scope, then the truncation semantics and format constraint. No redundant restatement of the name or title; every clause conveys information an agent needs.

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 only be described at the level of row_count/truncated, which the description does. The remaining gap is the undocumented token/ad_account_id parameters and the absence of any note on error conditions for a not-yet-finished report.

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 0% across four parameters, so the description must carry the load. It explains max_rows (via the truncation mechanism) and report_format (must match the original request), but says nothing about token or ad_account_id, leaving half the parameters undocumented anywhere.

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?

Uses a specific verb (Download) and resource (report) and adds a discriminating qualifier: the report must be FINISHED, which separates it from the sibling create_report/get_report/run_report tools by lifecycle stage. It does not name those siblings explicitly, so the disambiguation is implied 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?

The capitalised FINISHED and the note that report_format must match the requested format imply a pre-condition and a sequencing rule (create/run first, then download). However, there is no explicit when-to-use vs pinterest_ads_get_report guidance and no stated failure behavior if the report is still running.

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

pinterest_ads_estimate_audience_sizeEstimate audience sizeB
Read-onlyIdempotent

Estimate how many people an ad group's targeting would reach. Changes nothing.

targeting_spec as in ad group create, e.g. {"LOCATION": ["GB"], "AGE_BUCKET": ["25-34"]}. keywords: [{"value": "linen dress", "match_type": "BROAD"}].

NameRequiredDescriptionDefault
keywordsNo
ad_account_idNo
creative_typesNo
targeting_specYes
product_group_idsNo
auto_targeting_enabledNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/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 'Changes nothing' largely restates them rather than adding new information. The description does add the useful behavioral framing that this is a prospective reach estimate rather than a stored audience, but says nothing about result variance, latency, or minimum audience thresholds.

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 short sentences, front-loaded with the purpose, followed by compact inline examples that earn their space. The trailing example block is slightly terser than it could be but contains no filler.

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

Completeness3/5

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

With six parameters, nested objects, and zero schema description coverage, the definition should do more: four optional parameters are undocumented and there is no note on what the estimate response contains beyond the existence of an output schema. It is adequate for the required parameter but incomplete for the full surface.

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 0% across six parameters, so the description carries real weight, and it correctly supplies concrete examples for targeting_spec and keywords shapes. However, ad_account_id, creative_types, product_group_ids and auto_targeting_enabled are left entirely unexplained in both schema and description, leaving the compensation partial.

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?

'Estimate how many people an ad group's targeting would reach' is a specific verb plus resource and clearly separates this tool from the creation/mutation siblings (create_ad_groups, get_audience). It does not explicitly name a sibling to contrast with, so it stops short of a 5.

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?

Mentioning 'targeting_spec as in ad group create' implies the pre-flight/validation workflow before creating an ad group, but there is no explicit when-to-use, when-not-to-use, or named alternative such as get_audience_insights. Usage is inferred rather than stated.

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

pinterest_ads_get_ad_accountGet an ad accountB
Read-onlyIdempotent

Get one ad account: name, currency, country, time zone, owner and permissions.

NameRequiredDescriptionDefault
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered elsewhere. The description adds the returned field set as context but says nothing about the effect of a null/missing ad_account_id, required access/permissions, or error behavior for an unknown ID.

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?

A single front-loaded sentence with no filler and the core action stated first. The trailing field list arguably duplicates the output schema, which is minor waste but does not obscure the purpose.

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

Completeness3/5

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

Because an output schema exists, the description need not enumerate return values, and annotations cover safety, so the tool does not need a long description. However, for a lookup keyed on an optional, nullable ID, the definition should clarify how the target account is resolved when the parameter is absent.

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

Parameters2/5

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

Schema description coverage is 0% for the single parameter, so the description carries the full burden and fails to compensate: ad_account_id is never mentioned. The listing of returned fields describes output, not the input, which is already covered by the output schema. The nullable-with-null-default behavior of the identifier is left entirely unexplained.

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?

"Get one ad account" states a specific verb and singular resource, and the qualifier "one" implicitly separates it from the sibling pinterest_ads_list_ad_accounts. The field list (name, currency, country, time zone, owner, permissions) further pins down what is returned, though the sibling is never named explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says to call this when you already have an ad account ID versus calling pinterest_ads_list_ad_accounts to discover one. It also gives no prerequisites or hint about what happens when ad_account_id is omitted, despite that parameter being nullable with a null default.

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

pinterest_ads_get_analyticsGet ads analyticsA
Read-onlyIdempotent

Get ads metrics right away (synchronous) for the ad account, or for up to 250 campaigns, ad groups, ads or product groups. Changes nothing.

level: account, campaign, ad_group, ad or product_group (ids required except for account). Dates are YYYY-MM-DD. granularity: TOTAL, DAY, WEEK, MONTH or HOUR. targeting_types breaks results down by targeting, e.g. ['LOCATION'], ['KEYWORD'], ['AGE_BUCKET_AND_GENDER'] (not for product groups). Attribution windows default to Pinterest's (30-day click and engagement, 1-day view); conversion_report_time TIME_OF_AD_ACTION (default) or TIME_OF_CONVERSION; reporting_timezone PINTEREST_TIME_ZONE (UTC, default) or AD_ACCOUNT_TIME_ZONE.

Common columns: SPEND_IN_DOLLAR (account currency, despite the name), PAID_IMPRESSION, IMPRESSION_1, CLICKTHROUGH_1 (Pin clicks), OUTBOUND_CLICK_1, CTR, OUTBOUND_CTR_1, CPC_IN_MICRO_DOLLAR, CPM_IN_DOLLAR, TOTAL_ENGAGEMENT, TOTAL_CONVERSIONS, TOTAL_CHECKOUT, TOTAL_CHECKOUT_VALUE_IN_MICRO_DOLLAR, CHECKOUT_ROAS, TOTAL_ADD_TO_CART, TOTAL_LEAD, TOTAL_SIGNUP, CAMPAIGN_NAME, CAMPAIGN_ID. _1 metrics are paid, _2 earned (saves of ads). pinterest_ads_list_metrics lists every column with its definition. HOUR granularity no longer includes conversion metrics.

NameRequiredDescriptionDefault
idsNo
levelYes
columnsYes
end_dateYes
start_dateYes
granularityNoTOTAL
ad_account_idNo
targeting_typesNo
view_window_daysNo
attribution_typesNo
click_window_daysNo
reporting_timezoneNo
conversion_report_timeNo
engagement_window_daysNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly, idempotent, and non-destructive annotations, the description adds substantial behavioral detail: synchronous execution, the 250-entity limit, default attribution windows, reporting timezone behavior, conversion_report_time options, and the caveat that HOUR granularity no longer includes conversion metrics. It also explains metric naming conventions such as _1 paid versus _2 earned.

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?

The description is front-loaded with purpose, scope, and key constraints, and the line breaks make the dense parameter guidance readable. It is necessarily detailed for a 14-parameter tool with no schema descriptions, though the long common-column list could be slightly leaner given the explicit pointer to pinterest_ads_list_metrics.

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 complex analytics tool with no output schema and no parameter descriptions, the definition supplies enough context to call it correctly: scope, required ids, date format, granularity, attribution defaults, timezone and conversion settings, column examples, and known limitations. A few optional parameters and response-shape details remain unaddressed, keeping it short of fully complete.

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?

With 0% schema description coverage, the description compensates well by explaining level values, date format, granularity values, targeting_types examples and exclusions, attribution window defaults, reporting timezone choices, and column semantics. It still leaves some optional parameters such as ad_account_id and the explicit attribution window/type parameters less directly explained.

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 uses a specific verb and resource, 'Get ads metrics', and immediately states the scope: synchronous metrics for an ad account or up to 250 campaigns, ad groups, ads, or product groups. It also distinguishes the operation from report-style workflows by emphasizing 'right away (synchronous)' and 'Changes nothing'.

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 specifying synchronous retrieval, supported levels, id requirements, date formats, granularity choices, and some exclusions such as targeting_types not being for product groups. It does not explicitly compare itself with asynchronous siblings like create_report or run_report, so the when-to-use-versus-alternatives guidance is clear but not complete.

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

pinterest_ads_get_audienceGet an audienceC
Read-onlyIdempotent

Get one audience: type, rule, size and status.

NameRequiredDescriptionDefault
audience_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/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 fully covered. The description's only addition is a recap of returned fields, which duplicates the output schema rather than adding behavioral context (not-found behavior, account scoping, or access requirements).

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?

A single short sentence, front-loaded with no filler. It is efficient, though the brevity borders on under-specification rather than true conciseness.

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

Completeness2/5

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

The output schema exists, so not explaining return shape in detail is acceptable. However, with zero schema documentation on both parameters and no usage routing among four audience-related siblings, the definition leaves the agent without enough to call this confidently.

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

Parameters1/5

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

Schema description coverage is 0% for two parameters, and the description says nothing about either. It never explains that audience_id identifies the audience being fetched or what ad_account_id is for or when it is needed.

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 ('Get one audience') and identifies the fields returned (type, rule, size, status). 'One' implicitly contrasts with the sibling list_audiences, though that contrast is never made explicit.

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

Usage Guidelines2/5

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

No guidance on when to use this instead of pinterest_ads_list_audiences, pinterest_ads_get_audience_insights, or pinterest_ads_estimate_audience_size. No mention that ad_account_id may be required for some audience types, so the agent has no conditions to reason about.

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

pinterest_ads_get_audience_insightsGet audience insightsB
Read-onlyIdempotent

Interests and demographics of the account's audience over the last 30 days.

audience_insight_type: YOUR_ENGAGED_AUDIENCE (default), YOUR_TOTAL_AUDIENCE or PINTEREST_TOTAL_AUDIENCE. Aggregated data only; don't use it for competitor or platform benchmarking.

NameRequiredDescriptionDefault
ad_account_idNo
audience_insight_typeNoYOUR_ENGAGED_AUDIENCE

TDQS

B3.4/5.0
Behavior3/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 operation. The description adds valuable behavioral context by specifying the 30-day window and aggregated-only limitation, but it says little about data freshness, rate limits, or response structure.

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?

The description is short, front-loaded, and wastes little space. The parameter explanation is useful, though the formatting is somewhat fragmented.

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

Completeness3/5

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

For a simple read-only insights tool, the description covers the key data scope and one parameter well. It is still incomplete because ad_account_id is undocumented and there is no output schema to clarify return values.

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 0%, so the description must compensate. It fully documents the audience_insight_type values and default, which is valuable, but it does not explain ad_account_id or its optionality.

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 resource and scope: interests and demographics of the account's audience over the last 30 days. It does not explicitly distinguish this from nearby sibling tools such as pinterest_ads_get_audience or pinterest_ads_estimate_audience_size.

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 a useful exclusion: aggregated data only, not for competitor or platform benchmarking. However, it does not explain when to choose this over sibling audience or analytics tools.

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

pinterest_ads_get_bid_floorsGet minimum bidsA
Read-onlyIdempotent

Get the minimum bids Pinterest accepts for ad groups. Changes nothing.

bid_floor_specs: e.g. [{"billable_event": "CLICKTHROUGH", "objective_type": "CONSIDERATION", "creative_type": "REGULAR", "countries": ["GB"], "currency": "GBP"}]. targeting_spec is optional, as in ad group create. Values are micro-units (1.00 = 1000000).

NameRequiredDescriptionDefault
ad_account_idNo
targeting_specNo
bid_floor_specsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/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 open-world, so 'Changes nothing' is largely redundant. The description does add genuine behavioral context: results are in micro-units (1.00 = 1000000) and targeting_spec follows the same shape as ad-group create, which matters for interpreting and constructing calls.

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?

Purpose is front-loaded in one sentence, followed by a short param note and example. The example earns its place, though the two-sentence split around the example is slightly awkward rather than maximally tight.

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

Completeness3/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 not required, and the key param is illustrated. Still missing is any treatment of ad_account_id and any explicit routing relative to adjust_ad_group_bids, which an agent needs to sequence bid-floor lookup with bid changes.

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 0%, so the description must carry the load. It gives a concrete example object for the required bid_floor_specs and explains the micro-unit convention, but says nothing about ad_account_id and only one clause for targeting_spec, so the compensation is partial.

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 ('Get the minimum bids Pinterest accepts for ad groups') and adds a scope note ('Changes nothing') that separates it from the bid-mutating siblings like adjust_ad_group_bids. It does not name a sibling explicitly, so it stops 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?

'Changes nothing' implies this is the read-only way to learn the accepted floor before setting bids, and it notes targeting_spec is 'optional, as in ad group create'. But there is no explicit when-to-use/when-not guidance or named alternative, leaving the agent to infer the workflow.

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

pinterest_ads_get_bulk_requestCheck a bulk jobB
Read-onlyIdempotent

Status of a bulk upsert or bulk export: RUNNING, SUCCEEDED or FAILED.

With download=true and status SUCCEEDED, fetches the result file and returns its rows (up to max_rows), held in memory only.

NameRequiredDescriptionDefault
downloadNo
max_rowsNo
request_idYes
ad_account_idNo
include_detailsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/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, open-world behavior, and the description adds genuinely new context: the three terminal/intermediate states, the fact that a result file is only fetched when download=true AND status is SUCCEEDED, and that rows are held in memory only (i.e. not persisted). It does not say what happens if download=true while status is still RUNNING, nor whether max_rows truncates silently.

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 short sentences, front-loaded with the status enumeration, with no filler. The second sentence is slightly dense in packing the download gate, the status precondition, the row cap, and the memory-only caveat into one clause.

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

Completeness3/5

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

The output schema relieves the description of explaining return shape, and the status/download semantics are covered. However, for a five-parameter tool with zero schema coverage, leaving ad_account_id and include_details unexplained and not describing behavior when max_rows truncates or when download is requested on a non-SUCCEEDED job leaves real gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains download and max_rows (a row cap, in-memory) and implies request_id is the bulk job identifier, but says nothing about ad_account_id or include_details, two of the five parameters. Half the surface remains undocumented in both schema and description.

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 resource (“bulk upsert or bulk export”) and a specific operation (fetching its status), and enumerates the possible states RUNNING, SUCCEEDED, FAILED. It implicitly pairs with the bulk_upsert/bulk_export siblings but never names them as the tools that create the request_id being polled, so routing 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?

The download=true condition combined with status SUCCEEDED gives one concrete conditional path, but there is no explicit statement that this is the polling tool to call after pinterest_ads_bulk_export or pinterest_ads_bulk_upsert, nor guidance on when to stop polling or how it differs from read_request. Usage is implied rather than prescribed.

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

pinterest_ads_get_catalog_itemsLook up catalog itemsC
Read-onlyIdempotent

Look up catalog items by item ID (your feed's id column). Changes nothing.

country e.g. 'GB', language e.g. 'en-GB' or 'EN'. Up to 100 item IDs.

NameRequiredDescriptionDefault
countryYes
item_idsYes
languageYes
catalog_idNo
catalog_typeNoRETAIL
ad_account_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent and non-destructive, so 'Changes nothing' is largely redundant. The genuinely additive detail is the 'Up to 100 item IDs' batch ceiling and the accepted country/language formats, which are behavioral constraints not present in the annotations or schema.

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

Conciseness3/5

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

Very short and purpose-first, which is good, but the second paragraph is a dangling fragment with no subject ('country e.g. ... language e.g. ...') that reads as a stripped schema hint rather than a sentence. It could be reformatted as one clear sentence about accepted formats and the 100-ID cap.

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

Completeness2/5

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

For a 6-parameter tool with zero schema coverage and no output schema, the definition covers only the three required parameters. It never explains when catalog_id or ad_account_id must be supplied or what catalog_type='RETAIL' means, and it doesn't distinguish this tool from the batch item siblings, leaving real ambiguity.

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 0%, so the description carries the burden. It clarifies item_ids (feed id column, max 100), country ('GB') and language ('en-GB'/'EN') formats, but leaves catalog_id, catalog_type (default RETAIL) and ad_account_id completely unexplained, which is half the parameter set.

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 ('Look up catalog items by item ID') and adds the useful disambiguation that the ID is the feed's 'id column'. It does not name the closely related siblings (get_catalog_items_batch, batch_catalog_items), so an agent must infer which lookup variant to use.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no exclusions. With several sibling tools operating over the same catalog item space (batch_catalog_items, get_catalog_items_batch, list_item_issues), the description never says when this single-batch lookup is preferred over those alternatives.

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

pinterest_ads_get_catalog_items_batchCheck a catalog item batchB
Read-onlyIdempotent

Status of an item batch: whether it finished, and any per-item errors.

NameRequiredDescriptionDefault
batch_idYes
ad_account_idNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the description's job is lighter. It adds useful return-content context (finished flag, per-item errors) but says nothing about polling cadence, retention of batch results, or what happens for an unknown/expired batch_id.

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?

A single tight sentence with the key information (status, errors) front-loaded and no filler. It is arguably too terse for a tool with two undocumented parameters, but nothing in it is wasted.

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

Completeness3/5

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

With no output schema the description usefully sketches the return payload (finish state, per-item errors), which covers the most important gap. However, for a tool with 0% schema description coverage and an unexplained optional account parameter, the definition is thinner than the tool's surface warrants.

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

Parameters2/5

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

Schema description coverage is 0%, so both parameters rely entirely on the description, which mentions neither. batch_id is required and reasonably self-evident, but the optional ad_account_id is left completely unexplained—an agent cannot tell whether it is needed for scoping or when to omit it.

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 the resource (an item batch) and the specific information returned: completion status plus per-item errors. That is far more informative than a restatement of the name, though it never explicitly distinguishes it from the sibling that creates batches (pinterest_ads_batch_catalog_items).

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 poll-after-submit counterpart to pinterest_ads_batch_catalog_items, but the description never says when to call it, whether it should be polled until finished, or how it differs from pinterest_ads_list_item_issues.

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

pinterest_ads_get_conversion_tagGet a conversion tagB
Read-onlyIdempotent

Get one conversion tag: name, status, last fired time and configuration.

NameRequiredDescriptionDefault
ad_account_idNo
conversion_tag_idYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description contributes only the shape of the returned record; it adds nothing about authentication requirements, rate limits, or what happens when the tag is missing or inaccessible.

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?

A single front-loaded sentence with no filler; the verb and resource come first and the returned fields follow as a compact enumeration. Nothing could be removed without losing information.

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

Completeness3/5

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

For a simple two-parameter read tool with full annotation coverage and no output schema, the description is nearly sufficient: it tells the agent what comes back and implies the lookup-by-ID pattern. The gap is the undocumented ad_account_id and the lack of any note on behavior for missing tags, which is meaningful given 0% schema description coverage.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does not: it never explains that conversion_tag_id is the identifier of the tag to retrieve nor what ad_account_id is for, why it is optional, or that it defaults to null. The only partial mapping is the word 'tag' implying the ID selects a tag, leaving the optional account-scoping parameter entirely undocumented in both schema and description.

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 ('Get one conversion tag') and enumerates the returned fields (name, status, last fired time, configuration), which clearly separates it from a bulk-list operation. It does not explicitly name the sibling pinterest_ads_list_conversion_tags, but the singular 'one' paired with a required ID makes the distinction obvious.

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: 'Get one' combined with a required conversion_tag_id suggests fetching a single known tag rather than enumerating tags. There is no explicit when-to-use versus list_conversion_tags, no mention of prerequisites such as permissions or account scope, and no guidance on error behavior for an unknown ID.

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

pinterest_ads_get_keyword_metricsGet keyword search volumeA
Read-onlyIdempotent

Monthly search volume on Pinterest for keywords in one country (e.g. 'GB', 'US').

Up to 2000 keywords. Aggregated across Pinterest; use it to size keyword ideas.

NameRequiredDescriptionDefault
keywordsYes
country_codeYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (read-only, idempotent, non-destructive, open-world), so the bar is lower. The description adds genuinely useful behavior: monthly granularity, a hard cap of 2000 keywords per call, and that results are aggregated across Pinterest rather than scoped to an ad account.

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 short sentences with the core metric front-loaded and the constraint and usage hint following. No filler, though the parenthetical country examples are largely schema-redundant.

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 described, and the description covers granularity, limits and aggregation. The only real hole is the unaddressed ad_account_id parameter, which conflicts conceptually with the 'aggregated across Pinterest' framing.

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 0%, so the description must carry parameter meaning. It successfully clarifies country_code (single country, examples 'GB'/'US') and the keywords limit, but leaves ad_account_id completely unexplained — and that omission is especially confusing since the description says results are aggregated across all of Pinterest, implying the account id has no effect.

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 the specific metric (monthly search volume), the platform (Pinterest), the scope (one country) and its intended use (sizing keyword ideas). That distinguishes it from the discovery-oriented sibling suggest_keywords, though it never names that sibling 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?

"Use it to size keyword ideas" gives a clear positive cue for when to call it, but there is no explicit contrast with pinterest_ads_suggest_keywords or pinterest_ads_list_keywords, so the agent must infer which keyword tool to reach for in a given situation.

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

pinterest_ads_get_metrics_ready_stateCheck whether metrics are finalB
Read-onlyIdempotent

Whether conversion and other metrics for a date (YYYY-MM-DD) are final yet.

NameRequiredDescriptionDefault
dateYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that finality is per-date, hinting at eventual consistency of metric data, but it does not say what the response looks like, whether a non-final state is retryable, or how long settling typically takes.

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?

A single sentence fragment with zero filler, and the key constraint (date-scoped finality) is front-loaded. The lack of an explicit verb makes it read slightly like a title restatement rather than an instruction.

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

Completeness2/5

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

There is no output schema, so the description is the only place the return value could be explained, and it never says whether the result is a boolean, a status string, or per-metric flags. For a one-parameter polling-style tool this is a real gap an agent would feel at call time.

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 0%, so the description must carry the parameter, and it does supply the YYYY-MM-DD format that the schema's bare string 'Date' lacks. It leaves open what the date refers to (report date vs. event date) and which timezone applies, which matters for a readiness check.

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 resource (conversion and other metrics) and a specific check (whether they are final yet) scoped to a single date, which is distinguishable from the sibling metrics tools like list_metrics and get_analytics. It never explicitly contrasts itself with those siblings, so an agent must infer the boundary.

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

Usage Guidelines2/5

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

There is no explicit when-to-use statement, no mention of when the answer is not useful, and no named alternative. The implied workflow (call this before trusting metrics for a date) is left entirely to inference.

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

pinterest_ads_get_pinGet a PinA
Read-onlyIdempotent

Get one Pin: title, link, media, board and whether it has been promoted. Pass ad_account_id when the Pin belongs to that ad account's profile. Apps registered on or after 14 September 2026 may get HTTP 403 PINNER_DATA_ACCESS_DENIED here until Pinterest approves Pinner data access; don't retry.

NameRequiredDescriptionDefault
pin_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

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, open-world behavior, so the bar is lower, yet the description still adds meaningful context: a dated permission gate (PINNER_DATA_ACCESS_DENIED for apps registered on or after 14 September 2026) plus an explicit instruction not to retry. That is exactly the kind of failure-mode guidance annotations cannot express. It does not describe pagination or rate-limit behavior, which is minor here.

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 tight sentences with no filler: the first front-loads what is returned, the second front-loads the parameter rule and then the error contingency. Nothing repeats the tool name or title, and no sentence could be dropped without losing 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, the field list is technically redundant, but it usefully previews shape without cost. The two-parameter surface is fully accounted for and the notable failure mode is documented. The only gap is sibling disambiguation, which matters given a crowded pin-related toolset.

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 0%, and both parameters are bare strings in the schema, so the description carries the burden. It explains the conditional, optional nature of ad_account_id (only when the Pin belongs to that ad account's profile), which the schema does not convey at all. pin_id is left as self-evident; it could have noted where a pin_id is obtained.

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 opens with a specific verb and resource ("Get one Pin") and enumerates what comes back (title, link, media, board, promoted status), which is far more informative than the name alone. It never names the nearby siblings (list_pins, list_board_pins), so an agent must infer that this is the single-record fetch rather than a listing call.

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 a concrete conditional rule for ad_account_id ("Pass ad_account_id when the Pin belongs to that ad account's profile") and a clear do-not-retry directive for the 403 case, which is real usage guidance. It stops short of saying when to choose this over list_pins or list_board_pins, or what to do if the pin_id is unknown.

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

pinterest_ads_get_product_group_product_countsCount products in a product groupC
Read-onlyIdempotent

How many products a product group contains.

NameRequiredDescriptionDefault
ad_account_idNo
product_group_idYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds nothing beyond that: no note on whether the count reflects all products, only active/approved ones, or whether it is subject to pagination or rate limits.

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

Conciseness3/5

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

Extremely short and front-loaded, but the brevity comes from under-specification rather than economy. As a grammatically incomplete sentence it reads more like a title than an instruction.

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

Completeness2/5

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

No output schema exists, yet the description does not state that the response is a numeric count or how it is shaped. With a 0%-documented two-parameter schema and no behavioral detail, an agent lacks what it needs to call this confidently.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description carries the full burden and fails. It implies a product group identifier is required, but never explains product_group_id's format or why the optional ad_account_id exists or when to supply it.

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

Purpose3/5

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

The fragment identifies the resource (product group) and the operation (counting products), so an agent can roughly tell it apart from pinterest_ads_list_product_group_products, which enumerates rather than counts. But it is a noun phrase rather than a verb-led statement, and it never says what is being returned or against what scope.

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

Usage Guidelines2/5

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

There is no guidance on when to use this instead of list_product_group_products, list_product_groups, or get_analytics. The only implied usage is 'you want a count', which the agent must infer from a four-word sentence.

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

pinterest_ads_get_reportCheck a report's statusA
Read-onlyIdempotent

Check a report's status: IN_PROGRESS, FINISHED, FAILED, CANCELLED or EXPIRED.

When FINISHED, call pinterest_ads_download_report with the same token.

NameRequiredDescriptionDefault
tokenYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The annotations clearly declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, and the description is consistent with a read-only status check. Still, the description does not clarify polling behavior or response semantics beyond the status list, leaving some behavioral expectations implicit.

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?

The description is compact and easy to scan, with a clear status list and actionable next step. The line break after the period and the sparse detail are minor issues, not verbosity.

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

Completeness3/5

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

For a simple two-parameter status check, it covers purpose, status values, annotations, and a follow-up tool. However, it omits parameter meanings, especially ad_account_id, and gives no guidance for non-FINISHED states, so it is not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not define the required token parameter beyond saying "same token" or explain the optional ad_account_id. It adds little parameter semantics beyond linking token to the download_report follow-up.

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 explicitly states "Check a report's status" and enumerates the possible status values: IN_PROGRESS, FINISHED, FAILED, CANCELLED, and EXPIRED. The tool name and title reinforce this purpose clearly.

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 an important conditional next step: when the status is FINISHED, call pinterest_ads_download_report with the same token. However, it does not explain when to call this tool initially, where the token comes from, or how to handle non-FINISHED statuses such as polling or retry behavior.

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

pinterest_ads_get_targeting_optionsGet targeting optionsA
Read-onlyIdempotent

Valid values for an ad group targeting_spec field.

targeting_type: LOCATION (countries and US metros), GEO (regions, postcodes), INTEREST, AGE_BUCKET, GENDER, LOCALE, APPTYPE, KEYWORD, AUDIENCE_INCLUDE or AUDIENCE_EXCLUDE. search filters the (often long) list, e.g. search='united kingdom'.

NameRequiredDescriptionDefault
searchNo
max_resultsNo
ad_account_idNo
targeting_typeYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior context — that the returned lists are often long and that search narrows them — but says nothing about how max_results caps the result or whether the call needs an ad account for certain targeting types.

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?

Very short and front-loaded: purpose first, then the allowed values, then the search behavior. The opening fragment ('Valid values for an ad group targeting_spec field.') is slightly clipped but every sentence carries 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?

For a read-only enumeration lookup with an output schema present, the description covers the essential decision inputs: which targeting_type values are legal and how to narrow long lists. The remaining gap — whether ad_account_id is mandatory for audience targeting types — is meaningful but secondary given the output schema and annotations.

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 0%, so the description carries the full burden. It does well on targeting_type (all ten legal values) and on search (with a concrete example), but max_results and ad_account_id are never mentioned, leaving half the parameters undocumented in either structured or prose form.

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 the resource precisely: valid enumeration values for an ad group targeting_spec field, and enumerates the ten accepted targeting_type values, which lets an agent recognize it as a lookup/enumeration tool. It stops short of an explicit verb phrase and never contrasts itself with nearby siblings such as list_targeting_templates or estimate_audience_size.

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 rather than stated: an agent can infer this is the tool to call to discover legal values before writing a targeting_spec. The search example (search='united kingdom') gives useful invocation context, but there is no explicit when-not guidance and no named alternative for template- or audience-size-related needs.

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

pinterest_ads_get_user_accountGet the signed-in Pinterest accountA
Read-onlyIdempotent

Get the Pinterest account behind the token (username, account type, business name).

With ad_account_id, returns the account that owns that ad account instead.

NameRequiredDescriptionDefault
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds value beyond that by disclosing the dual behavior (token owner vs. ad-account owner) and the shape of the returned identity fields, though it omits failure behavior for an unknown ad_account_id.

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 filler; the primary behavior comes first and the parameter-driven variant second. Nothing is repeated from the title 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?

For a one-optional-parameter read tool with a full annotation set and an output schema, the description covers purpose, return fields and the parameter's effect. Remaining gaps are minor: ID format, permission requirements, and behavior on an invalid or inaccessible ad_account_id.

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 0%, so the description must carry the single parameter, and it does: ad_account_id switches the lookup to the owner of that ad account rather than the token's account. It does not specify the expected ID format (numeric vs. prefixed) or whether the account must be accessible to the token, leaving a small gap.

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 ('Get the Pinterest account behind the token') and even enumerates the returned fields (username, account type, business name). It also clarifies the alternate mode triggered by ad_account_id, which implicitly separates it from siblings like pinterest_ads_get_ad_account and pinterest_ads_list_ad_accounts, 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 explains the two usage modes (no argument vs. with ad_account_id), which is real when-to-use guidance. However, it never states when an agent should prefer pinterest_ads_get_ad_account or pinterest_ads_list_ad_accounts instead, nor any prerequisites such as required token scopes.

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

pinterest_ads_health_checkCheck the token and list ad accountsA
Read-onlyIdempotent

Check the setup: refresh the access token, read the signed-in account, then list the ad accounts it can use. Also reports granted scopes and the rate-limit headers.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

The annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the bar is lower. The description still adds real value by disclosing what the call returns beyond a boolean: granted scopes and rate-limit headers. It does not say what happens if the token is expired or invalid (error vs. refresh), which is the main behavioral unknown for a health check, and 'refresh the access token' sits slightly uneasily with readOnlyHint even though it is defensible as an auth handshake rather than a data write.

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 short sentences, front-loaded with the 'check the setup' framing and then the concrete steps. No filler. The secondary sentence about scopes and headers is important content rather than padding, though it could have been folded into a single list for faster scanning.

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 with no parameters the call surface is trivial. The description covers the sequence of actions and the diagnostic outputs, which is enough to invoke the tool correctly. The remaining gap is routing: nothing tells an agent when to prefer this over the dedicated account-listing and user-account tools.

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 there is no parameter meaning to add; the schema is empty and fully described. Baseline for a zero-parameter tool applies, and nothing in the description misleads about inputs.

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 specific verbs and resources: refresh the access token, read the signed-in account, list the ad accounts it can use, and report scopes and rate-limit headers. That is far more informative than the title. However, it never distinguishes this tool from its close siblings pinterest_ads_list_ad_accounts and pinterest_ads_get_user_account, which an agent could easily pick instead.

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?

'Check the setup' implies a first-step diagnostic used before other calls, but the description never states that condition explicitly, gives no exclusions, and does not mention the two sibling tools that overlap with its listing behavior. Usage is inferable but not spelled out.

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

pinterest_ads_ingest_catalog_feedProcess a catalog feed nowA

Ask Pinterest to fetch and process a feed now instead of waiting for its schedule.

NameRequiredDescriptionDefault
feed_idYes
ad_account_idNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the operation is not read-only, not idempotent, and open-world, so the agent knows it causes a side effect. The description adds that the work is delegated asynchronously to Pinterest, but it doesn't say whether the call returns immediately, whether repeated calls re-fetch, or what the response contains — meaningful gaps for a non-idempotent trigger.

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?

One sentence, front-loaded with the action and contrasted against the default scheduling behavior. Nothing redundant.

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

Completeness3/5

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

For a two-parameter trigger with no output schema, the description should at least hint at the async nature of the result and how to verify processing (a dedicated sibling exists for feed processing results). Annotations cover the safety profile, but the post-call workflow is not addressed.

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

Parameters2/5

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

Schema description coverage is 0% and neither parameter is mentioned. 'feed_id' is inferable from the tool name, but 'ad_account_id' (optional, nullable, default null) is completely unexplained in both schema and description, so the description does not compensate for the coverage gap.

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 action (triggering a fetch/processing of a catalog feed) and frames it against the default behavior (waiting for the schedule). That's enough to distinguish it from siblings like list_catalog_feeds and list_feed_processing_results, though it doesn't name 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 Guidelines4/5

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

It gives a clear trigger condition: use this when you want processing to happen now rather than on the normal schedule. It stops short of stating exclusions (e.g., don't spam repeated triggers, or use list_feed_processing_results to check the outcome afterward).

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

pinterest_ads_list_ad_accountsList ad accountsA
Read-onlyIdempotent

List the ad accounts this token can use: owned ones and, by default, ones shared through business access (agency and partner access). Each has id, name, currency, country, owner and the user's permissions on it.

NameRequiredDescriptionDefault
max_resultsNo
include_shared_accountsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds the meaningful nuance that shared/agency accounts are included by default and lists the fields returned, but omits pagination behavior and any cap on results, which matters for a list endpoint with a 200 default.

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 compact sentences, front-loaded with the action and scope, with zero filler. The returned-field list is the only borderline element and is short enough to earn its place.

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?

A simple two-parameter read tool with annotations covering safety and an output schema covering return shape; the description supplies scope and sharing semantics on top of that. The only real gap is pagination/result-cap behavior for max_results, which is minor for this complexity level.

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 0%, so the description must carry parameter meaning. It partially does: 'by default, ones shared through business access' explains what include_shared_accounts toggles and its default. The max_results parameter is never mentioned, leaving page size and truncation behavior undocumented in both schema and description.

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 ('List the ad accounts') plus the precise scope: accounts usable by this token, split into owned and business-shared. This clearly separates it from the singular sibling pinterest_ads_get_ad_account without the agent needing to open 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 Guidelines3/5

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

The phrase 'by default, ones shared through business access (agency and partner access)' implies when shared accounts appear, which is useful. However, there is no explicit guidance on when to call this versus get_ad_account, list_businesses, or list_business_assets, and no stated exclusions or preconditions.

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

pinterest_ads_list_ad_groupsList ad groupsA
Read-onlyIdempotent

List ad groups in an ad account.

Filters: ids (this entity's IDs, up to 250) plus campaign_ids where supported. statuses defaults to ACTIVE and PAUSED; pass ['ARCHIVED'] or ['ALL'] to widen it (IDs are found in any status). Returns at most max_results items. summary_status shows whether each one is actually delivering.

NameRequiredDescriptionDefault
idsNo
statusesNo
max_resultsNo
ad_group_idsNo
campaign_idsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive, but the description adds high-value behavior the annotations cannot: statuses are filtered by default so archived entities are silently omitted unless widened, IDs match in any status, and results are capped at max_results. It also flags summary_status as a delivery signal, though it says nothing about pagination or ordering.

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?

Purpose is front-loaded in one sentence followed by terse filter notes; nearly every clause carries information. The compressed phrasing ('this entity's IDs', 'where supported') trades a little clarity for brevity.

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-shape detail is unnecessary, and the description still adds the delivery-signal hint. For a six-parameter list tool with zero schema descriptions, the unexplained ad_group_ids parameter is the main remaining hole.

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 0% and there are 6 parameters: description explains ids (cap of 250), statuses (defaults and allowed widening), max_results and campaign_ids. It leaves ad_group_ids completely unexplained and never resolves how 'ids' relates to the separate ad_group_ids parameter, and ad_account_id is only implied by the phrase 'in an ad account'.

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 ad groups) scoped to an ad account, which naturally separates it from list_campaigns, list_ads and the create/update/archive_ad_groups siblings. It stops short of any explicit routing statement, so it is clear but not sibling-differentiated.

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 conditional guidance for the statuses filter (default ACTIVE+PAUSED, widen with ['ARCHIVED'] or ['ALL']) and for combining ids with campaign_ids. It does not name an alternative tool or say when another tool should be preferred over this one.

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

pinterest_ads_list_adsList adsA
Read-onlyIdempotent

List ads in an ad account.

Filters: ids (this entity's IDs, up to 250) plus ad_group_ids, campaign_ids where supported. statuses defaults to ACTIVE and PAUSED; pass ['ARCHIVED'] or ['ALL'] to widen it (IDs are found in any status). Returns at most max_results items. summary_status shows whether each one is actually delivering.

NameRequiredDescriptionDefault
idsNo
statusesNo
max_resultsNo
ad_group_idsNo
campaign_idsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description earns credit for adding behavior not in structured fields: the schema default for statuses is null but the description reveals the effective default of ACTIVE+PAUSED, that IDs are matched in any status, the max_results output cap, and that summary_status signals actual delivery. It does not discuss pagination or ordering, which would have pushed it higher.

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?

The description is compact and front-loaded with purpose before filters, and every clause adds information. It is somewhat telegraphic ("plus ad_group_ids, campaign_ids where supported"), which costs a little readability, but there is 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?

With an output schema present, return values need no explanation, and the description covers nearly all six parameters plus the important status default. The one notable omission is the role and optionality of ad_account_id on a tool where no parameter is required, which leaves ambiguity about whether the account must be supplied.

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 0%, so the description carries the full burden and largely succeeds: it explains ids (up to 250), ad_group_ids, campaign_ids, statuses semantics with concrete example values, and max_results. The gaps are ad_account_id (only implied by "in an ad account") and the vague "where supported" caveat on campaign_ids.

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 opens with a specific verb+resource ("List ads in an ad account") and the filter list makes clear it is a filtered read operation, distinguishing it from siblings like pinterest_ads_create_ads or pinterest_ads_archive_ads by implication. It never names a sibling explicitly, so the differentiation is inferential 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?

It gives useful in-tool guidance: the status filter defaults to ACTIVE and PAUSED, and passing ['ARCHIVED'] or ['ALL'] widens it. However, it offers nothing on when to choose this tool over pinterest_ads_list_ad_groups, pinterest_ads_get_analytics, or pinterest_ads_list_metrics for ad-level data, and no prerequisites or exclusions are stated.

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

pinterest_ads_list_audiencesList audiencesA
Read-onlyIdempotent

List audiences (customer list, visitor, engagement, actalike and persona audiences).

ownership_type: OWNED or RECEIVED (shared with this account). Audiences need at least 100 matched people before they can be used.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo
ownership_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds the meaningful behavioral fact that audiences under 100 matched people are unusable, but says nothing about pagination or how max_results (default 200) affects results. Modest added value over annotations.

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, front-loaded statements: what it lists, what the filter means, and the eligibility threshold. No filler, though the formatting as a bare parameter note is slightly awkward.

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, and for a simple read-only list operation the description covers scope, filter semantics and a key eligibility constraint. The remaining gap is pagination/limit behavior for max_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 description coverage is 0%, so the description must carry parameter meaning. It explains the two ownership_type values (OWNED vs RECEIVED/shared with this account), which is genuine value, but leaves max_results and ad_account_id (including the null default meaning all accounts?) completely unaddressed.

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 and enumerates the audience subtypes returned (customer list, visitor, engagement, actalike, persona), which is real information beyond the title. It does not explicitly differentiate itself from close siblings such as pinterest_ads_get_audience or pinterest_ads_list_customer_lists, so it stops short of a 5.

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 implies usage through the ownership_type filter values and the '100 matched people' eligibility note, giving the agent context about what will and won't be returned. It never says when to prefer this over pinterest_ads_get_audience or pinterest_ads_list_customer_lists, and gives no exclusions.

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

pinterest_ads_list_board_pinsList the Pins on a boardA
Read-onlyIdempotent

List the Pins on a board, e.g. the protected 'Ad-only Pins' board, to pick one for an ad. Apps registered on or after 14 September 2026 may get HTTP 403 PINNER_DATA_ACCESS_DENIED here until Pinterest approves Pinner data access; don't retry.

NameRequiredDescriptionDefault
board_idYes
max_resultsNo
ad_account_idNo
creative_typesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so credit goes to what the description adds: the specific 403 PINNER_DATA_ACCESS_DENIED failure mode tied to app registration date on or after 14 September 2026, and the explicit 'don't retry' instruction. That is real, actionable operational context beyond the annotations; only pagination/result-size behavior is left unstated.

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 tight sentences with no waste: the core action and use case come first, then the failure-mode caveat. Every clause carries information the agent needs.

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

Completeness3/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, and the access-denied caveat covers the biggest operational risk. However, with four undocumented parameters and no guidance on result sizing or pagination, an agent calling this with creative_types or ad_account_id is guessing.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, and the description compensates only marginally — 'on a board' hints that board_id identifies the board, but nothing explains the format of board_id, what max_results controls, when ad_account_id is required, or what creative_types filters on. For a 0%-coverage schema, this leaves three parameters effectively opaque.

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 the Pins on a board') plus a concrete use case ('to pick one for an ad'), and the mention of the protected 'Ad-only Pins' board scopes it further. It stops short of naming how it differs from the sibling pinterest_ads_list_pins, which an agent must infer from the 'on a board' phrasing.

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 intended use ('pick one for an ad') implies when to reach for it, and the 'don't retry' instruction gives a clear behavioral rule on failure. There is no explicit statement of when to use pinterest_ads_list_pins or pinterest_ads_get_pin instead, so the alternative routing is left implicit.

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

pinterest_ads_list_boardsList boardsA
Read-onlyIdempotent

List boards (yours, or the ad account owner's with ad_account_id), to find Pins.

privacy: ALL, PUBLIC, PROTECTED (ad-only), SECRET or PUBLIC_AND_SECRET.

NameRequiredDescriptionDefault
privacyNo
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

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, openWorldHint and destructiveHint=false, so the safety profile is covered structurally. The description adds genuinely useful context the annotations do not: which account's boards are returned and the existence of ad-only PROTECTED boards. It says nothing about pagination or result limits despite a max_results parameter, so it adds only partial behavioral context.

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 short blocks: a front-loaded statement of scope and intent, then a compact enumeration of privacy values. Nothing is padded, though the privacy list is presented without labeling it clearly as the accepted values for the privacy argument.

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?

Given an existing output schema and full read-only annotations, the description covers what an agent still needs: whose boards are listed, the trigger parameter for that scope, and the valid privacy vocabulary missing from the schema. The only gap is pagination behavior for max_results, which is minor against the structured data already provided.

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 0%, so the description must compensate. It does explain ad_account_id's meaning and enumerates the valid privacy values (ALL, PUBLIC, PROTECTED, SECRET, PUBLIC_AND_SECRET), which the schema omits entirely as an enum. It leaves max_results undocumented, so one of three parameters carries no semantic guidance.

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 uses a specific verb and resource (list boards) and disambiguates scope: the caller's own boards versus the ad account owner's boards when ad_account_id is supplied. It also states the downstream motivation (to find Pins), which separates it from sibling read tools like list_pins and list_board_pins, though it never names those siblings 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?

It gives a conditional usage cue for ad_account_id ('the ad account owner's with ad_account_id') and a purpose ('to find Pins'), so an agent can infer when to reach for it. However, there is no explicit when-not guidance or named alternative, such as using list_board_pins once a board is chosen, so routing is only implied.

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

pinterest_ads_list_business_assetsList a business's assetsA
Read-onlyIdempotent

List a business's assets: ad accounts (default), profiles, catalogs or asset groups, with the permissions the user holds on each. Needs the biz_access:read scope.

permissions filters by role, e.g. ['ADMIN', 'CAMPAIGN_MANAGER', 'ANALYST'].

NameRequiredDescriptionDefault
asset_typeNoAD_ACCOUNT
business_idYes
max_resultsNo
permissionsNo

Output Schema

NameRequiredDescription

No output parameters

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 behavior, so the description's added value is the required 'biz_access:read' scope and the fact that per-asset permissions are returned. It does not mention pagination or how max_results trims the response.

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 compact paragraphs: the first covers scope and return content, the second covers the permissions filter. No wasted words and the default asset type is stated early.

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, the description need not describe the response shape, and it covers the auth scope and the two non-obvious parameters. The remaining gap is max_results behavior, which is neither in the schema descriptions nor the text.

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 0%, so the description carries the burden: it explains asset_type values and the permissions role filter with a concrete example. It leaves business_id and especially max_results (default 200) unexplained, so compensation is partial.

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 ('List a business's assets') and enumerates the asset kinds returned (ad accounts, profiles, catalogs, asset groups), which lets an agent distinguish it from pinterest_ads_list_ad_accounts and pinterest_ads_list_catalogs.

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 that ad accounts are the default and that asset_type selects other kinds, which implies how to use it. It does not say when to prefer this tool over siblings like list_ad_accounts or list_catalogs, nor any exclusions.

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

pinterest_ads_list_businessesList businessesA
Read-onlyIdempotent

List the businesses the signed-in user belongs to (Business Manager), with their IDs and a summary of their assets. Needs the biz_access:read scope.

NameRequiredDescriptionDefault
max_resultsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely new behavioral context by stating the required OAuth scope (biz_access:read) and by describing the shape of what comes back (IDs plus an asset summary), which the annotations do not 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, both load-bearing: the first states scope and return content, the second states the auth prerequisite. The scope constraint is front-loaded and nothing is repeated from the name or 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?

With an output schema present, return values need not be explained, and the description covers the auth requirement and the business/asset distinction adequately. The remaining gap is pagination and what max_results controls, which an agent would need in order to enumerate beyond 100 businesses.

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 optional parameter, max_results, with 0% schema description coverage, so the schema gives only its type and default of 100. The description never mentions the parameter, paging behavior, or what happens when the result set exceeds the limit, leaving the one input argument's meaning entirely undocumented.

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 the businesses the signed-in user belongs to") plus a parenthetical qualifier tying it to Business Manager, so it is clearly distinguished from the asset-level sibling. It stops short of naming an adjacent sibling like pinterest_ads_list_business_assets, which would have fully separated the account-level and asset-level listings.

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 phrase "the signed-in user belongs to" implicitly defines the usage context – you call it to discover which businesses the authenticated principal can act under. However, there is no explicit when-to-use/when-not guidance and no pointer telling the agent to follow up with pinterest_ads_list_business_assets for per-business assets, so the routing is left to inference.

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

pinterest_ads_list_campaignsList campaignsA
Read-onlyIdempotent

List campaigns in an ad account.

Filters: ids (this entity's IDs, up to 250) plus none where supported. statuses defaults to ACTIVE and PAUSED; pass ['ARCHIVED'] or ['ALL'] to widen it (IDs are found in any status). Returns at most max_results items. summary_status shows whether each one is actually delivering.

NameRequiredDescriptionDefault
idsNo
statusesNo
max_resultsNo
ad_group_idsNo
campaign_idsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description correctly spends its budget elsewhere: the non-obvious status default that silently hides archived campaigns, the max_results cap, and the meaning of summary_status. The one weak phrase is "plus none where supported," which is opaque about which other filters actually apply.

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?

Front-loaded with the verb and resource, then dense filter semantics in a few short sentences; nothing is padding. The fragment "plus none where supported" is the one clause that costs more confusion than it saves.

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

Completeness3/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 explanation is rightly omitted, and the status-default caveat is the key behavioral fact. But with zero required parameters and an undocumented ad_account_id defaulting to null, an agent has no stated way to know which ad account the listing is scoped to, which is a material gap for a list tool.

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 0%, so the description carries the full burden; it explains ids (up to 250), statuses (defaults and widening values), and max_results (item cap). It leaves ad_group_ids, campaign_ids, and ad_account_id entirely undocumented, and worse, never clarifies how `ids` differs from `campaign_ids` on a campaign listing tool — an agent could easily pick the wrong one.

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 campaigns in an ad account") that cleanly separates it from the create/update/archive_campaigns siblings. It does not, however, differentiate itself from adjacent read tools such as list_ads or bulk_export, which also return campaign-adjacent data.

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 operational guidance for the status filter (default ACTIVE+PAUSED, pass ['ARCHIVED'] or ['ALL'] to widen, IDs match in any status), which is genuinely useful for choosing arguments. It stops short of saying when to pick this tool over siblings like list_ad_groups, bulk_export, or list_metrics, and offers no exclusions.

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

pinterest_ads_list_catalog_feedsList catalog feedsC
Read-onlyIdempotent

List product feeds (data sources): location, format, schedule, status, country.

NameRequiredDescriptionDefault
catalog_idNo
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety and repeatability are covered without description help. The description adds genuine context by naming the attributes each feed carries, which tells the agent this is diagnostic/metadata output rather than item data. It says nothing about pagination behavior, result limits, or whether the list is scoped to an account or catalog.

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?

A single front-loaded sentence with zero filler, and the key noun phrase 'product feeds (data sources)' comes first. The trailing field list is telegraphic rather than prose, which is efficient but slightly fragmentary. Still, every word earns its place.

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

Completeness2/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 structure need not be explained, and the annotations cover the safety profile. However, for a three-parameter list tool with zero schema description coverage, the description leaves the agent without guidance on parameter scoping or result limits, which are exactly the decisions needed to invoke it correctly. It is a one-line summary where a sentence or two on filtering and account/catalog scope is warranted.

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

Parameters2/5

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

Schema description coverage is 0% across three parameters (catalog_id, ad_account_id, max_results), and the description supplies no compensating meaning — it never mentions any parameter or the scoping semantics of passing a catalog or ad account. The agent cannot tell from either source whether both filters are required together, whether they are optional narrowing, or what max_results default of 100 implies. This is the tool's largest documentation gap.

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+resource ('List product feeds (data sources)') and clarifies that feeds are data sources, which disambiguates it from the separate catalog-level tools such as list_catalogs. It then enumerates the observable attributes of a feed (location, format, schedule, status, country), so an agent can predict what it gets back. It does not explicitly contrast with siblings like list_feed_processing_results or ingest_catalog_feed, keeping it just short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives — for example, whether feeds are listed per catalog, per ad account, or globally, or when to reach for list_feed_processing_results or ingest_catalog_feed instead. Usage is only implied by the verb 'List'. Nothing tells the agent what preconditions or scoping assumptions apply.

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

pinterest_ads_list_catalogsList catalogsC
Read-onlyIdempotent

List catalogs (retail, hotel or creative assets) and their IDs.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. Beyond that the description adds nothing behavioral — no pagination behavior, no note that results are account-scoped or that a missing ad_account_id widens the lookup. Mentioning "their IDs" only hints at return content already covered by 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?

A single short sentence, front-loaded with the action and resource, with no filler. It is efficient, though its brevity borders on under-specification rather than being tight and informative.

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

Completeness2/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 described, but the tool still has a nullable account filter and a pagination cap that go unexplained, and no guidance on how it relates to the many catalog/feed/product-group siblings. For a list tool in a dense catalog family, that leaves real gaps.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description carries the burden and fails to. Neither max_results (a default of 100 pagination cap) nor ad_account_id (the account filter, nullable and defaulting to null) is explained, leaving the agent to guess at the consequences of omitting or setting them.

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 ("List catalogs") and clarifies the resource scope by naming the catalog kinds (retail, hotel, creative assets). It does not differentiate itself from nearby siblings such as list_catalog_feeds or get_catalog_items, so an agent must infer the boundary between catalogs, feeds, and items.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisite or scoping note (e.g., that ad_account_id narrows results to one account), and no pointer to alternatives. The agent gets no signal about when this tool is preferable to the catalog-adjacent siblings.

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

pinterest_ads_list_conversion_tagsList conversion tagsB
Read-onlyIdempotent

List the ad account's conversion tags (Pinterest Tag), with their IDs and status.

A SALES or LEADS ad group needs one of these IDs as optimization_goal_metadata.conversion_tag_v3_goal_metadata.conversion_tag_id.

NameRequiredDescriptionDefault
ad_account_idNo
include_deletedNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds the useful fact that IDs and status are returned, but says nothing about pagination, result size, or what changes when deleted tags are included.

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 primary purpose front-loaded and the requirement context second. No filler, though the second sentence's deep field path is dense and could be framed more readably.

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

Completeness3/5

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

The purpose and the reason an agent needs the output are well covered, and no output schema exists so return-shape detail is not required. However, with two entirely undocumented parameters (including a default-false flag that meaningfully changes results), the definition leaves real gaps for a read tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning and it does not. Neither ad_account_id (nullable, default null — presumably a default account resolution) nor include_deleted (default false) is explained, so an agent cannot tell from either source how to list archived conversion tags.

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 the ad account's conversion tags (Pinterest Tag)") plus what is returned (IDs and status), which distinguishes it from the singular sibling pinterest_ads_get_conversion_tag. It stops short of naming that sibling explicitly, so the 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 Guidelines4/5

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

Gives a concrete downstream use case: the returned ID is required as optimization_goal_metadata.conversion_tag_v3_goal_metadata.conversion_tag_id for SALES or LEADS ad groups, which tells an agent exactly when to reach for it. It offers no explicit when-not or pointer to the single-tag fetch alternative.

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

pinterest_ads_list_customer_listsList customer listsB
Read-onlyIdempotent

List customer lists (uploaded customer identifiers) with their size and status.

Status TOO_SMALL means fewer than 100 matched Pinterest users.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuine value beyond that by explaining that status TOO_SMALL means fewer than 100 matched Pinterest users. It says nothing about pagination behavior, ordering, or what a null ad_account_id implies, so it adds only partial behavioral context.

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 short sentences, front-loaded with the action and resource, with no filler. The status note is compact and earns its place, though the second sentence reads as a fragment and its placement slightly interrupts the flow of the core purpose statement.

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

Completeness3/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 described, and annotations carry the safety profile. However, for a listing tool with two undocumented parameters and no note on pagination or account scoping, an agent lacks enough to call it confidently in multi-account contexts.

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

Parameters2/5

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

Schema description coverage is 0% and neither of the two parameters is mentioned in the description. It does not explain that max_results caps the page size (default 200) or that ad_account_id scopes the listing, and the null default — which likely means 'across all accounts' — is left entirely to guesswork.

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+resource ("List customer lists") and parenthetically disambiguates the resource as "uploaded customer identifiers", which separates it from the audience tools (list_audiences/get_audience) in the sibling set. It stops short of explicitly naming those siblings, so an agent must still infer the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no mention of the sibling tools (create_customer_list, update_customer_list, list_audiences) that an agent might confuse this with. The only contextual note explains a status value, which is interpretation guidance rather than usage guidance.

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

pinterest_ads_list_feed_processing_resultsList feed processing resultsA
Read-onlyIdempotent

Recent processing runs of a feed: status, item counts, and error and warning totals.

Use a result's id with pinterest_ads_list_item_issues to see item-level problems.

NameRequiredDescriptionDefault
feed_idYes
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety and side-effect behavior are covered by structured data. The description adds useful payload context (status, counts, error/warning totals) that annotations cannot convey, but it says nothing about result ordering, recency window, or how max_results limits the list.

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, no filler, with the payload summary front-loaded and the sibling handoff as the actionable second sentence. Nothing repeated from the schema or annotations.

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

Completeness3/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 annotations handle the safety profile. The remaining gap is parameter and pagination guidance: an agent still cannot tell from the description what max_results does or whether ad_account_id is needed for scoping, which matters for a three-parameter list tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden of explaining the three parameters, and it largely does not. 'Feed' implies feed_id, but max_results (default 10) and the optional ad_account_id are never mentioned, leaving the agent to infer both the pagination cap and the account-scoping requirement from bare schema titles.

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 the specific resource (a feed's recent processing runs) and enumerates the payload an agent will get back: status, item counts, error and warning totals. That is more informative than the tool name alone, though the verb is left implicit as a sentence fragment rather than stated as 'lists'.

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 supplies an explicit follow-up path: 'Use a result's id with pinterest_ads_list_item_issues to see item-level problems,' which routes the agent between siblings by naming the condition that selects the other tool. It does not address when not to call this tool (for example, before a feed has ever been ingested via pinterest_ads_ingest_catalog_feed), so it stops short of full when/when-not coverage.

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

pinterest_ads_list_item_issuesList catalog item issuesC
Read-onlyIdempotent

Item-level errors and warnings from one feed processing run.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo
processing_result_idYes
item_validation_issueNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered without the description. The description adds only the scoping fact that results come from one processing run; it says nothing about pagination, result caps, or filtering behavior beyond that.

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?

A single twelve-word sentence with no filler, and the resource is front-loaded. It is arguably too terse rather than too long, but nothing in it is redundant.

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

Completeness2/5

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

The output schema exists, so return values need no explanation, but with four undocumented parameters, no guidance on obtaining the required processing_result_id, and no note on result limits, the definition is under-specified for a tool an agent will struggle to chain correctly.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters, so the schema supplies only names and types. The description implies the role of processing_result_id but does not explain item_validation_issue (apparently an issue-type filter), max_results, or ad_account_id, leaving half the surface undocumented in both places.

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 resource ('item-level errors and warnings') and scopes it to a single feed processing run, which separates it from the sibling that lists the runs themselves. It is clear what the tool returns, though it omits an explicit verb like 'list/retrieve' and relies on the title and name to supply it.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites, and no pointer to the sibling pinterest_ads_list_feed_processing_results where a processing_result_id would come from. An agent must infer the entire workflow from the required parameter name alone.

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

pinterest_ads_list_keywordsList keywordsA
Read-onlyIdempotent

List keywords and negative keywords for an ad group, several ad groups or a campaign.

match_types filters, e.g. ['EXACT_NEGATIVE', 'PHRASE_NEGATIVE'] for negatives only. Archived keywords have archived=true.

NameRequiredDescriptionDefault
ad_group_idNo
campaign_idNo
match_typesNo
max_resultsNo
ad_group_idsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, non-destructive safety profile, so the bar is lower. The description still adds real behavior: archived keywords are returned and are marked archived=true (i.e. results are not filtered to active only), and negative keywords are distinguished via match_types values such as EXACT_NEGATIVE/PHRASE_NEGATIVE.

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 lines, front-loaded with the core action and scope, then the two most useful filter/state facts. Slightly telegraphic phrasing ("match_types filters, e.g. ...") but 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, so return values need not be described. For a read-only listing tool with an output schema the description is nearly sufficient; the remaining gap is that every parameter is optional and the description never says which identifier is needed to get a useful result, nor how max_results bounds the listing.

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 0% across six parameters, so the description carries the burden and only partly discharges it. It explains match_types with concrete example values and maps the three scopes onto ad_group_id / ad_group_ids / campaign_id, but ad_account_id and max_results (default 500) are never mentioned, nor is whether these selectors are mutually exclusive.

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 opens with a specific verb and resource ("List keywords and negative keywords") and states the three supported scopes: one ad group, several ad groups, or a campaign. That distinguishes it cleanly from the write-side siblings (create_keywords, create_negative_keywords, archive_keywords), though no sibling is named 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?

Usage is implied by "List" and by the scoping options, and the match_types example hints at the retrieve-negatives-only case. But there is no explicit when-to-use / when-not-to-use guidance, no mention of when to prefer this over get_keyword_metrics or suggest_keywords, and no note on which of ad_group_id / ad_group_ids / campaign_id to supply.

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

pinterest_ads_list_metricsList metric definitionsA
Read-onlyIdempotent

Definitions of the metrics (columns) reports can return, with Ads Manager names.

search filters by name or definition, e.g. 'checkout'. report_type: SYNC or ASYNC.

NameRequiredDescriptionDefault
searchNo
report_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/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 the safety profile is covered. The description adds useful context that results carry Ads Manager display names, but says nothing about result volume, whether the full catalog is always returned, or how filtering narrows output.

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 short sentences, front-loaded with the resource definition and followed by parameter guidance; nothing is padded. The terse phrasing around search matching is slightly ambiguous but no sentence is wasted.

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, the description needn't explain return values, and both optional parameters get meaningful coverage. The main remaining gap is workflow context — that this is the discovery step feeding report creation — which an 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 description coverage is 0%, so the description must carry the load and largely does: 'search' is described as matching against name or definition with a concrete example ('checkout'), and 'report_type' is given its two legal values, SYNC and ASYNC. It stops short of saying whether search is substring or exact matching, or what happens when report_type is omitted.

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 resource: metric (column) definitions that reports can return, along with their Ads Manager names. It is distinguishable from data-returning siblings like get_analytics or get_keyword_metrics because it yields definitions, not values, though it never explicitly names that contrast.

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 a discovery tool to look up metric names, but the description never says to call it before create_report/run_report or that it is the right tool when you need valid column identifiers. No exclusions or alternatives are named.

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

pinterest_ads_list_pinsList Pins to promoteA
Read-onlyIdempotent

List Pins you could promote. Pass ad_account_id to list the Pins of the profile that owns that ad account (needed when it isn't your own).

pin_filter: 'has_been_promoted', 'exclude_repins' or 'exclude_native'. include_protected_pins=true adds ad-only Pins. creative_types e.g. ['REGULAR', 'VIDEO'].

NameRequiredDescriptionDefault
pin_filterNo
max_resultsNo
ad_account_idNo
creative_typesNo
include_protected_pinsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare a safe, idempotent read, so the description's remaining job is context, and it delivers: it explains that ad-only (protected) Pins are hidden unless the flag is set, and that ad_account_id is required for accounts you don't own. It doesn't touch result volume or pagination, which 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, purpose first, then parameter notes in decreasing order of importance. Nothing is repeated and no sentence is wasted; the telegraphic parameter lines still parse cleanly.

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 no explanation, and the safety profile is covered by annotations. The description supplies the semantics missing from a 0%-coverage schema for nearly every parameter, with only the result-limit behavior left unaddressed.

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 0%, so the description must carry all parameter meaning and it covers four of five: enumerated pin_filter values, an example value list for creative_types, the effect of include_protected_pins, and the ownership condition for ad_account_id. max_results is left entirely to its default of 50 with no pagination behavior described.

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 names a specific verb and a scoped resource: Pins that are eligible to be promoted. That is meaningfully narrower than siblings like pinterest_ads_get_pin or pinterest_ads_list_board_pins, though the description never names those alternatives to sharpen the boundary.

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 conditional guidance for one parameter ('Pass ad_account_id ... needed when it isn't your own'), which is a real usage cue. But there is no statement of when to prefer this over list_board_pins or list_ads, and no exclusions or prerequisites beyond that single case.

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

pinterest_ads_list_product_group_productsList products in a product groupC
Read-onlyIdempotent

List the products (product Pins) in a product group.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo
product_group_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing about pagination behavior (max_results default 50), whether results are truncated, or how the product group scope limits the listing.

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

Conciseness3/5

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

A single short sentence with no filler, which is structurally clean and front-loaded. But its brevity comes at the cost of under-specification rather than efficiency, leaving the definition thin for a paginated list operation.

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

Completeness2/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 described, and annotations cover safety. Still, with zero parameter documentation and no guidance on pagination or scoping, an agent lacks what it needs to invoke this correctly under the max_results cap.

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

Parameters2/5

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

Schema description coverage is 0% across 3 parameters, so the description must compensate and does not. It says nothing about product_group_id being the required anchor, what max_results controls, or why ad_account_id is optional.

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

Purpose3/5

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

The sentence names a specific verb (list) and resource (products/product Pins in a product group), which is slightly more informative than the bare title. However, it does not distinguish this from nearby siblings such as pinterest_ads_get_catalog_items or pinterest_ads_get_product_group_product_counts, so an agent gets only a vague sense of which tool applies.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like list_product_groups, get_catalog_items, or get_product_group_product_counts. No prerequisites, no mention that a product_group_id must first be obtained.

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

pinterest_ads_list_product_group_promotionsList product group promotionsA
Read-onlyIdempotent

List product group promotions: the catalog product groups an ad group promotes.

Filter by ids, ad_group_id and statuses (default ACTIVE and PAUSED; ['ALL'] for every status).

NameRequiredDescriptionDefault
idsNo
statusesNo
ad_group_idNo
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds the non-obvious default status filtering, which is genuinely useful behavior disclosure. It says nothing about pagination despite a max_results parameter defaulting to 200, and nothing about ordering or result caps.

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 short sentences, front-loaded with the core identification before the filtering details. No filler or repetition of the title, though the definition is sparse enough that a little more detail on paging or account scoping would have earned its place.

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

Completeness3/5

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

An output schema exists and annotations cover safety, so the description needn't explain return values. Given zero schema description coverage on a five-parameter tool, though, leaving max_results and ad_account_id unaddressed is a real gap for an agent that must decide whether ad_account_id is required in practice.

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 0%, so the description carries the whole burden; it explains the semantics of ids, ad_group_id and statuses, including the non-obvious default and the ['ALL'] sentinel value, which are not derivable from the schema. It leaves max_results and ad_account_id completely unexplained, so two of five parameters remain opaque.

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 product group promotions') and then glosses the domain term as 'the catalog product groups an ad group promotes', which lets an agent distinguish it from the sibling list_product_groups. It stops short of explicitly naming that sibling, so the 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 Guidelines3/5

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

The default-status behavior ('default ACTIVE and PAUSED; [ALL] for every status') gives real operational guidance about what happens when the statuses filter is omitted. However, there is no statement of when to reach for this tool instead of list_product_groups, list_product_group_products, or get_product_group_product_counts, which are all in the sibling set.

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

pinterest_ads_list_product_groupsList product groupsC
Read-onlyIdempotent

List catalog product groups (the sets of products catalog ads promote).

NameRequiredDescriptionDefault
idsNo
feed_idNo
catalog_idNo
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only a definitional gloss and says nothing about pagination (max_results defaults to 200), whether results are truncated, or how the optional filters interact — behavior an agent would want before calling a list endpoint.

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?

A single short sentence with the resource front-loaded and zero filler; the parenthetical earns its place by defining the domain term. It is appropriately sized for what it says, though it is under-specified rather than merely concise.

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

Completeness2/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. However, with five undocumented filter/pagination parameters and no usage or scoping guidance, the definition leaves too much for an agent to infer before a correct call, which is a real gap for a catalog-scoped list tool.

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

Parameters1/5

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

Schema description coverage is 0% across five parameters (ids, feed_id, catalog_id, max_results, ad_account_id), and the description supplies no meaning for any of them — not whether catalog_id is required for meaningful results, not whether ids and feed_id are mutually exclusive, and not what max_results bounds. The description does not compensate for the total absence of schema documentation.

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 catalog product groups") and adds a parenthetical gloss defining what a product group is, which lets an agent distinguish it from siblings like list_product_group_products or list_product_group_promotions. It stops short of explicitly contrasting with those neighbors, so it is clear but not fully differentiating.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of when to prefer this over list_catalog_feeds, get_catalog_items, or list_product_group_products, and no stated prerequisites (e.g., that a catalog or feed scope is needed). The agent must infer usage entirely from the tool name.

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

pinterest_ads_list_report_templatesList saved report templatesB
Read-onlyIdempotent

List custom report templates saved in Ads Manager, to re-run them by template_id.

NameRequiredDescriptionDefault
max_resultsNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile needs no restating. The description adds modest context that templates live in Ads Manager and carry a template_id for reuse, but says nothing about pagination via max_results or whether null ad_account_id means all accounts.

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?

A single front-loaded sentence with no filler, stating resource and reuse purpose immediately. Slightly weakened by citing template_id, a value that isn't an input here, which could momentarily misdirect parameter expectations.

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

Completeness3/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 tool is simple with two optional parameters. However, the two undocumented parameters and the ambiguity of a null ad_account_id leave real gaps for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does not: it never mentions max_results (default 100) or ad_account_id (nullable, default null), and instead references template_id, which is not even an input parameter. An agent gets no guidance on scoping or result limits from either source.

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 (List) and a specific resource (custom report templates saved in Ads Manager), and adds the downstream purpose of re-running by template_id. It is distinguishable from siblings like create_report, get_report, and run_report, though it doesn't name them.

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 phrase 'to re-run them by template_id' implies the usage context but never states when to choose this over create_report or run_report, nor any prerequisites. Usage is inferable rather than explicit.

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

pinterest_ads_list_targeting_templatesList targeting templatesC
Read-onlyIdempotent

List saved targeting templates (reusable targeting for ad groups).

NameRequiredDescriptionDefault
max_resultsNo
search_queryNo
ad_account_idNo
include_sizingNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered without the description. Beyond restating that these are saved templates, the description adds nothing behavioral – no pagination behavior, no note that ad_account_id is optional or that omitting it broadens scope.

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

Conciseness3/5

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

A single tight sentence with zero wasted words and the resource front-loaded. It is efficient, but efficiency here comes at the cost of thoroughness rather than being paired with it.

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

Completeness2/5

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

Because an output schema exists, return values needn't be explained. But for a four-parameter list tool with entirely undocumented parameters and no usage guidance, the description is too thin – it leaves the agent guessing about filtering, pagination, and account scoping.

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

Parameters1/5

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

Schema description coverage is 0% across four parameters (max_results, search_query, ad_account_id, include_sizing), and the description explains none of them. The description does not clarify what include_sizing toggles, whether search_query matches template names, or what happens when ad_account_id is null – the exact gap the description needed to fill.

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?

A specific verb ("List") plus resource ("targeting templates"), with a parenthetical clarifying that these are reusable targeting configurations for ad groups. It does not, however, distinguish itself from nearby siblings such as pinterest_ads_list_report_templates or pinterest_ads_get_targeting_options, so an agent must infer the boundary.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no pointer to alternatives. It doesn't say whether templates are scoped to an ad account, whether search_query narrows results, or when an agent should prefer get_targeting_options instead.

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

pinterest_ads_read_requestRead from any Pinterest API endpointA
Read-onlyIdempotent

Read from any Pinterest API v5 endpoint the other tools don't cover.

Only GET, and POSTs that just read (report and export requests, audience sizing, bid floors, delivery estimates, catalog item lookups), are allowed; use pinterest_ads_request for writes. path is relative to the v5 base, e.g. '/ad_accounts/123/ads/targeting_analytics'. List values in query are sent as repeated parameters; join them with commas yourself where the API wants that.

NameRequiredDescriptionDefault
bodyNo
pathYes
queryNo
methodYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered; the description still adds real value by enumerating the read-shaped POST exceptions, which an agent could not infer from the readOnly annotation alone. It omits pagination, error, and auth behavior, which matters given a free-form passthrough to an external API.

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 scope statement, then the method restriction, then the path/query conventions. The parenthetical list of read-only POST types is dense but earns its space by defining an otherwise fuzzy boundary.

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 an open-ended escape-hatch tool with no output schema and an unconstrained body/query, the definition covers the essentials an agent needs to form a valid call. Missing pieces are error handling, pagination, and any hint about what body is used for, which keeps it from a 5.

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 0%, so the description must carry the load: it explains that path is relative to the v5 base with a concrete example, that list values in query are sent as repeated parameters and must be comma-joined where the API expects it, and constrains method to GET/read-only POST. Only body is left entirely unexplained, so it falls just short of full compensation.

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 from any Pinterest API v5 endpoint') and explicitly scopes it to endpoints the other tools don't cover, which immediately distinguishes it from the 70+ named siblings that handle specific resources.

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

Usage Guidelines5/5

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

Gives an explicit rule for what is permitted (GET, plus read-only POSTs such as report/export requests, audience sizing, bid floors, delivery estimates, catalog item lookups) and names the alternative for everything else ('use pinterest_ads_request for writes'). It also implies the selection order: prefer a specific tool, fall back to this one.

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

pinterest_ads_requestCall any Pinterest API endpointA
Destructive

Call any Pinterest API v5 endpoint the other tools don't cover (e.g. lead forms, ad previews, labels, schedules, conversion events, asynchronous customer list uploads).

path is relative to the v5 base and starts with '/', e.g. '/ad_accounts/123/labels'. GET and read-only POSTs are reads. Every other call is a write: it is audited, follows dry-run, and needs confirm='APPLY' because this tool can't check what it changes. OAuth endpoints are blocked.

NameRequiredDescriptionDefault
bodyNo
pathYes
queryNo
methodYes
confirmNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the read/write classification rule (GET and read-only POSTs are reads), that writes are audited, that writes follow dry-run and require confirm='APPLY', that OAuth endpoints are blocked, and the important limitation that the tool can't verify what it changes. That is exactly the operational context annotations alone (readOnlyHint=false, destructiveHint=true) 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?

The purpose and the exclusion rule are front-loaded in the first sentence, followed by path formatting, then the write-safety contract. Every sentence adds a fact an agent needs to call the tool correctly, with no restatement of the name or 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?

For an open-ended passthrough with no output schema, the description covers the calling contract (path format, read/write classification, confirm token, audit, dry-run, OAuth exclusion) well. It stops short of saying what a response or error looks like, and does not point at pinterest_ads_read_request as the read-only alternative.

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 0%, so the description must carry the load, and it does for the two required parameters: path is defined as relative to the v5 base, must start with '/', with a worked example; method is given meaning via the read/write rule; confirm's exact sentinel value 'APPLY' is spelled out. body and query are only implied, which is the remaining gap.

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 concrete verb and resource ("Call any Pinterest API v5 endpoint") and immediately scopes it with "the other tools don't cover", then enumerates the concrete gaps (lead forms, ad previews, labels, schedules, conversion events, async customer list uploads). This lets an agent distinguish it from the ~70 specific siblings without opening a 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 a clear selection rule: use this only for endpoints the dedicated tools don't cover, and it names example areas that fall in that gap. It does not, however, route the agent to the obvious sibling alternative pinterest_ads_read_request for read-shaped calls, so an agent may use this heavier tool when a narrower one exists.

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

pinterest_ads_run_reportRun a report and return its rowsA
Read-only

Request a report, wait for it with progress updates, and return its rows. Same arguments as pinterest_ads_create_report, plus max_rows (default 1000), timeout_seconds (default 600) and poll_seconds (default 10). If it times out the token is returned so you can check later with pinterest_ads_get_report. Changes nothing in the account.

level: ADVERTISER, CAMPAIGN, AD_GROUP, PIN_PROMOTION (ads), KEYWORD, PRODUCT_GROUP, PRODUCT_ITEM, or a *_TARGETING level with targeting_types (up to 5, e.g. ['LOCATION']). Dates are YYYY-MM-DD; granularity TOTAL, DAY, WEEK, MONTH or HOUR. filters adds other request fields, e.g. {"campaign_ids": ["..."], "campaign_statuses": ["RUNNING"]} (campaign_objective_types should include SALES and LEADS, not only the retiring CATALOG_SALES and WEB_CONVERSION). report_format JSON (default) or CSV. To re-run a report saved in Ads Manager, pass template_id (see pinterest_ads_list_report_templates) with dates and granularity only.

Common columns: SPEND_IN_DOLLAR (account currency, despite the name), PAID_IMPRESSION, IMPRESSION_1, CLICKTHROUGH_1 (Pin clicks), OUTBOUND_CLICK_1, CTR, OUTBOUND_CTR_1, CPC_IN_MICRO_DOLLAR, CPM_IN_DOLLAR, TOTAL_ENGAGEMENT, TOTAL_CONVERSIONS, TOTAL_CHECKOUT, TOTAL_CHECKOUT_VALUE_IN_MICRO_DOLLAR, CHECKOUT_ROAS, TOTAL_ADD_TO_CART, TOTAL_LEAD, TOTAL_SIGNUP, CAMPAIGN_NAME, CAMPAIGN_ID. _1 metrics are paid, _2 earned (saves of ads). pinterest_ads_list_metrics lists every column with its definition. HOUR granularity no longer includes conversion metrics.

NameRequiredDescriptionDefault
levelNo
columnsNo
filtersNo
end_dateYes
max_rowsNo
start_dateYes
granularityNoDAY
template_idNo
poll_secondsNo
ad_account_idNo
report_formatNoJSON
targeting_typesNo
timeout_secondsNo
view_window_daysNo
click_window_daysNo
reporting_timezoneNo
conversion_report_timeNo
engagement_window_daysNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so 'Changes nothing in the account' is partly redundant, but the description adds real behavior the annotations cannot: it blocks and polls with progress updates, has configurable timeout/poll defaults, and returns a token on timeout for later retrieval. It also flags semantic traps (SPEND_IN_DOLLAR is account currency despite the name; _1 metrics are paid, _2 earned; HOUR granularity drops conversion 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?

The first paragraph is front-loaded and tight, covering mechanics and sibling routing in three sentences. The second block is dense but each clause carries distinct operational information; the only inefficiency is that the level/columns discussion reads as an unstructured run-on rather than being split by parameter domain.

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-value shape need not be described, and the description stays focused on what is uniquely risky for this tool: async polling, timeout recovery, template re-runs, and metric naming pitfalls. For a report-generation tool with 18 params, the async/timeout contract and column semantics are the details an agent would most likely get wrong, and both are covered.

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 0%, so the description carries the full burden, and it handles about half the 18 parameters well: level values, granularity values, date format, filters structure, report_format, template_id, and the three polling/limit params with defaults. However, ad_account_id, reporting_timezone, conversion_report_time, and the four window_days params receive no explanation anywhere, leaving a caller to guess at attribution semantics that materially change report output.

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?

Specific verb+resource: 'Request a report, wait for it with progress updates, and return its rows.' It distinguishes itself from the four sibling report tools by describing the create-plus-poll-plus-return behavior, and by explicitly deferring to pinterest_ads_create_report, pinterest_ads_get_report and pinterest_ads_list_report_templates for the pieces it does not do itself.

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

Usage Guidelines5/5

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

Names alternatives and the conditions that select them: same args as create_report, use get_report to check later after a timeout, use list_report_templates when re-running a saved Ads Manager report via template_id, and list_metrics to resolve column definitions. It also states the targeting_types requirement for *_TARGETING levels, which is a genuine precondition.

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

pinterest_ads_set_dry_runTurn dry-run mode on or offA
Idempotent

Turn dry-run on or off for this session. In dry-run, writes are recorded in the audit log and returned as a preview but NOT sent to Pinterest; reads still work.

NameRequiredDescriptionDefault
enabledYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Goes well beyond the annotations by explaining that writes are recorded in the audit log, returned as a preview, and never sent to Pinterest, while reads continue to work. The 'this session' phrasing also scopes the effect, which annotations alone do not convey. It could still say whether the setting survives reconnects, but the core behavior is disclosed.

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 tight sentences, action and scope front-loaded, with the explanation of dry-run semantics following. No redundant wording.

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 described, and the description covers effect, audit logging, previews, and read behavior. Minor remaining gap: whether the audit-logged previews can be retrieved later (the sibling audit tools suggest so but it is not stated).

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?

Only one boolean parameter with 0% schema description coverage, but the description's phrase 'turn dry-run on or off' maps directly onto 'enabled' and clarifies the two states' consequences. Nothing further is needed for a single toggle flag.

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 ('Turn dry-run on or off') plus the scope ('for this session'). No sibling tool in the list toggles dry-run behavior, so an agent can identify it unambiguously.

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 explains what dry-run does, which implicitly tells the agent to enable it before write operations. But it never states when to use it explicitly, gives no when-not conditions, and points to no alternative (e.g., read_request or audit_lookup) for inspection workflows.

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

pinterest_ads_set_statusesPause or activate many entitiesA
Idempotent

Pause or activate many campaigns, ad groups or ads at once, with progress.

entity: 'campaigns', 'ad_groups' or 'ads'. status: 'PAUSED' or 'ACTIVE' (to archive, use the matching archive tool). ACTIVE starts spending as soon as the parents are active too. More than PINTEREST_ADS_BULK_THRESHOLD items need confirm='APPLY'. Current statuses are kept in the audit log.

NameRequiredDescriptionDefault
idsYes
entityYes
statusYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) by disclosing the real-world consequence that 'ACTIVE starts spending as soon as the parents are active too', the write-guard escalation via confirm='APPLY', and that prior statuses are retained in the audit log. These are precisely the side effects and recovery details an agent needs before firing a bulk mutation.

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 lines, zero filler: purpose and scope first, then per-parameter semantics, then the escalation rule. The 'with progress' lead-in is slightly terse but signals long-running behavior that the output schema then details.

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 bulk mutation with 5 parameters and an output schema, this is nearly complete: it covers spending consequences, the confirm guard, audit retention, and the archive alternative, so return values needn't be restated. The gap is the ids/ad_account_id relationship and partial-failure behavior, which an agent must still 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 description coverage is 0%, so the description carries the burden; it enumerates entity values ('campaigns', 'ad_groups', 'ads'), status values ('PAUSED'/'ACTIVE'), and explains confirm's threshold semantics even though the schema shows no enum for it. It leaves ids and ad_account_id unexplained — notably whether ad_account_id is required to scope the ids or whether ids are globally unique.

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 pair plus resource and scope: 'Pause or activate many campaigns, ad groups or ads at once, with progress.' It also explicitly draws the boundary against the archive siblings ('to archive, use the matching archive tool'), so an agent can separate this from pinterest_ads_archive_campaigns/ad_groups/ads without inspecting 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 selection context: use this for status changes, use the matching archive tool for archiving, and use this for bulk ('many ... at once'). It also states the guard condition (more than PINTEREST_ADS_BULK_THRESHOLD items need confirm='APPLY'). It does not address when to prefer this over update_campaigns/ad_groups/ads for the same field, which is the remaining ambiguity.

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

pinterest_ads_suggest_keywordsSuggest keywordsC
Read-onlyIdempotent

Keyword ideas for a seed term: popular suggested terms and related terms.

NameRequiredDescriptionDefault
termYes
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds only a restatement of output categories and says nothing about rate limits, result ordering, or how the open-world external lookup behaves.

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?

A single compact sentence with the core purpose front-loaded and no filler. Its brevity is close to the right size for a two-parameter read tool, though the colon-list at the end is doing little work given an output schema exists.

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

Completeness3/5

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

Because an output schema exists, return values needn't be explained, and the annotations cover behavior, so the baseline is met. However, the undocumented 'limit' parameter and the absence of any usage context leave meaningful gaps for an agent deciding between this and other keyword tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, yet it only implicitly explains 'term' as a 'seed term' and never mentions 'limit' (default 10) at all. The agent gets no guidance on what limit bounds or what format the term should take.

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 resource and purpose: it generates keyword ideas from a seed term, split into 'popular suggested terms' and 'related terms'. That clearly distinguishes it from mutation siblings like pinterest_ads_create_keywords, though it never names or contrasts with pinterest_ads_list_keywords or pinterest_ads_get_targeting_options.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all: nothing says whether this is for building new keyword lists, expanding existing ones, or how it relates to list_keywords/create_keywords. The agent must infer usage entirely from the name and the word 'ideas'.

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

pinterest_ads_update_ad_groupsUpdate ad groupsA
Idempotent

Update ad groups (up to 500 per call). Changes the live account.

items: objects with id plus only the fields to change. Example: {"id": "2680059592705", "bid_in_micro_currency": 1500000} or {"id": "...", "targeting_spec": {...}}. targeting_spec replaces the whole spec. Money fields (budget_in_micro_currency, bid_in_micro_currency) are micro-units of the account currency (1.00 = 1000000). Current values are read first and their old values kept in the audit log. Bid or budget rises above PINTEREST_ADS_MAX_INCREASE_PCT, and large batches, need confirm='APPLY'; setting status ARCHIVED needs confirm='ARCHIVE'.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that changes hit the live account, that current values are read first and old values preserved in the audit log, the confirmation gates that guard risky writes, and that targeting_spec is replaced wholesale rather than merged. These are exactly the behavioral facts an agent needs before issuing a mutation, and nothing contradicts the idempotentHint/destructiveHint declarations.

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?

Front-loads the operation and batch limit, then moves to parameter shape, then to guardrails — a sensible order with no filler. The telegraphic style ('Changes the live account.') is dense but 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?

For a batch mutation tool with an output schema already present, the description covers mutation scope, payload shape, unit conventions, audit behavior, and confirmation requirements. Only the ad_account_id parameter and any partial-failure behavior in a 500-item batch go unaddressed.

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?

With schema description coverage at 0% and an untyped free-form items array, the description carries the full burden and largely meets it: it defines the id-plus-changed-fields shape, gives two concrete examples, explains whole-spec replacement for targeting_spec, and decodes micro-currency for money fields. The remaining gap is ad_account_id, whose null default and selection semantics are never explained.

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 ('Update ad groups') plus a concrete batch ceiling ('up to 500 per call') and the fact that it mutates the live account. This separates it cleanly from the create_/archive_/list_ siblings without needing their 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 explicit conditional guidance for the confirm parameter: 'APPLY' when bid/budget increases exceed PINTEREST_ADS_MAX_INCREASE_PCT or batches are large, 'ARCHIVE' when setting status ARCHIVED. It does not, however, route the agent between this tool and overlapping siblings like pinterest_ads_adjust_ad_group_bids, pinterest_ads_set_statuses, or pinterest_ads_archive_ad_groups.

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

pinterest_ads_update_adsUpdate adsA
Idempotent

Update ads (up to 500 per call). Changes the live account.

items: objects with id plus only the fields to change. Example: {"id": "687195134316", "status": "PAUSED"} or {"id": "...", "destination_url": "https://example.com/new"}. Current values are read first and their old values kept in the audit log. Bid or budget rises above PINTEREST_ADS_MAX_INCREASE_PCT, and large batches, need confirm='APPLY'; setting status ARCHIVED needs confirm='ARCHIVE'.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare mutation, idempotency, and open-world traits; the description adds the real operational context: the account is live, current values are read first and preserved in the audit log, batches are capped at 500, and confirm gates risky changes. It stops short of describing partial-failure or per-item error behavior.

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?

Front-loaded with purpose and impact, then parameter detail, then safety gates - a logical order with no filler sentences. The final sentence packs three distinct rules together, which is dense but still parseable.

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 bulk mutation tool with three parameters and zero schema descriptions, the description covers the shape of items, the confirmation protocol, and the audit-log side effect. The only material hole is ad_account_id, and return values are already handled by the existing output schema.

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 0% and the items array is an untyped object with additionalProperties true, so the description carries the full burden - it specifies 'id plus only the fields to change', gives two concrete examples, and enumerates the confirm values ('APPLY', 'ARCHIVE'). The ad_account_id parameter is never explained, which keeps this below a 5.

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 ('Update ads'), adds batch scope ('up to 500 per call') and impact ('Changes the live account'). Differentiation from siblings is only implicit - the confirm='ARCHIVE' note hints at the archive_ads tool, but it never names an alternative.

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 conditions for the confirm parameter (bid/budget rise above PINTEREST_ADS_MAX_INCREASE_PCT, large batches, status ARCHIVED) which effectively tells an agent when extra confirmation is required. It does not state when to prefer create_ads, archive_ads, or bulk_upsert instead, so there are no explicit exclusions.

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

pinterest_ads_update_audienceUpdate an audienceA
Idempotent

Rename an audience or change its description or rule. Changes the live account.

NameRequiredDescriptionDefault
nameNo
ruleNo
audience_idYes
descriptionNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds one valuable piece of context – 'Changes the live account' – signalling real-world mutation, but it says nothing about partial-update semantics (do omitted/null fields leave values untouched?), whether the rule replacement is wholesale, or how dry-run interacts with this 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?

Two short sentences, zero filler, with the actionable scope front-loaded ahead of the mutation warning. Nothing here could be cut without losing information.

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

Completeness3/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 annotations cover the safety profile. However, for a live-mutating tool whose schema documents none of its five parameters, the description omits the update semantics (partial vs. full replacement) and the role of ad_account_id, which an agent likely needs to call it 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?

Schema description coverage is 0% across five parameters, so the description must compensate; it names three of the five (name, description, rule) but adds no format or structural detail, and the 'rule' object parameter is left completely opaque. audience_id and ad_account_id – both critical to targeting the right object – are unmentioned, leaving real gaps for a low-coverage 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 states a specific verb and resource ('Rename an audience or change its description or rule') and enumerates the mutable fields, which distinguishes it from the sibling create/delete/list audience tools. It stops short of explicitly contrasting with those siblings, so it lands at a clear 4 rather than a 5.

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 by the verb 'update' – an agent can infer this is for modifying an existing audience, but nothing tells it when to prefer this over pinterest_ads_delete_audience, pinterest_ads_create_audience, or the dry-run mechanism. No prerequisites (account scope, permissions) or exclusions are stated.

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

pinterest_ads_update_campaignsUpdate campaignsA
Idempotent

Update campaigns (up to 500 per call). Changes the live account.

items: objects with id plus only the fields to change. Example: {"id": "626747269410", "daily_spend_cap": 25000000} or {"id": "...", "status": "PAUSED"}. Pinterest rejects daily budget rises smaller than 1.00 USD (or local equivalent). objective_type can only change on draft campaigns. Money fields (daily_spend_cap, lifetime_spend_cap) are micro-units of the account currency (1.00 = 1000000). Current values are read first and their old values kept in the audit log. Bid or budget rises above PINTEREST_ADS_MAX_INCREASE_PCT, and large batches, need confirm='APPLY'; setting status ARCHIVED needs confirm='ARCHIVE'.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the read-then-write audit behavior ('current values are read first and their old values kept'), the confirm gates for risky mutations, API-side rejections of sub-1.00 USD budget rises, and the micro-unit convention. What's missing is any mention of partial-failure semantics in a 500-item batch, which matters for a mutation tool.

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?

Front-loads the operation and the item contract before the special-case rules, and no sentence is filler. It is dense with constraints in the back half, but each constraint is actionable rather than redundant.

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 no explanation, and the description covers the mutation contract, units, and confirmation triggers. The remaining gap is ad_account_id and how batch-level failures are reported, which is material at a 500-item scale.

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 0%, so the description carries the burden and largely does: it explains the items shape (id plus only changed fields), gives worked examples, names the accepted confirm tokens 'APPLY' and 'ARCHIVE', and spells out micro-unit money fields. The ad_account_id parameter is left entirely unexplained, which keeps it short of full coverage.

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 ('Update campaigns') plus concrete scope facts: batch cap of 500 per call and that it mutates the live account. It does not, however, distinguish itself from close siblings such as pinterest_ads_adjust_budgets, pinterest_ads_set_statuses, or pinterest_ads_archive_campaigns, which cover overlapping outcomes.

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 usable rules for when confirmation is required (rises above PINTEREST_ADS_MAX_INCREASE_PCT, large batches, status ARCHIVED) and notes objective_type is draft-only. It never routes the agent away to an alternative tool, even though adjust_budgets, set_statuses, and archive_campaigns exist for subsets of this behavior.

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

pinterest_ads_update_customer_listAdd or remove customer list recordsA
Destructive

Add people to, or remove people from, a customer list. Changes the account.

operation: ADD or REMOVE. Identifiers are hashed as in pinterest_ads_create_customer_list. Up to 50,000 per call.

NameRequiredDescriptionDefault
operationNoADD
identifiersYes
ad_account_idNo
customer_list_idYes
hash_identifiersNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

The description adds meaningful behavior beyond the annotations: it states the account-changing side effect, the batch limit of 50,000 per call, and that identifiers must be hashed. These are operational facts the annotations don't convey. It doesn't discuss whether removals are reversible or how partial failures behave, which is notable since idempotentHint is false.

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: action first, side effect second, parameter and limit facts last. Almost every line carries information. The reference to create_customer_list for hashing is efficient, though the ordering could front-load the batch limit before the hashing note for faster scanning.

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

Completeness3/5

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

The output schema exists, so return values needn't be covered. But for a destructive, non-idempotent mutation, the description leaves out permissions requirements, retry semantics, and the meaning of the hash_identifiers flag, which the 0% schema coverage leaves undocumented elsewhere.

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 0% across five parameters, so the description must carry the load. It explains the two key semantics well: operation accepts ADD or REMOVE and identifiers must be hashed. It leaves ad_account_id, customer_list_id, and especially hash_identifiers (a boolean defaulting to true) unexplained, so it partially compensates rather than fully.

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 opens with a specific verb pair and resource: 'Add to or remove users from a customer list.' This clearly separates it from the read (pinterest_ads_list_customer_lists) and creation (pinterest_ads_create_customer_list) siblings. It references create_customer_list only for hashing conventions rather than to route an agent between them, so it falls just short of full sibling differentiation.

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 implies when to use this tool (when manipulating the membership of an existing customer list) and notes that it 'changes the account.' However, it never states when NOT to use it, nor does it reference the dedicated creation or listing tools. An agent must infer that pinterest_ads_create_customer_list is the right choice for a new list rather than deducing it from the text.

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

pinterest_ads_update_product_groupUpdate a product groupA
Idempotent

Rename a product group or change its description, filters or featured flag.

changes: e.g. {"name": "Trainers under 60", "filters": {...}}. For a retail catalog group include "catalog_type": "RETAIL". The old values are kept in the audit log.

NameRequiredDescriptionDefault
changesYes
ad_account_idNo
product_group_idYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (destructiveHint=false, idempotentHint=true, openWorldHint=true), so the description's addition of "The old values are kept in the audit log" is genuine extra value about reversibility and traceability. It still leaves the key mutation semantics unstated: whether fields omitted from "changes" are preserved or reset, and whether the operation is a merge or replace.

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 short sentences, front-loaded with the action, followed by a concrete example payload — nothing is padded. The inline "changes: e.g." fragment is slightly clipped for a spec-style document but costs no clarity.

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 nested-object mutation with no output schema, the description supplies the payload shape, a worked example, the catalog-type special case, and the audit-log consequence — enough to construct a correct call. The remaining gap is merge-vs-replace semantics on the "changes" object, which materially affects what an agent should send.

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 0% and "changes" is a free-form object with additionalProperties=true, so the description carries most of the burden; the inline example and the retail-catalog "catalog_type" note do real work. However, ad_account_id (nullable, default null) and product_group_id are never explained, and no enumeration of recognized change keys is given beyond three examples.

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 ("Rename a product group or change its description, filters or featured flag") and enumerates the mutable fields, which separates it from siblings like create_product_group, delete_product_group, and list_product_groups. It stops short of naming those siblings explicitly, but the scope 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 Guidelines3/5

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

Usage is implied by the verb "update" — the agent knows this applies to an existing group by ID — but there is no explicit when-to-use vs create_product_group or delete_product_group guidance, and no mention of prerequisites (catalog ownership, permissions) or the set_dry_run sibling. An agent can infer the case but is not steered.

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

pinterest_ads_update_product_group_promotionsUpdate product group promotionsA
Idempotent

Update product group promotions in one ad group. Changes the live account.

items: objects with id plus the fields to change, e.g. {"id": "...", "status": "PAUSED"} or {"id": "...", "bid_in_micro_currency": 900000}. Bid rises above PINTEREST_ADS_MAX_INCREASE_PCT and large batches need confirm='APPLY'; status ARCHIVED needs confirm='ARCHIVE'.

NameRequiredDescriptionDefault
itemsYes
confirmNo
ad_group_idYes
ad_account_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses that the live account is changed, that bid increases are capped by a percentage limit, and that certain operations require explicit confirm tokens with exact values. This is exactly the operational risk context 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.

Conciseness4/5

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

Three short sentences, front-loaded with the mutation warning, followed by the item shape and the confirm rules. Dense line-wrapping makes it slightly harder to scan, but there is no wasted wording.

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 live-mutation tool with an output schema and no parameter descriptions, it covers the essential risks: real account changes, bid thresholds, and confirm requirements. The main gap is the absence of any explanation of ad_group_id/ad_account_id scoping and partial-update semantics.

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 0%, so the description must carry the load. It does a decent job explaining 'items' as id-plus-fields with two concrete examples and documents the 'confirm' values, but ad_group_id and ad_account_id are never explained, leaving half the parameters undocumented.

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 ('Update product group promotions') plus a scope constraint ('in one ad group'), which is more precise than the bare name. It does not explicitly differentiate itself from the list/create product group promotion siblings, but the mutation verb makes the distinction fairly clear.

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 actionable conditional guidance: bid increases above PINTEREST_ADS_MAX_INCREASE_PCT and large batches require confirm='APPLY', and setting status ARCHIVED requires confirm='ARCHIVE'. It does not name alternatives such as the dry-run or create/list siblings, but the guardrail conditions are concrete enough for correct invocation.

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. 81 tool updatesv0.1.0
    • First observedpinterest_ads_adjust_ad_group_bids
    • First observedpinterest_ads_adjust_budgets
    • First observedpinterest_ads_archive_ad_groups
    • First observedpinterest_ads_archive_ads
    • First observedpinterest_ads_archive_campaigns
    • First observedpinterest_ads_archive_keywords
    • First observedpinterest_ads_audit_lookup
    • First observedpinterest_ads_audit_tail
    • First observedpinterest_ads_batch_catalog_items
    • First observedpinterest_ads_bulk_export
    • First observedpinterest_ads_bulk_upsert
    • First observedpinterest_ads_create_ad_groups
    • First observedpinterest_ads_create_ad_pin
    • First observedpinterest_ads_create_ads
    • First observedpinterest_ads_create_audience
    • First observedpinterest_ads_create_campaigns
    • First observedpinterest_ads_create_customer_list
    • First observedpinterest_ads_create_keywords
    • First observedpinterest_ads_create_negative_keywords
    • First observedpinterest_ads_create_product_group
    • First observedpinterest_ads_create_product_group_promotions
    • First observedpinterest_ads_create_report
    • First observedpinterest_ads_delete_audience
    • First observedpinterest_ads_delete_product_group
    • First observedpinterest_ads_describe_server
    • First observedpinterest_ads_download_report
    • First observedpinterest_ads_estimate_audience_size
    • First observedpinterest_ads_get_ad_account
    • First observedpinterest_ads_get_analytics
    • First observedpinterest_ads_get_audience
    • First observedpinterest_ads_get_audience_insights
    • First observedpinterest_ads_get_bid_floors
    • First observedpinterest_ads_get_bulk_request
    • First observedpinterest_ads_get_catalog_items
    • First observedpinterest_ads_get_catalog_items_batch
    • First observedpinterest_ads_get_conversion_tag
    • First observedpinterest_ads_get_keyword_metrics
    • First observedpinterest_ads_get_metrics_ready_state
    • First observedpinterest_ads_get_pin
    • First observedpinterest_ads_get_product_group_product_counts
    • First observedpinterest_ads_get_report
    • First observedpinterest_ads_get_targeting_options
    • First observedpinterest_ads_get_user_account
    • First observedpinterest_ads_health_check
    • First observedpinterest_ads_ingest_catalog_feed
    • First observedpinterest_ads_list_ad_accounts
    • First observedpinterest_ads_list_ad_groups
    • First observedpinterest_ads_list_ads
    • First observedpinterest_ads_list_audiences
    • First observedpinterest_ads_list_board_pins
    • First observedpinterest_ads_list_boards
    • First observedpinterest_ads_list_business_assets
    • First observedpinterest_ads_list_businesses
    • First observedpinterest_ads_list_campaigns
    • First observedpinterest_ads_list_catalog_feeds
    • First observedpinterest_ads_list_catalogs
    • First observedpinterest_ads_list_conversion_tags
    • First observedpinterest_ads_list_customer_lists
    • First observedpinterest_ads_list_feed_processing_results
    • First observedpinterest_ads_list_item_issues
    • First observedpinterest_ads_list_keywords
    • First observedpinterest_ads_list_metrics
    • First observedpinterest_ads_list_pins
    • First observedpinterest_ads_list_product_group_products
    • First observedpinterest_ads_list_product_group_promotions
    • First observedpinterest_ads_list_product_groups
    • First observedpinterest_ads_list_report_templates
    • First observedpinterest_ads_list_targeting_templates
    • First observedpinterest_ads_read_request
    • First observedpinterest_ads_request
    • First observedpinterest_ads_run_report
    • First observedpinterest_ads_set_dry_run
    • First observedpinterest_ads_set_statuses
    • First observedpinterest_ads_suggest_keywords
    • First observedpinterest_ads_update_ad_groups
    • First observedpinterest_ads_update_ads
    • First observedpinterest_ads_update_audience
    • First observedpinterest_ads_update_campaigns
    • First observedpinterest_ads_update_customer_list
    • First observedpinterest_ads_update_product_group
    • First observedpinterest_ads_update_product_group_promotions

TDQS

B3.3/5.0

Scored across 81 tools

Disambiguation4/5

The bulk of the surface is cleanly partitioned by resource (campaigns, ad_groups, ads, keywords, audiences, catalogs, product_groups) with matching list/create/update/archive verbs, so misselection is unlikely. The main overlaps are the metrics path (get_analytics vs. the create/get/download/run_report family) and run_report as a wrapper around create_report, which the descriptions do address but still leave two ways to accomplish the same read.

Naming Consistency4/5

Nearly all tools follow a consistent pinterest_ads_ verb_noun pattern (list_, get_, create_, update_, archive_, delete_, set_, adjust_, estimate_, suggest_). Minor deviations exist in pinterest_ads_request / pinterest_ads_read_request (no verb_noun) and the bulk/batch utilities (bulk_upsert, bulk_export, batch_catalog_items), but overall it is predictable.

Tool Count2/5

81 tools is far past the point where an agent can scan the set comfortably, and several tools are thin wrappers or conveniences (run_report vs create_report, read_request vs request). The domain is genuinely broad, but the surface is heavy enough that batching/consolidation would materially help.

Completeness4/5

CRUD/lifecycle coverage is strong across campaigns, ad groups, ads, keywords, audiences, customer lists, catalogs and product groups, plus reporting and escape-hatch raw endpoints. Minor gaps remain, e.g. targeting templates are list-only and conversion tags are read-only, but these are workable via the generic request tools.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables management of Google Ads accounts via MCP, providing read and write tools for campaigns, ad groups, keywords, assets, and more, with support for reporting and mutations.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables MCP clients to read Snapchat Ads campaigns and performance and to prepare preview-first changes for selected ad accounts, with opt-in write tools and explicit confirmation before applying updates.
    21
    613 npm
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to inspect ad account structure, campaign performance, demographic breakdowns, and revenue attribution, and to prepare opt-in, preview-first draft campaigns, ads, and media uploads for explicitly selected accounts.
    18
    304 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables reporting on and managing Sponsored Products, Sponsored Brands, and Sponsored Display campaigns, keywords, targets, bids, budgets, portfolios, and budget rules through MCP clients, with dry-run, confirmation guards, read-only mode, and an audit log for safer write operations.
    MIT