Skip to main content
Glama
filippofinke

reddit-ads-mcp

by filippofinke

📣 MCP server for the Reddit Ads API v3: let any MCP-compatible AI client create, update, delete and report on campaigns, ad groups, ads, audiences, catalogs and more.

⚠️ Not affiliated with Reddit, Inc. You need your own Reddit Ads developer app. Actions run against your real ad accounts and can spend real money.

🏠 Homepage

Features

  • 🧭 Full API coverage: all 108 operations of the Reddit Ads API v3 as 114 MCP tools, plus a raw request tool

  • 🔐 Browser OAuth login: only a client ID and secret needed; the server opens Reddit's consent page, catches the callback on localhost and stores a refresh token (0600) that is refreshed automatically

  • 📊 Campaign management: campaigns, ad groups, ads, bulk activate / pause / archive / delete

  • 🖼️ Creatives: structured post jobs, legacy posts, creative asset library, video poster generation

  • 🎯 Targeting: communities, interests, geolocations, devices, carriers, languages, third-party audiences, keyword suggestions

  • 👥 Audiences: custom audiences (hashed user upload), saved audiences, lead gen forms

  • 📈 Reporting and planning: performance reports with breakdowns, bid suggestions, audience and delivery estimates, reach curves

  • 🛒 Catalogs and conversions: product catalogs, feeds, sets, batch upserts, pixels, Conversions API, data deletion jobs

  • 📄 Pagination: automatic next_url following with merged results

  • 🔁 Resilient: token refresh on 401, backoff on 429, no retries of non-idempotent writes

Related MCP server: mcp-reddit-ads

Quick start

  1. Create a Reddit developer app: in Reddit Ads Manager open Business settings → Developer applications (business admins only), set the redirect URL to http://localhost:8765/callback and copy the Client ID and Client secret.

  2. Add the server to your MCP client (no clone or build needed, Node 20+):

claude mcp add -s user reddit-ads \
  -e REDDIT_ADS_CLIENT_ID=your_client_id \
  -e REDDIT_ADS_CLIENT_SECRET=your_client_secret \
  -- npx -y @filippofinke/reddit-ads-mcp@latest

or with one click:

Install in Cursor Install in VS Code Install in VS Code Insiders

  1. Ask your assistant "List my Reddit ad accounts" and approve the Reddit consent page that opens.

Setup

1. Create a Reddit developer app

In Reddit Ads Manager, open Business settings → Developer applications and create an app (business admins only). Set the redirect URL to:

http://localhost:8765/callback

Copy the Client ID and Client secret.

2. Connect your MCP client

It is a standard stdio MCP server published on npm, so it works with any client that supports MCP (Claude, Cursor, VS Code, Windsurf, Codex, Gemini CLI, Zed, Cline, Continue, …):

{
  "mcpServers": {
    "reddit-ads": {
      "command": "npx",
      "args": ["-y", "@filippofinke/reddit-ads-mcp@latest"],
      "env": {
        "REDDIT_ADS_CLIENT_ID": "your_client_id",
        "REDDIT_ADS_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Client

Where the config goes

Claude Desktop

claude_desktop_config.json

Claude Code

claude mcp add -s user reddit-ads -e REDDIT_ADS_CLIENT_ID=… -e REDDIT_ADS_CLIENT_SECRET=… -- npx -y @filippofinke/reddit-ads-mcp@latest

Cursor

~/.cursor/mcp.json or .cursor/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

Gemini CLI

~/.gemini/settings.json

Cline / Roo Code

MCP settings of the extension

VS Code (Copilot)

.vscode/mcp.json, using "servers" instead of "mcpServers" and "type": "stdio"

Codex CLI

~/.codex/config.toml (see below)

Codex CLI uses TOML:

[mcp_servers.reddit-ads]
command = "npx"
args = ["-y", "@filippofinke/reddit-ads-mcp@latest"]
env = { REDDIT_ADS_CLIENT_ID = "your_client_id", REDDIT_ADS_CLIENT_SECRET = "your_client_secret" }

To run from source instead, clone the repo, run npm install && npm run build and use "command": "node", "args": ["/absolute/path/to/reddit-ads-mcp/dist/index.js"].

3. Log in

Ask your assistant anything, e.g. "List my Reddit ad accounts". On the first call the server opens Reddit's consent page. After you approve, the refresh token is saved to ~/.config/reddit-ads-mcp/tokens.json and reused from then on.

reddit_ads_auth_status shows the current state and reddit_ads_logout revokes and deletes the token.

Configuration

Variable

Default

Purpose

REDDIT_ADS_CLIENT_ID

required

App client ID

REDDIT_ADS_CLIENT_SECRET

required

App client secret

REDDIT_ADS_ACCOUNT_ID

Default ad account for tools taking ad_account_id

REDDIT_ADS_REDIRECT_PORT

8765

Port of the local OAuth callback server

REDDIT_ADS_REDIRECT_URI

http://localhost:<port>/callback

Must exactly match the app's redirect URL

REDDIT_ADS_SCOPES

adsread adsedit adsconversions adsdatadeletion

OAuth scopes

REDDIT_ADS_TOKEN_PATH

~/.config/reddit-ads-mcp/tokens.json

Token storage

REDDIT_ADS_USER_AGENT

node:reddit-ads-mcp:1.0.0

Reddit asks for <platform>:<app id>:<version> (by /u/<username>)

Example prompts

  • "Show last week's spend, clicks and CTR per campaign"

  • "Create a paused traffic campaign targeting r/legaladvice and r/law in the US with a $20 daily budget"

  • "Pause every ad group with a CPC above $2"

  • "Suggest subreddits and keywords similar to r/startups"

  • "Archive the campaign named Summer Sale"

Caveats

  • 💵 Money values are micro-currency: 1000000 is one unit of the account currency.

  • 🗑️ Campaigns, ad groups and ads have no hard delete: set status DELETED. A campaign must be ARCHIVED first, and deletion is only allowed three hours after the last change.

  • 📌 New ad groups require a conversion_pixel_id, usually equal to the ad account ID (see reddit_ads_list_pixels).

  • 🔎 The custom audience name filter needs an operator prefix: = for exact, @ for substring.

Scripts

npm run dev         # run from source with tsx
npm run build       # compile to dist/
npm run typecheck   # tsc --noEmit
npm run lint        # Biome lint + format check
npm run format      # Biome lint + format (write)

Author

👤 Filippo Finke

🤝 Contributing

Contributions, issues and feature requests are welcome! Feel free to check the issues page. Commits and PR titles follow Conventional Commits; releases are automated with release-please: merged commits accumulate into a Release PR that, once merged, tags the version, creates a GitHub release and publishes to npm.

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2026 Filippo Finke. This project is MIT licensed.


Unofficial project, not affiliated with Reddit, Inc.

Available Tools

114 tools
reddit_ads_api_requestRaw Reddit Ads API requestA
Destructive

Call any Reddit Ads API v3 endpoint directly. Use for endpoints without a dedicated tool. Path is relative to https://ads-api.reddit.com/api/v3 (e.g. 'me' or 'ad_accounts/{id}/campaigns'). Bodies for POST/PATCH/PUT are usually wrapped as {"data": {...}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body sent as-is
pathYesEndpoint path, e.g. ad_accounts/t2_abc/campaigns
queryNoQuery string parameters
methodYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=true, openWorld=true, so the safety profile is covered. The description adds real context beyond that: the base URL the path is relative to and the non-obvious {"data": {...}} body-wrapping convention for POST/PATCH/PUT. It omits auth/permission requirements and rate-limit behavior, which would be valuable for a destructive open-world tool.

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

Conciseness5/5

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

Three tight sentences, each earning its place: what it does, when to use it, and the two non-obvious formatting conventions. The purpose and gating condition are 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?

For a raw proxy with no output schema, the description covers the essentials an agent needs: base URL, path form, and body envelope. It leaves out auth prerequisites, response/error shape, and any hint about which endpoints exist, which matters given the tool's open-world, destructive nature.

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 75% and the schema already describes path, body, and query. The description adds information the schema lacks: the base URL that 'path' is relative to and the body-wrapping convention, which materially change how an agent constructs the call. It does not clarify the query parameter value types or method semantics further.

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

Purpose5/5

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

States a specific verb+resource: 'Call any Reddit Ads API v3 endpoint directly.' In a family of ~100 dedicated endpoint tools, it clearly marks itself as the raw escape hatch, so an agent can distinguish it from every sibling 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?

'Use for endpoints without a dedicated tool' gives an explicit selection condition that routes the agent correctly relative to the dedicated tools. It does not, however, name specific alternatives or warn against using it when a dedicated tool exists for a mutation, so the routing is clear but not maximally explicit.

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

reddit_ads_auth_statusAuth statusA
Read-only

Show whether the server holds valid Reddit Ads credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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=true and openWorldHint=true, so the safe-read profile is covered. The description adds nothing about what a failure looks like, whether it makes a network round-trip, or any rate-limit behavior, so it is only mildly additive.

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 word 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?

For a trivial no-param, no-output-schema tool, the description does convey the essential return semantics (credential validity). It could still say what to do on failure, but the core need is met.

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 no parameters, which per the baseline yields a 4. There is nothing in the schema for the description to clarify, and it correctly implies no input is required.

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 ('show whether the server holds valid Reddit Ads credentials'), which is immediately distinguishable from the login/logout siblings. It is clear but never names those alternatives, 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 Guidelines2/5

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

No when-to-use guidance is given. The description does not say to run this before other Reddit Ads calls, nor how it relates to reddit_ads_login or reddit_ads_logout, 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.

reddit_ads_create_adCreate adA

Create an ad in an ad group. Standard ads promote a post: first create one with reddit_ads_create_post_job (or reddit_ads_create_post) and pass its post_id (t3_...). Create it PAUSED unless the user asks otherwise.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Required: ad_group_id, name, configured_status (ACTIVE|PAUSED). Standard ad: post_id, click_url (landing page), click_url_query_parameters [{name, value}], event_trackers [{type: CLICK|VIEW, url}], preview_expiry, profile_id, products [{product_id}], shopping_creative {headline, call_to_action, destination_url, allow_comments, second_line_cta, dpa_carousel_mode, hero_card}. Reddit Max ad: type "DYNAMIC_CREATIVE_AD_TEMPLATE", profile_id, asset_identifiers [{id}] (>=3 headlines and >=2 media from reddit_ads_upload_creative_assets), thumbnail_asset_identifiers, destination {type: "URL", url, display_url}, supplementary_text.
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds real value beyond them: the default PAUSED status and the dependency on a pre-existing post. It does not mention authorization requirements or what the response returns, but for a create tool with no output schema that is a minor gap.

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 action, then prerequisite, then default status. Every sentence carries actionable information; nothing is redundant with the schema.

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

Completeness4/5

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

For a create-only tool with no output schema, the description covers the prerequisite, the id format, and the default status. It does not note the required ad_group_id/name/configured_status explicitly, though those are already in the 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 100% and the nested data object is thoroughly documented, so baseline is 3. The description still adds the t3_... post_id format and where that id comes from, tying the parameter to the prerequisite tool rather than leaving it as a bare string.

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 precise verb+resource+scope: 'Create an ad in an ad group.' This clearly separates it from reddit_ads_create_campaign and reddit_ads_create_ad_group, and it further distinguishes the standard-ad path from the Reddit Max flow.

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 the explicit prerequisite chain — create the post first with reddit_ads_create_post_job (or reddit_ads_create_post) and pass its post_id — and states the default operational behavior ('Create it PAUSED unless the user asks otherwise'). The agent knows both how to prepare and how to invoke.

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

reddit_ads_create_ad_groupCreate ad groupA

Create an ad group inside a campaign. All money values are micro-currency (1 USD = 1000000). Create it PAUSED unless the user asks otherwise. Under campaign budget optimization the bid_strategy, bid_type, goal_type, optimization_goal and view_through_conversion_type must match the campaign and goal_value must be null.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Required: campaign_id, name, bid_strategy, bid_type, conversion_pixel_id (the account pixel ID from reddit_ads_list_pixels, often equal to the ad account ID); set configured_status (ACTIVE|PAUSED). Common: start_time, end_time (ISO 8601, null runs continuously), goal_type (DAILY_SPEND|LIFETIME_SPEND), goal_value (budget), bid_strategy (BIDLESS|MANUAL_BIDDING|MAXIMIZE_VOLUME|TARGET_CPX), bid_type (CPC|CPM|CPV|CPV6|CPV15), bid_value, optimization_goal (CLICKS|PAGE_VISIT|ADD_TO_CART|PURCHASE|LEAD|SIGN_UP|VIEW_CONTENT|SEARCH|LANDING_PAGE_VISIT|VIDEO_VIEW_6S|VIDEO_VIEW_15S|MOBILE_CONVERSION_*), view_through_conversion_type, conversion_pixel_id, schedule, saved_audience_id, app_id, product_set_id, shopping_type (DYNAMIC|STATIC), shopping_targeting, targeting object: communities / excluded_communities (subreddit names), interests / excluded_interests (IDs from reddit_ads_list_interests), keywords / excluded_keywords, geolocations / excluded_geolocations (IDs from reddit_ads_list_geolocations, e.g. "US"), custom_audience_ids / excluded_custom_audience_ids, devices [{type: DESKTOP|MOBILE, os: ANDROID|IOS, min_version, max_version}], carriers [], platforms [ALL|DESKTOP|MOBILE_NATIVE|MOBILE_WEB|...], locations [FEED|COMMENTS_PAGE], gender (MALE|FEMALE|null), languages [EN|DE|...], expand_targeting (bool). Reddit Max ad groups: type "AUTOMATED" with targeting required.
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a non-read-only, non-destructive, open-world write. The description adds genuinely new behavioral facts beyond that: the default PAUSED status, the micro-currency convention (1 USD = 1000000), and the CBO constraint that several fields must match the campaign with goal_value null. It does not mention permissions or response behavior, but the added context is substantive.

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 front-loaded sentences, each carrying a distinct constraint (hierarchy, currency, default state, CBO rule) with no filler. Slightly dense 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?

Given a deep nested schema, no output schema, and full schema coverage, the description supplies the defaults and cross-field constraints the schema cannot express. It is nearly complete for correct invocation; only permission/auth context is absent, which is minor here.

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

Parameters4/5

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

Schema description coverage is 100%, so a baseline of 3 would apply. The description goes further, clarifying the micro-currency unit for monetary fields and the CBO rule that bid_strategy, bid_type, goal_type, optimization_goal and view_through_conversion_type must match the campaign and goal_value must be null — semantics not present in the schema.

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

Purpose4/5

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

States a specific verb and resource ('Create an ad group') and situates it in the object hierarchy ('inside a campaign'), which orients the agent relative to reddit_ads_create_campaign and reddit_ads_create_ad. It does not explicitly name those siblings, 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 Guidelines4/5

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

Gives clear operational guidance ('Create it PAUSED unless the user asks otherwise') and a conditional prerequisite for campaign budget optimization. It does not cover when to prefer this tool over alternatives or ordering requirements relative to campaign creation, but the context is well supplied.

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

reddit_ads_create_campaignCreate campaignA

Create a campaign. All money values are micro-currency (1 USD = 1000000). Create it PAUSED unless the user asks otherwise.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Required: name, configured_status (ACTIVE|PAUSED), objective (CLICKS|CONVERSIONS|IMPRESSIONS|VIDEO_VIEWABLE_IMPRESSIONS|APP_INSTALLS|CATALOG_SALES|LEAD_GENERATION|BRAND_AWARENESS|SALES). Optional: funding_instrument_id, special_ad_categories [HOUSING_EMPLOYMENT_CREDIT|NONE], use_catalog (SALES only), spend_cap, app_id, invoice_label, type ("AUTOMATED" for Reddit Max campaigns, objectives CLICKS|CONVERSIONS|APP_INSTALLS). Campaign budget optimization: is_campaign_budget_optimization true plus start_time, end_time, goal_type (DAILY_SPEND|LIFETIME_SPEND, LIFETIME needs end_time), goal_value, bid_strategy (BIDLESS|MAXIMIZE_VOLUME|TARGET_CPX), bid_type (CPC|CPM|CPV6|CPV15), bid_value, optimization_goal, view_through_conversion_type (SEVEN_DAY_CLICKS|SEVEN_DAY_CLICKS_ONE_DAY_VIEW), conversion_pixel_id, schedule [{start_day 0-6, start_hour, end_day, end_hour}].
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this is a mutating (readOnlyHint=false), non-destructive, open-world operation. The description adds two behaviorally important details not present in the structured data: the micro-currency money convention and the PAUSED-by-default creation behavior. It does not describe the response or post-creation side effects, keeping 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?

Three short sentences, the action front-loaded first, followed by the two constraints that most affect correct invocation (units and default status). No filler or redundancy.

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 creation tool with rich nested schema documentation and annotations covering the safety profile, the description covers the highest-risk gotchas (currency units, default paused state). Without an output schema, one might want a note on the returned campaign ID, but the essentials are present.

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

Parameters3/5

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

Schema description coverage is 100%, and the nested data object is documented exhaustively (objectives, bid strategies, scheduling, etc.), so the schema carries parameter semantics. The description only adds the micro-currency unit convention, which is relevant for money fields but otherwise marginal beyond the schema baseline.

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 (Create) and resource (campaign) in the title and first sentence, so the action is unambiguous. However it does not differentiate this tool from close siblings such as reddit_ads_create_ad_group or reddit_ads_create_ad, relying on the agent to infer the hierarchy.

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 instruction 'Create it PAUSED unless the user asks otherwise' gives a concrete default behavior, which is useful. But there is no guidance on when to use this versus update_campaign or create_ad_group, and no prerequisites are stated, so usage is only implied.

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

reddit_ads_create_catalogCreate product catalogC

Create a product catalog for dynamic product ads.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, default_language (en|de|es|fr|it|pt), default_currency (USD|GBP|CAD|EUR|AUD|JPY|CHF|NZD|SEK|NOK), event_sources [pixel IDs].
business_idYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read, non-destructive, open-world write (readOnlyHint=false, destructiveHint=false, openWorldHint=true), which covers the safety profile. The description adds nothing beyond that—no mention of auth/permission needs, whether catalogs are unique per business, or what side effects creation triggers.

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 is efficient. It is arguably under-specified rather than verbose, but as written nothing wastes space.

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 create mutation with an open-world hint, no output schema, and a nested required data object, the description omits return information, required-field expectations, and any ordering/prerequisite context. An agent would need to open the schema and guess at the rest, so it is incomplete for the tool's complexity.

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 50%: the nested data object documents name, default_language, default_currency, and event_sources, but business_id carries no description. The prose adds no parameter meaning of its own, so it neither compensates for the gap nor detracts. Baseline 3 given the mixed 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?

The description states a clear verb+resource ("Create a product catalog") and adds the purpose ("for dynamic product ads"), so an agent knows this is the creation counterpart to list/get/update/delete_catalog. It does not explicitly name or contrast those siblings, but the operation 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 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 prerequisites (e.g., a business must exist first), and no mention of alternatives such as reddit_ads_update_catalog or the product-feed tools. The agent is left to 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.

reddit_ads_create_custom_audienceCreate custom audienceA

Create a custom audience. For customer lists, add users afterwards with reddit_ads_update_custom_audience_users.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. One of: {type: "CUSTOMER_LIST", name, customer_list_config: {origin_client_id, origin, external_audience_id}}; {type: "PIXEL_RETARGETING", name, pixel_audience_config: {pixel_ids: [one id], targetings: [PAGE_VISIT|VIEW_CONTENT|SEARCH|ADD_TO_CART|ADD_TO_WISHLIST|PURCHASE|LEAD|SIGN_UP|CUSTOM], lookback_window_days 1-90, custom_targetings}}; {type: "ENGAGEMENT_RETARGETING", name, engagement_audience_config: {tracking_types: [IMPRESSIONS|CLICKS|UPVOTES|COMMENT_SUBMISSIONS|VIDEO_STARTED|VIDEO_WATCHED_50_PERCENT|VIDEO_WATCHED_100_PERCENT], lookback_window_days 1-180, campaign_ids: []}}.
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, open-world mutation, so safety is covered. The description adds the post-creation user-population step, which is real behavioral context, but says nothing about permissions, idempotency, or whether a duplicate-named audience is created.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action and followed by the single most useful next-step pointer. No filler or redundancy.

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

Completeness4/5

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

With annotations covering the safety profile, a fully documented schema, and no output schema, the description covers creation plus the key follow-up step. Minor gap: it never acknowledges the three distinct audience types at a high level, leaving the reader to discover them in the schema.

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

Parameters3/5

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

Schema description coverage is 100% and the nested 'data' description exhaustively documents the three audience types and their config fields, so the schema does the heavy lifting. The description adds no parameter meaning beyond that, which is the expected baseline at 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 ('Create a custom audience'), which distinguishes it from siblings like create_saved_audience and create_catalog. However it does not explicitly contrast with those siblings, so the reader must rely on the name alone to disambiguate.

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?

Provides one concrete workflow hint: for customer lists, add users afterwards via reddit_ads_update_custom_audience_users. That is genuinely useful, but there is no guidance on when to prefer a custom audience over a saved audience, nor on prerequisites or account scoping.

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

reddit_ads_create_data_deletion_jobDelete user data (ad account)C

Request deletion of a person's data from an ad account (requires the adsdatadeletion scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-vs-read profile is covered. The description adds genuinely useful behavioral context by naming the required OAuth scope, which is not in the annotations or schema. However, it omits the most important behavior of a job-creating tool: that it is asynchronous, returns a job handle, and that the deletion is not immediate — relevant given the tension between the word "deletion" and destructiveHint=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?

A single front-loaded sentence with no filler; the scope requirement is placed inline where it is read. It is arguably too terse for a mutation tool, but on this dimension the economy is a strength rather than padding.

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 write tool with a nested-object schema, no output schema, and 50% schema coverage, the description leaves the agent without essential context: whether the operation is async, how to verify completion, whether the request is idempotent, or what identifiers are accepted. Annotations carry only the basic safety profile, so the description's burden was higher than it delivers.

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 only 50%: the leaf "value" field and "ad_account_id" are documented, but the required "data"/"identifiers" wrapper and the 200-identifier cap are covered only by structural constraints. The description adds no parameter information at all — it never mentions identifiers, the five supported identifier types, hashing requirements, or the batch limit — so it fails to 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 verb+resource pair ("Request deletion of a person's data from an ad account"), which is more precise than the title's generic "Delete user data". It implicitly separates itself from the sibling reddit_ads_create_pixel_data_deletion_job by scoping to an ad account, but never names or contrasts 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 Guidelines2/5

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

The only usage-relevant guidance is the parenthetical scope requirement ("requires the adsdatadeletion scope"). There is no statement of when to use this tool versus the pixel data-deletion sibling, no mention of prerequisites (e.g., the ad account must exist), and no hint that a companion tool like get_data_deletion_job exists to check the outcome.

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

reddit_ads_create_lead_gen_formCreate lead gen formC

Create a lead generation form.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, privacy_link (https URL), prompt, questions [{type: EMAIL|FIRST_NAME|LAST_NAME|PHONE_NUMBER|POSTAL_CODE|JOB_TITLE|COMPANY|COMPANY_EMAIL, required}] (at least one required).
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the basic safety profile is covered. However, the description adds nothing beyond that: it does not mention required fields, that the form is created in an ad account, any auth requirements, or what the resulting form object looks like. With annotations present the bar is lower, but a mutation tool that adds zero behavioral context lands at a 2.

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

Conciseness2/5

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

It is a single short sentence with zero waste, but it is under-specified rather than concise. The one sentence conveys nothing the tool name did not already convey, so brevity here is a deficiency, not a virtue.

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?

This is a creation tool with a nested required object (questions with at least one entry) and no output schema, yet the description explains none of the mandatory shape, the account scoping, or the result. The schema rescues callability, but the prose leaves the agent without any operational context.

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

Parameters3/5

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

Schema description coverage is 100% – the nested data object already documents name, privacy_link, prompt, and the questions array with its enum types and constraint. The description adds no parameter meaning on top of that, so the baseline of 3 applies.

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

Purpose2/5

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

"Create a lead generation form" simply restates the tool name and title with no additional specificity. It does not distinguish this tool from its siblings reddit_ads_get_lead_gen_form or reddit_ads_list_lead_gen_forms beyond the obvious verb, nor does it hint at what a lead gen form requires.

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, what prerequisites exist (e.g., an ad account or business context), or how it relates to the sibling list/get form tools. The agent must infer usage entirely from the name.

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

reddit_ads_create_pixel_data_deletion_jobDelete user data (pixel)A

Request deletion of a person's data collected by a pixel (requires the adsdatadeletion scope and business admin).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
pixel_idYes

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, so the safety profile is partly covered. The description adds genuinely useful context by disclosing the required scope and the business-admin role needed to invoke it. It stops short of describing the async job behavior or return/status handling.

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 naming the action, resource, and the gating requirement in a parenthetical. No wasted words.

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 open-world, mutating job-creation tool with nested parameters and no output schema, the description gives prerequisites but no sense of rate limits, job lifecycle, or how the resulting job is retrieved. Adequate but leaves meaningful gaps for a compliance-sensitive data deletion operation.

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 conceptually maps 'person's data' to the data/identifiers payload and 'a pixel' to pixel_id. However it omits the meaningful constraints in the schema (identifier type enum, SHA-256 hashing option, maxItems of 200), so it only partially compensates.

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: requesting deletion of a person's data collected by a pixel. This distinguishes it from the sibling reddit_ads_create_data_deletion_job by scoping to pixel-collected data, though the sibling relationship is left implicit rather than named.

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

Usage Guidelines3/5

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

The prerequisite (adsdatadeletion scope and business admin) is a useful precondition, but there is no guidance on when to choose this tool over the generic reddit_ads_create_data_deletion_job sibling or the get_data_deletion_job follow-up. Usage is only implied by the pixel-specific framing.

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

reddit_ads_create_postCreate post (legacy)A

Create a post on a profile synchronously (legacy posts API). Prefer reddit_ads_create_post_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: type (IMAGE|VIDEO|TEXT|CAROUSEL), headline, body, is_richtext, allow_comments, thumbnail_url (required for VIDEO), content [{media_url, destination_url, display_url, call_to_action, caption}]. call_to_action values: Apply Now, Contact Us, Download, Get a Quote, Get Showtimes, Install, Learn More, Order Now, Play Now, Pre-order Now, See Menu, Shop Now, Sign Up, View More, Watch Now, Book Now, Buy Tickets, Get Directions, Listen Now, Read More, Subscribe, Visit Store, Donate Now, Remind Me.
profile_idYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=false, openWorld=true, so the safety profile is covered. The description adds that execution is synchronous and that it is the legacy API, which is genuinely useful behavioral context versus the async job path, but nothing about auth needs, rate limits, or side effects.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and scope, followed immediately by the preferred alternative. Zero 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 2-param mutation with a complex nested payload and no output schema, the description covers purpose and the preferred alternative but says nothing about the return value of the synchronous call or the meaning of profile_id. Adequate given the rich data schema and annotations, but with gaps.

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 50%: the nested data field is richly documented (types, content array, call_to_action enum values), but profile_id carries no description and the tool description adds no parameter detail of its own. Given the thorough schema for data, baseline 3 is appropriate, though it does not compensate for the undocumented profile_id.

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 (Create) and resource (a post on a profile), and explicitly flags it as the legacy sync API. It names the sibling it relates to (reddit_ads_create_post_job), so an agent can distinguish it from the job-based path 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?

"Prefer reddit_ads_create_post_job" gives explicit routing to the alternative and a clear preference signal. It does not fully spell out the narrow cases where the legacy sync path is still appropriate, but the primary when-to-use guidance is present.

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

reddit_ads_create_poster_jobGenerate video postersA

Generate poster (thumbnail) images from a public video URL. Poll reddit_ads_get_poster_job for the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, marking this as a write operation. The description adds the crucial async behavior (results must be polled rather than returned inline) and the input constraint (public video URL), which annotations do not convey. It omits auth/permission requirements and any rate-limit context.

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, front-loaded with purpose and followed by the required follow-up action. Every clause earns its place with no redundancy.

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 single-parameter async job creator with no output schema, the description covers the essentials: what it makes, from what input, and how to retrieve results. Explicit mention of the returned job identifier or how to match it to a poll call would complete it.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the burden. It adds real meaning by specifying the URL must point to a public video, but it does not explain the nested 'data' wrapper or format expectations beyond the schema's uri type.

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 ('Generate'), a clear resource ('poster (thumbnail) images'), and the input scope ('from a public video URL'). It also names the sibling get_poster_job, letting an agent distinguish the creator from the poller without opening either schema.

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

Usage Guidelines4/5

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

Explicitly tells the agent the follow-up workflow: poll reddit_ads_get_poster_job for the result, which is the key usage instruction for an async job. It lacks explicit when-not-to-use guidance versus alternatives like upload_creative_assets, so it falls short of a 5.

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

reddit_ads_create_post_jobCreate post (structured)A

Create an ad post on a profile asynchronously. Poll reddit_ads_get_post_job until status is SUCCESS to get the post_id for reddit_ads_create_ad. Media is fetched by Reddit from public URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: allow_comments (bool), creative (required, one of): IMAGE {type: "IMAGE", headline, image: {media: {type: "URL", url}}, destination: {type: "URL", url, display_url, call_to_action}, supplementary_text}; TEXT {type: "TEXT", headline, body, text_format: PLAIN_TEXT|RICH_TEXT_JSON}; VIDEO {type: "VIDEO", headline, video: {media: {type: "URL", url}}, thumbnail: {media: {type: "URL", url}}, destination}; CAROUSEL {type: "CAROUSEL", headline, carousel: [{image, destination, caption}] (1-40 cards)}; PROMOTED_POST {type: "PROMOTED_POST", headline, post: {type: "PROMOTED_COMMUNITY_POST", post_id}}. call_to_action values: Apply Now, Contact Us, Download, Get a Quote, Get Showtimes, Install, Learn More, Order Now, Play Now, Pre-order Now, See Menu, Shop Now, Sign Up, View More, Watch Now, Book Now, Buy Tickets, Get Directions, Listen Now, Read More, Subscribe, Visit Store, Donate Now, Remind Me.
profile_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare it is a mutation (readOnlyHint=false) and open-world. The description adds substantial context beyond them: the operation is asynchronous, results are retrieved via polling, and media is fetched by Reddit from public URLs. Failure semantics and any rate limits remain undisclosed.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action and async nature, then the follow-up path. No filler; every sentence carries actionable 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 no output schema, the description correctly explains how the return value is obtained (poll for the post_id) and covers the media-sourcing behavior. For an async mutation tool this is nearly complete, though it omits error handling and whether fields like allow_comments have defaults.

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 50%; the 'data' object is exhaustively documented in the schema itself (creative types, call_to_action enums, required fields), while profile_id carries no description. 'On a profile' lightly explains profile_id but the description contributes essentially no parameter detail beyond what the schema provides.

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 ('Create an ad post on a profile') and adds scope via 'structured' and 'asynchronously'. It hints at the workflow, but does not explicitly differentiate from close siblings like reddit_ads_create_post or reddit_ads_create_poster_job, leaving the agent to infer the distinction.

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?

Clear downstream workflow is given: poll reddit_ads_get_post_job until SUCCESS, then use the post_id with reddit_ads_create_ad. That routes the agent across the async boundary well. It stops short of stating when to choose this tool over the non-job create siblings.

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

reddit_ads_create_product_feedCreate product feedA

Create a scheduled product feed (max 2 per catalog, of different modes).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, url, username, password, mode (REPLACE|UPDATE), schedule {is_paused, interval (HOURLY|DAILY|WEEKLY|MONTHLY), interval_count, day_of_month, day_of_week, hour, minute, timezone}.
catalog_idYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-destructive, open-world operation. The description adds useful behavioral context about the scheduling requirement and the two-feed limit per catalog, but does not cover auth needs, return behavior, or error conditions.

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 waste. The core action is stated first, and the limit is appended immediately without unnecessary phrasing.

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 data object and no output schema, the description gives a key business limit but omits authentication requirements, response expectations, and fuller field-level guidance, leaving the schema and annotations to carry most of the burden.

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 only 50%, and the catalog_id parameter is undocumented in the schema. The description adds a meaningful constraint about mode ('different modes') and catalog capacity, but it does not compensate for the undocumented catalog_id or explain required data fields.

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

Purpose4/5

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

States a specific verb and resource: 'Create a scheduled product feed'. It also adds a meaningful scope constraint, but does not explicitly differentiate itself from siblings like update_product_feed or list_product_feeds, leaving that distinction to the base verb.

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 constraint 'max 2 per catalog, of different modes' implies when this tool is applicable, but there is no explicit when-to-use guidance or reference to alternatives such as update_product_feed for modifying an existing feed.

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

reddit_ads_create_product_setCreate product setB

Create a filtered product set for catalog ad groups (product_set_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name (max 100), filter (filter rule string).
catalog_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a non-destructive write operation. The description adds that the product set is 'filtered' and intended for catalog ad groups, but it does not disclose auth requirements, rate limits, idempotency, or what is returned. With annotations covering the safety profile, this is adequate but thin.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler, immediately conveying the action, resource, and domain. Every clause 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?

For a create operation with a nested object, no output schema, and only 50% parameter description coverage, the description is too sparse. It leaves catalog_id semantics, filter rule syntax, and return behavior undocumented. Annotations cover safety, but an agent would still lack important invocation context.

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 50%: the nested data object is partially described, but catalog_id has no description. The description does not explain what catalog_id represents or how the filter rule string should be formatted, and the mention of 'product_set_id' is not an input parameter. It therefore fails to compensate for the schema's gaps.

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: 'Create a filtered product set.' It also clarifies the domain ('for catalog ad groups') and likely returned identifier ('product_set_id'). However, it does not explicitly differentiate the tool from siblings like reddit_ads_create_catalog or reddit_ads_create_product_feed, so it falls 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?

The description provides no when-to-use guidance, no alternatives, and no prerequisites. It only implies usage by saying the product set is for catalog ad groups, but does not tell the agent when to choose this tool over reddit_ads_update_product_set, reddit_ads_create_catalog, or other create siblings.

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

reddit_ads_create_saved_audienceCreate saved audienceB

Save a targeting configuration to reuse on ad groups via saved_audience_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, type: "REDDIT_AUDIENCE", targeting (same as ad group targeting, without locations and platforms).
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds meaningful context — that the saved audience is reusable on ad groups via saved_audience_id — but says nothing about required scopes, whether duplicates are rejected, or idempotency.

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 purpose and the reuse mechanism are stated immediately, and nothing 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?

For a 2-param create tool with a fully documented schema and annotations covering the safety profile, the description is nearly sufficient; naming saved_audience_id effectively communicates the handle returned. It could mention auth/account-scope requirements, but nothing critical for invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both the nested data fields and ad_account_id default. The description mentions 'targeting configuration' generically but adds no syntax, format, or constraint detail beyond what the schema provides; baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource ('Save a targeting configuration') and explains the reuse purpose via saved_audience_id. It implicitly distinguishes itself from list_/get_/update_saved_audience siblings by being the creation step, but never names an alternative 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, no prerequisite (e.g. that an ad account must exist), and no routing versus update_saved_audience or list_saved_audiences. The phrase 'reuse on ad groups' hints at intent but does not tell the agent when this tool is the right choice.

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

reddit_ads_delete_catalogDelete product catalogA
Destructive

Permanently delete a product catalog with its feeds, sets and products.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalog_idYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description earns credit for disclosing cascade behavior beyond the annotations: deleting the catalog also removes its feeds, sets and products. It does not state permission requirements or whether the action can be undone.

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 verb and permanence warning, conveying both the target and the blast radius without waste.

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 destructive tool with no output schema, the description covers the essential risk information (irreversibility plus cascade scope). It stops short of prerequisites such as required permissions or confirmation steps, but an agent can call it correctly with what is given.

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 the description says nothing about catalog_id, so no meaning is added beyond the schema's type/minLength. The single parameter is self-evident by name, which keeps this at the baseline rather than lower.

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 ('Permanently delete') and resource ('product catalog'), and adds the cascade scope (feeds, sets, products) that separates it from sibling deletes like reddit_ads_delete_product_feed, reddit_ads_delete_product_set and reddit_ads_delete_products. It never names those siblings explicitly, so differentiation is implied rather than spelled out.

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 narrower deletion siblings (delete_products, delete_product_feed, delete_product_set) that an agent might prefer. The cascade scope hints at the tool's role, but the agent must infer that this is the wholesale option.

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

reddit_ads_delete_creative_assetDelete creative assetC
Destructive

Permanently delete a creative asset from the library.

ParametersJSON Schema
NameRequiredDescriptionDefault
creative_asset_idYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive write operation. The description adds the word 'Permanently', reinforcing irrevocability, but does not disclose other behavioral traits like rate limits, required scopes, or side effects. With annotations covering the basic safety profile, this is adequate but not rich.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that conveys the core action efficiently. It is not verbose, though it could be slightly more informative without losing 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?

For a destructive operation with no output schema and sparse parameter documentation, the description is insufficient. It omits critical context such as required permissions, potential side effects (e.g., impact on associated ads), and any conditions for use, leaving the agent under-informed.

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?

The schema has only one parameter (creative_asset_id) with 0% description coverage, and the tool description does not elaborate on its meaning or format. The parameter name is self-explanatory, but the description does not compensate for the lack of schema documentation, leaving semantics to inference.

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 ('Permanently delete') and resource ('creative asset from the library'), clearly indicating the operation. It is distinguishable from sibling tools like update_creative_asset or list_creative_assets, though it doesn't explicitly reference them.

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 is provided on when to use this tool versus alternatives or what prerequisites might exist (e.g., ownership, permissions). The description only states what it does, not when it should be invoked.

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

reddit_ads_delete_custom_audienceDelete custom audienceC
Destructive

Permanently delete a custom audience.

ParametersJSON Schema
NameRequiredDescriptionDefault
audience_idYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so safety is covered. The description adds only the word 'Permanently', which usefully signals non-reversibility, but it omits cascading effects, whether deletion is synchronous, or required permissions.

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 waste and the destructive nature signalled first. Brevity here edges toward under-specification rather than poor structure.

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 an irreversible delete with no output schema and an undocumented parameter, the description should cover recoverability, prerequisites, and side effects on dependent entities. None of that is present, so an agent lacks enough to invoke it safely.

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 required parameter audience_id, and the description never mentions it. An agent gets no help on where to obtain the ID or its expected format, so the description fails to compensate for the schema 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 (delete) and resource (custom audience) with the permanence qualifier. It does not differentiate from siblings such as reddit_ads_delete_catalog or reddit_ads_update_custom_audience_users, but the core action 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 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 versus updating or listing audiences, no prerequisites (e.g., audience must exist), and no note about the effect on campaigns or ad groups currently targeting the audience. 'Permanently' hints at irreversibility but stops short of actionable context.

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

reddit_ads_delete_product_feedDelete product feedB
Destructive

Permanently delete a product feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
feed_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is largely covered. The word 'Permanently' adds useful confirmation of irreversibility, but the description does not describe authorization requirements, cascading effects, or what happens to associated product sets or products.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or repetition. It is optimally concise, though the terseness contributes to gaps captured in other dimensions.

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 destructive, one-parameter tool with no output schema, the description is too sparse. It omits how to obtain the feed_id, permission requirements, and whether deletion cascades to related entities, leaving meaningful gaps despite annotations covering the basic destructive nature.

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?

The schema has 0% description coverage and the description does not explain feed_id at all. While the parameter name is somewhat inferable from the tool's purpose, the description fails to compensate for the missing schema documentation by stating format, source, or constraints.

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: 'Permanently delete a product feed.' This clearly identifies the operation, but it does not distinguish this tool from sibling deletion tools such as reddit_ads_delete_products or reddit_ads_delete_product_set, so the agent must infer scope from the name alone.

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, no prerequisites, and no exclusions. It simply states the action without telling the agent under what conditions deletion is appropriate or which related tools to use instead.

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

reddit_ads_delete_productsDelete productsA
Destructive

Delete up to 1000 products from a catalog by product ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesProduct IDs
catalog_idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is fully covered by structured data. The description adds the batch cap of 1000 and the catalog scoping, but says nothing about irreversibility, confirmation requirements, or partial-failure behavior beyond what the annotation implies.

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 zero filler. The action, scope, keying field, and limit are all packed efficiently with no wasted words.

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 two-parameter destructive delete with annotations carrying the safety profile and no output schema, the description is largely complete. It could go further in noting irreversibility or recovery, but nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 50%: 'data' is documented as 'Product IDs' while 'catalog_id' has no description. The description reinforces that deletion targets product IDs within a catalog, which maps both parameters, but adds no format or syntax detail beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (delete), resource (products), scope (from a catalog), and method (by product ID), plus a batch limit of 1000. It is very clear but does not explicitly differentiate itself from related siblings such as reddit_ads_upsert_products, relying on the reader to infer the distinction 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 Guidelines3/5

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

Usage is implied by the destructive verb 'delete' within a catalog context, so an agent can reasonably infer when it applies. However, there is no explicit when-to-use guidance or reference to the alternative reddit_ads_upsert_products (which adds/updates products), leaving the delete-vs-upsert decision unstated.

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

reddit_ads_delete_product_setDelete product setB
Destructive

Permanently delete a product set.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_set_idYes

TDQS

B3.1/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and openWorldHint=true, covering the basic safety profile. The description adds that deletion is permanent, which reinforces irreversibility beyond the annotation. However, it does not disclose side effects (e.g., what happens to associated products), required permissions, or any other behavioral context. With annotations present, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for the operation and gets straight to the point.

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?

Given the low complexity (one parameter, no output schema) and annotations that cover the destructive safety profile, the description is minimally viable. It states what the tool does, but it omits where to obtain the product_set_id and any side effects of deletion, leaving gaps for an agent to fill.

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?

The schema has one required parameter (product_set_id) with 0% description coverage. The description says nothing about the parameter, so it fails to compensate for the missing schema documentation. While the parameter name is self-explanatory, the description adds no meaning beyond the name itself.

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: 'Permanently delete a product set.' It is unambiguous and clearly distinct from sibling list/get/create/update product set tools by virtue of the delete action. However, it does not explicitly differentiate itself from siblings or name alternatives, so it falls 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 guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The word 'Permanently' hints at caution but does not constitute usage guidance. No when-to-use context is provided.

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

reddit_ads_estimate_audienceEstimate audience and deliveryA
Read-only

Estimate audience size and delivery (impressions, clicks, conversions, reach) for a planned ad group. Limited to 10 requests per minute.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: objective (required), use_catalog, goal_value (campaign budget, micro; required here or in the ad group config), ad_group_configs (exactly 1) [{start_time, end_time, bid_type, bid_strategy, bid_value, goal_type, goal_value, optimization_goal, view_through_conversion_type, shopping_type, shopping_targeting, targeting {... plus age {min_age, max_age}}}].
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, but the description adds a genuine operational constraint not present in structured data: a 10-requests-per-minute rate limit. It also lists the returned metrics (impressions, clicks, conversions, reach), useful given there is no output schema.

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

Conciseness5/5

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

Two tight sentences with the core purpose front-loaded and the rate limit appended. No filler; every clause 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 estimation tool with no output schema, the description supplies the return metrics, the planning context, and the rate limit. The notable gap is sibling routing (no mention of suggest_bid/get_channel_reach despite a dense sibling set), but otherwise it is sufficient to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters and the nested data object in detail. The description adds no further parameter semantics (e.g., how objective or goal_value affects the estimate), so the baseline 3 applies.

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

Purpose4/5

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

It states a specific verb+resource ('Estimate audience size and delivery') scoped to 'a planned ad group' and enumerates the returned metrics. It does not explicitly differentiate itself from estimation-adjacent siblings like reddit_ads_suggest_bid or reddit_ads_get_channel_reach, leaving that to inference.

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?

'for a planned ad group' implies the pre-launch planning context, and the rate limit hints at intended usage, but there is no explicit when-to-use/when-not guidance and no alternative tool is named. Usage 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.

reddit_ads_get_adGet adB
Read-only

Get an ad including effective_status, rejection_reason, post_url and preview_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. Because no output schema exists, the description's enumeration of effective_status, rejection_reason, post_url and preview_url adds genuine behavioral value about what comes back.

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?

One front-loaded sentence with no filler. The trailing 'including ...' list is justified because it substitutes for a missing output schema, though it reads slightly as a dump.

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 lookup with one required parameter and no output schema, the description covers the essential return shape. The remaining gap is the ad_id contract, which is the one thing an agent must get right to call it.

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?

The single ad_id parameter has 0% schema description coverage, and the description never explains its format, source, or how to obtain it (e.g. from list_ads). With one undocumented parameter, the description needed to compensate and does not.

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 ('Get an ad') and names the fields returned, which distinguishes it from list_ads and update_ad by name. It does not explicitly contrast with the sibling tools, but the singular 'an ad' plus the parent tool name makes the scope clear.

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 when-to-use guidance, no prerequisites, and no mention of when to prefer this over reddit_ads_list_ads or reddit_ads_api_request. Usage is only implied by the retrieval verb.

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

reddit_ads_get_ad_accountGet ad accountA
Read-only

Get an ad account: currency, time zone, attribution settings, approval status and account-level exclusions.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

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 and openWorldHint=true, so the safety profile is covered. The description usefully adds what data surface is returned, but says nothing about auth requirements, the REDDIT_ADS_ACCOUNT_ID fallback behavior, or rate limits. With annotations present, a 3 is appropriate.

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 resource is named immediately and the returned fields follow inline. Every clause 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?

There is no output schema, so listing the returned fields (currency, time zone, attribution, approval status, exclusions) genuinely compensates for the missing return contract. Combined with the 100%-documented parameter and read-only annotations, the definition is nearly complete for a simple fetch 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 100% and the single ad_account_id parameter is fully documented in the schema (t2_/a2_ format plus the REDDIT_ADS_ACCOUNT_ID default). The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb (Get) and resource (ad account) and enumerates the returned fields (currency, time zone, attribution settings, approval status, exclusions). This clearly distinguishes it from the plural sibling reddit_ads_list_ad_accounts, 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: the singular resource and field list suggest fetching one account's details, but there is no explicit statement of when to prefer this over reddit_ads_list_ad_accounts, reddit_ads_query_ad_accounts, or reddit_ads_get_ad_account_history.

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

reddit_ads_get_ad_account_historyGet ad account change historyB
Read-only

Get the change log of an ad account (who changed what and when).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoSent as {"data": {...}}. All optional: start_time, end_time (ISO 8601), member_ids [], change_types [AD_ACCOUNT|AD|AD_GROUP|AUDIENCE|BID|BUDGET|CAMPAIGN|STATUS|TARGETING], entity_id_filters [{entity_ids, entity_type: AD|AD_GROUP|CAMPAIGN, include_child_entities}], entity_name_filters [{entity_names, entity_type, operator: EQUALS|LIKE, include_child_entities}].
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is already clear. The description adds some content context by specifying that the log shows 'who changed what and when.' However, it does not disclose pagination behavior, rate limits, or authentication requirements beyond what the schema already provides.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero waste. It communicates the core purpose immediately and does not include redundant or filler content.

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?

Given the tool has five parameters, a nested object, and no output schema, the description is minimal but provides a basic summary of the return content. It does not explain pagination, filtering, or the default ad account behavior, though the schema covers those details. It is adequate but leaves room for more context.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are fully documented in the schema. The description adds no parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate when the schema carries the full parameter burden.

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 the change log of an ad account.' It adds a parenthetical clarifying the content ('who changed what and when'). It does not explicitly differentiate from siblings like get_ad_account or get_report, though the resource is naturally distinct.

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 usage guidance is provided. The description does not say when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The intended use is only implied by the tool name and description.

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

reddit_ads_get_ad_groupGet ad groupB
Read-only

Get an ad group including targeting, bidding and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the payload includes targeting, bidding and status, but discloses nothing further about permissions, failures, or completeness of the returned object.

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 or repetition. It is appropriately terse, though the terseness is partly a symptom of missing detail rather than disciplined editing.

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 single-object read with safety annotations, the description is nearly adequate and even sketches the returned fields, which helps since no output schema exists. However it leaves the required parameter undocumented and gives no error or edge-case context.

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 mention ad_group_id at all, providing no meaning for the sole required parameter. The parameter name is fairly self-explanatory, but the description fails to 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?

States a specific verb and resource ('Get an ad group') and enumerates the content returned (targeting, bidding, status). It is clearly distinguishable from list_ad_groups/create_ad_group/update_ad_group by implication, but never names or contrasts 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 Guidelines2/5

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

No when-to-use or when-not-to-use guidance, no prerequisites (e.g., needing a valid ad_group_id), and no routing to alternatives like list_ad_groups. The single-object read context is only implied by the name and title.

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

reddit_ads_get_app_last_firedGet app events last firedC
Read-only

Get when each mobile conversion event last fired for an app.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only a restatement of the core retrieval purpose and discloses no additional behavioral traits such as return shape, pagination, latency, or authentication requirements.

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 sentence with no filler, front-loading the action and the scope. Every word contributes to the 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?

For a simple one-parameter read-only tool with annotations covering safety, the description adequately states what is returned. However, it omits any pointer to where app_id comes from and lacks usage context, leaving clear gaps for an agent trying to invoke it independently.

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 full burden for the single required app_id parameter. It only implies that an app is involved via 'for an app' and gives no format, source, or identification guidance for the app_id value.

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 ('Get when...last fired') and resource ('each mobile conversion event...for an app'). This effectively distinguishes it from the sibling reddit_ads_get_pixel_last_fired by scoping to app events rather than pixels, but it does not explicitly name or contrast with any sibling tool.

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 guidance, no prerequisites, and no alternatives. It does not mention that this is for mobile app conversion events as opposed to pixel events, nor when to prefer it over reddit_ads_list_apps or reddit_ads_get_pixel_last_fired.

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

reddit_ads_get_businessGet businessC
Read-only

Get a business by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. Beyond that the description adds nothing: no note on auth requirements, behavior when the ID is unknown, or what the lookup returns. It does not contradict annotations, but it contributes no extra 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?

A single short sentence with the key qualifier front-loaded and no filler. It is efficient, though arguably under-specified rather than optimized, which keeps it just under the top mark.

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 single-parameter lookup with no output schema, the description should hint at the returned business shape or list_businesses as the way to discover IDs. Neither appears, so an agent knows what to pass but not how to get it or what comes back.

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 required parameter, so the description carries the full burden. 'by ID' only implies the argument is an identifier, adding minimal meaning over the business_id field name, and gives no format or source hint (e.g., where to obtain the ID).

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 (Get) and resource (a business) with the retrieval mechanism (by ID). It is clear on its own, but it never distinguishes itself from the sibling list_businesses or update_business, so it does not reach the sibling-differentiation bar for 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?

The description provides no when-to-use context, no prerequisites, and no indication of when to prefer this over list_businesses or update_business. It is a bare capability statement with no guidance.

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

reddit_ads_get_campaignGet campaignB
Read-only

Get a campaign including effective_status and delivery_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYes

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's burden is lower. It adds modest value by naming effective_status and delivery_status as the notable returned fields, but says nothing about failure modes (e.g., behavior for a non-existent campaign_id) or return shape beyond those two fields.

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 efficient sentence with the core action front-loaded and the notable output fields appended. No filler, though it is so terse that it leaves obvious questions unaddressed.

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 one-parameter read tool with no output schema and a readOnlyHint annotation, the definition is minimally adequate. It hints at returned fields but omits any guidance on identifier source or error/empty-result behavior, leaving it just viable rather than complete.

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

Parameters3/5

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

There is a single parameter, campaign_id, with 0% schema description coverage, so nothing in the structured data explains its format. The description does not clarify it either, though its meaning is largely self-evident from the name. Slight gap keeps this at baseline rather than higher.

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 (Get) and resource (campaign) and even names two fields returned (effective_status, delivery_status). This lets an agent distinguish it from list_campaigns, create_campaign, and update_campaign. It stops short of explicitly contrasting with its siblings, so it is clear but not fully differentiated.

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 versus reddit_ads_list_campaigns or reddit_ads_update_campaign, nor any stated prerequisite (e.g., owning/accessing the campaign). Usage is only implied by the name.

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

reddit_ads_get_catalogGet product catalogD
Read-only

Get a product catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalog_idYes

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds nothing beyond that — no note on authorization requirements, what the catalog object contains, or whether the lookup can fail for missing IDs. It does not contradict the annotations, but contributes no 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.

Conciseness2/5

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

One short sentence with no waste, but this is under-specification rather than conciseness. Brevity here comes at the cost of any useful content.

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

Completeness1/5

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

For a retrieval tool with no output schema and a 0%-documented required parameter, the description should describe the returned catalog and the identifier's source. None of that is present, so an agent has insufficient information to invoke it 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%, so catalog_id is documented nowhere. The description does not explain what a catalog_id is, where to obtain it, or its format, which is exactly the gap it should fill for a single required identifier.

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

Purpose2/5

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

The description 'Get a product catalog' merely restates the tool name and title with no additional specificity. It does not distinguish this tool from siblings like reddit_ads_list_catalogs, reddit_ads_get_product_feed, or reddit_ads_list_catalog_products, so an agent gets no signal about what makes this retrieval distinct.

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 prerequisites, and no named alternative. The agent cannot tell from the text when to call get_catalog versus list_catalogs or get_product_feed, leaving routing entirely to inference 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.

reddit_ads_get_catalog_import_reportGet catalog import reportB
Read-only

Get a download URL for a feed import report.

ParametersJSON Schema
NameRequiredDescriptionDefault
import_idYes

TDQS

B3/5.0
Behavior3/5

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

The readOnlyHint/openWorldHint annotations already cover the safety profile, so the description's job is to add behavior. It usefully states that the result is a download URL rather than inline data, but says nothing about URL expiry, report contents, or async job state.

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?

One short, front-loaded sentence with no filler. It is efficient, though perhaps overly terse given the unaddressed parameter and return-value questions.

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 partially compensates by naming the download URL as the payload, which is the key return detail. But it omits what the report covers and where import_id comes from, leaving gaps for a task that must be chained after listing imports.

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 coverage is 0% and the single parameter 'import_id' is undocumented in both schema and description. The description never explains that import_id identifies the feed import whose report is fetched, so the agent gets no help mapping the parameter to behavior.

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?

Clear verb+resource (get ... catalog import report) and it specifies the return shape ('a download URL'). It distinguishes the tool from list siblings like reddit_ads_list_catalog_imports, though it doesn't explicitly contrast with reddit_ads_list_catalog_import_issues.

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 when-to-use or when-not-to-use guidance. Nothing tells the agent how this differs from reddit_ads_list_catalog_imports or reddit_ads_list_catalog_import_issues, or under what condition a report URL is needed.

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

reddit_ads_get_channel_reachGet channel planning reachB
Read-only

Get a Reddit-wide reach curve (impressions vs reach) for media planning.

ParametersJSON Schema
NameRequiredDescriptionDefault
genderNo
max_ageNo
min_ageNo
geolocationYes
duration_daysYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the scope (Reddit-wide) and output concept (reach curve, impressions vs reach), which is useful given no output schema, but omits auth needs, rate limits, and output details.

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 wasted words. It states the purpose immediately and is appropriately sized for the information it currently provides.

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 tool with five parameters, zero schema description coverage, and no output schema, the description is too thin. It gives a high-level output concept but omits parameter explanations, usage guidance, and return details that an agent would need for confident invocation.

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% and the description mentions none of the five parameters (duration_days, geolocation, gender, min_age, max_age). It does not compensate for the schema gap or add any meaning beyond the raw enum and type definitions.

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 (Get) and resource (Reddit-wide reach curve) with the output form (impressions vs reach) and purpose (media planning). It is clear, but does not distinguish itself from similar planning tools like reddit_ads_estimate_audience or reddit_ads_suggest_bid.

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 'for media planning' implies usage context, but there is no explicit when-to-use, when-not-to-use, or alternative selection guidance. An agent would need to infer that this is for planning reach rather than audience estimation or bid suggestions.

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

reddit_ads_get_communitiesGet communitiesA
Read-only

Look up subreddits by exact name, with subscriber counts and categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYesComma separated subreddit names without r/
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results include subscriber counts and categories and that matching is exact, but says nothing about rate limits, auth requirements, or pagination behavior beyond what the schema documents.

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 matching mode is stated first and the useful return fields follow. Nothing needs trimming.

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 lookup tool with full schema coverage and no output schema, the description covers the key facts an agent needs: what it matches on and what comes back. Pagination/merge behavior is only in the schema, which is an acceptable minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, including the 'comma separated subreddit names without r/' format and pagination semantics, so the baseline is 3. The description's 'exact name' phrasing reinforces the names parameter but adds no syntax detail beyond the schema.

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

Purpose4/5

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

States a specific verb (look up), resource (subreddits), and constraint (exact name), plus the returned fields (subscriber counts and categories). The 'exact name' qualifier implicitly separates it from search_communities/suggest_communities, though it never names them outright.

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 'exact name' constraint implies this is the lookup path when you already know the subreddit name, but the description never states when to use it over reddit_ads_search_communities or reddit_ads_suggest_communities, nor any prerequisite. Usage is inferred, not stated.

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

reddit_ads_get_creative_assetGet creative assetD
Read-only

Get a creative asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
creative_asset_idYes

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that—no note on what the asset payload contains, whether ids are global or account-scoped, or any 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.

Conciseness2/5

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

The sentence is short but that is under-specification rather than conciseness—it conveys no information beyond the title, so the brevity does not earn 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?

With no output schema and no parameter documentation, the description would need to carry the load, but it says nothing about return values, id source, or usage context. Inadequate for even a simple single-parameter retrieval 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?

There is one required parameter (creative_asset_id) with 0% schema description coverage, and the description provides no information about its format, origin, or where to obtain it. The description fails to compensate for the schema gap.

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

Purpose2/5

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

"Get a creative asset" simply restates the tool name and title with no added specificity. It does not distinguish this fetch-by-id tool from siblings like reddit_ads_list_creative_assets, reddit_ads_get_creative_asset_upload, or reddit_ads_update_creative_asset.

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 when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer that this retrieves a single asset by id versus the list variant.

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

reddit_ads_get_creative_asset_uploadGet creative asset uploadB
Read-only

Get a creative asset upload: status (PROCESSING_MEDIA|ACTIVE|INVALID_MEDIA) and resulting asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3/5.0
Behavior3/5

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

readOnlyHint=true already establishes the safe-read profile, so the description's job is to add context. It does disclose the returnable status values (PROCESSING_MEDIA|ACTIVE|INVALID_MEDIA) and that an asset is produced, which is genuine added value, but it says nothing about read timing, eventual consistency, or auth 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?

One compact sentence with the resource front-loaded and the return shape trailing. Every clause carries information; 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 read-only, single-parameter lookup with no output schema, the description does the important work of naming the possible status states, but it omits what the id refers to and when in the upload lifecycle the call is appropriate. Adequate but with a clear gap.

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 single required parameter 'id' carries no description anywhere. The description never clarifies that the id is an upload id (as opposed to an asset id), which is the key ambiguity given the nearby get_creative_asset sibling.

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 ('Get a creative asset upload') and goes further by naming what is returned (status enum and resulting asset). It is distinguishable from list_creative_asset_uploads and get_creative_asset by resource, though it doesn't explicitly contrast with those siblings.

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 only says what the tool returns; it never says when to call it. There is no hint that this is the polling tool to use after reddit_ads_upload_creative_assets, nor any exclusion against list_creative_asset_uploads. Usage must be inferred entirely from context.

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

reddit_ads_get_custom_audienceGet custom audienceB
Read-only

Get a custom audience including its status and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
audience_idYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the response includes status and size, which is useful since there is no output schema, but it says nothing about auth requirements, error conditions (e.g. invalid audience_id), or ownership scoping.

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 key noun and the returned fields come first. Nothing 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?

For a simple read-only lookup with one parameter, the description is minimally adequate and even hints at the return payload. It stops short of explaining how to obtain audience_id or what a failed lookup yields, which an agent would need.

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?

The single parameter audience_id has 0% schema description coverage and the description never mentions it, so there is no indication of its format, source, or whether it is the numeric Reddit ID or a prefixed string. With low coverage the description was expected to compensate and does not.

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 ('Get') and resource ('custom audience') and even names the fields returned (status and size). It is clearly distinct from reddit_ads_list_custom_audiences, create/delete/update siblings by virtue of the singular retrieval, though it never explicitly contrasts itself with them.

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 versus reddit_ads_list_custom_audiences or the other custom-audience siblings, and no prerequisites or context are given. The agent must infer usage from the name alone.

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

reddit_ads_get_data_deletion_jobGet data deletion jobB
Read-only

Get the status of a data deletion job (QUEUED|COMPLETED|FAILED).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3.1/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description adds real value by enumerating the possible job states (QUEUED|COMPLETED|FAILED), which is not present in the schema or annotations, but it omits polling expectations, what a FAILED state implies, and any 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.

Conciseness5/5

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

A single short sentence that leads with the verb and resource and appends the enumeration inline. Nothing is wasted and nothing is buried.

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 one-parameter read tool with safety annotations, the core is covered, and the status enumeration partially compensates for the missing output schema. However, the origin of job_id and the polling workflow are absent, which an agent needs to use this tool correctly in sequence.

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 job_id parameter, so the description must compensate and does not. It never explains where job_id comes from (presumably the create_data_deletion_job response) or its format, leaving the agent to infer this.

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 (Get) and resource (data deletion job), and the parenthetical enumerates the possible statuses, which sharpens what 'status' means. It does not explicitly contrast with siblings like reddit_ads_create_data_deletion_job, but the verb/resource pair is unambiguous enough that an agent can separate read-status from job creation.

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 when-to-use guidance is given. It never says to call this after create_data_deletion_job to poll progress, never mentions whether polling is expected or how often, and doesn't name any alternative for other job types (e.g. get_poster_job, get_post_job). The usage is only implied by the noun.

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

reddit_ads_get_lead_gen_formGet lead gen formC
Read-only

Get a lead generation form.

ParametersJSON Schema
NameRequiredDescriptionDefault
lead_gen_form_idYes

TDQS

C2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that — no note on what the form object contains, whether the ID must belong to the authenticated business, or any error conditions.

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

Conciseness2/5

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

One very short sentence that is under-specified rather than efficient. It avoids waste but says too little to be considered well-structured for a retrieval tool.

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?

With no output schema and a bare description, an agent cannot know what fields come back or how to source the ID. For a read tool operating in a large sibling set, this is insufficient context.

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 single parameter lead_gen_form_id is documented only by its name and type. The description does not explain the ID format, where to obtain it, or that it must reference an existing form, leaving the schema to carry the full burden inadequately.

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

Purpose2/5

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

The description 'Get a lead generation form' essentially restates the tool name and title without adding substance. It does not distinguish this retrieval tool from siblings like reddit_ads_list_lead_gen_forms or reddit_ads_create_lead_gen_form, nor does it clarify what 'getting' returns.

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 tool versus the sibling list_lead_gen_forms or the create variant. The agent must infer that a valid lead_gen_form_id is needed and that this is a single-record lookup.

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

reddit_ads_get_meGet current userA
Read-only

Get the authenticated Reddit Ads member or system user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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=true and openWorldHint=true, so the safety profile is covered. The description does add one useful behavioral nuance beyond the structured fields: the return may be a member OR a system user, implying an authentication context and a variable entity type. It says nothing about auth failure behavior or what fields come back.

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 sentence with no filler, front-loaded with the verb and the exact resource. Nothing could be removed without losing meaning.

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-parameter read with readOnlyHint and openWorldHint already declared, the definition is nearly sufficient. The only mild gap is that no output schema exists and the description does not sketch the shape of the returned member/system-user object, though this is a minor omission for a simple identity lookup.

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 to document and the baseline of 4 applies. The absence of arguments is itself consistent with a 'get current identity' operation, which the description implies.

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 authenticated Reddit Ads member or system user,' which tells an agent this returns the identity of whoever is currently logged in. It is distinguishable from peers like get_business or get_ad, though it never explicitly contrasts itself with the adjacent reddit_ads_auth_status or reddit_ads_get_profile tools.

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 prerequisites (e.g., must be logged in), and no routing to alternatives such as reddit_ads_auth_status for a lighter-weight auth check or reddit_ads_get_profile for profile data. Usage is only implied by the tool name.

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

reddit_ads_get_pixel_last_firedGet pixel last firedA
Read-only

Get when each conversion event last fired for a pixel, to check tracking health.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixel_idYes

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 and openWorldHint=true, so the safety profile is covered. The description adds that results are per conversion event, but does not describe return shape, ordering, or pagination — modest added value against the lower bar set by 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?

A single tight sentence with the action and scope front-loaded and zero filler; every phrase 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?

For a one-parameter read-only tool with no output schema, the description conveys both the operation and the conceptual return (last-fired times per conversion event) plus the diagnostic intent. Only minor detail about the result structure is absent.

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 schema description coverage at 0% for the single pixel_id parameter, the description is the only source of meaning, and it only implies that a pixel identifier is supplied ('for a pixel'). It adds no format, source, or lookup guidance beyond that implication.

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 (Get) and resource (when each conversion event last fired for a pixel), with scope clear enough to distinguish the pixel variant from the parallel reddit_ads_get_app_last_fired. It does not explicitly name that sibling, so it falls just short of 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 clause 'to check tracking health' supplies a usage context, implying this is a diagnostic tool. However, there is no explicit when-to-use/when-not guidance and no reference to alternatives, so the guidance remains 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.

reddit_ads_get_postGet postB
Read-only

Get a post by ID (t3_...).

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds no further behavioral context — nothing about authentication requirements, error behavior for invalid/missing IDs, or rate limits — so it contributes essentially nothing beyond the structured fields.

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 short sentence with zero filler, and the identifier format is front-loaded immediately after the purpose. Appropriately sized 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?

For a simple read-only lookup with annotations covering safety and only one required param, the description is minimally sufficient. However, with no output schema and a large set of overlapping post/structured-post siblings, it leaves the agent without enough to reliably choose this tool over its neighbors.

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 the single post_id parameter is undocumented in the schema, so the description must compensate. It partially does so by giving the t3_ prefix format, but it never clarifies whether the full fullname or a bare ID is required, nor what happens on an unknown ID.

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 clear verb+resource ("Get a post by ID") and adds the Reddit fullname prefix convention (t3_...), which tells an agent what kind of identifier it is. It does not distinguish itself from the sibling reddit_ads_get_structured_post or explain how a post differs from a structured post, so it falls 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 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 prerequisites (e.g. auth), and no mention of the obvious alternatives such as reddit_ads_list_posts for discovery or reddit_ads_get_structured_post. 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.

reddit_ads_get_poster_jobGet poster jobB
Read-only

Get the status and generated posters of a poster generation job.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful value by naming the two return contents (status and generated posters), which matters because there is no output schema, but it says nothing about polling cadence, terminal job states, or permissions.

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?

One tight sentence with no filler and the key return contents front-loaded. Appropriate length, though it could be expanded slightly to earn more value.

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?

There is no output schema, so the description carries the return-value burden; it discloses the two payload categories but not the state model (e.g., pending/complete/failed) or how to obtain the job id. Adequate but with clear gaps for a job-status 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% for the single required 'id' parameter, and the description never clarifies that this is the poster job id obtained from create_poster_job. With only one opaque parameter, the description should compensate but does not.

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 ('Get') and resource ('poster generation job') plus the payload (status and generated posters). It is distinguishable from create_poster_job, though it does not explicitly disambiguate itself from the near-named sibling get_post_job.

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 call this versus alternatives, and it omits the obvious workflow context: that this is the polling companion to create_poster_job (call create first, then poll this with the returned id).

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

reddit_ads_get_post_jobGet post creation jobA
Read-only

Get the status of a structured post creation job (QUEUED|PROCESSING|SUCCESS|CLIENT_ERROR|SERVER_ERROR) and the resulting post_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_creation_job_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real value by disclosing the status enum and the returned post_id. It does not say whether CLIENT_ERROR/SERVER_ERROR are terminal or whether polling is expected, which is the main remaining gap.

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 resource, and the enum is packed inline with no wasted words.

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 no output schema, the description usefully names what comes back (status plus post_id), and annotations cover the read-only nature. It is nearly complete for a polling tool, missing only guidance on terminal states and polling cadence.

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% for the single post_creation_job_id parameter, and the description only references the job generically. The parameter's origin (from create_post_job) and format are left to inference, but the single obvious param keeps this adequate.

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 (Get) plus resource (structured post creation job) and even enumerates the possible status values returned. An agent can distinguish this from the sibling create_post_job and get_poster_job 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 Guidelines3/5

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

Usage is implied: this is clearly a poller for a job returned by create_post_job, and retrieving the resulting post_id confirms that intent. However, it never states when to call it, how often, or that it should be used after create_post_job rather than get_structured_post.

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

reddit_ads_get_product_feedGet product feedC
Read-only

Get a product feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
feed_idYes

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered externally, but the description adds nothing on top — it does not say whether the feed is fetched live from the remote source, whether missing feeds error or return null, or anything about latency/auth. It contributes zero behavioral signal.

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?

It is a single grammatical sentence with no filler and is front-loaded, but its brevity reflects under-specification rather than disciplined concision — there is no meaningful content being compressed.

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?

A read-only single-item fetch with no output schema and no annotation detail about returns leaves the agent without any picture of what a 'product feed' object contains or how to obtain a valid feed_id. For a tool in a dense catalog/feed tool family, this is materially incomplete.

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?

One required parameter (feed_id) with 0% schema description coverage, so the description carries the full burden and provides nothing — no identifier format, no hint where feed_id comes from (list_product_feeds / create_product_feed). The parameter name is self-evident, which is the only reason this is not a 1.

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

Purpose2/5

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

The sentence 'Get a product feed' is a verbatim restatement of the tool name reddit_ads_get_product_feed; it adds no scope, no distinguishing detail versus siblings like reddit_ads_list_product_feeds or reddit_ads_get_catalog. This is the textbook tautology case.

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 prerequisites (e.g. an existing feed_id from reddit_ads_list_product_feeds or reddit_ads_create_product_feed), and no exclusions relative to the ~100 sibling tools. The agent must infer everything from the name alone.

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

reddit_ads_get_product_setGet product setC
Read-only

Get a product set.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_set_idYes

TDQS

C2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is already covered. The description adds nothing on top of that — no note about scoping, permissions, or what a retrieved product set represents, so it contributes essentially zero 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.

Conciseness2/5

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

The single sentence is terse and front-loaded, but it is under-specified rather than concise — it wastes its one sentence restating the name instead of conveying anything useful.

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 read-only lookup tool with no output schema and one undocumented parameter, the description should at minimum explain what a product set is and how the ID is obtained. Neither is present, so it is incomplete 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 schema only supplies a required string named product_set_id with no format or provenance. The description says nothing about the parameter, leaving the agent without guidance on where the ID comes from or how it should look.

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

Purpose2/5

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

The description 'Get a product set.' merely restates the tool name and title, adding no information beyond the verb+resource already implied. It does not distinguish this retrieval tool from siblings like reddit_ads_list_product_sets or reddit_ads_list_product_set_products.

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, what prerequisite steps are needed to obtain a valid product_set_id, or how it relates to the sibling list/create/update/delete product set tools. Usage must be inferred entirely from the name.

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

reddit_ads_get_profileGet profileC
Read-only

Get a Reddit profile by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_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=true and openWorldHint=true, so the safety profile is covered externally. The description adds nothing beyond that: no note on auth requirements, what a profile contains, or behavior when the ID does not exist.

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 front-loaded sentence with no filler, which is appropriate structurally. It reads as under-specification rather than genuine conciseness given how little it conveys.

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 simple read tool this is close to the minimum, but with no output schema and no description of the returned profile shape, or which entity a 'profile' is, the agent cannot confidently call it against the right sibling.

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 coverage is 0% and the single required parameter carries only minLength. 'By ID' echoes the schema field rather than explaining the identifier's format, source, or valid values, so the parameter remains semantically thin.

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?

States a verb ('Get'), resource ('Reddit profile'), and shards out the key ('by ID'), so the basic action is legible. However, 'profile' is ambiguous in this API family, which also exposes get_me, list_account_profiles and list_business_profiles, and the description offers no differentiation from those.

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 when-to-use context, no alternative named, no prerequisites. With several sibling tools returning profile-like data, the agent is left to guess which one applies.

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

reddit_ads_get_reportGet performance reportA
Read-only

Get performance metrics for an ad account. Metric keys come back lowercase. spend, cpc, cpv, ecpm, conversion_*ecpa, app_installecpa, app_install_skan and app_install_*revenue are micro-currency (divide by 1000000); conversion*_total_value is in cents. Data can take up to 6 hours to settle.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoUppercase metric names. Default IMPRESSIONS, CLICKS, SPEND, CTR, CPC, ECPM. Others: REACH, FREQUENCY, VIDEO_STARTED, VIDEO_WATCHED_25_PERCENT..VIDEO_WATCHED_100_PERCENT, VIDEO_VIEWABLE_IMPRESSIONS, CPV, CONVERSION_PAGE_VISIT_CLICKS, CONVERSION_PURCHASE_CLICKS, CONVERSION_PURCHASE_VIEWS, CONVERSION_PURCHASE_TOTAL_VALUE, CONVERSION_PURCHASE_ECPA, CONVERSION_SIGN_UP_CLICKS, CONVERSION_LEAD_CLICKS, CONVERSION_ADD_TO_CART_CLICKS, KEY_CONVERSION_TOTAL_COUNT, KEY_CONVERSION_ECPA, APP_INSTALL_INSTALL_COUNT, etc.
filterNoFilter like campaign:id==123 or ad_group:name=@brand or ad:effective_status==ACTIVE; comma separated conditions are ORed
ends_atYesEnd date YYYY-MM-DD (inclusive) or ISO 8601 (rounded to the hour)
max_pagesNoDefault 10
page_sizeNo
starts_atYesStart date YYYY-MM-DD or ISO 8601 (rounded to the hour)
breakdownsNoUp to 3 breakdowns (4 when COUNTRY and REGION are both used). Use at most one of KEYWORD, COMMUNITY, INTEREST, LANGUAGE and do not combine them with geo, OS_TYPE, GALLERY_ITEM_ID or CAROUSEL_CARD; HOUR only for ranges up to 7 days
time_zone_idNoIANA time zone, e.g. America/New_York
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.
custom_column_idsNo
conversion_metricsNo[{conversion_field, action_sources: [WEBSITE|APP|PHYSICAL_STORE|OTHER]}]
conversion_custom_eventsNo[{name, metrics: [{metric_type: VIEWS|CLICKS|ECPA|TOTAL_VALUE|TOTAL_ITEMS|AVG_VALUE|ROAS, action_sources}]}]

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, but the description adds genuinely non-obvious behavior: metric keys return lowercase, specific fields are micro-currency (divide by 1,000,000) while conversion_*_total_value is in cents, and data can take up to 6 hours to settle. These are high-value operational facts an agent cannot get from the schema. It stops short of covering pagination behavior despite max_pages/page_size params.

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 sentences, front-loaded with the purpose, then the most failure-prone details (units, lowercase keys, settlement lag). The currency sentence is dense but every clause maps to a real integration pitfall. 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?

For a complex 12-parameter reporting tool with no output schema, the description covers the return-value semantics that would otherwise be missing (units, key casing, freshness). The remaining gaps — pagination and filter/breakdown constraints — are documented in the schema, so the agent is not left blind.

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 already 83%, so baseline is 3. The description adds meaning beyond the schema by explaining the return-side semantics of the fields parameter (lowercase output keys, currency units per metric family), which the schema does not document. It does not add anything about filter, breakdowns, or pagination syntax.

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 performance metrics for an ad account.' An agent can tell this is the reporting/analytics tool rather than a list/get-entity tool. It does not explicitly differentiate itself from adjacent read siblings (e.g., get_ad_account_history), 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 Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no named alternatives. The agent must infer that this is the metrics-retrieval tool from the name alone. Nothing states when to prefer it over other query/history tools.

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

reddit_ads_get_saved_audienceGet saved audienceC
Read-only

Get a saved audience.

ParametersJSON Schema
NameRequiredDescriptionDefault
saved_audience_idYes

TDQS

C2.1/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — no note on auth requirements, whether a missing ID errors, or what the returned audience object contains.

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?

The single sentence is front-loaded and free of waste, but it is concise at the cost of being under-specified rather than genuinely efficient.

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 and annotations only cover the read-only/open-world nature, so the description should carry the burden of explaining what is returned. For a getter tool keyed on an opaque ID, the definition leaves too much unstated.

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% with one required parameter (saved_audience_id), and the description says nothing about its format, provenance, or how to obtain it (e.g., from list_saved_audiences). It fails to compensate for the undocumented parameter.

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

Purpose2/5

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

The description 'Get a saved audience' merely restates the tool name and title without adding scope, distinguishing it from list_saved_audiences, get_custom_audience, or get_structured_post. It is a tautology rather than a specific statement of what is retrieved or how.

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 siblings like list_saved_audiences (to enumerate) or get_custom_audience (a different audience type). No prerequisites, no exclusions, no context of any kind.

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

reddit_ads_get_skan_availabilityGet SKAdNetwork availabilityC
Read-only

Get SKAdNetwork campaign, ad group and ad quota for an iOS app.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
ad_group_idNo
campaign_idNo

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 and openWorldHint=true, so the safety profile is covered. The description adds the iOS scope and the three categories of returned data (campaign, ad group, quota), which is modestly useful, but it says nothing about auth requirements, rate limits, or the meaning of 'quota'.

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. It is efficient, though its brevity is partly a symptom of under-specification rather than disciplined concision.

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?

With no output schema, 0% parameter coverage, and three parameters, the description leaves the agent without parameter semantics or any sense of the return shape. It is too thin for the complexity of the call despite the annotations covering safety.

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 three parameters, so the description must carry the burden, yet it never names app_id, ad_group_id, or campaign_id. It loosely gestures at 'campaign' and 'ad group' but gives no format, required/optional distinction, or scoping semantics.

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 ('Get') and resource ('SKAdNetwork campaign, ad group and ad quota'), and no sibling tool overlaps with SKAdNetwork, so it is distinguishable. It is slightly fuzzy on what 'availability' concretely resolves to, but the scope (iOS app) is clear.

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 call this versus alternatives, prerequisites, or the condition that makes SKAdNetwork availability relevant. The agent is told what the tool returns but not when it is the right choice.

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

reddit_ads_get_structured_postGet structured postD
Read-only

Get a structured post.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

TDQS

D1.9/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not clarify return shape, whether the id refers to a structured post in the same namespace as regular posts, or error behavior for a missing/invalid id. With the lower bar set by annotations, this is still a bare minimum.

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

Conciseness2/5

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

The single short sentence is not concise so much as under-specified; it is a tautology of the title with no informational payload. Brevity here reflects missing content rather than efficient structure.

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

Completeness1/5

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

For a lookup tool with no output schema, a 0%-covered parameter, and no behavioral detail, the description leaves the agent without enough information to call it correctly. Nothing describes what is returned or how errors are surfaced.

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 single parameter post_id is undocumented in both schema and description. The description does not state the id's format, source, or whether it is the structured post id returned by list_structured_posts, so it fails to compensate for the coverage gap.

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

Purpose2/5

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

The description 'Get a structured post.' is a verbatim restatement of the title and tool name, adding no distinguishing detail. It does not differentiate this tool from siblings like reddit_ads_get_post, reddit_ads_list_structured_posts, or reddit_ads_update_structured_post, leaving the agent to infer what a 'structured post' actually is.

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 prerequisites (e.g., authentication or lookup of an existing post id), and no routing to alternatives such as list_structured_posts for discovery or get_post for regular posts. Usage is only implied by the word 'Get'.

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

reddit_ads_get_third_party_trackersGet third-party trackersB
Read-only

List approved click and impression tracker domains for ad event_trackers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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=true and openWorldHint=true, so the safety profile is covered. The description adds the meaningful scoping detail that only 'approved' domains are returned, but otherwise adds little behavioral context (no pagination, filtering, or return shape).

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 tight sentence with the key qualifier ('approved') front-loaded and no wasted words. Well-matched to a no-param list 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?

With no output schema and no parameters, the description carries the full burden of explaining what comes back. It says 'tracker domains' but doesn't describe the structure or scope (e.g., per-account vs. global), leaving a modest gap for an otherwise simple tool.

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?

There are zero parameters, so the baseline is 4. The description correctly implies no input is needed, and there are no parameters to document.

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 (List) and resource (approved click and impression tracker domains), plus the ad event_trackers scope. No sibling tool covers trackers, so an agent can distinguish it, though it doesn't explicitly contrast with the closest list siblings.

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?

It describes what the tool returns but gives no guidance on when to use it versus alternatives, nor any prerequisites (e.g., needing a business/account context). Usage is only implied by the noun 'approved.'

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

reddit_ads_list_account_profilesList ad account profilesA
Read-only

List Reddit profiles (t2_ user IDs) an ad account can post ads as. Profile IDs are needed for posts, creative assets and ads.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

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 and openWorldHint=true, so the safety profile is covered. The description adds only that results are profiles usable for posting ads; it says nothing about scoping to the account, auth requirements, or whether an empty list is possible.

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, no filler, with the core purpose front-loaded and the downstream rationale second. Nothing to trim.

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?

No output schema exists, and the description does name the return content (profiles as t2_ user IDs) and its purpose. Combined with fully covered pagination params and read-only annotations, this is nearly sufficient; only explicit sibling disambiguation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and pagination params (max_pages, page_size, page_token) are fully documented in the schema. The description only reinforces the t2_ ID concept, adding no format or syntax detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (List) and resource (Reddit profiles / t2_ user IDs) scoped to an ad account, which is clearly distinct from reddit_ads_get_profile (single) . It does not explicitly distinguish itself from the sibling reddit_ads_list_business_profiles, which is the nearest ambiguity.

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 downstream motivation ('Profile IDs are needed for posts, creative assets and ads'), which implies why an agent would call it, but never says when to prefer this over reddit_ads_list_business_profiles or what prerequisites exist. Usage is inferable rather than stated.

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

reddit_ads_list_ad_accountsList all ad accountsA
Read-only

List every ad account the authenticated user can access, grouped by business. Start here to find ad_account_id values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and open-world profile is covered. The description adds only the 'grouped by business' shape hint; it says nothing about pagination, result volume, or ordering. With annotations carrying the safety burden, this is an adequate but not rich disclosure.

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 the resource/scope claim front-loaded and the actionable 'start here' guidance second. Nothing 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?

For a zero-param, read-only list tool whose annotations already cover safety and open-world behavior, the description covers what it returns and when to reach for it. Without an output schema it could say more about pagination or ordering, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

The tool takes no parameters, so there is no parameter semantics to convey; the baseline for zero-param tools is 4. The description does not need to compensate for any schema 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?

A specific verb and resource are stated ('List every ad account'), and scope is clarified ('the authenticated user can access, grouped by business'), which implicitly separates it from the business-scoped sibling. It stops short of naming an alternative like reddit_ads_list_business_ad_accounts or reddit_ads_query_ad_accounts 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?

'Start here to find ad_account_id values' gives a clear entry-point condition that tells an agent when this tool is the right first call. There is no explicit exclusion or named alternative for when a business-scoped or query variant is preferable.

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

reddit_ads_list_ad_groupsList ad groupsC
Read-only

List ad groups in an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFilter by ad group IDs (max 200)
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
campaign_idNoFilter by campaign ID
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate read-only safety. However, it adds no behavioral context beyond that, such as pagination merging behavior, authentication requirements, or how results are scoped beyond the 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?

The description is a single front-loaded sentence with no filler. It is appropriately terse for a simple list operation, though its extreme brevity leaves other dimensions underspecified.

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 read-only list tool with rich schema coverage and annotations, the description gives the core action and scope. It is minimally adequate, but it does not help the agent decide when to use it or understand pagination behavior beyond what the schema already provides.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the input schema. The description adds no parameter-level meaning, which fits the baseline of 3 when the schema does the heavy lifting.

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 ad groups') and scopes it to an ad account, which distinguishes it from get_ad_group, create_ad_group, and update_ad_group. It does not explicitly contrast with sibling list tools, but the resource is clear enough for selection.

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 such as get_ad_group or list_campaigns, nor are prerequisites or exclusions stated. The implied usage is only that it lists ad groups.

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

reddit_ads_list_adsList adsA
Read-only

List ads in an ad account. Filters are OR within a parameter and AND across parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFilter by ad IDs
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_group_idNoFilter by ad group IDs
campaign_idNoFilter by campaign IDs
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.
effective_statusNoFilter by effective status, e.g. ACTIVE, REJECTED, PENDING_APPROVAL
configured_statusNoFilter by configured status

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds a useful behavioral detail about filter combination logic (OR within a parameter, AND across parameters), but it does not disclose return format, pagination behavior, 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.

Conciseness5/5

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

The description is two sentences, front-loads the primary action, and every word earns its place. It efficiently conveys the core purpose and the filter combination rule without redundancy.

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

Completeness4/5

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

Given the 9-parameter schema with full documentation and annotations covering safety, the description is largely sufficient for an agent to call the tool. It omits any description of return values or pagination summary, but the schema itself documents pagination parameters thoroughly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining how multi-value array filters combine: OR within a parameter and AND across parameters. This is meaningful semantics not present in the individual parameter descriptions.

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 ads') and scopes it to 'in an ad account,' which clearly distinguishes it from create_ad, update_ad, and get_ad. However, it does not explicitly name sibling alternatives or clarify when this is preferred over related listing tools like list_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 Guidelines2/5

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

The description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention alternatives such as get_ad for a single ad or list_ad_groups for ad group listings. The purpose is implied by the verb 'List ads,' but there is no routing context.

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

reddit_ads_list_appsList appsB
Read-only

List mobile apps used in the ad account's past campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful scope ('past campaigns'), but does not mention pagination behavior, result format, or auth requirements beyond what the schema already implies. It adds modest context without contradicting 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?

A single, front-loaded sentence with no wasted words. The core action and scope are stated immediately.

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 simple read-only list tool with full schema coverage and no output schema, the description supplies the essential scope. It could be slightly more complete by noting pagination behavior or lack of filtering, but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no parameter-level meaning beyond what is structured. Baseline 3 applies when the schema does the heavy lifting.

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 mobile apps used in the ad account's past campaigns.' It is clear what the tool returns, but it does not distinguish itself from nearby siblings such as reddit_ads_get_app_last_fired. No explicit sibling routing is provided.

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 only a purpose statement, not usage guidance. It does not say when to choose this tool over alternatives, what prerequisites exist (e.g., ad account access), or any exclusions. An agent must infer the usage context.

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

reddit_ads_list_business_ad_accountsList business ad accountsA
Read-only

List ad accounts owned by a business (not those shared into it).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoFilter by ad account IDs
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
business_idYes

TDQS

A4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the ownership filter as behavioral context, but does not mention authentication requirements, rate limits, or pagination behavior beyond what the schema provides.

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 definition is a single sentence with zero wasted words. The ownership scope is front-loaded and immediately useful.

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 simple read-only list tool with annotations and mostly documented parameters, the description defines scope well enough. It does not mention pagination or filtering behavior, but the schema and annotations cover those operational details.

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 80%, so the schema already documents most parameters. The description only implies business ownership filtering and does not add meaning for ids, max_pages, page_size, or page_token beyond the schema text.

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 (List), resource (ad accounts), and ownership scope (owned by a business, not shared into it). It distinguishes the tool from sibling list_ad_accounts and query_ad_accounts by clarifying the ownership boundary.

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 context for when to use the tool and explicitly excludes shared accounts ('not those shared into it'). However, it does not name an alternative tool for listing shared accounts, so the routing guidance is useful but not fully explicit.

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

reddit_ads_list_businessesList my businessesB
Read-only

List businesses the authenticated user belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoOnly businesses that own this ad account

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 and openWorldHint=true, so the safety profile is covered. The description adds the meaningful detail that results are scoped to the authenticated user's memberships, but says nothing about authorization requirements for the role filter, pagination behavior, or result ordering. With annotations carrying the safety burden, this is an adequate but thin addition.

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 zero filler; every word earns its place and the resource and scope appear immediately.

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 5-parameter list tool with no output schema and no required parameters, the definition is only minimally sufficient: it never indicates what a business record contains or how pagination merges (max_pages) behaves across pages. Acceptable to invoke, but the agent is left guessing about return shape.

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 80%, so the baseline is 3. The description adds no parameter detail at all — notably the 'role' enum (BUSINESS_ADMIN/CATALOG_ADMIN) is undocumented in both schema and description, but the four pagination/filter parameters are reasonably explained by the schema itself.

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 resource ('businesses') with a clear scope qualifier ('the authenticated user belongs to'), which separates it from the singular reddit_ads_get_business. It does not, however, explicitly distinguish itself from adjacent siblings such as reddit_ads_list_business_ad_accounts or reddit_ads_list_business_profiles.

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 defines the result set but gives no when-to-use guidance, no prerequisites, and no mention of when to prefer get_business or another sibling. An agent must infer the calling context entirely.

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

reddit_ads_list_business_pixelsList business pixelsC
Read-only

List Reddit pixels of a business.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
business_idYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no note on pagination, result merging, or what a 'business pixel' record contains, even though the schema exposes pagination controls.

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 or repetition. It is economical, though the extreme brevity borders on under-specification rather than optimal structure.

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 four-parameter, paginated list tool with no output schema and no documentation of the required business_id, this one-sentence description leaves the agent without return-shape, pagination, or scoping detail. It should do more given the structured fields do not cover everything.

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 75%, so most parameters are documented inline (max_pages, page_size, page_token). The description contributes almost nothing beyond implying business_id identifies the business, and the required business_id has no schema description, so it remains under-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?

States a specific verb (list) and resource (Reddit pixels) plus a scope qualifier ('of a business'), which separates it from the generic sibling reddit_ads_list_pixels. It does not explicitly name that sibling or explain the distinction, 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 Guidelines2/5

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

The only usage signal is the implicit 'of a business' scoping; there is no statement of when to choose this over reddit_ads_list_pixels or the other pixel tools (get_pixel_last_fired, create_pixel_data_deletion_job). No prerequisites or exclusions are given.

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

reddit_ads_list_business_profilesList business profilesB
Read-only

List Reddit profiles owned by a business.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
business_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered by structured data. The description adds only the ownership scoping; it says nothing about pagination defaults (max_pages default 1) or how results merge across pages, though the schema partially covers those parameters.

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. It is efficient but arguably under-specified rather than maximally concise, since a scoping/alternative clause could be added at little cost.

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 read-only list tool with annotations and a partially documented schema, this is minimally adequate. Lacking an output schema, the description could state the shape of returned profiles or pagination behavior, and it does not distinguish itself from sibling profile-listing tools.

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

Parameters3/5

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

Schema coverage is 75%, and business_id itself carries no schema description; the phrase 'owned by a business' implicitly explains that parameter but adds no format or ID-source detail. Pagination params are documented in the schema, not the description, so baseline 3 is appropriate.

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

Purpose4/5

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

Specific verb (list) and resource (Reddit profiles) with the scoping qualifier 'owned by a business', which tells the agent this is business-scoped rather than account-scoped. However it never names or contrasts with the close sibling reddit_ads_list_account_profiles, so disambiguation requires 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 Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative-tool guidance beyond the implicit business scoping. Nothing tells the agent how this differs from list_account_profiles or what prerequisites (e.g. valid business_id) exist.

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

reddit_ads_list_campaignsList campaignsC
Read-only

List campaigns in an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFilter by campaign IDs (max 200)
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing beyond that — no note on pagination behavior, default page size, result limits, or what happens when id filters are combined with pagination, despite the schema flagging these as meaningful controls.

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 with zero filler; the resource and scope are front-loaded. It is efficient, though arguably so terse that it under-specifies rather than being perfectly sized.

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 five-parameter list tool with no output schema, the description omits what the response contains (campaign fields) and how pagination merging behaves across max_pages. The rich schema compensates for the parameter side, but the return-value gap keeps this at minimum-viable.

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

Parameters3/5

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

Schema coverage is 100%: every parameter including defaults (REDDIT_ADS_ACCOUNT_ID, default 1 page, max 200 IDs) is documented in the schema itself. The description adds no parameter-level meaning, so the baseline 3 for full schema coverage applies.

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

Purpose4/5

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

The description states a specific verb (list) and resource (campaigns) with scope (in an ad account), so an agent can understand the operation. However, it does not differentiate from close siblings like reddit_ads_get_campaign or reddit_ads_list_ad_groups, leaving disambiguation to the tool name.

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

Usage 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 guidance, no mention of when NOT to use it, and no reference to alternatives such as get_campaign (single campaign) or query tools. Usage is only weakly implied by the word 'List'.

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

reddit_ads_list_carriersList carriersB
Read-only

List mobile carriers for targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds no behavioral context beyond that, such as pagination behavior, authentication needs, or rate limits, and only restates the tool's purpose.

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 zero wasted words. It is as concise as possible while still stating the tool's core 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?

For a simple read-only reference-list tool, the description states what the tool does, and the schema covers pagination while annotations cover the safety profile. However, it lacks any usage guidance or return-shape context, leaving clear gaps beyond the minimum.

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

Parameters3/5

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

Schema description coverage is 100% for all three optional pagination parameters, so the schema fully documents their meaning. The description adds no parameter-level detail, which is acceptable given the high schema coverage, yielding the baseline score of 3.

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 resource ('mobile carriers') with a clear targeting context. It does not explicitly differentiate from similar reference-list siblings like reddit_ads_list_devices or reddit_ads_list_languages, but the resource is distinct enough to be recognizable.

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 phrase 'for targeting' gives a weak context hint, but there is no explicit when-to-use, when-not-to-use, or alternative tool guidance. An agent must infer usage entirely from the name and context.

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

reddit_ads_list_catalog_import_issuesList catalog import issuesC
Read-only

List issues found while importing a feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoFilter by issue code
import_idYes
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered, and the schema documents pagination controls. The description adds nothing beyond that: no note on whether issues are a bounded set, how they relate to the import job status, or what a caller should do with them.

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 no filler; appropriately front-loaded and free of redundancy. It is efficient, though arguably under-specified rather than maximally informative.

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 listing tool with no output schema, the annotation and schema coverage make this minimally workable. Still missing is the relationship to sibling tools (where import_id originates) and any indication of what the returned issues represent.

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 80% (code filter, max_pages, page_size, page_token all described), so the schema carries parameter meaning. The description adds no parameter detail — it never mentions the code filter or the pagination/merge behavior.

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 clear verb (List) and resource (issues found while importing a feed), so an agent knows it retrieves per-import error data. However, it does not distinguish itself from adjacent siblings such as reddit_ads_get_catalog_import_report or reddit_ads_list_catalog_imports, which an agent could plausibly 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 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 (e.g., that import_id must come from a catalog import), and no mention of alternatives like the catalog import report. Usage is only inferable from the name and required parameter.

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

reddit_ads_list_catalog_importsList catalog importsC
Read-only

List feed import runs of a catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
feed_idsNoFilter by feed IDs
statusesNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
catalog_idYes
page_tokenNoPage token from a previous pagination.next_url

TDQS

C2.8/5.0
Behavior2/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, covering safety. The description adds no behavioral context such as pagination behavior, auth needs, or how many runs are returned; it merely restates the resource.

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?

One short, front-loaded sentence with no wasted words. It could arguably be slightly more informative, but it is efficient.

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 read-only list tool with pagination documented in the schema and no output schema, the description gives enough to know the core purpose. It falls short on differentiating from adjacent import-report/issue siblings and on usage conditions.

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 coverage is 67% with four of six parameters described. The description only implies catalog_id via 'of a catalog' and adds no meaning for feed_ids, statuses, or pagination controls beyond what the schema already provides.

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 resource 'feed import runs of a catalog', making clear it returns import-run records scoped to one catalog. It implicitly distinguishes from catalog-level or issue-level siblings, but does not name alternatives like list_catalog_import_issues or get_catalog_import_report.

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 indication of when to use this tool, prerequisites, or when to prefer a sibling such as get_catalog_import_report or list_catalog_import_issues. Only the resource being listed is implied.

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

reddit_ads_list_catalog_productsList catalog productsC
Read-only

List products in a catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoFilter by product IDs
searchNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
catalog_idYes
page_tokenNoPage token from a previous pagination.next_url
approval_decisionNo

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 and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond that — nothing about pagination merging (max_pages), filtering semantics, approval states, or result volume, all of which are non-obvious for this tool.

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?

One short, front-loaded sentence with zero padding, which is structurally fine. But the brevity tips into under-specification for a 7-parameter listing tool rather than productive concision.

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?

With 7 parameters, no output schema, and no annotations beyond the read-only/open-world hints, the description should carry more weight — at minimum what the returned product records contain and how pagination behaves. It supplies none of that.

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 only 57% across 7 parameters, so the description is expected to compensate, yet it mentions no parameters at all. Filters like ids, search, and approval_decision, and the pagination controls, carry meaning the description never reinforces or clarifies.

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 products in a catalog'), so the basic operation is unambiguous. However, it does nothing to distinguish this from close siblings such as reddit_ads_list_product_set_products, reddit_ads_list_catalog_imports, or reddit_ads_upsert_products, all of which deal with products in a catalog-adjacent context.

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 indication of when to choose this tool over alternatives, nor any prerequisite (e.g. that a catalog_id and possibly an approved catalog/feed setup are required). It states only what it does, leaving selection between the many list_* siblings entirely to inference.

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

reddit_ads_list_catalogsList product catalogsC
Read-only

List product catalogs of a business.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered without the description. The description adds nothing beyond that: no pagination behavior, no result count/ordering, no note on what is returned or whether an empty business yields an empty list.

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 wasted words. It errs on the thin side rather than being bloated, but structurally clean.

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 one-parameter read-only list tool with annotations covering safety and no output schema, the essentials are present. Still missing the provenance of business_id and any sense of return shape or pagination, so it is only minimally complete.

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

Parameters3/5

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

One parameter with 0% schema description coverage. The phrase 'of a business' loosely identifies business_id as the owning business, which is the only added meaning; no format, source, or example for the ID is given. Baseline 3 for a single self-describing parameter.

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 resource ('product catalogs') and scopes it to a business, so it is distinguishable from the singular read sibling get_catalog. However, it does not name get_catalog or the create/update/delete catalog siblings 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 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 guidance or statement of prerequisites (e.g., that business_id must come from list_businesses). Usage is only implied by the verb 'List'. No alternatives are named despite the catalog family having get/create/update/delete variants.

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

reddit_ads_list_creative_assetsList creative assetsB
Read-only

List creative assets in a profile's library.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
typesNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
mime_typeNoimage/jpeg, image/png, image/gif, image/webp, video/mp4, video/quicktime
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
profile_idYes
aspect_ratiosNo1:1, 3:4, 4:3, 4:5, 9:16, 16:9, 1.91:1, CUSTOM
creative_asset_idsNoFilter by asset IDs

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the profile-library scoping, and says nothing about pagination behavior (left to the schema's max_pages/page_token) or about what a result set contains.

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. It is efficient, though arguably too terse rather than maximally informative.

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 9-parameter list tool with no output schema, the description is minimal. Pagination and filtering are delegated to the schema, but return-value shape and default ordering are left unexplained, leaving gaps an agent would need to discover by calling it.

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

Parameters3/5

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

Schema description coverage is 67%, with mime_type, aspect_ratios, pagination, and creative_asset_ids well documented in the schema itself. The description contributes no parameter meaning at all, so it neither helps nor harms relative to the baseline for adequately covered schemas.

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

Purpose4/5

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

States a clear verb+resource ('List creative assets') and adds scope ('in a profile's library'), which tells the agent this is a profile-scoped listing. However, it does not distinguish itself from the dense sibling cluster (list_creative_asset_uploads, get_creative_asset, get_creative_asset_upload), so an agent cannot tell these apart from the description alone.

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 prerequisites, and no named alternatives despite several adjacent creative-asset tools. The agent must infer usage entirely from the name and schema.

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

reddit_ads_list_creative_asset_uploadsList creative asset uploadsB
Read-only

Get the status of several creative asset uploads.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUpload IDs
profile_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the call returns upload status, which is the key behavioral fact for a status-polling endpoint, but says nothing about authentication scope, per-upload failure semantics, or how partial results behave.

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, but it is arguably too terse for a tool that lacks an output schema, so it stops just short of ideal efficiency.

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 batch-lookup tool whose annotations cover safety, the minimal description is close to adequate. However, with no output schema and an undocumented profile_id, the description should at least sketch what 'status' contains or how many uploads can be queried.

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 50%: the id array is documented (Upload IDs, max 100/min 1) while profile_id is undocumented in both places. The description's 'several' reinforces the batch nature of the id array but does not compensate for the missing profile_id semantics.

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 status of creative asset uploads), which is clearly distinct from the singular sibling reddit_ads_get_creative_asset_upload. It does not explicitly contrast itself with that sibling, but the plural/batch nature is discernible from the name and the word 'several'.

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 versus the singular get_creative_asset_upload, and no mention of prerequisites, polling cadence, or when a batch status check is preferable. The agent must infer usage from the name alone.

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

reddit_ads_list_custom_audiencesList custom audiencesB
Read-only

List custom audiences (customer lists, retargeting, lookalikes) in an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName filter starting with '=' for exact match or '@' for substring, e.g. '@retarget'
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the account-scoping context ('in an ad account'); it says nothing about pagination behavior, result volume, or defaulting, and no output schema exists to carry that elsewhere.

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 wasted words. It is appropriately terse for a simple list tool, though it sacrifices any routing or behavioral detail for that brevity.

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 read-only list tool with full schema coverage and annotations covering safety, the definition is minimally adequate. It omits output-shape hints and any disambiguation from the many sibling audience-listing tools, leaving gaps an agent must close on its own.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (including the '='/'@' name-filter pattern, max_pages, page_size, page_token, and ad_account_id default) are fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('List') and resource ('custom audiences') and usefully defines what that resource encompasses (customer lists, retargeting, lookalikes). It does not, however, distinguish this list operation from sibling get_custom_audience or the other custom-audience tools.

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 versus get_custom_audience (single fetch) or list_saved_audiences / list_third_party_audiences. The agent must infer the listing use case purely from the name.

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

reddit_ads_list_devicesList devicesA
Read-only

List device makes and models for targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only that the data is targeting reference material; it says nothing about result volume, pagination behavior, or the shape of returned device makes/models.

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 eleven-word sentence that front-loads the resource and closes with the purpose; there is no filler or redundancy.

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 three-parameter read-only list with no output schema, the definition conveys what is listed but not what a returned entry looks like or how the pagination parameters interact. The complete schema coverage compensates for the parameter gap, leaving it merely adequate.

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

Parameters3/5

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

Schema description coverage is 100%: all three pagination parameters (max_pages, page_size, page_token) are fully documented in the schema itself. The description adds no parameter-level meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (list) and resource (device makes and models) plus the use case (targeting), so an agent can tell it is a reference-data lookup rather than a mutation. It does not explicitly differentiate itself from the other targeting reference lists (carriers, languages, interests, geolocations), 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?

"for targeting" gives implied usage context, indicating it is consulted when building device targeting criteria. There is no explicit when-to-use versus alternatives or any stated preconditions, so this is only minimally adequate.

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

reddit_ads_list_funding_instrument_allocationsList funding instrument allocationsB
Read-only

List child funding instruments allocated from a funding instrument.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
funding_instrument_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the description does not contradict it. However, the description adds no behavioral context of its own — no note on pagination, result shape, or whether the listing is scoped to a business. With annotations carrying the burden, this is adequate but thin.

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 wasted words. It is efficient, though the phrase 'child funding instruments allocated from a funding instrument' is slightly circular and could have used the freed space for the usage distinction.

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?

There is no output schema, so the description should ideally hint at what an allocation record contains, but it does not. Pagination mechanics are covered by the schema, and annotations cover safety, so the definition is minimally viable for a read-only list tool rather than complete.

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

Parameters3/5

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

Schema description coverage is 75%, and the three pagination parameters are documented in the schema itself. The one undocumented parameter is funding_instrument_id — the required one — and the description never explains what a funding instrument id refers to or how to obtain one. Baseline 3 applies since the schema does most of the work, but the key parameter remains 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?

States a specific verb (List) and resource (child funding instruments allocated from a funding instrument), which distinguishes it from reddit_ads_list_funding_instruments and reddit_ads_query_business_funding_instruments. It does not explicitly name those siblings or state the relationship contrast, but the 'child ... allocated from' framing makes the scope identifiable.

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 when-to-use guidance is given. With three closely related funding-instrument tools in the sibling list, the description never says when to pick this one over list_funding_instruments or query_business_funding_instruments, nor does it state prerequisites (e.g. that the parent funding_instrument_id must already be known).

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

reddit_ads_list_funding_instrumentsList funding instrumentsC
Read-only

List the funding instruments (payment methods, credit lines) of an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
typesNoFilter by funding instrument types
searchNo
end_timeNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
start_timeNo
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.
funding_instrument_idsNoFilter by IDs

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that: no mention that this is scoped to a single ad account, no pagination expectations, no note that the ad_account_id may default from an environment variable. It essentially restates the title.

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 economical sentence, front-loaded with the action and resource. Nothing is wasted, though there is also very little there.

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 10-parameter, zero-required, no-output-schema listing tool with three sibling funding-instrument tools nearby, this definition is far too thin. An agent is left to reverse-engineer filtering, time-range, and pagination behavior from the schema alone, with nothing explaining account scoping or default resolution.

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?

Ten parameters with only 60% schema description coverage, and the description mentions no parameters at all. Several parameters are entirely undocumented in both places (mode enum, search, start_time/end_time), so the description does not compensate for the coverage gap as it should.

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 resource (funding instruments) and even parenthetically defines the resource as payment methods and credit lines, which helps an agent who doesn't know Reddit Ads terminology. It does not, however, distinguish itself from the sibling reddit_ads_query_business_funding_instruments, which an agent could easily confuse this with.

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 the closely named reddit_ads_query_business_funding_instruments or the related reddit_ads_list_funding_instrument_allocations. No prerequisites, no context on account scoping beyond the schema's default-value note.

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

reddit_ads_list_geolocationsList geolocationsA
Read-only

List geolocation targets. Without filters returns countries; filter by country for regions/metros, or search cities / postal codes.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoISO country code, e.g. US
postal_codeNo
cities_searchNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real behavioral context beyond that by explaining how the returned geography level changes with the filter applied. It says nothing about auth or pagination, keeping 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.

Conciseness5/5

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

Two tight sentences, front-loaded with the core action then the filter behavior. Every clause carries information and none 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 no output schema, the description correctly fills the gap by describing what each mode returns (countries, regions/metros, cities/postal codes). The only omission is routing against the validate_geolocations sibling, otherwise 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?

Schema description coverage is only 33% (country documented, postal_code and cities_search bare), so the description must compensate. It does: it explains that country yields regions/metros and that cities/postal codes are searched, mapping each filter parameter to its role in the query.

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 geolocation targets'), so the agent knows exactly what the tool does. It is clear but never names or distinguishes itself from the sibling reddit_ads_validate_geolocations, so it falls short of the top mark.

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

Usage Guidelines4/5

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

The description gives concrete context: no filters returns countries, filtering by country yields regions/metros, and cities/postal codes can be searched. This tells the agent how to drive the tool, though it omits when to prefer the sibling validate_geolocations over listing.

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

reddit_ads_list_industriesList industriesB
Read-only

List valid business industries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and openWorldHint=true, so the safety profile is covered. The description adds only the qualifier 'valid', hinting this is a reference enumeration, but says nothing about whether results are cached, static, or paginated.

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 no filler, and the verb-resource pairing is front-loaded. It is efficient but arguably under-specified rather than optimally concise.

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 trivial zero-parameter reference-list tool with no output schema, the description is minimally adequate. It does not describe the shape or ordering of the returned industries, which is the one piece of information an agent would still benefit from.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to clarify beyond what the empty schema already communicates.

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 valid business industries'), which is unambiguous. It does not differentiate itself from adjacent reference-list siblings such as reddit_ads_list_interests or reddit_ads_list_languages, so an agent must infer the distinction from the name alone.

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 call this versus alternatives, and no indication of the context in which industries are needed (e.g., targeting setup). The agent gets a purpose but no routing signal.

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

reddit_ads_list_interestsList interestsB
Read-only

List interest categories for targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and openWorldHint=true, so the safety profile is covered. The description only adds that results are interest categories used for targeting; it says nothing about volume, taxonomy depth, or whether results are cached/global, so it adds limited value beyond 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?

A single efficient sentence with no waste, front-loading the verb and resource. It is perhaps too terse to earn a 5, but nothing is padded.

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 trivial zero-param list tool this covers the essential purpose, but with no output schema and no description of the returned shape (flat list vs. hierarchy of interest categories), an agent cannot anticipate the response structure.

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?

There are zero parameters and 100% schema coverage, so the baseline of 4 applies. No parameter semantics are needed 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?

States a clear verb+resource ('List interest categories') and adds scope via 'for targeting'. It is distinguishable from siblings like reddit_ads_list_industries by naming the exact resource, though it stops short of an explicit contrast with the adjacent interest/industry siblings.

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 when-to-use guidance, prerequisites, or named alternatives. The 'for targeting' phrase hints at the context but does not tell the agent when this tool should be chosen over list_industries or similar.

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

reddit_ads_list_languagesList languagesC
Read-only

List languages for targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond that, such as rate limits, pagination behavior, or whether results are cached.

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 a single efficient sentence with the purpose front-loaded and no wasted words. It is appropriately concise and readable, though very terse.

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 list tool with a fully documented schema and read-only annotations, the description is adequate for invocation. It omits usage guidance and any behavioral context, but the structured fields cover most operational needs.

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

Parameters3/5

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

Schema description coverage is 100%, so all three pagination parameters are fully documented in the schema. The description adds no parameter meaning beyond what the schema already provides, which is the baseline 3 for high-coverage schemas.

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

Purpose4/5

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

The description states a clear verb ('List') and resource ('languages'), with the targeting context. It does not explicitly differentiate from the many sibling list_* tools, though 'languages' is unique enough that an agent can distinguish 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?

The description gives no when-to-use guidance, prerequisites, or alternatives. 'For targeting' implies a context but does not say when to select this tool over list_time_zones, list_interests, or other targeting list tools.

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

reddit_ads_list_lead_gen_formsList lead gen formsC
Read-only

List lead generation forms in an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: no word on pagination aggregation (max_pages merging), result ordering, or what an empty account returns — all of which matter for a network-backed list call.

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 scope front-loaded and zero filler. It is efficient rather than padded; the only weakness is that it is thin rather than that it is verbose, which is better assessed under completeness.

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 a fully documented schema and read-only annotations, an agent has enough to call this correctly. What is missing is whether listing supports filtering (e.g. by campaign or status) and how pagination behaves at the tool level, which the description could have clarified for a zero-required-parameter list operation.

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

Parameters3/5

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

Schema description coverage is 100% — every parameter (ad_account_id, page_token, page_size, max_pages) carries its own documentation, including the default account fallback and pagination merge semantics. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('List') and resource ('lead generation forms') scoped to an ad account, so an agent can tell what it returns. It does not distinguish itself from the sibling reddit_ads_get_lead_gen_form (single form) or reddit_ads_create_lead_gen_form, leaving the singular-vs-plural routing to inference.

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, when not to, or which sibling to prefer for a single form vs a full listing. List semantics make the basic usage self-evident, but that is inference on the agent's part rather than guidance in the definition.

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

reddit_ads_list_pixelsList pixelsB
Read-only

List Reddit pixels of an ad account.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

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 and openWorldHint=true, so the safety profile is covered. The description adds only the account scoping context and says nothing about pagination behavior, result limits, or ordering beyond what the schema already documents.

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 zero waste. Nothing is padded or redundant for a simple read-only listing 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?

For a read-only list tool with full schema coverage and existing annotations, the description is minimally sufficient. It omits sibling differentiation from list_business_pixels and gives no indication of what a pixel record contains, which is the main gap given there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (max_pages, page_size, page_token, ad_account_id) are already fully documented in the schema. The description adds no parameter meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

States a clear verb+resource with scope ('List Reddit pixels of an ad account'), which is specific and actionable. However, it does not distinguish itself from the sibling reddit_ads_list_business_pixels, which is a near-identical listing tool at a different scope, leaving the agent to infer the difference.

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 prerequisites, and no mention of the natural alternative reddit_ads_list_business_pixels. The agent gets no routing signal for choosing between account-level and business-level pixel listings.

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

reddit_ads_list_postsList postsC
Read-only

List posts on a profile (legacy posts API).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
sourceNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
profile_idYes

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 and openWorldHint=true, so the safety profile is covered. The description adds only that this hits a legacy API endpoint, which is genuinely useful context, but says nothing about pagination behavior or return shape beyond what the schema already documents.

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 no waste and the scope front-loaded. It is perhaps overly terse given the tool's six parameters, but nothing is padded.

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 list tool with no output schema and half the schema undocumented, one sentence is not enough. An agent gets no help on filtering semantics, pagination strategy, or how the legacy results differ from structured posts.

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 only 50% – type, source, and profile_id have no descriptions, and the description adds no parameter meaning at all. It does not compensate for the gap by explaining the enum filters or what profile_id accepts.

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 resource (posts) scoped to a profile, and the '(legacy posts API)' qualifier hints at how it differs from reddit_ads_list_structured_posts. It is clear but does not explicitly name the sibling to use instead, so the differentiation is left partly to inference.

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 parenthetical '(legacy posts API)' is the only hint about when to use this over reddit_ads_list_structured_posts, and it never states that condition explicitly. No prerequisites, no when-not guidance, no alternative named.

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

reddit_ads_list_product_feedsList product feedsC
Read-only

List feeds of a product catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalog_idYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no pagination behavior, no ordering, no note on how many feeds are typically returned, so it contributes no 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?

One short, front-loaded sentence with no filler or repetition. It is efficient, though so terse that it omits near-essential context rather than being over-sized.

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 read-only list tool with one undocumented parameter and no output schema, the description should at minimum explain what a catalog_id is and what a returned feed looks like. Neither is present, leaving 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 coverage is 0% for the single required param, so the description carries the burden. It only implicitly signals that catalog_id scopes the query ('feeds of a product catalog') and gives no format, source, or example for the ID.

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: listing product feeds, scoped to a product catalog. The scope phrase distinguishes it from the singular reddit_ads_get_product_feed, though it does not explicitly route away from reddit_ads_list_catalogs or other list siblings.

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 when-to-use guidance, no prerequisites, and no mention of how it differs from get_product_feed or list_catalogs. The agent must infer that a catalog_id is needed first (e.g. via list_catalogs) on its own.

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

reddit_ads_list_product_set_productsList product set productsC
Read-only

List products in a product set.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoFilter by product IDs
searchNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
issue_codeNo
page_tokenNoPage token from a previous pagination.next_url
product_set_idYes
approval_decisionNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered, but the description adds nothing beyond them. It omits any note on pagination (despite page_token/max_pages params), result merging, or empty-set behavior, which is the kind of context that earns credit here.

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 waste. It is efficient, though its brevity here comes at the cost of substance rather than being a model of purposeful concision.

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 an 8-parameter tool with 50% schema coverage, no output schema, and minimal annotations, this description is far too thin. Filtering options, pagination semantics, and the relationship to sibling listing tools are all left unexplained.

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 coverage is only 50%, leaving search, issue_code, product_set_id, and approval_decision undocumented. The description adds no parameter meaning at all, so it fails to compensate for the coverage gap on an 8-parameter tool.

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 resource ('products in a product set'), so an agent can identify the operation. However, it does not distinguish this from the sibling reddit_ads_list_catalog_products, which also lists products; the scoping distinction (per-set vs. whole catalog) is left implicit.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no named alternatives. The agent must infer from the name alone that this is the per-product-set variant versus the catalog-wide listing.

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

reddit_ads_list_product_setsList product setsC
Read-only

List product sets of a catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
catalog_idYes
page_tokenNoPage token from a previous pagination.next_url

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing beyond that — no note on pagination behavior (which defaults to one page via max_pages), result volume, or whether an empty catalog returns an empty set.

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 verb and resource. Nothing is wasted, though it is arguably under-specified rather than deliberately concise.

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 list tool with no output schema, the definition is minimally adequate but omits how results relate to pagination and to sibling product-set tools. An agent can call it correctly given the schema, but gains no operational context from the description.

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 75% and the pagination parameters (max_pages, page_size, page_token) are well documented in the schema itself. The description adds no meaning to catalog_id, but the baseline of 3 applies since the schema carries most of the parameter 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 (List) and resource (product sets) scoped to a catalog, so the agent knows what it retrieves. It does not distinguish itself from the sibling list_product_set_products or get_product_set, which could cause confusion about which list tool to pick.

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 indication of when to use this versus get_product_set, list_product_set_products, or list_catalogs. The agent must infer usage purely from the name and required catalog_id.

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

reddit_ads_list_saved_audiencesList saved audiencesB
Read-only

List saved (reusable) targeting audiences.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the clarifying note that these are reusable audiences, but it does not describe pagination behavior, authentication requirements, or return characteristics beyond what is already in the schema and annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It communicates the core verb and resource immediately.

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 list tool with fully documented parameters and readOnly annotations, the description is minimally adequate. However, it omits usage context against sibling audience-listing tools and provides no return or pagination context for a tool with no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters, including pagination and ad_account_id, are already documented in the schema. The description adds no parameter-level meaning beyond the structured fields, making the baseline of 3 appropriate.

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

Purpose4/5

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

States a specific verb and resource: list saved audiences, and clarifies them as reusable targeting audiences. It distinguishes saved audiences from custom/third-party audiences semantically, though it does not explicitly name sibling alternatives.

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 prerequisites, and no comparison to sibling tools such as reddit_ads_list_custom_audiences or reddit_ads_list_third_party_audiences. The description only names the resource being listed.

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

reddit_ads_list_structured_postsList structured postsC
Read-only

List structured posts on a profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFilter by post IDs (max 10)
typeNo
sourceNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
profile_idYes

TDQS

C2.4/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds only the profile scoping and does not disclose pagination behavior, filtering behavior, or what the returned structured posts include. It adds almost no behavioral context beyond the structured fields.

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?

The single sentence is concise and front-loaded, but it is under-specified rather than tightly scoped. It avoids waste but omits information that would make the sentence genuinely useful, so it sits at the minimum viable level.

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?

Given seven parameters, pagination controls, no output schema, and many sibling tools, this description is far too thin. It does not explain filtering, pagination, or how the results relate to the broader Reddit Ads post hierarchy, leaving the agent to infer most usage details.

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 57%, and the description itself only implies the profile_id parameter. It does not explain the id, type, source, max_pages, page_size, or page_token parameters. It fails to compensate for the undocumented parameters and adds no meaning beyond the schema's own descriptions.

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 description gives a specific verb ('List') and a resource ('structured posts'), and adds the scoping condition 'on a profile'. However, it does not distinguish this tool from its close siblings such as reddit_ads_list_posts or reddit_ads_get_structured_post, so an agent cannot tell from the description alone why it should choose this one.

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 reddit_ads_list_posts, reddit_ads_get_structured_post, or reddit_ads_update_structured_post. The description states what it does but provides no context, prerequisites, or exclusions.

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

reddit_ads_list_third_party_audiencesList third-party audiencesB
Read-only

List third-party data audiences (LiveRamp, Bombora) with sizes and costs.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results include sizes and costs, which is useful output context given no output schema, but it says nothing about pagination or rate-limit 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?

A single tight, front-loaded sentence that wastes no words. It is arguably terse for a tool with multiple audience-list siblings, but nothing is 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 read-only paginated list tool with fully documented params and annotation-covered safety, the essentials are present. However, no output schema exists and the description only gestures at the return shape (sizes and costs) without covering pagination behavior, leaving modest gaps.

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?

All three parameters (max_pages, page_size, page_token) have full schema descriptions, so the schema carries the semantics. The description adds no pagination syntax or format details beyond what the schema already provides, matching the baseline 3 for high 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 (List) and resource (third-party data audiences), and names concrete providers (LiveRamp, Bombora) plus returned fields (sizes, costs). The word 'third-party' distinguishes it from the many sibling audience tools (custom, saved), though it never names an alternative 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?

No when-to-use guidance, no prerequisites, and no routing to the sibling audience lists (reddit_ads_list_custom_audiences, reddit_ads_list_saved_audiences). Usage is only implied by the verb 'List'.

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

reddit_ads_list_time_zonesList time zonesC
Read-only

List supported time zones.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing further – no note that this is a static/enumerable reference set, no pagination behavior, no indication of result size 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?

A single front-loaded sentence with no wasted words. It is arguably too terse for its job, but as a conciseness measure it is efficient and well-structured.

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 reference-list tool with a fully described schema and no output schema, a one-line description is close to sufficient. It stops short of telling the agent what the returned time-zone identifiers look like or where they should be applied, which is the only remaining gap.

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?

The schema documents all three pagination parameters at 100% coverage, so the baseline of 3 applies. The description adds no parameter-level detail (no hint about page_size limits or default merge behavior) beyond what the schema already carries.

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 clear verb+resource ('List supported time zones'), so the agent knows it returns a reference list of valid time-zone values. It isn't differentiated from similar lookup siblings such as list_languages, list_devices or list_industries, 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 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 call this versus other enumeration tools, nor any note that the returned values are meant to feed other calls (e.g. campaign scheduling). The agent must infer the use case entirely.

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

reddit_ads_loginLog in to Reddit AdsA

Open the Reddit OAuth consent page in the browser and wait for the callback. Returns the authorization URL if the login is not completed in time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, and the description adds genuine behavioral context beyond them: it opens a browser, blocks waiting for the callback, and returns the authorization URL on timeout. It stops short of describing credential persistence, timeout duration, or success behavior.

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, front-loaded with the core action and followed by the timeout fallback. No wasted words.

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 no parameters, no output schema, and annotations covering the safety profile, the description supplies the key missing context: the async browser/callback flow and the timeout return. It could note that authentication state affects subsequent sibling tools, but it is largely 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?

The tool takes zero parameters, so the description has no parameter semantics to convey and the schema is fully trivial. Baseline 4 is appropriate for a no-param tool.

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 (open OAuth consent page) and resource (Reddit Ads login), making the purpose clear. It is easily distinguished from siblings by name, but it does not explicitly differentiate itself from reddit_ads_auth_status or reddit_ads_logout, relying on the reader to infer the relationship.

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 (authenticate before using other tools) but never stated. There is no explicit guidance on when to call this versus reddit_ads_auth_status, nor any prerequisite context. The only implicit cue is 'wait for the callback,' which the schema alone would not convey.

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

reddit_ads_logoutLog out of Reddit AdsA
Destructive

Revoke the stored refresh token and delete it from disk.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds value beyond that by naming the exact artifact destroyed (the stored refresh token) and where it lives (disk), which tells the agent the credential is truly gone and re-auth will be required.

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 wasted words; the destructive effect is stated immediately.

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 no-parameter, no-output-schema, destructive session tool, the description covers the essential effect. It could add that subsequent API calls will fail until re-login, but nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to document; baseline 4 applies.

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

Purpose4/5

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

States a specific verb (revoke) and resource (stored refresh token) plus the concrete side effect (deletion from disk), so the agent knows exactly what happens. It does not explicitly contrast with the sibling reddit_ads_login or reddit_ads_auth_status, but the operation is unambiguous on its own.

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 end a session, but there is no statement of when to prefer it over alternatives or what state the session must be in. Adequate but with a clear gap.

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

reddit_ads_query_ad_accountsQuery ad accountsB
Read-only

Search the ad accounts a business can access, including shared ones, by name, ID, actor, role or asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoSent as {"data": {...}}. Fields: filter (e.g. 'name=@acme' or 'id==t2_abc', comma separated), actors [{id, type: AD_ACCOUNT|BUSINESS|INVITATION|MEMBER|DEVELOPER_APP}], roles [ADMIN|ANALYST|CATALOG_ADMIN|BUSINESS_ADMIN|CREATOR|USE_ASSET|PARTNER_ADMIN|PARTNER_CREATOR|PARTNER_ANALYST], assets [{id, type: AD_ACCOUNT|BILLING_ADDRESS|CUSTOM_AUDIENCE|FUNDING_INSTRUMENT|PIXEL|PRODUCT_CATALOG|PROFILE}].
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
business_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=true and openWorldHint=true, so the safety profile is covered. The description adds one useful scope detail ('including shared ones') but says nothing about pagination behavior, result merging, or scoping beyond what the schema and annotations supply.

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 verb, resource, scope, and searchable dimensions; zero filler and nothing buried.

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 needn't explain return values, and the rich input schema carries the parameter burden. However, for a query tool sitting among several overlapping account-listing siblings, the absence of any disambiguation leaves an agent-visible gap.

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 80%, so the schema already documents filter, actors, roles, assets, and paging fields in detail. The phrase 'by name, ID, actor, role or asset' roughly mirrors those schema fields without adding syntax or format meaning beyond them, so the baseline 3 holds.

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 ('Search the ad accounts a business can access') and enumerates searchable dimensions (name, ID, actor, role, asset). The purpose is clear, but it never distinguishes this from the very similar siblings reddit_ads_list_ad_accounts and reddit_ads_list_business_ad_accounts, so it falls short of the 5-tier bar.

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 when-to-use guidance and no mention of alternatives, despite three near-identical siblings (list_ad_accounts, list_business_ad_accounts, get_ad_account). An agent cannot tell from the description when to reach for this query tool versus the list tools.

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

reddit_ads_query_business_funding_instrumentsQuery business funding instrumentsC
Read-only

Query funding instruments available to a business.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoSent as {"data": {...}}. Fields: partner_business_id, funding_instrument_ids [], mode (ACTIVE|ALL).
searchNo
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
business_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=true and openWorldHint=true, covering the safety profile. The description adds nothing beyond that - it does not explain pagination behavior despite max_pages/page_token existing, nor the filtering mode (ACTIVE|ALL) that governs results. For a paginated, open-world read it is thin.

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 no waste, and the resource scope is front-loaded. It is concise to a fault rather than padded, so the sentence earns its place even if more was needed.

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 tool with six parameters, a nested data object, and no output schema, the description is inadequate: it omits filtering semantics, pagination, and any return-value expectation. An agent would need the schema to call this correctly, and even then the query-vs-list distinction against siblings is unresolved.

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 coverage is 67%, so neither the schema nor the description fully documents the six parameters. The description adds zero parameter meaning - it never mentions business_id, the data object fields, search, or the pagination params, so it fails to compensate for the coverage gap.

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?

States a specific verb (query) and resource (funding instruments) scoped to a business, which is clear enough on its own. However, it does not distinguish itself from the sibling reddit_ads_list_funding_instruments, so an agent cannot tell which to pick without opening both schemas.

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 when-not-to-use, and no named alternative. The near-identical sibling list_funding_instruments is left entirely to inference, which is a real ambiguity for query-style vs list-style tools.

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

reddit_ads_search_communitiesSearch communitiesA
Read-only

Search subreddits for targeting by name or topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch text
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url

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 and openWorldHint=true, so the safety profile is covered. The description adds that it searches subreddits for targeting, but does not disclose pagination behavior, result format, or auth requirements beyond what the annotations imply.

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 zero waste. It leads with the verb and resource and immediately adds the targeting context.

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 simple search tool with fully described parameters and annotations covering read-only/open-world behavior, the description is nearly sufficient. It could mention that results are communities/subreddits, but the name and purpose make that clear enough for invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description only loosely maps 'name or topic' to the query parameter and adds no syntax or format details beyond what the schema provides.

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 (Search) and resource (subreddits/communities) plus the targeting purpose by name or topic. However, it does not explicitly distinguish itself from sibling tools like reddit_ads_get_communities or reddit_ads_suggest_communities.

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 'for targeting by name or topic' implies the intended use case for ad targeting. There is no explicit when-to-use versus alternatives or any exclusion guidance, so it remains 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.

reddit_ads_send_conversion_eventsSend conversion eventsA

Send server-side conversion events through the Conversions API (requires the adsconversions scope). Use test_id to send test events visible in Events Manager.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
pixel_idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the write/side-effect profile is covered. The description adds genuinely useful context beyond that: the adsconversions scope requirement and the Events Manager visibility of test events. It stays silent on rate limits, batching behavior, and error semantics.

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 the core action front-loaded, followed by the scope requirement and the test-mode note. Zero filler; every clause 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?

For a mutation tool whose nested schema carries the event payload detail, the description covers purpose, auth scope, and test mode. No output schema exists, so return-value explanation is not needed. The main gap is the absence of batch-size or rate expectations, though maxItems is in the schema.

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?

Top-level schema description coverage is 0%, but the nested event schema is richly self-documented. The description compensates only partially by explaining test_id's effect, while pixel_id and the data envelope remain unexplained in prose. Marginal added value over the structured fields.

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

Purpose4/5

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

States a specific verb and resource: 'Send server-side conversion events through the Conversions API.' An agent immediately knows this dispatches conversion events. It does not, however, contrast itself against any sibling or clarify scope relative to the many other ads tools.

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 ('Use test_id to send test events visible in Events Manager'), giving a concrete hint for the test path, but it never states when to use live mode vs. test mode, prerequisites beyond the scope, or alternatives. Usage is implied rather than explicitly framed.

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

reddit_ads_set_statusSet statusA
Destructive

Activate, pause, archive or delete several campaigns, ad groups or ads at once. Reddit has no hard delete for these entities; DELETED is the delete operation. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesEntity IDs
statusYes
entity_typeYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, yet the description adds non-obvious behavior: there is no hard delete, DELETED is destructive but reversible-in-name-only, and the archive-then-delete sequencing plus three-hour delay are prerequisites an agent cannot infer. This is real value beyond the structured hints.

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 sentences, front-loaded with the action and scope, then the deletion constraints. No filler; every sentence carries operational information an agent needs before invoking a destructive bulk call.

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?

Covers the destructive semantics and preconditions well for a mutation tool with no output schema. What is missing is batch/partial-failure behavior and what a successful multi-entity status change returns, which matters for a bulk destructive operation.

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 only 33% – ids is documented, while status and entity_type rely solely on enums. The description implicitly maps actions to enum values (activate/pause/archive/delete) and lists the entity types, partially compensating, but it never addresses the array semantics of ids or batch-size expectations.

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 set (activate, pause, archive, delete) over a specific resource set (campaigns, ad groups, ads) and emphasizes the bulk “at once” scope. This differentiates it cleanly from the per-entity siblings like reddit_ads_update_campaign and reddit_ads_update_ad_group, which operate on single entities.

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 substantive operating rules: DELETED is the only delete path, a campaign must be ARCHIVED before DELETED, and a three-hour cooldown applies after the last change. It does not name explicit alternatives or state when-not-to-use, but for a status endpoint with no direct sibling the sequencing guidance is strong context.

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

reddit_ads_suggest_bidSuggest bidA
Read-only

Get minimum and suggested bid values (micro-currency) for a planned ad group.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: duration {start_time (required), end_time}, ad_account_id, campaign_objective, bid_type, bid_strategy, optimization_goal, goal_type, goal_value, currency, use_catalog, is_campaign_budget_optimization, view_through_conversion_type, targeting {...same as ad group targeting}.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description usefully adds that both a minimum and a suggested value are returned in micro-currency, but says nothing about auth requirements, rate limits, or network/credit implications despite openWorldHint.

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 sentence with no filler, front-loading the verb and the returned resources, and including the unit compactly in parentheses. Every clause 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?

For a read-only suggest tool with one required nested parameter and a fully documented schema, the description adequately conveys what is returned despite there being no output schema. It does not explain why a full ad-group-like specification (duration, targeting, objective) is needed to get a bid estimate, a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the nested data object and its fields. The description's only added semantic is the micro-currency unit, which pertains more to the return values than to the input, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb ('Get') and a precise resource ('minimum and suggested bid values ... for a planned ad group'), plus the unit (micro-currency). No sibling tool offers bid suggestion, so it is distinguishable 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 Guidelines3/5

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

The phrase 'for a planned ad group' implies the tool is used pre-creation of an ad group, which is genuine usage context, but there is no explicit when/when-not guidance and no named alternative. It is implied usage rather than stated guidance.

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

reddit_ads_suggest_communitiesSuggest communitiesC
Read-only

Suggest related subreddits from seed subreddits and/or a website URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNoComma separated seed subreddit names
max_pagesNoFollow pagination.next_url up to this many pages and merge results (default 1)
page_sizeNoItems per page (usually max 1000)
page_tokenNoPage token from a previous pagination.next_url
website_urlNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that: no indication of auth requirements, rate limits, result shape, or how many suggestions come back, and it largely restates the title plus the input fields.

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?

One tight sentence with the resource and the trigger input front-loaded and no filler. It is efficient, though its brevity borders on under-specification given the tool has five optional parameters and no output schema.

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 read-only discovery tool with no output schema, the description is not required to explain returns. However, it omits a key clarification: with zero required parameters, an agent cannot tell whether names, website_url, or both must be supplied, and no sibling routing is provided. Adequate but with clear gaps.

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 80% and the schema documents names, max_pages, page_size, and page_token well; only website_url lacks a schema description. The description confirms website_url and the seed-based input, but adds no syntax, format, or interaction detail (e.g., whether both inputs can be combined) beyond the schema. Baseline 3 for high coverage is appropriate.

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

Purpose4/5

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

The description names a specific verb (suggest) and resource (related subreddits) and states the input basis: seed subreddits and/or a website URL. That distinguishes it partially from discovery-style siblings, but it never contrasts itself with reddit_ads_search_communities or reddit_ads_get_communities, so an agent still has to guess which community tool fits.

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?

It implies usage by naming the inputs ('from seed subreddits and/or a website URL'), which is a weak usage signal. There is no statement of when to use this versus the adjacent search_communities or get_communities tools, nor any prerequisites or exclusions.

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

reddit_ads_suggest_keywordsSuggest keywordsB
Read-only

Get keyword suggestions with monthly views from seed keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe, external-call nature is covered. The description adds only that results include 'monthly views', a useful return-content hint, but stops short of anything about volume limits, latency, or match 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?

A single, tight sentence with the input source and output attribute front-loaded and no filler. It is efficient, though minimal enough that it could have added one clause of routing guidance at little cost.

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 annotations covering the safety profile, the description gives the essential input->output picture ('seed keywords' -> 'suggestions with monthly views'). With no output schema, more detail on the returned fields would help, but nothing critical is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load; 'from seed keywords' clearly identifies the meaning of the single required param (seeds the suggestion engine). It does not mention the array shape or the 1–1000 item bound, but the core semantic is conveyed.

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 (Get/suggest) and resource (keyword suggestions) plus the key output attribute ('monthly views') and input source ('seed keywords'). It does not, however, differentiate itself from the nearby sibling reddit_ads_validate_keywords, leaving the agent to infer the distinction.

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 when-to-use, when-not-to-use, or alternative guidance is present. The obvious sibling reddit_ads_validate_keywords (keyword validation vs. keyword discovery) is never mentioned, so the agent gets no routing help.

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

reddit_ads_update_adUpdate adA

Update an ad. Pass only the fields to change. To delete set configured_status to DELETED. The ad group cannot be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, configured_status (ACTIVE|PAUSED|ARCHIVED|DELETED), post_id, profile_id, click_url, click_url_query_parameters, event_trackers, preview_expiry, products, shopping_creative, asset_identifiers, thumbnail_asset_identifiers, destination, supplementary_text, enhancements.
ad_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare write (readOnlyHint=false) and non-destructive behavior, so the description's job is to add nuance it does: partial-update semantics, deletion-via-status-field, and an immutable field (ad group). It does not cover auth/rate limits or what the response returns, but the added behavioral detail is substantive beyond the structured hints.

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, front-loaded sentences, each carrying a distinct rule (purpose, patch semantics, deletion, immutability) with zero filler. Nothing is redundant or out of order.

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 update tool with annotations and no output schema, the description covers the mutation model, deletion route, and a key constraint, which is nearly all an agent needs to invoke it correctly. It stops short of mentioning auth requirements or the shape of the returned updated ad.

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 only 50%: the 'data' object enumerates allowed fields, but ad_id is undocumented and the field list is untyped. The description compensates with patch semantics and the immutability constraint on the ad group, but does not clarify value formats or which fields are required. Baseline 3 for a partially-covered 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?

States a specific verb+resource ('Update an ad') that an agent can immediately distinguish from list/get/create siblings. It does not explicitly differentiate from adjacent tools such as reddit_ads_update_ad_group or reddit_ads_set_status, so it stays at 4 rather than 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?

Gives concrete operational guidance: patch semantics ('Pass only the fields to change'), the deletion path ('set configured_status to DELETED'), and a hard constraint ('The ad group cannot be changed'). It lacks any when-to-use-vs-alternative routing (e.g., versus reddit_ads_set_status), which keeps it from a 5.

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

reddit_ads_update_ad_accountUpdate ad accountC

Update ad account settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, time_zone_id, attribution_type (ALL_CONVERSION|CLICK_THROUGH_CONVERSION|VIEW_THROUGH_CONVERSION), click_attribution_window / view_attribution_window (DAY|WEEK|MONTH), app_attribution_type, app_click_attribution_window, app_view_attribution_window, excluded_communities [], excluded_keywords [], pixel_partner_preferences [DV|IAS|MODE], primary_contact_member_id.
ad_account_idNoAd account ID (t2_... or a2_...). Defaults to REDDIT_ADS_ACCOUNT_ID.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not say whether this is a partial (merge) or full replacement update, whether omitted fields are preserved, or that it affects a single account addressed by 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.

Conciseness4/5

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

A single four-word sentence, front-loaded with verb and resource, with zero filler. It is concise but arguably under-specified rather than optimally structured.

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 mutation tool, the critical missing piece is update semantics (partial vs. full replacement) and confirmation that only one account is mutated. Rich schema coverage and non-destructive annotations compensate somewhat, but a mutation endpoint should do more than restate its own name.

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

Parameters3/5

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

Schema description coverage is 100% and the nested `data` object enumerates every updatable field with enums inline, so the schema does the heavy lifting. The description adds no syntax or format meaning beyond it, which is the baseline-3 case.

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 (Update) and resource (ad account settings), which is enough to distinguish it from update_campaign, update_business, etc. by resource type. However, it offers no explicit sibling differentiation or scope detail beyond the two-word object.

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 versus reddit_ads_get_ad_account or the generic reddit_ads_api_request, and no prerequisites (e.g., required permissions or the need to know the account ID first). The agent must infer everything.

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

reddit_ads_update_ad_groupUpdate ad groupA

Update an ad group. Pass only the fields to change. To delete set configured_status to DELETED. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later). Targeting is replaced as a whole object. All money values are micro-currency (1 USD = 1000000).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, configured_status (ACTIVE|PAUSED|ARCHIVED|DELETED), targeting, bid_strategy, bid_type, bid_value, conversion_pixel_id, start_time, end_time, goal_value, schedule, optimization_goal, product_set_id, saved_audience_id, shopping_type, shopping_targeting. targeting object: communities / excluded_communities (subreddit names), interests / excluded_interests (IDs from reddit_ads_list_interests), keywords / excluded_keywords, geolocations / excluded_geolocations (IDs from reddit_ads_list_geolocations, e.g. "US"), custom_audience_ids / excluded_custom_audience_ids, devices [{type: DESKTOP|MOBILE, os: ANDROID|IOS, min_version, max_version}], carriers [], platforms [ALL|DESKTOP|MOBILE_NATIVE|MOBILE_WEB|...], locations [FEED|COMMENTS_PAGE], gender (MALE|FEMALE|null), languages [EN|DE|...], expand_targeting (bool).
ad_group_idYes

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare the mutation/open-world/safety profile; the description adds substantial behavior the agent cannot get elsewhere: partial-update semantics, the whole-object targeting replacement rule, the ARCHIVED-first + three-hour deletion constraint, and micro-currency units. This is exactly the kind of context that prevents mis-invocation.

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 purpose and then packs high-value constraints into a short block with no filler. Dense but each sentence earns its place; the currency and deletion clauses are non-obvious and worth the space.

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 2-parameter mutation tool with a nested data object and no output schema, the description covers update semantics, deletion workflow, targeting replacement, and currency. It omits return/auth details, but with no output schema and existing annotations those are minor gaps.

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 50%, but the description meaningfully supplements it: 'pass only the fields to change' clarifies partial-update behavior, targeting is replaced wholesale, and money values are micro-currency. These semantics go beyond the raw field list in the schema.

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

Purpose4/5

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

States a specific verb and resource ('Update an ad group'), which cleanly separates it from siblings like reddit_ads_update_campaign, reddit_ads_update_ad, and reddit_ads_update_ad_account. It does not explicitly name an alternative, but the resource makes the target unambiguous.

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

Usage Guidelines4/5

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

Gives clear operational guidance: 'Pass only the fields to change,' and how to delete via configured_status=DELETED. It explains the archive-then-delete prerequisite, which is real when-to-use context. It does not explicitly contrast usage with sibling update tools, keeping it just below a 5.

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

reddit_ads_update_businessUpdate businessC

Update a business.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, industry, country, website_url, phone, primary_contact_id, agency_affiliated.
business_idYes

TDQS

C2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered externally. The description adds nothing beyond that: no statement about which fields are mutable, whether updates are partial or full replacement, whether unrelated fields are preserved, or what permissions are required.

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

Conciseness2/5

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

A single four-word sentence is technically concise, but the brevity here is under-specification rather than efficiency, matching the LOW calibration pattern. There is no front-loaded substance for an agent to act on.

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 mutation tool with a nested data object, 50% schema coverage, and no output schema, the description should carry far more weight than it does. The annotations supply the safety hints, which is the only thing keeping this above a 1.

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 only 50%: the data object lists candidate fields (name, industry, country, website_url, phone, primary_contact_id, agency_affiliated), while business_id carries no description at all. The description text contributes zero parameter meaning, so the 50% gap is left entirely unaddressed.

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

Purpose2/5

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

"Update a business" restates the tool name and title almost verbatim, adding no distinguishing information. It does convey a verb (update) and resource (business), but with ~100 sibling tools it never differentiates itself from reddit_ads_update_ad_account, reddit_ads_update_campaign, or reddit_ads_update_post.

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 when-to-use, when-not-to-use, prerequisites, or named alternative appears anywhere in the description. An agent gets no signal about when updating a business is the right call versus reading it via reddit_ads_get_business or listing via reddit_ads_list_businesses.

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

reddit_ads_update_campaignUpdate campaignA

Update a campaign. Pass only the fields to change. To delete set configured_status to DELETED, to archive set ARCHIVED. Deleting follows Reddit's rules: a campaign must be ARCHIVED first, and campaigns and ad groups can only be DELETED three hours after their last change (archive now, delete later). All money values are micro-currency (1 USD = 1000000).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, configured_status (ACTIVE|PAUSED|ARCHIVED|DELETED), goal_value, funding_instrument_id, spend_cap, bid_strategy, bid_type, bid_value, start_time, end_time, schedule, invoice_label, objective, use_catalog.
campaign_idYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the mutation/open-world profile, but the description adds substantial undisclosed behavior: partial update semantics, the destructive two-step archive-then-delete workflow with a timing gate, and micro-currency units. It does not mention auth/permission needs, and the delete capability sits in some tension with destructiveHint=false, 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.

Conciseness5/5

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

Four short sentences, front-loaded with the core action and partial-update rule, then the delete/archive workflow, then the currency footnote. Each sentence carries operational information; the '(archive now, delete later)' parenthetical reinforces rather than pads.

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 no output schema and a free-form nested data object, the description covers the essentials an agent needs (what to pass, how to delete/archive, currency units). It leaves some gaps around field-level constraints and immutability, but no return-value explanation is required since no output schema exists.

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 only 50% (campaign_id is undocumented), so the description must compensate, and it does so usefully: it explains configured_status values and their delete/archive effect, and clarifies that money fields use micro-currency (1 USD = 1000000). It does not address the other data fields (funding_instrument_id, schedule, bid_strategy, objective, etc.).

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 ('Update a campaign') and immediately adds the partial-update rule ('Pass only the fields to change'), which is a real scoping statement. It does not explicitly name a sibling (e.g., how it differs from reddit_ads_set_status or reddit_ads_create_campaign), so it falls 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 Guidelines4/5

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

Gives concrete usage conditions: only pass changed fields, and to delete/archive set configured_status to DELETED/ARCHIVED. It also spells out Reddit's prerequisite ordering (archive first, 3-hour wait). It stops short of naming alternative tools (e.g., set_status) or stating when-not to use this one.

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

reddit_ads_update_catalogUpdate product catalogD

Update a product catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, event_sources [pixel IDs].
catalog_idYes

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the update replaces or merges catalog fields, what permissions are needed, or whether the change is reversible — all meaningful for a mutation on a nested object.

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

Conciseness2/5

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

It is a single short sentence, so there is no bloat, but the sentence is a tautology that could be deleted without losing information. Per the calibration, under-specification is not conciseness.

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

Completeness1/5

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

For a mutation tool operating on a nested object with no output schema and half its parameters undocumented, a one-line tautology is completely inadequate. An agent has no way to construct a correct update payload from this definition.

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 only 50%: catalog_id has no description at all, and the data object's description ('Sent as {"data": {...}}. Fields: name, event_sources [pixel IDs].') is already in the schema, not the tool description. The description does not compensate for the undocumented catalog_id or clarify field-level update semantics.

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

Purpose2/5

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

The description restates the title and tool name almost verbatim: 'Update a product catalog.' It gives a verb and resource but no scope, no fields affected, and no differentiation from siblings like reddit_ads_create_catalog, reddit_ads_delete_catalog, or reddit_ads_update_product_feed.

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 the other catalog tools. The agent must infer from the name alone that this modifies an existing catalog, and no prerequisites, 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.

reddit_ads_update_creative_assetRename creative assetC

Rename a creative asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
creative_asset_idYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not say whether the rename is reversible, what identifier is returned, whether existing references to the asset break, or any auth/rate-limit context.

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?

It is a single short sentence with zero padding and is front-loaded, which is structurally clean. However, the brevity is under-specification rather than true conciseness — the same five words could have carried the parameter meaning and reversibility note.

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 mutation tool with a nested required parameter, no output schema, and 0% schema documentation, a one-line description is inadequate. An agent cannot tell from this definition what the new name parameter is or what to expect after the call.

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 two parameters, including a nested data object, so the description carries full burden. "Rename" only faintly implies that data.name is the new name and gives no format, length, or uniqueness constraints, leaving the nested parameter effectively 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 states a specific verb and resource ("Rename a creative asset"), which is clear and distinguishable from the get/delete/list siblings by name. However, it is a verbatim restatement of the title and adds no scope or differentiation beyond what the tool name already conveys.

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 siblings such as reddit_ads_upload_creative_assets or reddit_ads_delete_creative_asset, nor any prerequisites (e.g., asset must already exist, auth required). The agent must infer usage entirely from the name.

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

reddit_ads_update_custom_audience_usersAdd or remove audience usersA

Add or remove users in a customer list audience. Values must be SHA-256 hashes of normalized (lowercased, trimmed) emails or mobile ad IDs. Max 2500 rows per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
audience_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already disclose readOnly=false, destructive=false, openWorld=true. The description adds genuinely useful behavioral context not in the annotations or schema: input values must be SHA-256 hashes of normalized (lowercased, trimmed) emails or mobile ad IDs, and a 2500-row cap per call. It stops short of describing auth needs or the effect on existing audience members.

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 core action, then the format constraint, then the row limit. No filler; every sentence carries a constraint 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?

For a mutation tool with no output schema and fully nested parameters, the description covers the data format and volume limit but omits how audience_id is sourced and what the response returns (success/failure, counts). Adequate to invoke but not complete.

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

Parameters3/5

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

Schema description coverage is 0% and the description never mentions audience_id, so that parameter is undocumented in both places. It does compensate for the nested data payload by explaining the hash format of user_data values, but the required column_order and action_type fields are left to the enum in the schema.

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

Purpose5/5

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

States a specific verb pair (add/remove) and resource (users in a custom audience), making it instantly distinguishable from siblings like create_custom_audience or update_custom_audience. An agent can tell what this does 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 Guidelines3/5

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

The add/remove intent is implied by the title and description, but there is no explicit statement of when to use this versus alternatives such as reddit_ads_update_custom_audience or the list/get audience tools, nor any prerequisites (e.g. audience must be a customer list type). Usage is inferable but not guided.

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

reddit_ads_update_postUpdate postB

Update a post. Only allow_comments can be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
post_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=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful behavioral constraint that only allow_comments can be changed, but it does not describe side effects, authorization requirements, or what happens to other fields.

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

Conciseness5/5

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

Two short sentences with zero waste. The purpose is front-loaded, and the mutation constraint follows immediately, so the definition is easy to scan and parse.

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 mutation tool with annotations covering safety, the description gives the essential mutable-field constraint. However, it omits sibling differentiation, usage context, and any note about return behavior, leaving clear gaps for an agent choosing among many update-oriented tools.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does clarify that allow_comments is the only mutable field inside the nested data object, but it offers no meaning for post_id and does not explain the required data wrapper, leaving partial coverage of the two parameters.

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

Purpose4/5

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

The description states a clear verb (update) and resource (post), and adds a crucial scope constraint that only allow_comments can be changed. However, it does not differentiate this tool from the sibling reddit_ads_update_structured_post, which also updates a post-like resource, leaving an agent to infer the distinction.

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 provides no guidance on when to use this tool versus alternatives such as reddit_ads_update_structured_post or other update operations. It only states a constraint on what can be changed, not the context or conditions that select this tool.

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

reddit_ads_update_product_feedUpdate product feedD

Update a product feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, url, username, password, mode, schedule.
feed_idYes

TDQS

D1.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is partly covered. However, the description adds zero behavioral context: it does not say what fields are mutable, whether omitted fields are preserved or cleared, or what happens on an unknown feed_id.

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

Conciseness2/5

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

It is a single short sentence, but that brevity comes from under-specification rather than efficiency. The one sentence is a restatement of the name and does not earn its place.

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

Completeness1/5

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

This is a mutation tool with a nested data object, 50% schema coverage, and no output schema. Nothing covers required permissions, partial-update behavior, or return values, so an agent cannot call it correctly with confidence.

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 only 50%: feed_id has no description at all, while the nested data object does list its fields (name, url, username, password, mode, schedule). The description contributes nothing to compensate, leaving the identifier parameter and update-semantics unexplained.

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

Purpose2/5

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

The description restates the title almost verbatim: 'Update a product feed.' It names a verb and resource but adds nothing that distinguishes it from siblings such as reddit_ads_update_product_set, reddit_ads_update_catalog, or reddit_ads_create_product_feed. This is effectively a tautology.

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

Usage Guidelines1/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, no prerequisites, and no mention of alternatives or when-not-to-use. An agent has no basis to choose it over any other update tool in the family.

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

reddit_ads_update_product_setUpdate product setC

Update a product set.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, filter.
product_set_idYes

TDQS

C2/5.0
Behavior2/5

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

Annotations declare a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=true), but the description adds nothing beyond that: it does not say what fields can be modified, whether omitted fields are preserved or cleared, or what permissions are required. For a mutation tool, this leaves significant behavioral gaps.

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

Conciseness2/5

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

It is a single short sentence with no waste, but this brevity reflects under-specification rather than conciseness. There is no front-loaded scope or routing information to earn 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?

For a nested-object mutation with no output schema and incomplete parameter documentation, the definition is insufficient. An agent cannot determine the updateable field set, side effects, or return behavior from the description alone.

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?

With 50% schema coverage, the description must compensate but does not. The one schema-described parameter (data, listing name/filter) is documented only in the schema, and product_set_id has no description anywhere; the tool description clarifies neither the required identifier nor the update payload shape.

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

Purpose2/5

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

The description "Update a product set" merely restates the tool title and name; it is a tautology that adds no scope, verb nuance, or resource detail beyond the identifier. An agent gains nothing about what a product set is or what updating entails compared with siblings like reddit_ads_create_product_set or reddit_ads_delete_product_set.

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 versus the sibling create/delete/get/list product set tools, nor any prerequisites (catalog context, required IDs). Usage can only be inferred from the name itself.

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

reddit_ads_update_saved_audienceUpdate saved audienceB

Update a saved audience. Set status to DELETED to delete it.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. Fields: name, status, targeting.
saved_audience_idYes

TDQS

B3.3/5.0
Behavior3/5

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

The description adds genuinely useful behavioral context by disclosing that the 'delete' path is a status mutation to DELETED, which the annotations do not reveal. destructiveHint=false could be read as inconsistent with 'delete it', but it is reconcilable as a soft/status-based delete; the description doesn't say whether the update is a partial patch or full replace, nor whether permissions are required.

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, zero filler, purpose front-loaded with the delete path immediately after. Nothing 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?

For a 2-param mutation tool with a nested data object, no output schema, and no annotations covering semantics, the description covers the core operation and the deletion shortcut but omits merge/patch semantics, required permissions, and error behavior. Adequate but with identifiable 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 coverage is only 50% and there are no enums, so the description carries extra burden. It nicely clarifies the status value ('DELETED') but says nothing about the 'name' or 'targeting' fields, nor about how the nested data object is merged into existing settings.

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 concrete verb+resource ('Update a saved audience') and even names the deletion mechanism, so the agent knows exactly what operation this performs. It doesn't differentiate itself from the get/list/create_saved_audience siblings, but the name and description together make the CRUD position 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?

There's no explicit when-to-use or when-not-to-use guidance, but the second sentence does route the agent usefully: deletion of a saved audience is done here via status=DELETED rather than through some other tool. That's implied usage rather than stated policy.

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

reddit_ads_update_structured_postUpdate structured postB

Update a structured post. Only allow_comments can be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
post_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=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioural fact: the mutation is limited to allow_comments and other fields cannot be changed. It does not mention permission requirements or what a successful update returns.

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

Conciseness5/5

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

Two short sentences with zero waste; the purpose is front-loaded and the mutation constraint immediately follows. Nothing extraneous is present.

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 single-field mutation tool with no output schema, the essentials are covered but barely. It omits what happens on success/failure and any auth or precondition context, leaving the definition thin for a write operation.

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 only partly does. It identifies allow_comments as the sole mutable field but says nothing about the required post_id or the nested data wrapper, leaving the schema to communicate structure with no prose support.

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 ('Update a structured post'), which matches the tool name and distinguishes the resource from the plain post siblings like reddit_ads_update_post. It is clear but does not explicitly disambiguate against siblings such as update_post or get_structured_post.

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 constraint 'Only allow_comments can be changed' gives implicit guidance about what the tool is for, but there is no explicit when-to-use, no alternative-naming, and no prerequisites (e.g. that the post must exist). Usage 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.

reddit_ads_upload_creative_assetsUpload creative assetsA

Add up to 50 assets to a profile's creative library (used by Reddit Max ads). Media is fetched by Reddit from public URLs. Poll reddit_ads_get_creative_asset_upload for the resulting asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": [...]}. Items: {type: "IMAGE", name, media: {type: "URL", url}}, {type: "VIDEO", name, media: {type: "URL", url}, poster: {type: "URL", url}}, {type: "HEADLINE", text}, {type: "CTA", call_to_action}; each may have reference_id. call_to_action values: Apply Now, Contact Us, Download, Get a Quote, Get Showtimes, Install, Learn More, Order Now, Play Now, Pre-order Now, See Menu, Shop Now, Sign Up, View More, Watch Now, Book Now, Buy Tickets, Get Directions, Listen Now, Read More, Subscribe, Visit Store, Donate Now, Remind Me.
profile_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish this is a non-destructive mutation in an open-world API. The description adds genuinely new behavior: the 50-asset cap, that Reddit fetches media from public URLs (so URLs must be publicly reachable), and that the operation is asynchronous and requires polling a separate tool. The async/polling disclosure is the most valuable piece and is not derivable from annotations.

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

Conciseness5/5

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

Three tight sentences with the core action front-loaded, followed by two distinct operational facts (public URLs, polling). No filler; each 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?

For a no-output-schema async mutation, the description covers the essentials: caps, media source constraints, and how to retrieve the result. It lacks any note on auth/permission requirements for the target profile, which would fully close the gap.

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 50%: the data parameter carries a very rich inline description (item types, call_to_action enum values), while profile_id is undocumented in both places. The description reinforces the 50-item limit and the public-URL requirement, but adds little beyond what the schema already states. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource: 'Add up to 50 assets to a profile's creative library', plus the Reddit Max ads context. This is clearly distinguishable from the sibling list/get/update/delete creative asset tools. It stops short of explicitly naming which sibling it is not, so it's a clear-but-not-differentiating 4.

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?

Provides useful follow-up routing ('Poll reddit_ads_get_creative_asset_upload for the resulting asset') and scopes to Reddit Max ads. However, it gives no when-to-use/when-not guidance versus alternatives like reddit_ads_create_poster_job or why an agent would upload here rather than via another path. Implied usage only.

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

reddit_ads_upsert_productsUpsert productsB

Create or update up to 1000 products in a catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": [...]}. Product fields: id, title, description, price ("9.99 USD"), link, image_link, availability (IN_STOCK|OUT_OF_STOCK|PREORDER|BACKORDER), brand, gtin, mpn, sale_price, sale_price_effective_date, item_group_id, additional_image_links, product_type, google_product_category, condition, color, size, gender, age_group, custom_label_0..4.
catalog_idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the batch limit and upsert nature, but does not disclose what happens on partial failure, how existing fields are overwritten, or authentication requirements. With annotations carrying the safety burden, this is adequate but not rich.

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

Conciseness5/5

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

A single efficient sentence with the action and scope front-loaded. No wasted words; every element (create/update, 1000 cap, catalog) 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?

For a write/upsert tool with no output schema and an undocumented required parameter, the description is too thin. It omits how records are matched for update, what constitutes a successful partial result, and what fields are required. An agent must guess at key behavioral details.

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 50%: the data array is very well documented in the schema, but catalog_id has no schema description and the tool description only says 'in a catalog', providing no real semantic detail. Because half the parameters are undocumented and the description does not compensate, this falls short.

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 pair (create/update) and resource (products), plus the batch scope (up to 1000) and container (catalog). This clearly separates it from delete_products and list_catalog_products, though it never names a sibling to actively differentiate itself.

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 'create or update' implies the upsert condition, which is minimal usage guidance, but there is no explicit when-to-use, when-not-to-use, prerequisites, or alternative tools (e.g., delete_products for removal). Usage is only implied.

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

reddit_ads_validate_geolocationsValidate geolocationsA
Read-only

Validate geolocation IDs or city names before using them in targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesSent as {"data": {...}}. One of: geolocation_ids [] (max 20000) or cities [] (max 2000).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that this is a pre-flight validation step, which is useful, but it does not describe the validation outcome (e.g., whether partial results, error entries, or normalized IDs come back). Knowledge of read-only validation behavior is largely carried by 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?

A single front-loaded sentence with no filler; the verb and purpose arrive immediately.

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 one-parameter read-only validation tool with no output schema, the description is minimally adequate. It omits any hint of the validation result shape or partial-failure behavior, which for a 'validate' tool is the most likely thing an agent wants to know.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself documents the {'data': {...}} wrapper plus the geolocation_ids (max 20000) and cities (max 2000) options. The description only restates 'geolocation IDs or city names' and adds no syntax, format, or precedence detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (validate) and resource (geolocation IDs or city names), plus the downstream intent ('before using them in targeting'). It is clearly distinguishable from reddit_ads_list_geolocations, 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?

The phrase 'before using them in targeting' implies a pre-targeting use case, which is decent context. However, it names no alternative and gives no conditions for when to validate vs. when to just list geolocations, leaving usage to inference.

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

reddit_ads_validate_keywordsValidate keywordsC
Read-only

Check whether keywords are brand safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not explain what 'brand safe' is evaluated against, whether results are per-keyword or aggregate, how unsafe keywords are reported, or any rate/limit 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?

A single short sentence with no filler, and the key concept (brand safety) is front-loaded. It is efficiently written even though it is under-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?

There is no output schema and no annotations describing the response, so the description should explain what the validation returns (e.g., per-keyword verdicts, flagged terms). It does not, and it leaves the nested input shape undocumented, which is a real gap for a validation endpoint.

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 input is a nested object ('data.keywords'), which the description never mentions. It also omits the 1–1000 item count constraints, leaving the agent to discover the required nesting and array bounds from the raw schema only.

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 ('Check') and resource ('keywords') plus the outcome being tested for ('brand safe'), which meaningfully separates it from reddit_ads_suggest_keywords, which generates rather than validates keywords. It does not, however, name or contrast with any 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 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 conditions, no prerequisites, and no alternatives. An agent must infer from the tool name alone that this is for pre-flight screening of keyword lists against brand-safety rules, with no statement of when it should be preferred over suggest_keywords.

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. 114 tool updatesv1.0.0
    • First observedreddit_ads_api_request
    • First observedreddit_ads_auth_status
    • First observedreddit_ads_create_ad
    • First observedreddit_ads_create_ad_group
    • First observedreddit_ads_create_campaign
    • First observedreddit_ads_create_catalog
    • First observedreddit_ads_create_custom_audience
    • First observedreddit_ads_create_data_deletion_job
    • First observedreddit_ads_create_lead_gen_form
    • First observedreddit_ads_create_pixel_data_deletion_job
    • First observedreddit_ads_create_post
    • First observedreddit_ads_create_post_job
    • First observedreddit_ads_create_poster_job
    • First observedreddit_ads_create_product_feed
    • First observedreddit_ads_create_product_set
    • First observedreddit_ads_create_saved_audience
    • First observedreddit_ads_delete_catalog
    • First observedreddit_ads_delete_creative_asset
    • First observedreddit_ads_delete_custom_audience
    • First observedreddit_ads_delete_product_feed
    • First observedreddit_ads_delete_product_set
    • First observedreddit_ads_delete_products
    • First observedreddit_ads_estimate_audience
    • First observedreddit_ads_get_ad
    • First observedreddit_ads_get_ad_account
    • First observedreddit_ads_get_ad_account_history
    • First observedreddit_ads_get_ad_group
    • First observedreddit_ads_get_app_last_fired
    • First observedreddit_ads_get_business
    • First observedreddit_ads_get_campaign
    • First observedreddit_ads_get_catalog
    • First observedreddit_ads_get_catalog_import_report
    • First observedreddit_ads_get_channel_reach
    • First observedreddit_ads_get_communities
    • First observedreddit_ads_get_creative_asset
    • First observedreddit_ads_get_creative_asset_upload
    • First observedreddit_ads_get_custom_audience
    • First observedreddit_ads_get_data_deletion_job
    • First observedreddit_ads_get_lead_gen_form
    • First observedreddit_ads_get_me
    • First observedreddit_ads_get_pixel_last_fired
    • First observedreddit_ads_get_post
    • First observedreddit_ads_get_post_job
    • First observedreddit_ads_get_poster_job
    • First observedreddit_ads_get_product_feed
    • First observedreddit_ads_get_product_set
    • First observedreddit_ads_get_profile
    • First observedreddit_ads_get_report
    • First observedreddit_ads_get_saved_audience
    • First observedreddit_ads_get_skan_availability
    • First observedreddit_ads_get_structured_post
    • First observedreddit_ads_get_third_party_trackers
    • First observedreddit_ads_list_account_profiles
    • First observedreddit_ads_list_ad_accounts
    • First observedreddit_ads_list_ad_groups
    • First observedreddit_ads_list_ads
    • First observedreddit_ads_list_apps
    • First observedreddit_ads_list_business_ad_accounts
    • First observedreddit_ads_list_business_pixels
    • First observedreddit_ads_list_business_profiles
    • First observedreddit_ads_list_businesses
    • First observedreddit_ads_list_campaigns
    • First observedreddit_ads_list_carriers
    • First observedreddit_ads_list_catalog_import_issues
    • First observedreddit_ads_list_catalog_imports
    • First observedreddit_ads_list_catalog_products
    • First observedreddit_ads_list_catalogs
    • First observedreddit_ads_list_creative_asset_uploads
    • First observedreddit_ads_list_creative_assets
    • First observedreddit_ads_list_custom_audiences
    • First observedreddit_ads_list_devices
    • First observedreddit_ads_list_funding_instrument_allocations
    • First observedreddit_ads_list_funding_instruments
    • First observedreddit_ads_list_geolocations
    • First observedreddit_ads_list_industries
    • First observedreddit_ads_list_interests
    • First observedreddit_ads_list_languages
    • First observedreddit_ads_list_lead_gen_forms
    • First observedreddit_ads_list_pixels
    • First observedreddit_ads_list_posts
    • First observedreddit_ads_list_product_feeds
    • First observedreddit_ads_list_product_set_products
    • First observedreddit_ads_list_product_sets
    • First observedreddit_ads_list_saved_audiences
    • First observedreddit_ads_list_structured_posts
    • First observedreddit_ads_list_third_party_audiences
    • First observedreddit_ads_list_time_zones
    • First observedreddit_ads_login
    • First observedreddit_ads_logout
    • First observedreddit_ads_query_ad_accounts
    • First observedreddit_ads_query_business_funding_instruments
    • First observedreddit_ads_search_communities
    • First observedreddit_ads_send_conversion_events
    • First observedreddit_ads_set_status
    • First observedreddit_ads_suggest_bid
    • First observedreddit_ads_suggest_communities
    • First observedreddit_ads_suggest_keywords
    • First observedreddit_ads_update_ad
    • First observedreddit_ads_update_ad_account
    • First observedreddit_ads_update_ad_group
    • First observedreddit_ads_update_business
    • First observedreddit_ads_update_campaign
    • First observedreddit_ads_update_catalog
    • First observedreddit_ads_update_creative_asset
    • First observedreddit_ads_update_custom_audience_users
    • First observedreddit_ads_update_post
    • First observedreddit_ads_update_product_feed
    • First observedreddit_ads_update_product_set
    • First observedreddit_ads_update_saved_audience
    • First observedreddit_ads_update_structured_post
    • First observedreddit_ads_upload_creative_assets
    • First observedreddit_ads_upsert_products
    • First observedreddit_ads_validate_geolocations
    • First observedreddit_ads_validate_keywords

TDQS

C2.9/5.0

Scored across 114 tools

Disambiguation4/5

Most tools map to a distinct resource and action, but there is notable overlap between legacy posts tools (list/get/update/create_post) and structured posts tools (list/get/update/create_post_job), and between set_status and the various update_* status changes. These overlaps are mostly clarified by descriptions, so an agent can usually choose correctly.

Naming Consistency4/5

Nearly all tools follow the reddit_ads_ prefix and snake_case with a verb_noun pattern (e.g., list_campaigns, create_ad). A few exceptions like auth_status, api_request, logout, and login break the verb_noun convention, but the overall naming is highly consistent.

Tool Count1/5

114 tools is far beyond the typical 3-15 range for an MCP server and exceeds the 50-tool threshold for extreme mismatch. While the Reddit Ads API is large, this volume is overwhelming for an agent and likely degrades tool selection.

Completeness5/5

The tool set covers an extensive surface: CRUD for campaigns, ad groups, ads, posts, creative assets, audiences, catalogs, feeds, product sets, pixels, conversions, lead gen, and targeting options. With reddit_ads_api_request as a fallback, the surface is effectively complete for the Reddit Ads API.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Reddit Ads API v3 enabling campaign management, ad creation, performance reporting, and audience targeting through Claude.
    10
    40 npm
    3
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A self-hosted MCP server for the Reddit Ads API v3, enabling reading ad accounts, campaigns, ad groups, ads, and performance reports, with optional write support for pausing/activating, budgeting, patching, and creating entities.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables reading and writing Reddit Ads campaigns, ad groups, ads, and performance reports with tiered safety controls, using the Reddit Ads API v3.
    30
    36 npm
    1
    MIT