X Ads by Get MCP Ads
X Ads MCP server
Bring your X Ads accounts into your MCP client.
Read campaigns and performance, inspect targeting and prepare changes for explicitly selected accounts.
Watch the demo · What's new · Install · Tool reference · Try hosted getmcpads

Play the 27-second product film
The film demonstrates hosted getmcpads with staged data. Its creative galleries and MCP Apps interface belong to the hosted product. This repository provides the standalone native API tools.
25 read tools · 19 write tools, disabled by default.
Run locally with your own platform credentials and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the platform. For managed connections, including supported ChatGPT setups, use the hosted option.
What's new
v1.0.1: First standalone release · September 20, 2026
Create the first runnable standalone server using the reviewed native tool subset.
Require explicit account IDs, default to read-only, preview writes and preserve native pagination.
Use fixed X endpoints, bounded responses, timeouts and credential redaction without automatic write retries.
Require Node.js 22.12 or newer and check Node 22/24 in CI.
Update vulnerable dependencies and regenerate the MCP catalog.
Full changelog · Source synchronization details · All releases
Upgrade notes
Requires Node.js 22.12 or newer. CI covers Node 22 and 24. Read the current tool schemas before reusing saved arguments. Writes remain optional and require explicit confirmation. Hosted creative integrations and MCP Apps UI are outside this release.
Related MCP server: Meta Ads by Get MCP Ads
Install this release
This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.
git clone --branch v1.0.1 --depth 1 https://github.com/get-mcp-ads/x-ads-mcp-server.git
cd x-ads-mcp-server
npm ci
npm run buildConfigure your MCP client to run node with the absolute path to dist/cli.js and the platform credentials documented below.
Prefer a managed connection? Use X Ads with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.
Configuration
Provide these environment variables through the client's secret configuration:
Variable | Purpose |
| Your user OAuth 2.0 access token. An app-only bearer token is not sufficient. |
| Required comma-separated account IDs, restricted to accounts the token may access. |
| Scopes actually granted to the token. Defaults to |
| Defaults to |
Obtain your token and Ads Project access using X's official setup guide.
Use ads.read for reporting, ads.write for campaign changes and media.write for uploads and media-library writes.
Setting X_ADS_SCOPES does not grant permissions. This package accepts a token; it does not run an OAuth browser flow or persist rotating refresh tokens. When the token expires, renew it securely and restart the server.
Safety and coverage
Writes preview by default. Review the exact account, target and parameters before repeating the call with confirm: true.
Campaigns and line items are created paused. Activation can spend advertising budget. Media uploads can consume X API credits and are limited to 4 MB.
Do not retry a write automatically when its result is uncertain. Read the account and reconcile it first.
Selected-account checks apply before dispatch and filter account discovery responses. Unknown arguments are rejected.
Native pagination, attribution and monetary _micro fields are preserved. A micro unit is one millionth of the account currency.
This server exposes a reviewed subset of the official API. It does not automatically expose new upstream tools.
Native media reads and writes are included. Hosted creative galleries, visual editors and MCP Apps UI are excluded.
Use tools/list or server-card.json for exact schemas and the official API reference for provider details.
Hosted option
getmcpads for X Ads manages the hosted connection and account selection. Hosted and source releases can differ. Contact: hello@getmcpads.com.
Development
npm run typecheck
npm run lint
npm run build
npm test
npm run catalogAll tests run offline with synthetic responses. No live account is changed.
Tools
Every tool is listed below. See server-card.json for complete parameter and output schemas.
Tool | Purpose |
| List the ads accounts the authenticated user can access |
| List campaigns for an account |
| Get a single campaign by ID |
| List funding instruments (payment sources) for an ads account |
| List line items (ad groups) for an ads account |
| Get a single line item by ID |
| List promoted posts (promoted tweets) for an ads account |
| List targeting criteria for an ads account's line items |
| List posts (tweets) usable for promotion by an ads account |
| List the website conversion event tags (pixels) in an ads account; a tag's id is what a conversion line item takes as its primary_web_event_tag |
| List valid placement combinations per line item product type |
| Get synchronous analytics (impressions, engagements, spend) for an ads account |
| List which ads entities had metrics change in a time window (use before requesting account stats) |
| Get reach and average-frequency metrics for campaigns |
| Search targetable interest categories by name. |
| Search targetable locations by name. |
| List the cards in an ads account |
| Get a single card by ID |
| List the media library objects in an ads account |
| Get a single media library object by media key |
| Get a single promoted post by ID |
| Get a single targeting criterion by ID |
| Get rendered HTML previews for published or scheduled posts |
| Get a single website conversion event tag by ID |
| Read processing status of an upload owned by the connected X user. |
Disabled by default. Calls preview unless explicitly confirmed. Check the configuration and exact schema before use.
Tool | Purpose |
| Create a campaign in an ads account. |
| Rename a campaign or pause it (entity_status=PAUSED). |
| Activate a campaign (set entity_status=ACTIVE). |
| Create a line item (ad group) under a campaign. |
| Update a line item's bid, budget, name, schedule, placements, goal, pacing, audience expansion (set audience_expansion=EXPANDED to turn on Optimized Targeting) or entity_status. |
| Activate a line item (set entity_status=ACTIVE). |
| Attach post(s) to a line item as its ad creative(s). |
| Add one targeting criterion to a line item (call once per criterion). |
| Remove a targeting criterion from its line item (undo a targeting mistake). |
| Compose a promoted-only ("nullcasted") post to use as an ad creative. |
| Create a card from a JSON components payload. |
| Delete a card from an ads account. |
| Register an existing media key as a named item in the account's media library. |
| Delete a media library object from an ads account Preview by default. |
| Update a media library object's metadata (e.g. name, title, description) Preview by default. |
| Create a website conversion event tag (pixel); the returned id can be set as a line item's primary_web_event_tag Preview by default. |
| Delete a website conversion event tag Preview by default. |
| Update a website conversion event tag Preview by default. |
| Upload an image, GIF or MP4 clip to X. |
License
Apache License 2.0. See NOTICE.
More from getmcpads
Meta Ads · Google Ads · Google Analytics 4 · Google Search Console · TikTok Ads · Pinterest Ads
Maintained by Emmanuel at getmcpads. Questions: hello@getmcpads.com.
Available Tools
25 toolsx_ads_get_account_statsx ads get account statsARead-onlyIdempotent
Get synchronous analytics (impressions, engagements, spend) for an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity type to fetch metrics for. | |
| end_time | Yes | ISO 8601 end of the metrics window (exclusive). | |
| placement | Yes | Placement to scope the metrics to. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| entity_ids | Yes | Comma-separated IDs of the entities to fetch metrics for (max 20). | |
| start_time | Yes | ISO 8601 start of the metrics window, e.g. 2026-07-01T00:00:00Z. | |
| granularity | Yes | Granularity of the returned time series. | |
| metric_groups | Yes | Comma-separated metric groups, e.g. ENGAGEMENT,BILLING,VIDEO (max 10; MOBILE_CONVERSION groups mu... |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context: it is synchronous (immediate response), preserves pagination, and explains the _micro suffix for monetary values. These details go beyond the structured hints and help the agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences. The first states the core function and data types; the second adds crucial formatting and pagination notes. No filler or redundancy, making it easy to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety and idempotency, the description sufficiently covers the essential operational aspects: synchronous behavior, data types, currency interpretation, and pagination. It does not mention rate limits or authentication, but those are typically not required in tool descriptions when other signals exist. Minor gap: no mention of result count or typical response size, but overall complete for a stats-fetching tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 8 parameters have complete descriptions in the schema, covering entity types, time windows, granularity, and placement. The description does not need to add parameter details; it adds only a note about output currency interpretation, which is not parameter-specific. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches synchronous analytics (impressions, engagements, spend) for an ads account, naming the resource and data types. It also notes preserved Native X fields and micro currency formatting, distinguishing it from sibling tools that focus on campaigns, line items, or other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies account-level analytics but does not explicitly state when to prefer this tool over alternatives. It does not name any sibling or exclusion criteria, leaving the agent to infer based on the resource name. Some guidance on when not to use it (e.g., for campaign-level metrics) would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_active_entitiesx ads get active entitiesARead-onlyIdempotent
List which ads entities had metrics change in a time window (use before requesting account stats) Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity type to check for metric activity. | |
| end_time | Yes | ISO 8601 end of the activity window (exclusive); must be a whole hour (minutes and seconds 0). | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| start_time | Yes | ISO 8601 start of the activity window; must be a whole hour (minutes and seconds 0). | |
| campaign_ids | No | Comma-separated campaign IDs to scope the check to (max 200; exclusive with the other ids filters). | |
| line_item_ids | No | Comma-separated line item IDs to scope the check to (max 200; exclusive with the other ids filters). | |
| funding_instrument_ids | No | Comma-separated funding instrument IDs to scope the check to (max 200; exclusive with the other i... |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful behavioral context: 'Native X fields and pagination are preserved' and that monetary fields ending in _micro are millionths of the account currency. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise, front-loaded sentences. The first states the core purpose and usage context; the second adds necessary output-format caveats. Every clause earns its place with no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a complete input schema, clear annotations, an output schema, and a description that explains the tool's role and key output conventions, nothing essential is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters, including the entity enum, ISO 8601 time constraints, and ID filter exclusivity. The description's _micro unit note is relevant to output values, not input parameters, so it adds little to parameter semantics beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List which ads entities had metrics change in a time window.' This clearly distinguishes the tool from siblings like x_ads_get_account_stats and x_ads_list_campaigns, and the phrase 'use before requesting account stats' reinforces its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: before requesting account stats. It does not spell out when not to use it or name alternative tools, but the intended context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_campaignx ads get campaignARead-onlyIdempotent
Get a single campaign by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| campaign_id | Yes | Campaign ID belonging to the selected X Ads account. | |
| with_deleted | No | Include the campaign even if soft-deleted (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a safe, read-only, idempotent operation, so the description does not need to repeat that. It adds useful behavioral detail not in the annotations: native X fields and pagination are preserved, and monetary fields ending in _micro are in millionths of the account currency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loads the core purpose. The second sentence adds useful behavioral context, though the phrase 'Native X fields and pagination are preserved' is slightly awkward and could be misinterpreted for a single-object fetch.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema existsasi, the annotations cover the safety profile, and all parameters are documented, the description is largely complete. The only minor gap is explicit routing guidance to sibling list tools, but that is not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter descriptions in the schema already explain account_id and campaign_id. The tool description adds no parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get a single campaign by ID.' This clearly distinguishes it from sibling tools like x_ads_list_campaigns without needing to open any schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies this is for fetching a specific campaign when its ID is known, which gives some usage context. However, it does not explicitly mention alternatives such as x_ads_list_campaigns for retrieving multiple campaigns or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_campaign_reachx ads get campaign reachARead-onlyIdempotent
Get reach and average-frequency metrics for campaigns Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| end_time | Yes | ISO 8601 end of the metrics window (exclusive); must be in the past (a future end_time is rejected). | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| start_time | Yes | ISO 8601 start of the metrics window. | |
| campaign_ids | Yes | Comma-separated campaign IDs to fetch reach for (max 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful context beyond that by noting that native fields and pagination are preserved and by clarifying that `_micro` monetary fields are millionths of the account currency. This extra detail is genuinely helpful for interpreting responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose. The second part about native fields, pagination, and `_micro` units is valuable but slightly awkwardly phrased due to the missing separator between the purpose and the field notes, making it less clean than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metrics tool with fully documented parameters, annotations, and an output schema, the description covers the essential semantics. It explains the scope and unit conventions that are not obvious from the schema alone. It does not discuss auth or rate limits, but these are less critical given the read-only annotations and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters thoroughly, including account ID source, ISO 8601 time format, and the max 20 campaign IDs. The description adds no parameter-specific guidance beyond the general metric context, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving reach and average-frequency metrics for campaigns. This specific metric and resource focus distinguishes it from sibling tools like get_campaign or get_account_stats without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to choose this tool over siblings, nor does it mention exclusions or alternatives. While the purpose implies a read-only metrics use case, it does not help an agent decide between this and other campaign or stat tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_cardx ads get cardARead-onlyIdempotent
Get a single card by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Card ID belonging to the selected X Ads account. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include the card even if soft-deleted (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that by noting that Native X fields and pagination are preserved and that monetary fields ending in _micro are millionths of the account currency. This gives the agent meaningful response-shape expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose in the first phrase. The second sentence is compact and informative, though slightly jargony with 'Native X fields' and lacks punctuation after 'ID', which prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a robust output schema, full parameter descriptions, and strong annotations, the description is largely complete. It adds response semantics like pagination preservation and micro-unit handling, which are valuable for correct interpretation. Minor ambiguity around what 'Native X fields' specifically refers to keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented with meaningful descriptions. The tool description does not add parameter-level detail, but it does not need to; the baseline of 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a single card by ID.' This clearly distinguishes the tool from sibling list endpoints such as x_ads_list_cards, and leaves no ambiguity about what operation is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through 'Get a single card by ID' — an agent can infer this is for fetching one specific card when an ID is known, rather than listing cards. However, no explicit alternative or when-not-to-use guidance is provided, such as pointing to x_ads_list_cards for enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_line_itemx ads get line itemARead-onlyIdempotent
Get a single line item by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| line_item_id | Yes | Line item ID belonging to the selected X Ads account. | |
| with_deleted | No | Include the line item even if soft-deleted (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context about the response: native X fields and pagination are preserved, and monetary fields ending in _micro are millionths of the account currency. This goes beyond annotations and helps the agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that leads with the primary action and then adds relevant details. It is efficient and front-loaded, though the second clause about monetary fields adds length without sacrificing clarity. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is present and parameter coverage is 100%, the description does not need to explain return values or parameters. It supplements with the important detail about _micro monetary units and preserved pagination. The description is complete enough for a simple get-by-ID tool, though it does not mention error behavior or the with_deleted flag, which are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents account_id, line_item_id, and with_deleted. The description does not add any parameter-specific meaning, so it provides no value beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single line item by ID', which specifies the verb and resource. It implicitly differentiates from the sibling x_ads_list_line_items by focusing on a single item, but it does not explicitly name 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need one specific line item by ID, but it provides no explicit guidance on when to prefer this over the list tool or other alternatives. The 'by ID' phrasing gives context, but no exclusions or alternatives are named, so it meets only the 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_media_library_itemx ads get media library itemARead-onlyIdempotent
Get a single media library object by media key Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| media_key | Yes | Uploaded media key registered in the selected account's media library. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive, so the description does not need to repeat that. It adds useful behavioral context about preserved native fields/pagination and clarifies that monetary fields ending in _micro are expressed in millionths of the account currency, which is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, and the description is short with no filler. The only minor flaw is a missing punctuation break between 'media key' and 'Native X fields', but the overall structure is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, annotations, and fully documented parameters, the description is largely complete. It adds the important micro-units caveat and preserves-field note, which are not derivable from the schema alone. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description's reference to account currency subtly relates to account_id, but it does not meaningfully expand on either parameter beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Get a single media library object by media key.' This clearly distinguishes the tool from its siblings, especially x_ads_list_media_library, by emphasizing singular retrieval and the identifying media key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance about when to choose this tool over alternatives. It does not mention that x_ads_list_media_library should be used for multiple items, nor does it describe any prerequisites or context for when retrieval by media key is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_media_upload_statusx ads get media upload statusARead-onlyIdempotent
Read processing status of an upload owned by the connected X user. Media uploads are user-owned until registered in the selected account's media library.
| Name | Required | Description | Default |
|---|---|---|---|
| media_id | Yes | Numeric media ID returned by this connected user's upload. | |
| account_id | Yes | X Ads account from X_ADS_ACCOUNT_IDS. Register the resulting media in this account's media library. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful lifecycle context: media uploads are user-owned until registered in the selected account's media library, clarifying the relationship between uploads and library items. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the core action front-loaded. The second sentence provides important ownership context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-status tool with full schema coverage, rich annotations, and an output schema, the description is nearly complete. It could explicitly mention sibling tools for registered media, but that omission is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both media_id and account_id already described in detail. The tool description reinforces the account/media relationship but does not add new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'processing status of an upload' owned by the connected X user. It distinguishes from media library tools through ownership context, but does not explicitly name siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The ownership/registration sentence implies when this tool is appropriate (pre-registration status checks) but does not explicitly state when to use this tool versus alternatives like x_ads_get_media_library_item. No explicit exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_promoted_postx ads get promoted postARead-onlyIdempotent
Get a single promoted post by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include the promoted post even if soft-deleted (default false). | |
| promoted_tweet_id | Yes | Promoted post association ID belonging to the selected X Ads account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context beyond those hints: it states that native X fields and pagination are preserved, and clarifies that monetary fields ending in '_micro' are expressed in millionths of the account currency. This helps the agent interpret response values correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose before adding behavioral notes. It contains no filler. It loses a point for awkward structure: the transition between 'by ID' and 'Native X fields' is missing a punctuation break, making the sentence slightly harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter, the description is largely complete: it names the resource, the lookup key, unit semantics, and response preservation behavior. Required parameters are fully detailed in the schema, and an output schema exists, so return structure does not need to be described. It could be more complete by mentioning that for bulk retrieval the list tool should be used, but that gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all three parameters, including the source of account_id and the meaning of with_deleted. The tool description does not add parameter-level detail beyond the schema; its extra semantic note concerns response field units rather than parameters. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a single promoted post by ID'. This clearly separates it from sibling list tools like x_ads_list_promoted_posts, which retrieve multiple posts, and from other getters targeting different resources. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' conveys a clear precondition: the caller must already have a specific promoted post ID. This implies the tool is for single-resource lookup rather than listing, which provides useful context for selection among siblings. However, it does not explicitly name alternatives or state when not to use the tool, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_targeting_criterionx ads get targeting criterionBRead-onlyIdempotent
Get a single targeting criterion by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | BCP-47 language code; adds a localized_name response attribute for localizable criteria. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include the criterion even if soft-deleted (default false). | |
| targeting_criterion_id | Yes | Targeting criterion ID belonging to the selected X Ads account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds one useful behavioral detail: monetary fields ending in _micro are millionths of the account currency, which helps interpret response data. However, the phrase 'Native X fields and pagination are preserved' is vague and does not clarify behavior beyond what 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and mostly concise, but the first sentence is poorly structured: 'Get a single targeting criterion by ID Native X fields and pagination are preserved' reads as a run-on with unclear punctuation. It front-loads the purpose but the second part is ambiguous. It earns a middling score because brevity is good but structure suffers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with an output schema, the description omits critical usage context. It does not explain when to use this versus the list or search variants, and the vague 'Native X fields' adds little. While the output schema covers return structure, the lack of usage guidance and the ambiguous phrasing make the description incomplete for reliable tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well-documented in the schema. The description does not add any additional meaning to parameters like lang or with_deleted. The baseline of 3 applies because the schema carries the full burden, and the description adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('single targeting criterion by ID'), which distinguishes it from list and search siblings. The scope is explicit: a single criterion identified by ID, so an agent can immediately tell this from x_ads_list_targeting_criteria or the search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that this is for retrieving a specific criterion when you already have the ID, nor does it reference the list or search tools as alternatives. The usage context is only implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_get_web_event_tagx ads get web event tagARead-onlyIdempotent
Get a single website conversion event tag by ID Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include the tag even if soft-deleted (default false). | |
| web_event_tag_id | Yes | Website conversion event ID belonging to the selected X Ads account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful context about preserved native X fields, pagination, and `_micro` monetary semantics, but it does not disclose anything about auth, rate limits, or response shape beyond what annotations and schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose in the first clause. The secondary sentence adds valuable information about response fields and currency semantics, though the missing punctuation between 'ID' and 'Native' makes it slightly awkward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, full parameter schema coverage, and presence of an output schema, the description provides sufficient context for an agent to call the tool correctly. The additional `_micro` and pagination hints are useful, and no critical information appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents all parameters including `with_deleted`. The description adds general field-semantics context but no per-parameter meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get') and the specific resource ('a single website conversion event tag by ID'). It distinguishes itself from sibling tools like x_ads_list_web_event_tags by emphasizing single-tag retrieval, though it does not explicitly name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies this tool is for fetching one specific tag when its ID is known, rather than listing all tags. However, the description gives no explicit when-to-use or when-not-to-use guidance, nor does it reference alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_account_postsx ads list account postsARead-onlyIdempotent
List posts (tweets) usable for promotion by an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| user_id | No | Promotable user whose posts to list (defaults to the account's own user). | |
| trim_user | No | Return only the author's user ID instead of the full user object (default false). | |
| tweet_ids | No | Comma-separated post (tweet) IDs to scope the response to. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| tweet_type | Yes | Post type to list (the legacy API requires this filter). | |
| timeline_type | No | Scope to promoted-only, organic or all posts (default NULLCAST). | |
| include_mentions_and_replies | No | Include mentions and replies in the results (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the operation is read-only and non-destructive. The description adds useful behavioral detail beyond annotations: 'Native X fields and pagination are preserved' and 'monetary fields ending in _micro are millionths of the account currency.' This helps the agent interpret responses without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the primary purpose in the first clause. However, the second sentence is slightly run-on and unclear ('account Native X fields') which prevents a perfect structure score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, full parameter descriptions, output schema, and strong annotations, the description covers the essential purpose and adds important response caveats. It does not discuss sibling selection or edge cases, but the structured data fills most of those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters thoroughly. The description adds no new parameter-level meaning; the _micro note concerns response fields, not input parameters. The baseline of 3 applies because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('posts (tweets) usable for promotion by an ads account') and a clear action ('List'), so an agent knows what the tool does. It does not explicitly name or contrast siblings like x_ads_list_promoted_posts, but 'usable for promotion' provides some differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose phrase implies the natural use case: retrieving posts that are eligible for promotion via an ads account. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusions such as 'use list_promoted_posts for already-promoted posts'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_ads_accountsx ads list ads accountsARead-onlyIdempotent
List the ads accounts the authenticated user can access Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| account_ids | No | Optional comma-separated IDs, restricted to selected accounts. Returns all selected accounts when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by noting that Native X fields and pagination are preserved and that _micro fields are denominated in millionths of the account currency, which is important for interpreting monetary values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with the core purpose front-loaded in the first sentence. The second sentence adds important behavioral detail about field preservation and unit semantics, though the phrasing is slightly dense and would benefit from a comma after 'access.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one optional parameter, full schema coverage, and annotations covering safety, the description is largely complete. The added details about pagination preservation and _micro units fill the most significant gaps an agent would need to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter 'account_ids' with a clear description, so schema coverage is 100%. The tool description does not itself explain the parameter, but the baseline of 3 applies because the schema already carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the ads accounts the authenticated user can access.' This clearly distinguishes the tool from sibling list tools targeting other resources (campaigns, line items, funding instruments, etc.). The additional note about Native X fields and pagination reinforces that it returns a list of account objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that the tool returns accounts accessible to the authenticated user, which implies an appropriate context for use. However, it does not explicitly mention alternatives or when-not-to-use it relative to sibling tools. The distinction is mostly inferable from the resource name 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.
x_ads_list_campaignsx ads list campaignsARead-onlyIdempotent
List campaigns for an account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by campaign name (1-255 characters). | |
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_draft | No | Include draft campaigns in the response (default false). | |
| campaign_ids | No | Comma-separated campaign IDs to scope the response to. | |
| with_deleted | No | Include soft-deleted campaigns in the response (default false). | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| funding_instrument_ids | No | Comma-separated funding instrument IDs to scope the results to (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful context beyond those annotations by disclosing that native X fields and pagination are preserved and that monetary fields ending in _micro are millionths of the account currency. This helps the agent interpret response data without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loads the core purpose, and the second sentence adds meaningful behavioral detail. The transition between 'account' and 'Native X fields' is slightly awkward and could mislead on first read, but overall every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, this description is sufficient for a listing operation. It communicates the core scope and important response quirks. The main missing piece is explicit routing guidance relative to sibling tools, but the schema and names provide enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 10 parameters have descriptions in the schema, so the schema carries the heavy lifting for parameter semantics. The description's note about pagination and _micro monetary fields is more about response interpretation than input parameters. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action and target: 'List campaigns for an account'. This clearly identifies a batch read operation for campaign data and distinguishes it from singular get tools and other resource listers. It does not explicitly contrast with x_ads_get_campaign, which would make sibling differentiation even stronger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended context: use this when you need campaigns for an account. However, it provides no explicit guidance about when to prefer this over x_ads_get_campaign or when filters such as campaign_ids or with_deleted should be used. Usage is conveyed mostly by the verb and resource rather than by stated exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_cardsx ads list cardsARead-onlyIdempotent
List the cards in an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query matching against the card name. | |
| count | No | Number of records to return per page (default 100, max 200). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| card_ids | No | Comma-separated card IDs to fetch specific cards (max 200). | |
| card_uris | No | Comma-separated card URIs to fetch specific cards (max 200). | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| card_types | No | Comma-separated unified card types to filter by, e.g. IMAGE_WEBSITE, VIDEO_WEBSITE, IMAGE_APP, VI... | |
| with_deleted | No | Include soft-deleted cards (default false). | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| include_legacy_cards | No | Include legacy (non-unified) cards in the response (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: native X fields and pagination are preserved, and monetary _micro fields represent millionths of the account currency. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two sentences are short and front-load the primary action, but the second sentence is a grammatical run-on ('account Native X fields') and reads awkwardly. Both sentences carry useful information, but the structure could be cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, safety annotations, and presence of an output schema, the description is largely complete. It adds valuable response-format details about pagination and _micro units, though it could be more complete with explicit alternative routing or clarification of 'Native X fields'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 11 parameters are already documented with descriptions, including pagination and filtering semantics. The description's _micro note relates to response fields rather than input parameters, so it adds little parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'cards', and the scope 'in an ads account'. This distinguishes it from siblings like x_ads_get_card, which retrieves a single card, and from other list tools operating on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives, such as x_ads_get_card for a single card. The listing action is implied by the name and first clause, but the description does not provide exclusions or routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_funding_instrumentsx ads list funding instrumentsARead-onlyIdempotent
List funding instruments (payment sources) for an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include soft-deleted funding instruments (default false). | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| funding_instrument_ids | No | Comma-separated funding instrument IDs to fetch specific records (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior. The description adds useful context beyond annotations: pagination is preserved and monetary fields ending in _micro are expressed in millionths of the account currency. This helps the agent correctly interpret response values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action and resource. The phrase 'Native X fields and pagination are preserved' is slightly awkward but still short; every clause adds information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations, schema coverage, and output schema all carry substantial weight. The description adds the key non-obvious detail about _micro units and pagination. It does not explain return structure, but that is covered by the output schema, so no critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds no parameter-specific meaning beyond the schema, but it does add context about field units and pagination that indirectly aids parameter interpretation. This meets the baseline without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('funding instruments (payment sources)') scoped to an ads account. The parenthetical clarifies the domain term, and the resource name is distinct from all sibling tools, making selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the tool for reading payment sources for an ads account, and notes that pagination is preserved. It does not explicitly name alternatives or exclusion conditions, but none of the siblings overlap with funding instruments, so context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_line_item_placementsx ads list line item placementsBRead-onlyIdempotent
List valid placement combinations per line item product type Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| product_type | No | Restrict placements to one product type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful formatting notes about pagination and _micro monetary fields, though the phrase 'Native X fields and pagination are preserved' is somewhat cryptic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core purpose in the first clause. However, it reads as a run-on sentence because the first statement lacks punctuation before 'Native X fields,' which slightly reduces structural clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-parameter read-only tool with an output schema, the description covers the main purpose, pagination behavior, and monetary unit semantics. It lacks explicit sibling differentiation, but nothing critical is missing for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already has a descriptive enum with three values. The description references product_type but does not add significant semantic detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'List valid placement combinations per line item product type.' This is clear enough to distinguish it from most siblings, though it does not explicitly contrast it with related list tools like x_ads_list_line_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided. The description implies the tool is for retrieving placement combinations, but it does not explain when to choose this over sibling tools or how the optional product_type filter should be used in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_line_itemsx ads list line itemsCRead-onlyIdempotent
List line items (ad groups) for an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by line item name (1-255 characters). | |
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_draft | No | Include line items of draft campaigns in the response (default false). | |
| campaign_ids | No | Comma-separated campaign IDs to scope the line items to. | |
| with_deleted | No | Include soft-deleted line items in the response (default false). | |
| line_item_ids | No | Comma-separated line item IDs to fetch specific records (max 200). | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| funding_instrument_ids | No | Comma-separated funding instrument IDs to scope the results to (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description adds marginal safety context. It does disclose that pagination is preserved and that monetary fields ending in _micro are millionths of the account currency, which is useful. However, the meaning of 'Native X fields' is vague, and the description does not explain behavior like default returns or relationship to drafts/deleted records 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but poorly punctuated and structurally confusing. 'Native X fields and pagination are preserved' reads as a run-on fragment after 'ads account.' A period or restructured phrasing would improve clarity. It conveys only two main ideas in roughly 30 words, so it is not verbosely long, but the awkward structure hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 parameters, a full output schema, and rich annotations, the description is mostly adequate because the schema covers parameter semantics. However, the vague phrase 'Native X fields' and lack of sibling differentiation create uncertainty about expected usage. Completeness is acceptable for a list operation but leaves room for clarification of field/pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter already documented including descriptions for q, count, cursor, sort_by, and boolean filters. The description adds a caveat about _micro monetary fields and pagination preservation, but it does not map this to any specific parameter. Baseline 3 is appropriate since the schema already carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('List line items (ad groups) for an ads account') with a specific verb and resource. It does not explicitly distinguish from sibling tools like x_ads_get_line_item or x_ads_list_campaigns, but the name and phrasing make the purpose evident. The awkward 'Native X fields' interrupt the sentence but do not obscure the core intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as x_ads_get_line_item or x_ads_list_campaigns. The description does not mention exclusions, prerequisites, or selection criteria. The most one can infer is that 'list' suggests retrieval of multiple records, but that is implied by the name rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_media_libraryx ads list media libraryARead-onlyIdempotent
List the media library objects in an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query matching against name, title, file_name and description. | |
| count | No | Number of records to return per page (default 20, max 50). | |
| cursor | No | Pagination cursor from a previous response. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| media_type | No | Restrict to one media type: IMAGE, VIDEO or GIF. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that the operation is read-only, idempotent, and non-destructive. The description adds meaningful behavioral context: Native X fields and pagination are preserved, and monetary fields ending in _micro are millionths of the account currency, which helps the agent interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary action. The second sentence adds useful output semantics without redundancy, though the phrasing 'in an ads account Native X fields' is slightly awkward and would benefit from a punctuation break.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with a fully documented schema, annotations, and an output schema, the description covers the essential behavior: resource scope, field preservation, pagination, and monetary unit conventions. It lacks explicit usage guidance and sibling differentiation, but the core operational context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 even without additional parameter guidance. The description does not add input-specific meaning; the notes about pagination and _micro fields concern response interpretation rather than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: 'List the media library objects in an ads account', identifying both the verb and the resource. It is distinguishable from the sibling x_ads_get_media_library_item because this is explicitly a list operation, though it does not name or explicitly contrast that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description does not mention x_ads_get_media_library_item for single-item retrieval or explain when listing media library objects is appropriate, so the agent must infer usage context solely from the name and generic wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_post_previewsx ads list post previewsARead-onlyIdempotent
Get rendered HTML previews for published or scheduled posts Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Promotable user the posts belong to (defaults to the account's own user); needed when previewing ... | |
| tweet_ids | Yes | Comma-separated post IDs (or scheduled post IDs, per tweet_type) to preview (max 200). | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| tweet_type | Yes | Type of the IDs in tweet_ids. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond those hints: previews are rendered HTML, native fields and pagination are preserved, and _micro monetary fields are millionths of the account currency. This helps the agent interpret returned data correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the core purpose and then add valuable behavioral details with no filler. Every phrase earns its place, and key information is presented early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations and output schema cover safety and return structure, and parameter descriptions are complete. However, the description's scope statement conflicts with the tweet_type enum by excluding DRAFT, which is a notable gap that could lead an agent to believe drafts cannot be previewed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description does not meaningfully add per-parameter semantics; the 'published or scheduled' phrasing aligns with tweet_type but is incomplete because it omits DRAFT.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Get rendered HTML previews for published or scheduled posts.' This clearly identifies the tool's purpose and differentiates it from generic post-listing siblings like x_ads_list_promoted_posts. However, it omits the DRAFT tweet_type that the schema accepts, so the stated scope is slightly incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool when rendered HTML previews of posts are needed, as opposed to plain post metadata. It does not explicitly name alternatives or state when not to use the tool, leaving sibling selection mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_promoted_postsx ads list promoted postsARead-onlyIdempotent
List promoted posts (promoted tweets) for an ads account Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include soft-deleted promoted posts in the response (default false). | |
| line_item_ids | No | Comma-separated line item IDs to scope the promoted posts to. | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| promoted_tweet_ids | No | Comma-separated promoted post IDs to fetch specific records (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnly, idempotent, and non-destructive behavior; the description adds value by disclosing that native X fields and pagination are preserved and that _micro fields are millionths of the account currency. This is useful response behavior beyond the structured hints, though 'native X fields' is left a bit undefined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the purpose before behavioral notes, with no filler. It loses a point for the missing separator between 'ads account' and 'Native X fields,' which makes the sentence boundary unclear and slightly hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, a 100%-documented schema, and an output schema present, the description covers the essential behavioral context: pagination is preserved and monetary fields are scaled. It stops short of complete because it does not help route the agent between this list tool and its singular getter or other related list tools, though that gap is largely a usage-guidance issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All eight parameters are already fully described in the input schema (100% coverage), so the baseline applies. The description contributes the _micro currency convention and preserved pagination, but those are response-field semantics rather than additional meaning for the input parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('List'), resource ('promoted posts (promoted tweets)'), and scope ('for an ads account'), so the core purpose is unmistakable. It does not explicitly differentiate itself from sibling tools such as x_ads_get_promoted_post or x_ads_list_account_posts, so it falls just short of full sibling-level distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to prefer this list operation over x_ads_get_promoted_post for a single record, x_ads_list_line_items, or x_ads_list_account_posts. The word 'List' implies batch retrieval, but the description never states prerequisites, exclusions, or alternative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_targeting_criteriax ads list targeting criteriaBRead-onlyIdempotent
List targeting criteria for an ads account's line items Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | BCP-47 language code; adds a localized_name response attribute for localizable criteria. | |
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include soft-deleted targeting criteria (default false). | |
| line_item_ids | Yes | Comma-separated line item IDs to scope the targeting criteria to (the legacy API requires this fi... | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| targeting_criterion_ids | No | Comma-separated targeting criterion IDs to fetch specific records (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond those annotations by noting pagination is preserved and that monetary fields ending in _micro are millionths of the account currency, though 'Native X fields' remains vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose. The second clause about pagination and _micro fields is non-obvious and worth keeping, though the phrase 'Native X fields and pagination are preserved' is grammatically awkward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, full schema coverage, and an output schema, the description covers the most essential behavioral details but lacks any guidance on when to prefer this tool over related siblings. It is minimally complete but leaves some ambiguity around what 'Native X fields' means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents every parameter clearly. The description does not repeat or augment the parameter semantics beyond the _micro field convention note, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List targeting criteria for an ads account's line items'. This clearly identifies the tool's function and distinguishes it from sibling tools like get_targeting_criterion (single record) and search_targeting_* (search-focused).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any when-to-use guidance or mention alternatives such as x_ads_get_targeting_criterion for fetching a single criterion. Usage context is only implied by the word 'List' and the resource phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_list_web_event_tagsx ads list web event tagsARead-onlyIdempotent
List the website conversion event tags (pixels) in an ads account; a tag's id is what a conversion line item takes as its primary_web_event_tag Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of records to return per page (default 200, max 1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| sort_by | No | Sort order as attribute-direction, e.g. created_at-asc or updated_at-desc. | |
| account_id | Yes | X Ads account ID from X_ADS_ACCOUNT_IDS. | |
| with_deleted | No | Include soft-deleted records (default false). | |
| with_total_count | No | Include the total_count response attribute (default false; exclusive with cursor). | |
| web_event_tag_ids | No | Comma-separated web event tag IDs to fetch specific records (max 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the bar is lower. The description adds useful response behavior: 'Native X fields and pagination are preserved' and that '_micro' fields are millionths of the account currency. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly tight and front-loaded with purpose, but it is written as a run-on with semicolons, and 'Native X fields and pagination are preserved' is cryptic and missing a separator before it. The overall content is not wasteful, but structure hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, an output schema, and safety annotations, the description provides adequate scope and response context for a list tool. Minor gaps include no explicit sibling routing and vague 'Native X fields' phrasing, 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.
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. The description's notes about primary_web_event_tag and _micro fields relate to output/resource semantics, not parameter behavior, so it does not add meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the website conversion event tags (pixels) in an ads account.' It clearly differentiates from the singular sibling x_ads_get_web_event_tag by the action 'list' and defines the resource's role ('a tag's id is what a conversion line item takes as its primary_web_event_tag').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (finding tag IDs for conversion line items) but does not explicitly state when to use this list variant over x_ads_get_web_event_tag or other list tools. No exclusions, alternatives, or when-not-to-use guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_search_targeting_interestsx ads search targeting interestsARead-onlyIdempotent
Search targetable interest categories by name. Use this to find the targeting_value IDs required by add_targeting_criterion for INTEREST-type criteria. Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text interest name to search for, e.g. "motorsports". Omit to list interests unfiltered. | |
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds useful behavioral details beyond annotations: native X fields and pagination are preserved, and monetary fields ending in _micro are millionths of the account currency. These are meaningful for correct interpretation of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core action, the second gives the downstream purpose, and the third adds crucial behavioral caveats. Information is front-loaded and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with three optional, fully documented parameters, an output schema, and complete safety annotations, the description covers the essential context. The preserved-native-fields and _micro caveats handle the main surprise a caller might encounter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema thoroughly documents q, count, and cursor. The description does not add parameter-level detail beyond the schema; its mention of preserved pagination lightly relates to cursor but does not meaningfully compensate or extend the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search targetable interest categories by name. It further clarifies the purpose by connecting results to the targeting_value IDs required by add_targeting_criterion, and the INTEREST-type qualifier distinguishes it from sibling location searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool to find targeting_value IDs for INTEREST-type criteria, giving a concrete downstream consumer. It does not explicitly name the sibling x_ads_search_targeting_locations or state when not to use it, but the INTEREST-type framing provides clear context for the main use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
x_ads_search_targeting_locationsx ads search targeting locationsARead-onlyIdempotent
Search targetable locations by name. Use this to find the targeting_value IDs required by add_targeting_criterion for LOCATION-type criteria. Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text location name to search for, e.g. "united states" or "london". Omit to list locations u... | |
| count | No | Number of records to return per page (1-1000). | |
| cursor | No | Pagination cursor from a previous response. | |
| country_code | No | Two-letter ISO country code to scope results to, e.g. US. | |
| location_type | No | Scope results to one location granularity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful operational context: 'Native X fields and pagination are preserved; monetary fields ending in _micro are millionths of the account currency.' This goes beyond the annotations by warning about response field semantics and pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The first sentence states the core action, the second gives the concrete use case, and the third adds behavioral nuance about pagination and micro fields. Information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a complete input schema, an output schema, strong annotations, and a description that clarifies purpose and response semantics. An agent has everything needed to decide when to call it, which parameters to provide, and what behavior to expect. Nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all five parameters have descriptive text, examples, constraints, and an enum. The description does not add parameter-level semantics beyond the schema, so the baseline 3 is appropriate. It does not need to compensate for gaps because the schema already documents each parameter clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search targetable locations by name.' It then explains the purpose, finding targeting_value IDs for add_targeting_criterion, and distinguishes itself from the sibling search_targeting_interests by specifying LOCATION-type criteria. This makes the tool's role immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case: 'Use this to find the targeting_value IDs required by add_targeting_criterion for LOCATION-type criteria.' This provides clear context on when to call it. However, it does not explicitly name the alternative for non-location criteria (e.g., search_targeting_interests), so the guidance is strong but not fully explicit about when-not-to-use.
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.
25 tool updates
v1.0.1- First observed
x_ads_get_account_stats - First observed
x_ads_get_active_entities - First observed
x_ads_get_campaign - First observed
x_ads_get_campaign_reach - First observed
x_ads_get_card - First observed
x_ads_get_line_item - First observed
x_ads_get_media_library_item - First observed
x_ads_get_media_upload_status - First observed
x_ads_get_promoted_post - First observed
x_ads_get_targeting_criterion - First observed
x_ads_get_web_event_tag - First observed
x_ads_list_account_posts - First observed
x_ads_list_ads_accounts - First observed
x_ads_list_campaigns - First observed
x_ads_list_cards - First observed
x_ads_list_funding_instruments - First observed
x_ads_list_line_item_placements - First observed
x_ads_list_line_items - First observed
x_ads_list_media_library - First observed
x_ads_list_post_previews - First observed
x_ads_list_promoted_posts - First observed
x_ads_list_targeting_criteria - First observed
x_ads_list_web_event_tags - First observed
x_ads_search_targeting_interests - First observed
x_ads_search_targeting_locations
TDQS
Scored across 25 tools
Tools are generally distinct by resource and action, with list/get/search clearly separated. Minor confusion is possible between account posts vs promoted posts and existing targeting criteria vs targeting searches, but descriptions provide enough context.
Every tool follows the x_ads_ prefix with a consistent verb_noun pattern: list_ for collections, get_ for single items, and search_ for lookups. No mixed naming conventions or vague verbs.
25 tools is at the heavy end of the range, though each maps to a distinct X Ads resource or action. The set is broad enough to feel justified, but it is larger than ideal and borders on overwhelming.
Read coverage is strong across accounts, campaigns, line items, media, cards, posts, and stats. However, there are no create/update/delete tools and multiple references to missing capabilities like add_targeting_criterion and media upload registration, leaving workflow dead ends.
Maintenance
Related MCP Connectors
Twitter/X read-only MCP server — 12 tools: search, users, tweets, followers, timelines, trends.
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Google Ads MCP server: 16 tools for reporting, campaigns, keywords, assets. Writes preview first.
Related MCP Servers
- AlicenseAqualityBmaintenanceSelf-hosted Google Ads MCP server: 35 read tools and 10 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/google-ads-mcp-server; npm package remains @getmcpads/google-ads-mcp-server.35248 npmApache 2.0
- AlicenseAqualityAmaintenanceSelf-hosted Meta Ads MCP server with 41 read tools and 23 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/meta-ads-mcp-server; npm package remains @getmcpads/meta-ads-mcp-server.41255 npmApache 2.0
- AlicenseNot gradedqualityAmaintenanceSelf-hosted Pinterest Ads MCP server with 28 read tools and 25 opt-in, preview-first write tools. Maintained source relocated to get-mcp-ads/pinterest-ads-mcp-server; npm package remains @getmcpads/pinterest-ads-mcp-server.229 npmApache 2.0
- AlicenseAqualityAmaintenanceSelf-hosted Google Analytics 4 MCP server with 27 read-only tools for the Google Analytics Data and Admin APIs. Maintained source relocated to get-mcp-ads/google-analytics-mcp-server; npm package remains @getmcpads/google-analytics-mcp-server.27219 npmApache 2.0