AdsAgent — TikTok Ads MCP
Server Details
Hosted TikTok ads MCP with OAuth, bounded reads, and prepare/confirm writes.
- Status
- Healthy
- Uptime
- 34.4% over 42 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 98 tools
Several tool pairs are explicit duplicates or aliases (assets_refresh_all/tiktok_refresh_assets, setup_begin_channel_connect/tiktok_begin_auth_onboarding), and the insights family has overlapping variants (query_overview, query_consistent, batch_overview, cached overview). Most domain families are otherwise distinct, but the duplicate names and subtly different query tools create real selection ambiguity.
Most tools follow a readable domain_verb_noun pattern (assets_list_*, creatives_*, tasks_*, templates_*), but verb usage is inconsistent across reads (list, get, query, fetch, lookup) and a few bare tools like bid_prepare/budget_prepare lack the domain prefix. Compatibility aliases with different names for the same operation further dilute the consistency.
98 tools is a very large surface, inflated by prepare/confirm/deny triads, compatibility shims like creatives_request_upload vs _v2, and duplicate alias tools. The broad TikTok Ads domain justifies many tools, but consolidating aliases and redundant variants would make the set far more cohesive.
The server covers asset discovery, creative lifecycle, campaign/ad creation, budget/bid/status updates, insights, MMP, templates, tasks, and support. Notable gaps include no direct campaign/ad-group listing endpoint and no deletion of core ad entities, with full-entity updates limited to budget/bid/status; agents can partially work around these using insights and overview reads.
Available Tools
98 toolsassets_list_ad_accountsAInspect
List cached TikTok ad accounts (advertisers) for the authenticated tenant. Each row carries owner_bc_name joined from the owning Business Center so the agent can render "Owner BC: XYZ" without a second round trip. Mirrors Meta MCP assets_list_ad_accounts.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
REQUIRED: none. EXAMPLE: assets_list_ad_accounts({"limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that results are cached, pages are compact and bounded, cursors can become invalid, and that 'complete' has a specific meaning. This is substantial context for an agent to understand the tool's behavior, though it doesn't cover rate limits or auth, which are less critical for a read-only list.
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 dense but well-organized: a clear opening statement, a focused paragraph on pagination and cursor semantics, and a final note on requirements and an example. Each sentence earns its place, though it is longer than the minimal case; the complexity justifies the length.
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 tool with no output schema and no annotations, the description covers the essential aspects: purpose, caching, pagination, cursor behavior, search semantics, and the meaning of 'complete'. It omits output structure but that is not required without an output schema. Overall, an agent has enough to call it 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 0%, so the description must compensate. It explains limit (default 20, max 50), cursor (from previous response), and search (case-insensitive native id/name lookup), along with an example call. This gives agents the meaning they need without schema descriptions, effectively bridging the gap.
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 lists cached TikTok ad accounts (advertisers) for the authenticated tenant, using a specific verb and resource. It also mentions the joined owner_bc_name field, which is distinctive. While it references a Meta MCP counterpart, the purpose is unambiguous and distinguishable from sibling asset_list_* tools by its explicit focus on ad accounts.
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 detailed pagination instructions (follow next_cursor until complete=true, restart on rejected cursor) and clarifies that 'complete' refers to pagination, not sync coverage or permissions. However, it does not explicitly state when to choose this tool over other asset listing tools; the name and context make it obvious, but the guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_appsAInspect
List cached TikTok app assets (App Promotion advertised apps) for the authenticated tenant. Each row carries linked_bcs: [{bc_id, bc_name}, ...] derived from linked_advertiser_ids → advertiser.owner_bc_id.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
For creation, pass advertiser_id from assets_list_ad_accounts to return only assets with an exact cached advertiser link. Shared BC ownership alone is not an advertiser link. The prepare step still verifies the selected asset, identity type and create-capable authorization.
REQUIRED: none. EXAMPLE: assets_list_apps({"search": "package"})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| advertiser_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full transparency burden. It discloses that the data is cached, that linked_bcs is derived from linked_advertiser_ids, that the page is bounded, and that complete only means pagination is finished, not upstream sync or permission to create. It also states rejected/old cursor behavior, which is valuable runtime 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?
The description is front-loaded with the core purpose, then organizes pagination, parameter semantics, and creation context into distinct, purposeful sentences. There is no filler; the REQUIRED and EXAMPLE lines are minimal and practical.
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 no annotations, no output schema, and four parameters, this description is unusually complete. It covers all parameters, response navigation, row-level derivation, caveats about permission, and a concrete example. The only minor omission is a full enumeration of response fields, but the pagination and linked_bcs details cover the agent's core needs.
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 0%, but the description compensates for all four parameters: cursor is from the previous response and must restart when stale, limit has default 20/max 50, search is case-insensitive id/name lookup, and advertiser_id comes from assets_list_ad_accounts and filters to exact cached advertiser links. This goes well beyond the bare type/default fields in the input 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 opening sentence states a specific action and resource: 'List cached TikTok app assets (App Promotion advertised apps) for the authenticated tenant.' The parenthetical and 'cached' scope distinguish this from the other assets_list_* sibling tools. It is not a tautology and gives an agent a clear sense of what the tool returns.
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 explicit pagination instructions ('Keep the same tool, filters and limit while following next_cursor serially until complete=true'), the creation-time condition for using advertiser_id from assets_list_ad_accounts, and a negative rule ('Shared BC ownership alone is not an advertiser link'). It also warns that the prepare step still verifies authorization, so an agent knows not to assume this list grants creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_business_centersAInspect
List cached TikTok Business Centers (Meta wire name: businesses) for the authenticated tenant, across every connection. Each row is augmented with advertiser_count and pixel_count computed from owner_bc_id, so per-BC inventory is visible without extra calls. Mirrors Meta MCP assets_list_businesses.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
REQUIRED: none. EXAMPLE: assets_list_business_centers({"limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the list is cached, that results are a 'compact bounded page', and explains pagination semantics including the meaning of 'complete' and cursor invalidation ('A rejected or old cursor requires restarting page one'). It also clarifies that 'complete' does not indicate upstream sync or creation permissions. These are important behavioral nuances not inferable from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: it front-loads the core purpose, then the value-add (augmentation), then the pagination contract, then parameter details, and ends with an example. Every sentence earns its place; nothing is redundant. It is detailed yet concise.
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 no output schema, the description covers all critical aspects: resource, scope, caching, pagination, cursor handling, search, limit bounds, and the meaning of 'complete'. It also references a mirror tool for cross-checking. An agent has enough to call it correctly and handle pagination without ambiguity.
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?
Despite 0% schema description coverage, the description explicitly explains all three parameters: limit (default 20, max 50), cursor (from previous response), and search (case-insensitive native id/name lookup). It adds type and constraints beyond the raw schema, fully compensating for the lack of schema 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 opens with a specific verb and resource: 'List cached TikTok Business Centers (Meta wire name: businesses) for the authenticated tenant, across every connection.' It clearly states the scope and the resource type, and distinguishes it from siblings by naming the mirror tool and the augmentation (advertiser_count, pixel_count). This is unambiguous and immediately usable.
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 provides clear context: this lists business centers with per-BC inventory counts so users avoid extra calls, and it explains the pagination workflow ('Keep the same tool, filters and limit while following next_cursor serially until complete=true'). However, it does not explicitly contrast with alternative list tools (e.g., when to choose this over assets_list_ad_accounts), though the resource type itself differentiates. The guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_cta_portfoliosAInspect
List cached TikTok CTA portfolios for one exact advertiser. Use creative_portfolio_id as ad_params.call_to_action_id for Smart+ website-conversion local image or video create. The server still verifies that the selected portfolio is linked to the same advertiser before approval. Refresh assets first when the list is empty or stale; never guess a portfolio ID.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
REQUIRED: advertiser_id from assets_list_ad_accounts. EXAMPLE: assets_list_cta_portfolios({"advertiser_id": "1234567890", "limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses that data is cached and can be stale, that the server re-verifies advertiser linkage before approval, that cursors can become rejected or old, that pagination must be followed serially until complete=true, and that 'complete' only refers to pagination, not sync coverage or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose, then usage, pagination rules, prerequisites, and an example. Every clause adds practical value, including the clarification about 'complete' meaning only pagination, so no sentence is wasted.
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?
Despite having no annotations and no output schema, the description covers the tool's purpose, required inputs, parameter behavior, pagination protocol, staleness handling, prerequisite data source, and downstream usage. It is complete enough for an agent to select and call the 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 0%, so the description must compensate, and it does. It explains advertiser_id is required and sourced from a sibling tool, adds the limit maximum of 50, describes cursor continuation and restart semantics, and clarifies search as case-insensitive native id/name lookup. The example further anchors parameter usage.
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: 'List cached TikTok CTA portfolios for one exact advertiser.' It is clearly distinguishable from sibling assets_list_* tools by the CTA-portfolio resource and the cached/exact-advertiser scoping, and it explains how the output is used (as creative_portfolio_id / call_to_action_id).
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 clear context: when the list is empty or stale, refresh assets first; never guess a portfolio ID; advertiser_id must come from assets_list_ad_accounts; keep the same tool and filters during pagination. It does not explicitly name an alternative sibling to use instead, so it stops just short of full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_identitiesAInspect
List cached TikTok posting identities for the authenticated tenant. Meta pages analog: call this from assets discovery before campaigns_quick_create when ad_params lacks identity_id / identity_type (Smart+ App may auto-pick only when exactly one eligible BC_AUTH_TT row exists for the advertiser). Each row includes regular_local_media_eligible=true only when its exact identity_type is CUSTOMIZED_USER; regular local video/image also requires its exact advertiser link. AUTH_CODE is Spark-only on regular create: use an eligible Spark post and pass its signed receipt unchanged when available; a legacy receipt-less item incurs one bounded live provider verification before approval. TT_USER and BC_AUTH_TT are not regular-local choices and may be used only on a server-verified compatible Smart+ route. When the same identity_id appears on multiple BC rows, pass identity_authorized_bc_id from this list. Each row carries linked_bcs: [{bc_id, bc_name}, ...].
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
For creation, pass advertiser_id from assets_list_ad_accounts to return only assets with an exact cached advertiser link. Shared BC ownership alone is not an advertiser link. The prepare step still verifies the selected asset, identity type and create-capable authorization.
REQUIRED: none. EXAMPLE: assets_list_identities({"limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| advertiser_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers rich behavioral detail: eligibility rules by identity_type, Spark-only AUTH_CODE paths, Smart+ restrictions, identity_authorized_bc_id handling for duplicate identities, pagination semantics with next_cursor and complete, and advertiser-link verification. It goes well beyond a simple read/list description and exposes important edge cases an agent must know.
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 long, but the tool is complex and the content is dense with edge cases. Purpose is front-loaded, and the pagination and parameter guidance are structured logically. Some phrases like "Meta pages analog" add little and could confuse, but overall the length is justified by the behavioral complexity covered.
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 tool with no annotations and no output schema, the description is remarkably complete. It covers return contents, pagination protocol, cursor invalidation, filtering semantics, identity eligibility, creation prerequisites, and verification expectations. An agent has enough context to invoke this tool correctly and interpret its results in the surrounding workflow.
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 0%, so the description must compensate, and it does. It explains limit defaults and maximum (20/50), cursor comes from a previous response, search is case-insensitive native id/name lookup, and advertiser_id filters to assets with an exact cached advertiser link. Each parameter gains meaning beyond the raw schema definitions.
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 cached TikTok posting identities for the authenticated tenant." It clearly distinguishes this from the broader asset-listing sibling tools by focusing on TikTok posting identities and explaining its role in assets discovery before campaigns_quick_create. The scope is precise and immediately actionable.
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 states when to call it: "call this from assets discovery before campaigns_quick_create when ad_params lacks identity_id / identity_type." It also explains how advertiser_id relates to assets_list_ad_accounts and gives filtering guidance. It does not enumerate sibling alternatives to rule out, but the triggering condition and surrounding workflow are clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_musicAInspect
Search TikTok's live advertiser-available music library for Smart+ SINGLE_IMAGE or CAROUSEL_ADS creation. Results contain public metadata and exact music_id values only; temporary media URLs, signatures, tokens, and raw provider payloads are omitted. Select a row with create_eligible=true and the required image format, then pass its music_id as ad_params.music_info.music_id. The server revalidates it on the exact create route before issuing an approval, so never guess or assume cross-advertiser availability. A saved template retains an explicit track even without a source advertiser; preparation verifies that exact choice on the target and requires a new selection if unavailable. Local carousel members come from creatives_list through ordered image_creative_ids, independently of music discovery.
REQUIRED: advertiser_id from assets_list_ad_accounts and a keyword search containing 1 to 100 characters. Optional: limit (1..50) and the opaque next_cursor returned by the previous page. Keep the same advertiser_id, search, and limit while continuing; paginate serially, never fan out. EXAMPLE: assets_list_music({"advertiser_id": "1234567890", "search": "uplifting", "limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | Yes | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explains what results contain and omit ('public metadata and exact music_id values only; temporary media URLs, signatures, tokens, and raw provider payloads are omitted'), how row eligibility works via 'create_eligible=true', and that the server revalidates on the create route. It also covers template and carousel behavior to prevent incorrect assumptions.
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 front-loaded with purpose and organized into purpose, desired row, operational warnings, required/optional arguments, and an example. Every sentence adds a distinct operational constraint or clarification, and the additional workflow notes address real failure cases rather than padding.
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 no annotations and no output schema, the description provides a complete functional contract: what results include, how to select and pass music_id, revalidation behavior, pagination rules, and integration with templates and creatives_list. An agent has enough information to call the tool correctly and chain it into the ad creation flow.
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 0%, so the description fully compensates. It defines the source and role of advertiser_id, constrains search to 1-100 characters, limit to 1..50, and describes the cursor as opaque and returned by the previous page. The example reinforces the JSON argument shape.
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 first sentence names the exact verb ('Search'), the resource ('TikTok's live advertiser-available music library'), and the specific creation use case ('for Smart+ SINGLE_IMAGE or CAROUSEL_ADS creation'). This clearly distinguishes it from sibling asset-list tools and leaves no doubt about what the tool does.
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 states a clear invocation context, provides required and optional arguments, gives the source for advertiser_id ('from assets_list_ad_accounts'), and enforces serial pagination with 'never fan out.' It also warns against guessing cross-advertiser availability, giving the agent explicit when-to-use and when-not-to-assume guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_pixelsAInspect
List cached TikTok pixels for the authenticated tenant with their owning BC list attached. Each row carries linked_bcs: [{bc_id, bc_name}, ...] derived from linked_advertiser_ids → advertiser.owner_bc_id plus any direct owner_bc_id from BC-asset-sourced rows.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
For creation, pass advertiser_id from assets_list_ad_accounts to return only assets with an exact cached advertiser link. Shared BC ownership alone is not an advertiser link. The prepare step still verifies the selected asset, identity type and create-capable authorization.
REQUIRED: none. EXAMPLE: assets_list_pixels({"search": "purchase"})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| advertiser_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It thoroughly discloses behavior: pagination mechanics (cursor, limit, search, complete flag semantics), the meaning of 'complete' (pagination only, not sync coverage or permissions), handling of rejected/old cursors, the advertiser_id filtering behavior, and the prepare step verification. This goes well beyond minimal disclosure.
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 detailed but every sentence earns its place: purpose, data shape, pagination rules, creation flow, and an example. It is front-loaded with the core function, then logically proceeds through details. No redundancy or filler.
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 there is no output schema, the description covers return shape (linked_bcs), pagination, error recovery, and the creation-related filtering. It also warns about misinterpretation of 'complete'. It provides everything an agent needs to call the tool correctly and interpret results, including a usage example.
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 has 0% description coverage, so the description fully compensates. It explains limit (default 20, max 50), search (case-insensitive native id/name lookup), cursor (from previous response), and advertiser_id (from assets_list_ad_accounts for exact cached advertiser link). Each parameter's purpose and constraints are defined.
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?
States a specific verb (List), resource (cached TikTok pixels), and context (authenticated tenant, owning BC list attached). It clearly distinguishes this from sibling asset listing tools by focusing on pixels and cached data, and the mention of linked_bcs adds unique scope. No ambiguity.
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?
Provides clear context for when to use the tool: it is the pixel-specific listing tool, and it explicitly mentions the creation flow with advertiser_id from assets_list_ad_accounts, giving a conditional usage. It also gives pagination guidance (keep same tool/filter/limit). However, it does not explicitly state when NOT to use it vs other asset types, though the name and focus make that implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_shopsAInspect
List cached TikTok Shops attached to the authenticated tenant's Business Centers (populated via /bc/asset/get/?asset_type=SHOP).
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
REQUIRED: none. EXAMPLE: assets_list_shops({"limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that data is cached, that pages are compact and bounded, and that 'complete' refers only to pagination, not upstream sync or creation permission. It also explains cursor invalidation behavior. It does not mention auth details (implied by 'authenticated tenant') or error cases, but the disclosed behaviors are substantive and non-obvious.
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 well-organized: a one-sentence purpose, then pagination semantics, a caveat about 'complete', a required/optional note, and an example. Every sentence adds value; no filler. The structure front-loads the core purpose and then gives operational details, making it easy for an agent 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?
For a list tool with no output schema and no annotations, the description covers the essential operational aspects: source of data, pagination, cursor handling, and example call. It does not specify the exact response fields or error conditions, which could be inferred from the 'compact bounded page' description, but a bit more detail on the response shape would make it fully complete. Still, it is adequate 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 coverage is 0%, so the description must fully explain each parameter. It does: 'cursor from the previous response', 'limit (default 20, maximum 50)', and 'search (case-insensitive native id/name lookup)'. It also explains how cursor and limit interact with pagination, adding meaning far beyond the raw 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 tool lists cached TikTok Shops attached to the authenticated tenant's Business Centers, with a specific verb and resource. It differentiates from sibling asset-list tools by naming the exact asset type (SHOP) and even cites the underlying API endpoint. This leaves no ambiguity about what the tool does.
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?
Usage is clear for listing shops, and the description provides detailed pagination guidance (follow next_cursor serially, restart on rejected cursor). However, it does not explicitly contrast with sibling tools (e.g., 'use assets_list_tt_accounts for TikTok accounts'), though the distinct asset type makes the choice obvious. Lacks an explicit 'when not to use' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_list_tt_accountsAInspect
List cached TikTok accounts obtained from Business Center assets. These tt_account_id values are not posting identity_id values. For ad creation use assets_list_identities with the exact advertiser_id, then preserve identity_type and identity_authorized_bc_id.
Returns a compact bounded page. Optional: cursor from the previous response, limit (default 20, maximum 50), and search (case-insensitive native id/name lookup). Keep the same tool, filters and limit while following next_cursor serially until complete=true. A rejected or old cursor requires restarting page one. complete describes pagination, not upstream sync coverage or permission to create.
REQUIRED: none. EXAMPLE: assets_list_tt_accounts({"limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the key caveat that tt_account_id values are not identity_id values, explains that complete describes pagination not sync coverage or permission, and describes the pagination contract including cursor invalidation. Doesn't describe auth or rate limits, but these are less critical for a cached list operation.
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?
Compact and dense, with the most important information front-loaded. Every sentence carries meaning. Slight redundancy: 'REQUIRED: none' is somewhat unnecessary given the schema shows no required params, and the example is helpful but minimal.
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 no output schema and no annotations, it's reasonably complete. It tells the agent what the tool returns (cached accounts), how to paginate, how to filter, and when NOT to use it. Missing details like exact response format or auth are reasonable gaps given it's a read-only list operation.
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 0%, so the description must compensate. It does: explains limit default/maximum, cursor semantics (from previous response, rejection/old cursor requires restart), and search (case-insensitive native id/name lookup). However, it doesn't describe the response shape or what 'compact bounded page' means precisely.
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?
States a specific verb+resource (list cached TikTok accounts from Business Center assets) and adds a crucial scoping caveat: these are not identity_id values. It doesn't explicitly contrast with all siblings, but the content clearly distinguishes it from assets_list_identities. Loses a point for not naming more siblings explicitly.
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?
Provides explicit when-to-use guidance: for ad creation, use assets_list_identities with exact advertiser_id, and preserve identity_type and identity_authorized_bc_id. It also explains pagination behavior (follow next_cursor serially until complete=true) and error handling (rejected/old cursor requires restarting from page one). This is strong, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_lookup_business_linksAInspect
Read the authenticated tenant's cached TikTok asset topology. Provide exactly one native ID selector: bc_id, advertiser_id, app_id, pixel_id, identity_id, or connection_id. Names are not selectors. BC/account/connection selectors inspect forward relationships; app/pixel/identity selectors inspect exact advertiser links and BC context. This is the TikTok counterpart of Meta assets_lookup_business_links; use TikTok selectors, not Meta business_id/page_id or FB user identifiers. Returns bounded nodes and edges with per-connection evidence and source fields. Do not merge identity observations across identity_type/authorized BC. Cached owner_bc_id and observation edges do not prove ownership, current permissions or create eligibility. Shared BC membership is never an advertiser asset link. Missing matches do not prove no relationship exists. Optional limit=1..50 (default 20) and cursor. Follow next_cursor serially with identical selector and limit; complete means result pagination only. Inspect coverage for source read limits and non-atomic cache reads. Local creative upload/mapping is separate: use creatives_list and create prepare. No source refresh or provider write occurs. EXAMPLE: assets_lookup_business_links({"advertiser_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| bc_id | No | ||
| limit | No | ||
| app_id | No | ||
| cursor | No | ||
| pixel_id | No | ||
| identity_id | No | ||
| advertiser_id | No | ||
| connection_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the data is cached, that results are bounded, and that evidence and source fields are per-connection. It explicitly warns about limitations: cache does not prove ownership or permissions, shared BC membership is not an asset link, and missing matches are not definitive. It also states no source refresh or write occurs. This is exemplary transparency.
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 long but every sentence is purposeful. It is front-loaded with the core purpose, then details selection rules, limitations, and alternatives. It avoids repetition and uses clear structuring, including an example. Despite its length, it is efficient and well-organized.
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 tool with no output schema, the description explains what is returned (bounded nodes and edges with evidence) and covers pagination, coverage inspection, and exclusions. It also states the exact selectors and their meaning. Given the complexity and lack of schema/annotations, this is as complete as an agent needs.
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 has zero description coverage for its 8 parameters, but the description explains each selector and the limit/cursor semantics. It states that exactly one selector must be provided, clarifies the behavior per selector type, and specifies limit range and pagination rules ('Follow next_cursor serially with identical selector and limit'). This fully compensates for the schema gap.
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 precise statement of the tool's function: 'Read the authenticated tenant's cached TikTok asset topology.' It then specifies the exact selectors (bc_id, advertiser_id, etc.) and explicitly contrasts with Meta's counterpart, clearly distinguishing it from sibling tools. The example reinforces the intended usage.
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 explicit when-to-use guidance: 'Provide exactly one native ID selector' and names which selectors are valid. It warns that 'Names are not selectors' and explains how BC/account/connection selectors differ from app/pixel/identity selectors. It also says to use TikTok selectors, not Meta identifiers, and routes creative upload to other tools. This is model guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_refresh_allAInspect
Refresh TikTok asset snapshots (pixels / audiences / identities / shops / TT accounts / apps / CTA portfolios) across every active pull-enabled connection for the authenticated tenant. Meta-wire-aligned alias of tiktok_refresh_assets. Returns per-task receipts and truthful admission failures. Poll returned task_ref (or task_id when no public ref is available) with tasks_get_status; submitted does not mean refreshed. Check per-task results and tiktok_get_assets_status before preparing creation.
REQUIRED: none. EXAMPLE: assets_refresh_all({})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the async nature (submitted does not mean refreshed), the need to poll, and the return of per-task receipts and 'truthful admission failures'. It also clarifies the scope ('every active pull-enabled connection') and the necessity to verify results before proceeding.
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 longer than minimal but every sentence contributes: purpose, alias, return type, polling instructions, and verification step. It is front-loaded with the core action and uses clear formatting (REQUIRED, EXAMPLE). Slight redundancy in the alias mention but acceptable.
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 no output schema, the description must explain the return value, which it does ('per-task receipts and truthful admission failures'). It also provides the complete workflow: call, poll, verify. Nothing an agent needs to call and use the result correctly 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?
The tool has zero parameters, so the schema is trivially covered (100%). The description adds value by explicitly stating 'REQUIRED: none' and providing an example call `assets_refresh_all({})`, which is unnecessary but helpful for an agent.
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 ('Refresh') and resource ('TikTok asset snapshots') across all active pull-enabled connections, and explicitly names the alias sibling `tiktok_refresh_assets`. This clearly differentiates it from list tools and other operations.
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 strong context: it's an alias for `tiktok_refresh_assets`, and it instructs to poll `tasks_get_status` and check `tiktok_get_assets_status` before creation. It doesn't explicitly say when not to use it, but the alias and post-conditions make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bid_confirmAInspect
Consume one bid approval_ref and dispatch the exact recorded TikTok ad-group change once. Never replay an uncertain result; use operations_get on the original route.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the token is consumed once, that the exact recorded change is dispatched, and that replaying on uncertainty is forbidden. It could go further by stating what happens on duplicate or expired refs, but the core safety-relevant behavior is covered.
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 sentences, zero filler. The main action is front-loaded, and the important retry caveat and fallback are given immediately after. 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?
For a simple one-parameter mutation with no annotations and no output schema, the description covers the main purpose, the one-time behavior, and the safety fallback. It could improve by explaining that bid_prepare must have been called first to generate the approval_ref, but that is reasonably inferred from the name and sibling set.
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 0%, but the description gives the single parameter meaningful role semantics: it is a bid approval_ref that is created elsewhere and consumed by this action. The schema provides format/length constraints; the description supplies the operational meaning.
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 concrete action ('consume one bid approval_ref') and a concrete result ('dispatch the exact recorded TikTok ad-group change once'). It clearly distinguishes this confirm step from preparation and from querying operations_get, and the idempotent 'once' caveat adds useful precision.
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 explicitly tells the agent not to replay uncertain results and to use operations_get on the original route insteadainer. It does not explicitly mention the counterpart bid_prepare or define when the approval_ref is obtained, but the prerequisite is strongly implied by 'bid approval_ref' and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bid_prepareCInspect
Validate a bounded tenant-owned TikTok ad-group bid change in advertiser-currency units and return a single-use approval_ref. This tool does not mutate TikTok. adset is only the common-wire alias.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| entity_refs | Yes | ||
| entity_type | Yes | ||
| target_value | Yes | Advertiser-currency units | |
| ad_account_id | Yes | ||
| idempotency_key | Yes | ||
| rule_id_and_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly states 'This tool does not mutate TikTok', which is a key non-mutation trait, and clarifies the adset alias. However, it does not disclose other behaviors such as idempotency handling, the lifecycle of the single-use approval_ref, or what 'bounded' means in practice. These gaps matter for a tool that returns a token meant for later confirmation.
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 sentences long, front-loaded with the core purpose and output, and contains no filler. It efficiently conveys the main point and the non-mutation caveat. It is appropriately concise for a tool with a clear single responsibility.
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?
This tool has 7 required parameters, no output schema, and no annotations, and it sits in a complex prepare/confirm pattern. The description is too sparse to guide correct invocation: it doesn't explain what 'bounded' means, how the approval_ref should be used with a confirm tool, the meaning of run_id and rule_id_and_version, or the idempotency key requirement. An agent would likely struggle to assemble a correct call without additional context.
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 only 14% (only target_value has a description). The description adds meaning by stating 'advertiser-currency units' and clarifying the adset alias, but it does not explain the other six required parameters (run_id, rule_id_and_version, idempotency_key, entity_refs, ad_account_id, entity_type). Given the low schema coverage, the description fails to compensate for the undocumented parameters.
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 'validate' and the resource 'TikTok ad-group bid change', and specifies the output 'single-use approval_ref'. It also notes the tool does not mutate TikTok, distinguishing it from mutating siblings. However, it doesn't explicitly name sibling tools like bid_confirm or budget_prepare, so differentiation from other prepare tools is only implied by the domain context.
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 prepare/confirm workflow by mentioning it returns an approval_ref and does not mutate, but it provides no explicit guidance on when to use this tool versus alternatives. It doesn't say 'use before bid_confirm' or 'not for budget changes', leaving the agent to infer routing from naming conventions rather than clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
budget_confirmAInspect
Consume one budget approval_ref and dispatch the exact recorded TikTok change once. A transport-uncertain result is never replayed; recover it with operations_get on the original authorization route.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses the one-shot consumption semantics ('never replayed'), the action taken ('dispatch'), and the recovery approach when the result is uncertain. This goes beyond a generic confirmation description, though it does not cover permissions or side effects in detail.
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 tightly written sentences with no filler. The core action and idempotency constraint are front-loaded, and the recovery instruction 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?
For a single-parameter confirmation tool with no output schema and no annotations, the description covers purpose, one-shot behavior, mutation, and failure recovery. It is slightly thin on expected return values and explicit prerequisite steps, but the reference to 'original authorization route' implies the flow.
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 provides only the pattern and format, with 0% description coverage, so the description must add meaning. It clarifies that approval_ref is a budget approval reference tied to an original authorization route, but it doesn't explain where the value comes from or how to obtain it beyond the pattern.
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: it consumes a budget approval_ref and dispatches the exact recorded TikTok change. This distinguishes it from preparation tools like budget_prepare, though the phrase 'dispatch the exact recorded TikTok change' is somewhat jargon-heavy.
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 this is the confirmation step after an authorization route, and it gives a specific recovery path via operations_get for transport-uncertain results. However, it does not explicitly state when to prefer this over siblings like bid_confirm, nor does it describe prerequisites such as having called budget_prepare.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
budget_prepareAInspect
Validate a bounded tenant-owned TikTok campaign or ad-group budget change in advertiser-currency units and return a single-use approval_ref. This tool does not mutate TikTok. adset is only the common-wire alias for TikTok ad_group.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| entity_refs | Yes | ||
| entity_type | Yes | ||
| target_value | Yes | Advertiser-currency units | |
| ad_account_id | Yes | ||
| idempotency_key | Yes | ||
| rule_id_and_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that it does not mutate TikTok and that the returned approval_ref is single-use, which are key behavioral traits. It does not mention authentication, rate limits, or failure behavior (e.g., what happens on validation failure). For a validation tool, the disclosed traits are helpful but not exhaustive.
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 sentences with zero redundancy. The main purpose is front-loaded, and the second sentence adds two crucial clarifications (non-mutation and alias) without wasted words. It is concise and well-structured.
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 7-parameter tool with no output schema and no annotations, the description is incomplete. It covers the core action and the alias, but does not explain the roles of the various ID/version parameters, the idempotency mechanism, or the expected output format beyond 'approval_ref.' An agent might correctly invoke it but lacks understanding of prerequisites or postconditions. The description is adequate but not complete for a complex 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?
Schema description coverage is only 14% (only target_value has a description). The description adds the critical clarification that adset is an alias for ad_group, which is essential for interpreting entity_type. However, it does not explain run_id, rule_id_and_version, idempotency_key, or the meaning of 'bounded' and 'tenant-owned' in relation to parameters. The low coverage means the description should compensate more than it does.
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: validate a bounded budget change and return a single-use approval_ref. It names the resource types (campaign, ad_group) and explicitly clarifies that adset is an alias, which distinguishes it from similar tools like budget_confirm. This is a clear, non-tautological purpose.
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 explicitly states 'does not mutate TikTok,' which implies this is a preparation step, not the final commit. However, it does not name sibling tools like budget_confirm or bid_prepare as alternatives or provide explicit when-to-use guidance. The context of the sibling list (prepare/confirm pairs) makes usage inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_quick_createAInspect
Prepare one TikTok create operation in new, append-campaign, or append-adgroup mode. Returns a confirm_token and a human-readable summary; does NOT publish until campaigns_quick_create_confirm is called with the token.
REQUIRED (always): advertiser_id (call assets_list_ad_accounts to discover), a saved template_id or exact template_name, plus exactly one creative source: tenant-owned creative.creative_id from creatives_list with readiness.create_eligible=true, ordered local creative.image_creative_ids for one carousel, or creative.{video_id | image_ids | tiktok_item_id}. A local creative_id is synced to the exact advertiser only after explicit confirmation. For Spark, pass the complete identity_id, identity_type, tiktok_item_id, and spark_receipt row from spark_ads_list_posts unchanged as creative; the server moves the identity fields into TikTok's native ad parameters and rejects any conflicting duplicate values. Set ad_params.ad_format to one of that row's supported_ad_formats values; the signed receipt rejects a video/carousel mismatch before approval.
TEMPLATE SETTINGS: read templates_get.effective_creation_defaults and let the server fill saved campaign/ad-group/ad settings. MCP new and append modes require a saved template; without a selector, preparation returns needs_input/template_required. The resolved campaign_params.objective_type (APP_PROMOTION / WEB_CONVERSIONS / VIDEO_VIEWS / LEAD_GENERATION), adgroup_params.{optimization_goal, billing_event, bid_type}, ad_params.ad_format (SINGLE_VIDEO / SINGLE_IMAGE / CAROUSEL_ADS) must form a supported recipe. WEB_CONVERSIONS also requires adgroup_params.pixel_id; APP_PROMOTION requires adgroup_params.app_id from assets_list_apps. APP RECIPES (Smart+): one app_id per campaign — dual Android+iOS means two prepares. iOS APP_IOS defaults campaign_type=IOS14_CAMPAIGN, campaign BUDGET_MODE_INFINITE (ABO), adgroup BUDGET_MODE_DYNAMIC_DAILY_BUDGET 50. Android APP_ANDROID defaults campaign_type=REGULAR_CAMPAIGN, campaign BUDGET_MODE_DYNAMIC_DAILY_BUDGET 50 (CBO), adgroup BUDGET_MODE_INFINITE. Both use placement AUTOMATIC (TikTok+Pangle+GAB), optimization_goal=IN_APP_EVENT, and deep_bid_type=AEO when optimization_event is set (SUBSCRIBE is the live reference event). Pass app_id and a create_eligible local creative. When the advertiser has exactly one BC_AUTH_TT identity (TikTok's FB-page analog), the server fills identity_id / identity_type / identity_authorized_bc_id. Do not rewrite IOS14_CAMPAIGN to REGULAR_CAMPAIGN. INSTALL_NOW is the default CTA when neither call_to_action nor call_to_action_id is set. Local READY_LOCAL images/videos from creatives_list with readiness.create_eligible=true are valid App ad sources via creative.creative_id — do not require a TikTok Material Center image_id first. A web landing_page_url is stripped on APP_PROMOTION unless a deeplink is also present. Regular ads that can deliver on TikTok also require ad_params.call_to_action or ad_params.call_to_action_id; for Spark Pull, LEARN_MORE is the documented minimum CTA example. REGULAR CAROUSEL: CAROUSEL_ADS is compatible only with TRAFFIC, WEB_CONVERSIONS, APP_PROMOTION, LEAD_GENERATION, PRODUCT_SALES, CATALOG_SALES, or REACH; correct the selected objective or ad_format explicitly, never auto-rewrite the objective. REGULAR LOCAL MEDIA: exact advertiser-linked CUSTOMIZED_USER is required for local video/image. AUTH_CODE is Spark-only on regular create: use an eligible Spark post and pass its signed receipt unchanged when available; a legacy receipt-less item incurs one bounded live provider verification before approval. TT_USER and BC_AUTH_TT are not regular-local choices and may be used only on a server-verified compatible Smart+ route.
REGULAR CAMPAIGN BUDGET: new regular campaigns default a missing campaign_params.budget_mode to BUDGET_MODE_INFINITE (non-CBO / ABO). Bounded DAY, DYNAMIC_DAILY_BUDGET, or TOTAL modes require a positive campaign budget, and dynamic daily mode requires budget_optimize_on=true (CBO). Meta-portable aliases campaign_params.budget_level=CBO|ABO|campaign|adgroup are accepted and rewritten to those native fields. Append modes reuse their existing campaign and do not apply this contract.
REGULAR AD-GROUP BUDGET/SCHEDULE: new and append-campaign modes require adgroup_params.budget_mode (BUDGET_MODE_DAY, BUDGET_MODE_DYNAMIC_DAILY_BUDGET, or BUDGET_MODE_TOTAL) plus a positive budget. Daily modes default a missing schedule to SCHEDULE_FROM_NOW; stale template start/end values are removed and the UTC start is stamped only at write time. BUDGET_MODE_TOTAL requires SCHEDULE_START_END with both UTC timestamps. Smart+ and append-adgroup do not use this new-ad-group contract.
WITH template_id or template_name (Meta-portable): pass just advertiser_id + template_name (or template_id) + creative — propose pulls campaign_params / adgroup_params / ad_params from the template (caller-set keys win), derives campaign_name/adgroup_name from template.campaign_naming / template.adgroup_naming, stamps ad_name as {adgroup_name}-{utc}, and reads is_smart_plus from template.campaign_params.is_smart_performance. The selected media determines the compatible image/video format; do not force SINGLE_VIDEO onto a local image from a video template. Smart+ APP_PROMOTION defaults call_to_action to INSTALL_NOW. Meta copy aliases title/headline→display_name, body/text/message→ad_text, and cta→call_to_action are accepted. App display_name defaults from the linked app name.
TEMPLATE/ROOT COMPATIBILITY: prefer the compact template selector plus creative shape above, with overrides in campaign_params / adgroup_params / ad_params and execution. adset_params is accepted as an adgroup_params alias; both maps are preserved for conflict validation. A templates_get row spread may supply id, name, and campaign_naming as selector echoes; other read-only row metadata is ignored. Supported root budget, counts, statuses, bid, schedule, Smart+ switches, copy, and identity fields are passed to the same normalizer as execution/native fields. Conflicting duplicates must be corrected before confirmation.
AUTO-FILLED FROM USER ASSETS: identity_authorized_bc_id (when identity_type=BC_AUTH_TT), promotion_type/app_type/package/app_download_url (for APP_PROMOTION when app_id is set), placements default to [PLACEMENT_TIKTOK] for PLACEMENT_TYPE_NORMAL, top-level targeting fields (location_ids, operating_systems, age_groups, …) fold into adgroup_params.targeting.
INITIAL STATUS: omit entity status fields such as campaign_params.status, adgroup_params.status, and ad_params.status; status is unsupported. Where a native field is needed for payload compatibility, use operation_status. Campaign, ad group, and ad statuses default to DISABLE; explicit ACTIVE/ENABLE is preserved in the approved plan. Smart+ adgroup/create does not accept operation_status. When a new Smart+ ad group is requested DISABLE, a separate durable post-create disable step must be acknowledged before ad creation. ENABLE requires no disable step.
SMART+ IMAGE MUSIC: SINGLE_IMAGE and CAROUSEL_ADS require a music_id because TikTok's image creative wire requires music. When music_info is omitted (or music_id is auto/random), the server selects one advertiser-available track from assets_list_music and revalidates that exact ID on the recorded create route. An explicit music_id still wins. Append-adgroup may inherit one unambiguous parent track. Preserve an explicit template track, including across advertisers, and verify that exact ID for the target; unavailable music requires another explicit selection, never silent replacement. If no usable track is available, use a video creative.
LOCAL IMAGE GROUPS: creative.image_creative_ids is an ordered list of 2..35 JPEG/PNG images for one native CAROUSEL_ADS creative, and the same field is accepted inside ad_params.creative_list[].creative_info for one carousel variant. Use only create_eligible image rows from the tenant library. SINGLE_IMAGE is a separate format; one image is not a native multi-card carousel. For TikTok Android App carousel ads, use CAROUSEL_ADS with music and the ordered image group. Do not split cards into separate creative_list entries or pass local IDs as provider image_ids. Inspect the prepared plan's final format and ordered members before confirmation. If the receipt reports creative_image_not_ready, wait the returned retry_after_seconds (10s), then prepare the same local IDs for a new approval; existing acknowledged image uploads are reused. creative_image_not_usable requires different eligible material. An uncertain upload must be reconciled, never automatically reuploaded or replayed.
META EXECUTION BLOCK: pass execution like Meta QuickCreate — execution.budget.level=campaign|adset (CBO/ABO), execution.budget.type=daily|lifetime, execution.budget.amount, execution.is_smart_plus / execution.advantage_plus / execution.is_smart_performance for Smart+, execution.statuses.{campaign,adset,ad} (ACTIVE/PAUSED -> ENABLE/DISABLE), execution.bid.{strategy,cap}, execution.start_time / execution.end_time, execution.start_mode (immediate or tomorrow = advertiser TZ next day 00:05 UTC wire), and legacy flat execution.budget_level / execution.budget_amount. execution.campaign_count and execution.adset_count expand into a bounded serial batch (product <= 20, append_mode=new only). creative_distribution=all_per_adset (default) keeps Smart+ multi-creative on one ad via ad_params.creative_list; one_per_adset expands Smart+ to one ad group per creative (not Meta ad objects).
OPTIONAL: creative_distribution (all_per_adset|one_per_adset), is_smart_plus (bool, default derived from template), execution (object), call_to_action_id (str — portfolio id, alternative to ad_params.call_to_action enum), campaign_params.budget_level (CBO/ABO).
APPEND MODES (TikTok-native): append_mode="append-campaign" with target_campaign_id creates one ad group + one ad under that exact campaign; omit campaign_params. append_mode="append-adgroup" with target_adgroup_id creates one ad under that exact ad group; omit campaign_params and adgroup_params. Existing APP_PROMOTION ad groups keep their app_id / promotion_type; pass only the new ad plus a create_eligible local creative_id, ordered image_creative_ids, or provider image_ids. The server verifies advertiser ownership, exact authorization route, parent status, hierarchy, and Smart+ compatibility before prepare and again before mutation. Do not use Meta append-adset naming, do not guess by name, and never supply both target IDs.
If required fields are missing, returns status="needs_input" with bounded rejected_paths and next_action — fix and re-call. Confirm tokens expire after 10 minutes. Successful proposals include a summary with recipe and launch_readiness, matching the dashboard's core readiness model. Smart+ is intentionally limited to locally verified recipes: APP_PROMOTION, WEB_CONVERSIONS, PRODUCT_SALES, and LEAD_GENERATION.
EXAMPLE (template path, Meta-portable name): campaigns_quick_create({"advertiser_id": "7563...", "template_name": "iOS14 AEO", "creative": {"creative_id": ""}})
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| bid | No | ||
| cta | No | ||
| body | No | ||
| name | No | ||
| text | No | ||
| title | No | ||
| budget | No | ||
| ad_name | No | ||
| ad_text | No | ||
| bid_cap | No | ||
| message | No | ||
| creative | No | ||
| end_time | No | ||
| headline | No | ||
| statuses | No | ||
| ad_params | No | ||
| ad_status | No | ||
| execution | No | ||
| smart_plus | No | ||
| start_mode | No | ||
| start_time | No | ||
| adset_count | No | ||
| append_mode | No | new | |
| budget_mode | No | ||
| budget_type | No | ||
| identity_id | No | ||
| template_id | No | ||
| adgroup_name | No | ||
| adset_params | No | ||
| adset_status | No | ||
| bid_strategy | No | ||
| budget_level | No | ||
| daily_budget | No | ||
| display_name | No | ||
| adgroup_count | No | ||
| advertiser_id | Yes | ||
| budget_amount | No | ||
| campaign_name | No | ||
| identity_type | No | ||
| is_smart_plus | No | ||
| template_name | No | ||
| adgroup_params | No | ||
| adgroup_status | No | ||
| advantage_plus | No | ||
| call_to_action | No | ||
| campaign_count | No | ||
| campaign_naming | No | ||
| campaign_params | No | ||
| campaign_status | No | ||
| call_to_action_id | No | ||
| target_adgroup_id | No | ||
| target_campaign_id | No | ||
| is_smart_performance | No | ||
| campaign_daily_budget | No | ||
| creative_distribution | No | ||
| identity_authorized_bc_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, and it delivers: it discloses the non-publishing prepare/confirm separation, returns needs_input with rejected_paths, 10-minute confirm-token expiry, default entity statuses of DISABLE, server-side auto-fills, music selection behavior, and retry handling for creative_image_not_ready. It also reveals mutation-affecting nuances like 'a separate durable post-create disable step must be acknowledged before ad creation' and 'unavailable music requires another explicit selection, never silent replacement.'
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 front-loaded with the core purpose and requirements, and organized by bolded CAPS section headers. However, it is extremely long and dense, covering edge cases in a style that requires careful parsing. Most sentences earn their place given the tool's complexity, but a tighter structure would improve scannability for an agent.
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 57 parameters, no annotations, and no output schema, the description is remarkably complete. It covers modes, required inputs, recipe validation rules, budget and schedule contracts, Smart+ specifics, local image groups, Meta execution block, append behaviors, error handling, and token expiry. The example call at the end further anchors correct usage.
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 0%, so the description must compensate, and it does comprehensively. It explains the meaning and relationships of the central parameters (advertiser_id, template_id/name, creative, ad_params, campaign_params, adgroup_params, execution, append_mode) and Meta aliases like title/headline→display_name. It covers defaults (e.g., INSTALL_NOW, placements to PLACEMENT_TIKTOK) and conditional requirements (pixel_id for WEB_CONVERSIONS, app_id for APP_PROMOTION).
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: 'Prepare one TikTok create operation in new, append-campaign, or append-adgroup mode.' It also names the sibling companion ('does NOT publish until campaigns_quick_create_confirm is called'), making the tool's role in the two-step create flow unmistakable. The required inputs are enumerated, fully distinguishing it from related create/list 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?
Explicit guidance covers when to use template selection vs manual params, append modes, and numerous 'do not' rules: 'Do not rewrite IOS14_CAMPAIGN to REGULAR_CAMPAIGN', 'never auto-rewrite the objective', 'do not guess by name, and never supply both target IDs.' It names prerequisite calls (assets_list_ad_accounts, creatives_list, spark_ads_list_posts) and directs the agent away from Meta conventions where inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_quick_create_batchAInspect
Prepare one bounded manual TikTok hierarchy containing 2..20 ads under the same campaign and ad group, preserving batch_items order. Each item requires exactly one creative source; ad_name is required unless the unchanged Spark listing row supplies it. Each item may override item-level ad_params (for example an AUTH_CODE identity for a Spark post). The server validates all items on one advertiser and authorization route, executes serially after confirmation, journals one receipt per created entity, and stops on uncertain outcomes. This tool never publishes by itself; show the sanitized plan and call campaigns_quick_create_confirm once only after explicit approval.
A saved template_id or exact template_name is required to fill shared campaign/ad-group/ad settings. Template identity, app, pixel, CTA portfolio, and tracking bindings are retained only for their source advertiser or after exact current-advertiser asset validation. For Spark items, the exact identity_id, identity_type, tiktok_item_id, and spark_receipt row returned by spark_ads_list_posts may be passed unchanged as item.creative; the server normalizes the TikTok-native identity fields and uses that verified item identity instead of a shared template identity. Local creative items keep the shared template identity only when it is exact advertiser-linked CUSTOMIZED_USER; Spark items use the exact AUTH_CODE row and pass its receipt unchanged when available. TT_USER and BC_AUTH_TT are not regular local-batch identities. CAROUSEL_ADS is compatible only with TRAFFIC, WEB_CONVERSIONS, APP_PROMOTION, LEAD_GENERATION, PRODUCT_SALES, CATALOG_SALES, or REACH; never auto-rewrite an objective. The legacy split shape with item ad_params identity fields remains accepted. Legacy items without a receipt incur one bounded live verification per identity.
Smart+ is intentionally excluded: a Smart+ template returns unsupported_structure and must be passed to campaigns_quick_create with one ad_params.creative_list instead. Maximum 20 ads per approval; prepare another explicit batch for additional ads. Never fan out single-create calls.
REQUIRED: advertiser_id, template_id or exact template_name, and batch_items. Missing selectors return needs_input/template_required before any draft is prepared. Resolved ad_params must include call_to_action or call_to_action_id when the ads can deliver on TikTok. Optional append_mode is new, append-campaign, or append-adgroup with the exact corresponding target and preview receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_params | No | ||
| append_mode | No | new | |
| batch_items | Yes | ||
| template_id | No | ||
| adgroup_name | No | ||
| advertiser_id | Yes | ||
| campaign_name | No | ||
| template_name | No | ||
| adgroup_params | No | ||
| campaign_params | No | ||
| call_to_action_id | No | ||
| target_adgroup_id | No | ||
| target_campaign_id | No | ||
| parent_preview_receipt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and meets it impressively. It discloses: serial execution after confirmation, one receipt journaled per created entity, stopping on uncertain outcomes, never publishing by itself, validation on one advertiser/authorization route, and the template_required/needs_input error behavior for missing selectors. This is rich behavioral context an agent needs.
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 long, but it is dense rather than padded — every sentence carries operational meaning for a 14-parameter tool. The core purpose and safety contract are front-loaded in the first paragraph. It is appropriately sized for the tool's complexity, though a handful of sentences could arguably be tightened.
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's complexity (14 params, no annotations, no output schema, many siblings), the description is remarkably complete. It covers required fields, exclusions (Smart+), identity normalization rules, CAROUSEL_ADS objective compatibility, error behavior, the confirmation handoff, and the append-mode semantics. There is nothing an agent needs to call this tool safely that 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 0%, so the description must compensate. It explains the critical parameters: template_id/template_name as the required selector ('A saved template_id or exact template_name is required'), batch_items (order preservation, creative requirements), advertiser_id, append_mode (new/append-campaign/append-adgroup with exact receipts), ad_params identity overrides, and the creative fields for Spark items (identity_id, identity_type, tiktok_item_id, spark_receipt). Some params like target_campaign_id, parent_preview_receipt, and campaign_name are not individually explained, but the ones essential to correct execution are covered.
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 opening sentence is precise: 'Prepare one bounded manual TikTok hierarchy containing 2..20 ads under the same campaign and ad group, preserving batch_items order.' It names the verb (prepare), the resource (TikTok hierarchy), and the scope (2-20 ads). It clearly distinguishes itself from the single-create sibling campaigns_quick_create by explicitly contrasting the batch flow with the single-ad path.
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?
Explicit routing is provided: 'Smart+ is intentionally excluded... must be passed to campaigns_quick_create with one ad_params.creative_list instead' and 'Never fan out single-create calls.' The confirmation flow is explicit: 'show the sanitized plan and call campaigns_quick_create_confirm once only after explicit approval.' This tells the agent exactly when to use this tool vs. its siblings and what the follow-up step is.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_quick_create_confirmAInspect
Confirm the durable create approval minted by campaigns_quick_create. The approval creates one durable task. If the response was lost, the same exact token within its original expiry recovers that task; do not prepare a replacement. An unavailable token does not prove that no task was created: inspect existing receipts first. The create runs asynchronously as a task; the returned opaque task_ref can be passed to tasks_get_status to watch progress and read back the published objects. task_id is a distinct legacy compatibility input, not an alias for task_ref. A failed terminal create returns bounded created objects, failure phase/reason/support_ref, and next action. Historical confirmations that mislabeled a canonical UUID as task_ref are recovered only through the tenant-scoped legacy task path, which returns the corrected opaque task_ref. If the outcome is uncertain, recover only with operations_get and the returned operation_ref on the original advertiser/authorization route; never replay or name-match.
REQUIRED: confirm_token (from a prior campaigns_quick_create call). EXAMPLE: campaigns_quick_create_confirm({"confirm_token": "a1b2c3..."})
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the create runs asynchronously, returns an opaque task_ref for tasks_get_status, explains failure behavior (bounded created objects, failure phase/reason/support_ref, next action), and details idempotency and recovery semantics. It even clarifies the legacy task path for mislabeled UUIDs, leaving no ambiguity.
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 dense and information-rich, with every sentence adding value, but it is longer than necessary. The first sentence is front-loaded and clear, and the REQUIRED/EXAMPLE lines help. Some redundancy exists (e.g., repeating recovery guidance), but the complexity of the tool justifies most length.
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 no output schema and no annotations, the description is remarkably complete. It covers purpose, parameter origin, asynchronous behavior, failure handling, idempotency, recovery alternatives, and legacy path. An agent has everything needed to call it correctly and handle uncertain outcomes.
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 0%, so the description must compensate. It explicitly states 'REQUIRED: confirm_token (from a prior campaigns_quick_create call)' and provides a concrete example. It also clarifies that task_id is a distinct legacy input, not an alias for task_ref, preventing confusion about the sole parameter.
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: 'Confirm the durable create approval minted by campaigns_quick_create.' It clearly distinguishes itself from siblings like campaigns_quick_create_deny and campaigns_quick_create_batch by focusing on the confirmation step of a two-phase creation flow, and even mentions alternatives like operations_get.
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 explicit when-to-use and when-not-to-use guidance: it states that the same token within expiry recovers the task and that one should not prepare a replacement, that an unavailable token does not prove no task was created (inspect receipts first), and that if uncertain, recover only with operations_get and never replay or name-match. It also names the legacy path for historical confirmations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_quick_create_denyAInspect
Deny an unclaimed campaign draft minted by campaigns_quick_create. If already claimed, preserve the original receipt and follow its recovery action. This never cancels a submitted task; an expired or missing token does not prove that no task was submitted.
REQUIRED: confirm_token. EXAMPLE: campaigns_quick_create_deny({"confirm_token": "a1b2c3..."})
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so well. It discloses side-effect boundaries ('never cancels a submitted task'), the behavior when already claimed ('preserve the original receipt and follow its recovery action'), and a critical caveat about token expiration. These are exactly the non-obvious behavioral traits an agent needs to know.
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. Every sentence adds value: the action, the claimed-draft behavior, the submitted-task warning, and the required parameter with an example.
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 single-argument tool with no output schema and no annotations, the description covers action, scope, edge cases, parameter requirement, and an example. Nothing essential for calling the tool correctly 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 coverage is 0%, so the description must compensate. It explicitly marks confirm_token as REQUIRED and provides a concrete example with a representative value. It implies the token identifies the draft to deny, though it could more explicitly state where the token comes from.
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?
States a specific verb ('Deny'), a specific resource ('unclaimed campaign draft minted by campaigns_quick_create'), and a clear scope. It distinguishes itself from related siblings like campaigns_quick_create_confirm and campaigns_quick_create by emphasizing unclaimed drafts and the quick-create origin.
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?
Clearly indicates when to use the tool: to deny an unclaimed campaign draft. It also gives important contextual limitations, such as 'never cancels a submitted task' and the warning about expired/missing tokens. It does not explicitly name alternative sibling tools, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_recreate_confirmAInspect
Confirm one prepared TikTok task recreation after explicit approval. One durable task; a lost response may be recovered with the same unexpired token. Never replay a prior task directly.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry behavioral transparency, and it does: it discloses durability ('One durable task'), recovery behavior with the same unexpired token, and a caution against replaying a prior task. It does not detail side effects, permissions, or failure states, but it adds meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, front-loaded sentences with no filler. The purpose is stated first, followed by recovery semantics and a safety warning; 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?
For a single-parameter confirmation tool with no annotations and no output schema, the description covers the essential context: what is being confirmed, the durable-token recovery behavior, and an explicit 'never replay' rule. It does not explain the surrounding prepare/confirm workflow or define 'prepared task,' but the definition is largely sufficient for a simple confirm action.
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 0% and confirm_token is only titled 'Confirm Token.' The description references 'the same unexpired token' and recovery use, which adds meaning to the token's lifecycle. However, it never explicitly maps confirm_token to that token or explains how the token is obtained, so it only partially compensates for the missing schema documentation.
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 and resource: 'Confirm one prepared TikTok task recreation after explicit approval.' It identifies the triggering condition and the action, which distinguishes it from the deny/create siblings. However, it does not explicitly name sibling tools or clarify the 'task recreation' jargon, so it misses full 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 description gives an explicit context for when to invoke the tool: after explicit approval, on a prepared task. It also warns 'Never replay a prior task directly,' which is a meaningful usage constraint. It does not mention alternative actions such as campaigns_recreate_deny or what to do before this step, but the core when-to-use guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_recreate_denyAInspect
Deny an unclaimed TikTok recreation. Claimed plans retain recovery references; this does not cancel submitted tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds useful nuance: claimed plans retain recovery references and submitted tasks are not canceled. However, it does not mention side effects, reversibility, or what happens to associated resources after denial.
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 sentences, no filler, with the core action front-loaded and the important caveat placed second. Every sentence earns its place and the length is appropriate for a one-parameter tool.
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 is simple and the description covers the basic action and a key behavioral caveat. However, with no annotations, no output schema, and no parameter explanation, an agent may still be unsure how to obtain or populate confirm_token or what a successful denial returns.
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 0% for the only parameter, confirm_token, and the description does not mention it at all. The agent receives no guidance on where the token comes from, its format, or its role in the denial flow, so the description adds no meaning beyond the schema's title.
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 the specific verb 'Deny' and the resource 'an unclaimed TikTok recreation,' making the action unmistakable. The second sentence clarifies what this tool does not do, distinguishing it from cancellation tools like campaigns_recreate_confirm or tasks_cancel.
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 scopes use to unclaimed recreations and explicitly states this is not a task-cancellation tool, which provides useful exclusion criteria. However, it does not name an alternative tool or explicitly state 'use this when you want to reject an unclaimed recreation,' leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_recreate_from_taskAInspect
Prepare a recreation of one caller-owned, fully completed TikTok create/copy task using its opaque task_ref. The original payload is loaded server-side, internal receipt/route fields are removed, and current advertiser ownership and parent bindings are revalidated. Failed, partial, uncertain, or foreign tasks are not recreatable. Use execution.start_time/end_time for an explicitly rescheduled launch. Source end times are never extended automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| task_ref | Yes | ||
| execution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It reveals server-side payload loading, removal of internal receipt/route fields, revalidation of ownership and bindings, and the non-extension of source end times. These are meaningful behavioral traits beyond what the schema shows. It does not mention return values or side effects, but covers the core action thoroughly.
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 dense but not wasteful; every sentence adds unique information. The main purpose is front-loaded, followed by behavioral details and usage guidance. It is a bit long but appropriate for the complexity of the tool. No redundant or tautological phrasing.
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 description covers the action, conditions, and parameter usage well, but it does not mention what the tool returns or what the agent should do with the prepared recreation (e.g., follow with campaigns_recreate_confirm). Since there is no output schema and no annotations, the absence of any indication of return value or next-step linkage leaves a gap for an agent that needs to chain tools.
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 0%, so the description must compensate. It does for execution by explaining its purpose ('explicitly rescheduled launch'), and for task_ref by calling it 'opaque' and implying it is a task identifier. It does not explicitly state that execution is optional or default null, but the schema already shows that. The description adds value beyond the schema for both parameters.
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 a specific verb ('prepare a recreation') and resource ('fully completed TikTok create/copy task'), and adds crucial constraints (caller-owned, opaque task_ref). It distinguishes the tool from siblings by specifying it is for fully completed tasks only, and later excludes failed, partial, uncertain, or foreign tasks, which clarifies its niche.
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 explicit when-to-use conditions (fully completed tasks) and when-not-to-use (failed, partial, uncertain, foreign tasks). It also gives guidance on using the execution parameter for rescheduled launches. It does not explicitly name alternative tools (e.g., campaigns_recreate_confirm), but the conditions are clear enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_clone_structureAInspect
Prepare a same-advertiser TikTok campaign or native ad-group structural clone from live TikTok structure. Use only when the user explicitly asks to clone an existing campaign/ad group. For new launches from tenant uploads, call creatives_list then campaigns_quick_create with creative.creative_id — not this tool. Provide exactly one source_campaign_id or source_adgroup_id and copies 1..5. Every source ad keeps its own TikTok provider creative; live media is often not API-reusable. No cross-advertiser transfer. One approval and one serialized task journal. Optional execution.start_time/end_time replaces the source launch schedule; old bounded starts need an explicit replacement, and source end times are preserved unless explicitly replaced.
| Name | Required | Description | Default |
|---|---|---|---|
| copies | No | ||
| execution | No | ||
| advertiser_id | Yes | ||
| source_adgroup_id | No | ||
| source_campaign_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It discloses that it only copies structure, not media ('Every source ad keeps its own TikTok provider creative; live media is often not API-reusable'), that it requires an approval step ('One approval and one serialized task journal'), and details scheduling behavior ('Optional execution.start_time/end_time replaces the source launch schedule...'). These are non-obvious behavioral traits an agent must know.
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 dense but every sentence earns its place: purpose, usage conditions, source constraints, media caveat, approval/journal, and scheduling. It front-loads the primary purpose and usage, then adds constraints. No wasted words.
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's complexity (structural clone, approval flow, scheduling, media limitations) and the absence of annotations and output schema, the description covers all essential aspects: when to use, how to specify sources, copy count, scheduling semantics, and behavioral caveats. 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 0%, so the description must compensate. It explains the mutual exclusivity of source_campaign_id/source_adgroup_id, the copy count range (1..5), and the meaning of execution.start_time/end_time. It does not explicitly describe advertiser_id, but that is a common context parameter. The description adds significant meaning beyond the raw 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?
States a specific verb and resource ('Prepare a same-advertiser TikTok campaign or native ad-group structural clone from live TikTok structure') and distinguishes it from alternative flows (new launches via creatives_list + campaigns_quick_create). The scope is explicit and it is clearly differentiated from sibling tools like copy_ad_quick_copy.
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?
Gives explicit conditions for use: 'Use only when the user explicitly asks to clone an existing campaign/ad group' and explicitly names the alternative for new launches. It also specifies constraints like 'No cross-advertiser transfer' and 'Provide exactly one source_campaign_id or source_adgroup_id', leaving no ambiguity about when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_clone_structure_confirmAInspect
Confirm one prepared TikTok structural clone after explicit user approval. One durable task; poll the returned task_ref and recover through the exact operation_ref. A lost confirm response may be recovered with the same unexpired token, never a replacement plan.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses durability ('One durable task'), the need to poll the returned task_ref, recovery through operation_ref, and token-based recovery with the same unexpired token. It doesn't spell out full side effects, but this is meaningful transparency for a confirm action.
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 gives purpose, the second covers execution behavior, and the third explains recovery. 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 one required parameter, no output schema, and no annotations, the description adequately covers the confirm-and-recover lifecycle via task_ref, operation_ref, and token expiry/reuse. It could explicitly identify the prior prepare step or token source, but an agent has enough information to invoke and monitor the task.
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 0%, so the description must carry parameter meaning. It adds that confirm_token must be 'the same unexpired token' and that replacement plans are never used, which clarifies reusability and expiry. It still doesn't specify where the token comes from or its format, leaving a moderate gap.
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 first sentence names a specific verb (Confirm) and resource ('one prepared TikTok structural clone') and qualifies it with 'after explicit user approval.' This clearly distinguishes the tool from its deny and prepare 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 description gives a concrete condition for use: confirm only after explicit user approval, and only for a prepared clone. It does not explicitly name the deny alternative or state when not to use it, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_clone_structure_denyCInspect
Deny an unclaimed TikTok structural clone. Claimed plans retain recovery references; this does not cancel submitted tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries full burden. It discloses that the action does not cancel submitted tasks, but doesn't explain what 'deny' entails—whether it's a destructive action, if there are irreversible consequences, or what happens to the unclaimed clone. Lacks clarity on side effects beyond not canceling tasks.
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 extremely concise—one sentence. It front-loads the core action ('Deny an unclaimed TikTok structural clone') and adds one clarifying clause about claimed plans. No fluff, but it might be too sparse on detail.
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 no annotations, no output schema, and one parameter, the description is insufficient. It doesn't explain prerequisites (e.g., how to know a clone is unclaimed), what confirm_token is, or any post-conditions. The agent lacks critical context to safely invoke this 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?
Schema description coverage is 0%, and only one parameter (confirm_token) exists. The description doesn't explain what confirm_token is or where to obtain it, leaving the agent to guess. The parameter name implies a token but its source or format is undocumented.
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 ('Deny') and resource ('unclaimed TikTok structural clone'), which clearly identifies the action. It distinguishes from confirmed clones by noting 'Claimed plans retain recovery references', but it doesn't explicitly name sibling tools like copy_ad_clone_structure_confirm or copy_ad_quick_copy_deny. The purpose is clear but not fully differentiated from 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 description implies usage for unclaimed clones but doesn't provide explicit when-to-use or when-not-to-use guidance. It mentions that claimed plans are not affected, but doesn't specify conditions for unclaimed ones or when to use confirm versus deny. No mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_quick_copyAInspect
Prepare a TikTok-native copy without publishing. Single source: provide advertiser_id + source_ad_id, copies 1..10, copy_mode=reuse|fresh, and optional append_mode. Fresh requires one explicit tenant-owned creative. Grouped append: provide source_ad_ids (1..20) plus append-campaign/target_campaign_id or append-adgroup/target_adgroup_id. The server reads source campaign/ad group/ad settings once, preserves Smart+ and Spark identity semantics, keeps new ads disabled, and binds one aggregate approval. Same advertiser only; never use Meta append-adset or client-side fan-out. For a new ad group, execution.start_time/end_time may explicitly replace source timestamps (ISO8601 with offset or UTC). An old bounded start requires a new start; the source end is retained unless explicitly replaced. Grouped copy supports reuse only.
| Name | Required | Description | Default |
|---|---|---|---|
| copies | No | ||
| creative | No | ||
| copy_mode | No | reuse | |
| execution | No | ||
| append_mode | No | new | |
| source_ad_id | No | ||
| advertiser_id | Yes | ||
| source_ad_ids | No | ||
| target_adgroup_id | No | ||
| target_campaign_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral disclosure. It reveals that the server reads source settings once, preserves Smart+ and Spark identity semantics, keeps new ads disabled, binds one aggregate approval, and applies specific timestamp replacement/retention rules. These are non-obvious behaviors not inferable from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but non-redundant; each clause adds a constraint or mode detail. It is a single heavy paragraph rather than structured bullets, which makes scanning harder, but there is no filler or repetition.
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 10 parameters, no output schema, and no annotations, the description is remarkably complete: mode selection, constraints, timestamp behavior, and exclusions are all covered. It could add an explicit note about the return value or downstream confirm/deny step, but that is a minor gap given the schema void.
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 0%, and the description compensates by mapping most parameters: advertiser_id, source_ad_id/source_ad_ids, copies ranges, copy_mode values, execution timestamps, and target campaign/ad group IDs. Minor gaps remain: append_mode value semantics are only implied by the 'Grouped append' paragraph, and the creative object's internal shape is unspecified beyond 'tenant-owned creative.'
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 object: 'Prepare a TikTok-native copy without publishing.' It clearly distinguishes the single-source and grouped-append modes, and differentiates this from confirm/deny and clone-structure siblings by emphasizing preparation, non-publication, and TikTok-native scope.
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 explicitly describes two invocation paths with parameter requirements, states that fresh mode requires a tenant-owned creative, and notes that grouped copy supports reuse only. It also gives explicit negative guidance: same advertiser only, never use Meta append-adset or client-side fan-out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_quick_copy_confirmAInspect
Confirm exactly one prepared copy/bulk-append plan after explicit user approval. Returns one operation_ref and task_ref. Confirm once; poll tasks_get_status. On uncertainty use operations_get on the original route and never replay or recover by name. If the confirm response was lost, reuse only that exact token within its original expiry to recover the same task; never prepare a replacement copy.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses one-shot semantics, token expiry, the recovery path using the exact token, post-confirm polling via tasks_get_status, and explicit constraints like never replaying or recovering by name. This is rich behavioral context beyond the bare action.
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 four sentences, all dense and purposeful, with the core purpose front-loaded in the first sentence. Every sentence contributes critical operational guidance; there is 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?
For a single-parameter confirmation tool with no annotations or output schema, the description is remarkably complete. It covers prerequisites, what is returned, the post-action step, recovery on lost responses, and explicit anti-patterns. Nothing critical an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides the name confirm_token with no description, so the description must add meaning. It does add meaning by indicating the token is exact, has an original expiry, is tied to a specific task, and can be reused only within that expiry for recovery. It does not explicitly state where the token comes from (e.g., the prepare step), but the 'prepared plan' context implies its origin.
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 (confirm), a specific resource (a prepared copy/bulk-append plan), and clear constraints (exactly one plan, after explicit user approval). It also distinguishes this from sibling prepare/deny tools by emphasizing it is a confirmation step and warning not to prepare a replacement copy.
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 explicit guidance on when to use the tool: confirm exactly once, then poll tasks_get_status. It also provides alternatives when uncertain, directing the agent to use operations_get on the original route, and explicitly forbids name-based recovery or preparing a replacement copy. This is clear, actionable routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_ad_quick_copy_denyAInspect
Deny an unclaimed TikTok copy plan. Claimed plans return original recovery references; this does not cancel submitted tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds meaningful behavioral context (claimed plans return original recovery references, submitted tasks are not canceled), but doesn't explain side effects, what 'deny' actually changes, or what the response looks like.
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 short sentences with no fluff. The first sentence states the core purpose, and the second provides important caveats. Every part 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?
For a simple one-parameter tool, it covers purpose and behavior boundaries, but leaves confirm_token unexplained and uses domain jargon (claimed plans, recovery references) without definition. Adequate but not fully self-contained.
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 0%, and the description never explains confirm_token—what it is, where it comes from, or its format. The parameter name implies a confirmation token, but no additional meaning is provided.
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 specific action (deny), the resource (an unclaimed TikTok copy plan), and distinguishes it from siblings by noting the unclaimed scope and the fact that it does not cancel submitted tasks.
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 implies when to use the tool (for unclaimed plans) and provides a boundary for claimed plans and submitted tasks. However, it doesn't explicitly name alternative tools for those cases, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_abandon_uploadAInspect
Reconcile or discard one exact tenant-owned pending/error upload so a failed browser upload does not remain as a permanent library placeholder. Pass the same SHA-256 file_hash, stable idempotency_key, upload_attempt, and folder_id used for creatives_request_upload_v2. If bytes reached storage and verify, the creative becomes ready; otherwise the matching placeholder is discarded. It never deletes a verified ready creative and never returns the hash, storage key, provider URL, or tenant identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| file_hash | Yes | ||
| folder_id | No | ||
| upload_attempt | No | ||
| idempotency_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so strongly. It discloses conditional side effects (becomes ready vs. discarded), a hard safety boundary ('never deletes a verified ready creative'), and explicit non-returned values such as hash, storage key, provider URL, and tenant identifier.
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?
Four dense sentences with no filler. The purpose is front-loaded, the parameter requirement comes second, the conditional behavior third, and the safety exclusions last. Every sentence contributes distinct information.
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 mutating cleanup tool with no annotations and no output schema, this description covers purpose, parameter provenance, conditional outcomes, and negative guarantees. It is slightly incomplete in that it never states the success/error return shape and does not explicitly compare itself to sibling tools like creatives_confirm_upload, but these are minor gaps against an otherwise thorough definition.
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 0%, so the description must compensate, and it does: it names all four parameters and adds meaning by specifying file_hash is SHA-256, idempotency_key must be stable, and all values should match those from creatives_request_upload_v2. It does not expand on folder_id nullability or upload_attempt default, but the schema already provides those details.
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 specifies a concrete action — 'Reconcile or discard one exact tenant-owned pending/error upload' — attached to a clear motivation: a failed browser upload should not remain as a permanent library placeholder. It also distinguishes itself by explicitly stating that it never deletes a verified ready creative and references the upstream creatives_request_upload_v2 workflow.
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 firm when-to-use context by explaining the conditional outcome: if bytes reached storage and verify, the creative becomes ready; otherwise the placeholder is discarded. It also instructs the caller to pass the same parameters used for creatives_request_upload_v2. However, it does not explicitly route the agent away from sibling tools like creatives_confirm_upload or creatives_reconcile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_confirm_uploadAInspect
Verify or safely reconcile a tenant-owned creative in R2. Use this both after a newly prepared upload and when creatives_list reports readiness.status=verification_pending. It marks the row create-eligible only when stored size and content type match (plus checksum when R2 provides one). A successful response includes an additive upload_contract projected from the persisted ready/reconciled row. Never auto-retry a failed confirmation.
REQUIRED: creative_id (str — UUID returned by request_upload or creatives_list). EXAMPLE: creatives_confirm_upload({"creative_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| creative_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the success condition, checksum verification when available, the additive upload_contract in the response, and the no-auto-retry caveat. It does not detail failure responses or permission requirements, but the behavioral core is well covered.
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 front-loaded, uses a required/example section, and each sentence adds useful information. The only slight inefficiency is the somewhat open-ended double verb 'Verify or safely reconcile,' which overlaps a bit with the later success-condition sentence.
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 single-parameter tool with no output schema, the description covers trigger conditions, success criteria, response contents, a retry caveat, and an example call. It is complete enough for an agent to invoke confidently, though it does not explain error shapes or authentication requirements.
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 has one parameter, creative_id, with no description (0% schema description coverage). The description fully compensates by stating the format ('str — UUID') and the exact source ('returned by request_upload or creatives_list'), which is exactly what an agent needs to populate the parameter correctly.
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 operation ('Verify or safely reconcile a tenant-owned creative in R2') and a concrete outcome ('marks the row create-eligible only when stored size and content type match'). It is clear about what the tool does, though it does not explicitly contrast itself with the closely named sibling creatives_reconcile.
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 explicit trigger contexts: use after a newly prepared upload, and when creatives_list reports readiness.status=verification_pending. It also adds a clear negative guideline: never auto-retry a failed confirmation. It stops short of naming alternative tools explicitly, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_create_folderAInspect
Create a creative folder for the authenticated tenant. Folder names must be unique within their parent (or top-level if no parent_id).
NOTE: updated_at on the returned row = "row last touched", NOT "content changed".
REQUIRED: name (str). Optional: parent_id (str — UUID of parent folder; omit for top-level). EXAMPLE: creatives_create_folder({"name": "Hero videos"})
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure, and it adds two useful behaviors: uniqueness of folder names within a parent and the surprising fact that updated_at means row-touched, not content-changed. It could also state error handling or permissions, but the mutation and returned-row behavior are at least revealed through the create verb and the note.
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?
Every sentence earns its place: purpose, uniqueness rule, surprising updated_at note, parameter summary, and example. The format is front-loaded 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?
For a two-parameter create tool with no output schema, the description covers the tenant, uniqueness, the parameter semantics, and even the unusual timestamp semantics. The only real gap is that the returned row's full shape and duplicate-name failure behavior are not specified, both of which could matter when the caller inspects the result.
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 0%, but the description fully compensates: it explains that name is required, that parent_id is a UUID for the parent folder, and that omitting it means top-level. The uniqueness rule and the JSON example add meaning beyond the bare property names in 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 opens with a specific action and object: 'Create a creative folder for the authenticated tenant.' This directly states what the tool does and the tenant scoping, and because the sibling folder tools are delete, rename, and list operations, the create verb is enough to tell them apart.
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 clear invocation context: name is required, parent_id is optional, and omitting parent_id creates a top-level folder. It does not explicitly list alternative tools or when-not-to-use conditions, but the create/delete/rename/list sibling split makes the appropriate case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_deleteAInspect
Delete a single creative owned by the authenticated tenant by creative_id. Removes the DB row and (if no other rows reference the same R2 object) deletes the R2 object too.
REQUIRED: creative_id (str — UUID). EXAMPLE: creatives_delete({"creative_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| creative_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to indicate safety, the description carries the burden and does well by disclosing the precise effects: 'Removes the DB row and (if no other rows reference the same R2 object) deletes the R2 object too.' It also notes ownership by the authenticated tenant. It stops short of stating irreversibility or error behavior, but the core destructive behavior is transparent.
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: core action and side effects first, then the required parameter, then an example. Every line earns its place with no redundant wording.
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 one-parameter delete tool with no output schema, the description provides the essential invocation details: operation, ownership scope, side effects, parameter format, and example. It does not describe return values or error cases, but that is a minor gap given the low complexity.
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 0%, so the description must fully document the parameter. It does: 'REQUIRED: creative_id (str — UUID)' plus a concrete example. This adds meaningful type/format detail beyond the generic 'string' in 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: 'Delete a single creative owned by the authenticated tenant by creative_id.' It clearly identifies the target and differentiates from sibling tools like creatives_delete_folder because it is explicitly deleting a creative, not a folder.
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 clear context for when to use the tool: deleting a single creative by its ID. It does not explicitly mention alternatives or exclusions, but the scope is unambiguous enough to guide selection among destructive creative-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_delete_folderAInspect
Delete a creative folder recursively for the authenticated tenant — removes all subfolders, all creatives inside them, and any orphaned R2 objects (only deletes the R2 blob when no other creative row references the same key).
REQUIRED: folder_id (str — UUID). EXAMPLE: creatives_delete_folder({"folder_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly discloses the recursive deletion, the removal of subfolders and creatives, and the nuanced R2 cleanup logic (only deleting blobs not referenced elsewhere). It also scopes the operation to the authenticated tenant. This is rich, transparent behavior description beyond any schema.
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 sentences plus an example line, with the main purpose front-loaded. Every sentence adds value: the first explains the action and its effects, the second provides the required parameter and format, and the example reinforces usage. There is no 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?
The tool is a destructive recursive delete with a single parameter and no output schema. The description fully covers what happens (recursive deletion, orphan cleanup), the required input, and an example. There is no missing information an agent would need to invoke it 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 0%, so the description must compensate. It does so by specifying the required parameter folder_id, its type (str), and format (UUID), and providing a concrete example call. This is sufficient for an agent to understand how to provide the parameter, though it does not elaborate on the semantics beyond the obvious (it is the folder to delete).
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 action (delete a creative folder recursively) and the scope (for the authenticated tenant). It details what is removed: subfolders, creatives, and orphaned R2 objects with a specific condition. This distinguishes it from sibling tools like creatives_delete, which presumably targets a single creative.
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 clear context for when to use the tool: to delete a folder and all its contents recursively. However, it does not explicitly mention alternatives or when not to use it, such as when deleting a single creative (creatives_delete). It lacks explicit exclusionary guidance but the purpose is unambiguous enough for an agent to infer the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_getAInspect
Get a single creative owned by the authenticated tenant by creative_id. Returns an opaque artifact_ref and same-origin, authenticated download_endpoint plus the legacy download_url when the creative is storage-verified; the additive artifact_contract validates the same resolver through a credential-free ArtifactDescriptor projection. provider URLs and storage identifiers are never returned. 404-shape returned as {status: "not_found"} instead of raising.
REQUIRED: creative_id (str — UUID). EXAMPLE: creatives_get({"creative_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| creative_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does an excellent job. It discloses the return fields and their conditions (artifact_ref, download_endpoint, legacy download_url when storage-verified), explicitly states what is never returned (provider URLs and storage identifiers), and describes the 404 behavior as a shape instead of an exception.
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 front-loaded with the core purpose, then logically flows through return behavior, security/redaction details, error handling, and required invocation details. Every sentence adds behavioral or usage value; the REQUIRED and EXAMPLE lines are compact and immediately actionable.
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 this is a single-parameter getter with no output schema, the description is fully complete: it explains returned fields, conditional availability, authentication properties, redaction guarantees, the not_found response shape, and the exact parameter format with an example. Nothing needed to call it correctly 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?
The schema provides only the parameter name and a bare title with 0% description coverage. The description compensates fully by stating REQUIRED, the type (str), the format (UUID), and a concrete call example using the exact parameter key, making invocation unambiguous.
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 creative owned by the authenticated tenant by creative_id." This clearly distinguishes the tool from siblings like creatives_list (plural) and creatives_delete, and leaves no doubt 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?
It provides clear context for when to call the tool: when you have a specific creative_id and need a single creative. It does not explicitly name alternatives or exclusions, so it stops short of a 5, but the single-creative-by-ID framing is strong enough to guide an agent away from list-style siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_listAInspect
List creatives owned by the authenticated tenant with cursor pagination. This is the TikTok AdsAgent tenant library (tiktok.adsagent.md Creatives), not Meta adsagent.md and not TikTok Ads Manager Material Center. READY_LOCAL dashboard rows belong here and are create sources via creative.creative_id; they do not need a TikTok image_id/video_id until after confirm. For images, use one creative_id for one image or ordered creative.image_creative_ids (2..35 JPEG/PNG images) for one carousel; every member must be an eligible image row. ad_params.creative_list contains separate variants, not the ordered cards of one carousel. Rows omit content hashes and storage keys. The legacy download_url is retained as an authenticated same-origin endpoint only after storage verification; unverified historical ready rows report verification_pending. Inspect coverage (create_eligible_count / empty_reason / next_action) plus readiness.create_eligible before using creative_id in campaigns_quick_create. An empty page with coverage.empty_reason=no_tenant_creatives is the only true empty-library signal (unfiltered scope=library plus a tenant-wide existence check). no_creatives_in_query means the current folder/search/media_type/time_filter matched nothing; no_creatives_in_root means scope=root was empty while the tenant owns creatives elsewhere — retry scope=library (default) or call creatives_list_folders. Trust coverage.scope.kind; never describe a root/folder page count as the whole library. Do not treat those as a different tenant.
REQUIRED: none. Optional: scope (library|root, default library — entire tenant library across root and folders; use root for root-only reads), folder_id (str — UUID of one folder), cursor (opaque and scope-bound; reuse it only with the identical query), limit (int 1..50, default 20), search (filename substring, max 200 chars), media_type (all/image/video), time_filter (all/24h/7d/30d), include_incomplete (bool, default true). Returns count, complete, meta.has_more, next_cursor and snapshot_at (legacy top-level has_more remains). Each row exposes creative_id as an alias of id for direct creative.creative_id selection. These describe library pagination, not TikTok upload completion; continue serially with next_cursor instead of client fan-out. EXAMPLE: creatives_list({"search": "hero", "media_type": "video", "limit": 20})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | library | |
| cursor | No | ||
| search | No | ||
| folder_id | No | ||
| media_type | No | all | |
| time_filter | No | all | |
| include_incomplete | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: returned fields, row omissions, legacy download_url auth behavior, verification_pending status, and empty-page semantics. It also warns against misinterpreting folder/root counts as the whole library.
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 long but appropriately dense and well-structured: purpose, exclusions, caveats, compact parameter summary, return fields, and an example. Each section adds information not available in the schema, and the example makes the invocation concrete.
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 absence of an output schema and annotations, plus the high complexity around carousels, empty-reason semantics, readiness fields, and pagination, the description is remarkably complete. It equips an agent to call the tool correctly and 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?
Schema description coverage is 0% and the schema provides no descriptions or enums, so the description compensates fully. It documents every optional parameter with types, allowed values, ranges, defaults, and semantic caveats such as cursor scope-binding and folder_id UUID format.
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+resource: 'List creatives owned by the authenticated tenant with cursor pagination.' It explicitly distinguishes this tool from Meta adsagent.md, TikTok Ads Manager Material Center, and related creatives tools, making its role 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?
It gives concrete usage conditions: retry scope=library or call creatives_list_folders when no_creatives_in_root, inspect coverage/readiness before downstream use, and continue serially with next_cursor instead of fan-out. It also states what this tool is not for, clarifying selection among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_list_foldersAInspect
List creative folders for the authenticated tenant, optionally scoped to a single parent_id (omit for top-level). Each folder carries creative_count. Zero folders is not an empty library — root creatives_list still returns READY_LOCAL files with folder_id=null. Inspect coverage.empty_reason before telling the operator the material library is empty.
NOTE: updated_at = "row last touched", NOT "content changed". Bulk maintenance bumps it without content change — to detect content changes, cache the specific field(s) you care about and diff yourself.
REQUIRED: none. Optional: parent_id (str — UUID of parent folder). EXAMPLE: creatives_list_folders({})
| Name | Required | Description | Default |
|---|---|---|---|
| parent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so strongly. It warns that zero folders is not an empty library, tells the agent to inspect coverage.empty_reason before concluding emptiness, and explains that updated_at means row-last-touched rather than content-changed, including the bulk-maintenance caveat. This is genuinely useful behavioral disclosure beyond the name and schema.
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 main purpose is front-loaded in the first sentence, and each subsequent note earns its place by preventing misinterpretation or wasted operator calls. The REQUIRED/Optional/EXAMPLE block is compact and immediately actionable.
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 description is remarkably complete for a simple listing tool: it covers parameter semantics, returned field creative_count, the empty-library pitfall, and updated_at interpretation. The only minor gap is that it does not describe the overall response envelope or whether pagination exists, but for this tool's complexity the description is sufficient.
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 0%, but the description fully compensates by explaining parent_id as 'str — UUID of parent folder' and by stating that omitting it returns top-level folders. For a single optional parameter, this is complete and unambiguous.
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 'List creative folders for the authenticated tenant', which names a specific verb, resource, and scope. It also distinguishes itself from the sibling creatives_list by clarifying that root creatives_list returns files with folder_id=null, so an agent can tell the tools apart.
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 states that parent_id is optional and that omitting it means top-level folders, and gives concrete guidance about interpreting zero folders versus an empty library. It does not explicitly say 'use this instead of alternatives', but it makes the relationship to root creatives_list explicit, which gives practical routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_reconcileAInspect
Idempotently reconcile 1..20 tenant-owned creative IDs in one server-side batch. Use readiness.reason_code to distinguish bytes still pending, storage verification, terminal upload failure, and create eligibility. The server uses fixed bounded concurrency; do not fan out creatives_confirm_upload calls. Results preserve input order and never expose storage keys, hashes, provider bodies, or tenant identifiers.
REQUIRED: creative_ids (list[str], 1..20 unique IDs from creatives_list). Retry only when readiness.retryable=true and follow readiness.next_action. EXAMPLE: creatives_reconcile({"creative_ids": [""]})
| Name | Required | Description | Default |
|---|---|---|---|
| creative_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers: idempotency, bounded concurrency, input-order preservation, and non-exposure of sensitive data. It also explains retry behavior, covering operational nuances an agent needs to invoke 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 thorough yet efficient, front-loading the core purpose and systematically covering usage, constraints, and an example. Every sentence contributes value, with clear formatting (REQUIRED, EXAMPLE) that aids parsing.
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 single-parameter reconciliation tool with no output schema, the description is remarkably complete. It explains the readiness.reason_code semantics, retry rules, what results preserve, and what they never expose, giving an agent all necessary 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?
Schema coverage is 0%, so the description fully compensates by specifying the parameter type (list[str]), constraints (1..20 unique IDs), and source ('from creatives_list'). This adds meaning beyond the bare schema and gives precise, actionable guidance.
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 action ('reconcile'), the resource ('creative IDs'), and its scope ('1..20 tenant-owned creative IDs in one server-side batch'). It explicitly distinguishes itself from a sibling by saying 'do not fan out creatives_confirm_upload calls', providing strong 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 description gives explicit when-to-use guidance via readiness.reason_code distinctions and retry conditions ('Retry only when readiness.retryable=true and follow readiness.next_action'). It also explicitly warns against using an alternative ('do not fan out creatives_confirm_upload calls'), making usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_rename_folderAInspect
Rename a creative folder owned by the authenticated tenant. New name must be unique within the same parent.
NOTE: updated_at on the returned row = "row last touched", NOT "content changed".
REQUIRED: folder_id (str — UUID), name (str — new name). EXAMPLE: creatives_rename_folder({"folder_id": "", "name": "Hero videos v2"})
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| folder_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add useful context: the uniqueness requirement and the note about `updated_at` semantics. However, it omits critical behavioral details for a mutation tool, such as required permissions, reversibility, or potential error conditions, which are not covered elsewhere.
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 well-structured: purpose, a behavioral note, required parameters, and an example. It front-loads the core purpose and includes only essential information. Every sentence earns its place, making it efficient for an agent 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 rename operation with two parameters and no output schema, the description covers purpose, constraints, parameters, and an example. It lacks mention of permissions or failure modes, but given the simplicity and no annotations, it is largely sufficient. The main gap is the absence of usage guidance relative to siblings.
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 0%, so the description must compensate. It explicitly lists both required parameters with types and semantic hints (folder_id is a UUID, name is the new name) and provides a concrete example. This adds meaning beyond the bare schema, though it could further clarify constraints like name length or format.
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 action (rename) and the resource (creative folder), along with the ownership scope ('owned by the authenticated tenant'). The uniqueness constraint adds specific detail, distinguishing it from create/delete/list sibling operations. This is a precise, actionable purpose.
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 guidance on when to use this tool versus alternatives. It does not mention conditions for renaming vs creating/deleting, nor does it reference any sibling tools. The example is helpful for invocation but does not address selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_request_uploadAInspect
Compatibility entrypoint. Calls without a stable idempotency_key return status=upgrade_required before any row or storage work, with recommended_tool=creatives_request_upload_v2. Calls that already provide a stable key use the redacted v2 proxy contract. Provider presigned URLs and storage keys are never returned.
REQUIRED: filename (str), content_type (str — image/jpeg, image/png, image/gif, image/webp, video/mp4, video/quicktime, video/webm, video/x-msvideo), file_size (int — bytes, ≤ 500MB), file_hash (str — sha256 hex). Optional: idempotency_key (str — recommended stable key per user upload action; reuse only for reconciliation/retry), upload_attempt (int, default 1; increment only for an explicit retry), folder_id (str — UUID). Trust the returned upload_attempt and reconciled fields. EXAMPLE: creatives_request_upload({"filename": "hero.mp4", "content_type": "video/mp4", "file_size": 12345678, "file_hash": "abc...", "idempotency_key": "upload-20260723-example", "upload_attempt": 1})
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | ||
| file_hash | Yes | ||
| file_size | Yes | ||
| folder_id | No | ||
| content_type | Yes | ||
| upload_attempt | No | ||
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the conditional behavior based on idempotency_key, explicitly states that no presigned URLs or storage keys are returned, and notes that 'Provider presigned URLs and storage keys are never returned' as a hard constraint. It also advises to 'Trust the returned upload_attempt and reconciled fields,' hinting at the response structure. However, it does not explicitly state whether this operation creates or modifies any records, though it implies work is done in the keyed case. It is highly transparent but leaves a minor gap on side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and well-organized: the first paragraph establishes purpose and conditional behavior, the second lists parameters with constraints, and the third provides an example. Every sentence adds value, and the critical upgrade_required behavior is front-loaded. There is no fluff or repetition.
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's complexity (conditional behavior, 7 parameters, no output schema, no annotations), the description covers purpose, behavior, parameter constraints, and an example. It explains the upgrade path and what is never returned, but it does not describe the full success response structure (only hints at upload_attempt and reconciled fields). Since there is no output schema, a bit more detail on the response shape would improve completeness, but the description is largely sufficient 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 0%, so the description is the only source for parameter meaning. It enumerates all required parameters with constraints (content_type allowed values, file_size ≤500MB, file_hash sha256 hex) and explains optional ones (idempotency_key for retries/reconciliation, upload_attempt increment only on retry, folder_id UUID). The example further clarifies the expected payload. This fully compensates for the schema's lack of 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 clearly states the tool's role as a 'Compatibility entrypoint' for requesting creative uploads, with an explicit conditional behavior: calls without an idempotency key return upgrade_required and recommend creatives_request_upload_v2, while calls with a key use the redacted v2 proxy contract. This distinguishes it from siblings like creatives_request_upload_v2 and creatives_confirm_upload, making its purpose 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 explicitly explains when to use this tool versus the alternative: it tells the agent that without a stable idempotency_key, it will return upgrade_required and recommends v2, implying that v2 is the preferred modern entrypoint. It also clarifies that presigned URLs and storage keys are never returned, setting expectations for what this tool does and does not provide. This is explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_request_upload_v2AInspect
Prepare or reconcile one tenant-owned creative upload using the credential-free P9 contract. Requires a stable idempotency_key and returns upload_endpoint=/api/upload/proxy when bytes are needed, or dedup_success only for a storage-verified ready object. Never returns upload_url, r2_key, provider credentials, or raw tenant identifiers. Send the multipart bytes to that same-origin endpoint with the same Authorization: Bearer <MCP token> header; the endpoint enforces mcp.launch.prepare, tenant ownership, rate limits, concurrency, size, type and R2-prefix checks.
REQUIRED: filename, content_type, file_size (1..500MB), lowercase 64-hex file_hash, idempotency_key. Optional: upload_attempt (1..3, default 1), folder_id. EXAMPLE: creatives_request_upload_v2({"filename": "hero.mp4", "content_type": "video/mp4", "file_size": 12345678, "file_hash": "", "idempotency_key": "upload-20260723-example", "upload_attempt": 1})
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | ||
| file_hash | Yes | ||
| file_size | Yes | ||
| folder_id | No | ||
| content_type | Yes | ||
| upload_attempt | No | ||
| idempotency_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses critical behavioral traits: the tool is credential-free, enforces various limits (rate, concurrency, size, type, prefix), and returns either upload_endpoint or dedup_success. It also warns about what it never returns, preventing misuses. This is exceptional transparency beyond typical descriptions.
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 dense but organized: first the core function, then security/constraints, then required/optional parameters, then an example. Every sentence adds value, and the example is compact. It is front-loaded with the most critical information (what it returns and never returns).
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's complexity (7 params, no output schema), the description covers all essential aspects: idempotency, endpoint, authentication, constraints, and an example call. It even details the return behavior (upload_endpoint vs dedup_success). The example clarifies usage. It is complete for an agent to call 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 coverage is 0%, so the description must compensate. It does by listing required parameters (filename, content_type, file_size, file_hash, idempotency_key) with constraints (1..500MB, lowercase 64-hex, etc.) and optional ones (upload_attempt, folder_id). It adds value by specifying the file_hash format and size limits, which are not in the schema. Slight deduction for not explaining content_type or folder_id 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 tool's purpose: to prepare or reconcile a tenant-owned creative upload using a credential-free contract. It distinguishes itself from siblings like creatives_request_upload by version suffix and by specifying the unique behavior (returns upload_endpoint or dedup_success). The verb 'request_upload' plus the explicit conditions make it 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 explicitly states when to use this tool: when needing to request or reconcile an upload, with a stable idempotency_key. It also provides clear exclusions: it never returns upload_url, r2_key, or credentials, and it specifies the exact follow-up action (send bytes to the returned endpoint with Authorization header). This is more than most descriptions, making alternatives obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delivery_status_confirmAInspect
Consume one approval_ref and execute the recorded delivery-status change once. Uncertain writes are recorded and never auto-retried.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses important behaviors: the change is executed exactly once, and uncertain writes are recorded and never auto-retried. This gives an agent a clear model of the tool's side effects, though it omits details like failure response or whether explicit user confirmation is needed.
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 sentences, no filler, with the core action front-loaded. The second sentence adds a genuinely important behavioral caveat that 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?
For a one-parameter tool with no output schema or annotations, the description covers the essential invocation semantics and warns about retries. Minor gaps remain: the provenance of the approval_ref and the response shape are not addressed, but these are 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 coverage is 0%, so the description must compensate. It does by clarifying that approval_ref is the single token to be consumed, implying it comes from a prior prepare step. The schema supplies the pattern and length, while the description adds the semantic role of a one-time-use reference.
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—'Consume one approval_ref and execute the recorded delivery-status change once'—with a clear verb, resource, and single-use semantic. It differentiates from siblings like delivery_status_prepare and other *_confirm tools by naming the delivery-status scope.
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?
Use is implied through 'Consume one approval_ref', suggesting this is the confirmation step after a prepare operation, but the connection to delivery_status_prepare is never explicit. No when-not-to-use or alternative conditions are given, so the guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delivery_status_prepareAInspect
Validate a bounded tenant-owned TikTok delivery-status change and return a single-use approval_ref. This tool never mutates TikTok. Use native ad_group; adset remains an explicit adapter alias.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| entity_refs | Yes | ||
| entity_type | Yes | ||
| ad_account_id | Yes | ||
| target_status | Yes | ||
| idempotency_key | Yes | ||
| rule_id_and_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers meaningful disclosures: never mutates TikTok, returns a single-use approval_ref, and is bounded to tenant-owned entities. These go beyond what the schema reveals. Minor gap: 'bounded' and the validation semantics are not elaborated, but the safety profile (read-only preparation) is well communicated.
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, zero filler, with purpose front-loaded and the entity_type caveat placed at the end. Each sentence earns its place; it is efficient without being under-specified on the points it does cover.
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 7-required-parameter tool with no output schema and no annotations, this is incomplete. The description explains only entity_type, does not clarify the relationship to delivery_status_confirm, and leaves the semantics of run_id, rule_id_and_version, idempotency_key, and entity_refs entirely to the agent's inference. A complex prepare tool needs more.
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 0%, so the description must compensate for all 7 required parameters, but it only addresses entity_type (ad_group vs adset alias). The other six — ad_account_id, entity_refs, target_status, run_id, rule_id_and_version, idempotency_key — receive no explanatory context in either the schema or description, leaving the agent to guess at their meaning and constraints.
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?
States a specific action (validate/prepare a delivery-status change), the resource scope (bounded tenant-owned), and the output (single-use approval_ref). It reads distinctly from delivery_status_confirm and the other prepare tools. The purpose is immediately 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?
Explicitly declares non-mutation, which signals this is a validation/preparation step rather than a committing action, and gives entity_type guidance (native ad_group vs adset alias). However, it never names the natural partner delivery_status_confirm or states 'use this before confirming,' nor does it contrast with bid_prepare/budget_prepare for other change types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_export_csvAInspect
Export insights as CSV. export_mode='grouped' emits per-entity totals over the window; export_mode='daily' emits one row per (date, entity). Requires date_from, date_to, one scope filter (ad_account_id or product_id), and confirm_export=true. Returns an artifact_ref and authenticated download_endpoint valid for one hour (maximum 5 MiB). GET the endpoint on this server with the same tenant Bearer credential; never append credentials to URLs. Attribution: omit or value (TikTok configured window).
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| date_to | No | ||
| group_by | Yes | ||
| date_from | No | ||
| product_id | No | ||
| attribution | No | ||
| export_mode | No | grouped | |
| ad_account_id | No | ||
| confirm_export | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the output format (artifact_ref and download_endpoint), the one-hour expiry, the 5 MiB limit, and authentication requirements. It also explains export_mode behavior. It does not mention side effects beyond the export (e.g., whether it's read-only), but the confirm_export flag suggests it may trigger an operation, yet the description clarifies it returns a download link, which is transparent enough.
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 dense paragraph that front-loads the core purpose and mode behavior. It includes critical usage details (requirements, security) without excessive verbosity. It is well-structured, though it could be slightly more scannable with bullet points, but it earns a 4 for efficiency.
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 tool with 9 parameters, no output schema, and no annotations, the description is quite complete. It covers the required parameters, the response artifact, authentication, and attribution. It omits the date format and does not explain 'search', but these are minor gaps given the overall coverage. An agent can successfully invoke the tool based on this description alone.
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 0%, so the description must compensate. It does explain export_mode, attribution, confirm_export, and the scope filter requirement. However, it does not describe the 'search' parameter or the 'group_by' enum values beyond what the schema already lists. Since the schema provides the enums, the description adds some context but leaves several parameters without additional meaning, resulting in a moderate score.
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: 'Export insights as CSV' and distinguishes the two export modes with specific behavior. It is unambiguous about the resource (insights) and the action (export), and the mode descriptions (grouped vs. daily) differentiate it from other insights tools. The phrase 'Requires date_from, date_to, one scope filter...' further pinpoints its purpose.
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 lists required parameters and the condition confirm_export=true, giving clear 'when to use' instructions. It explains how to consume the download endpoint (GET with tenant Bearer credential) and forbids appending credentials to URLs. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_get_date_rangeAInspect
Returns the min/max stat_date present in cache for the authenticated tenant. Use to bound query_overview windows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the cache-backed nature, tenant scoping, and the returned min/max stat_date. It stops short of describing empty-cache behavior or date formatting, but for a zero-parameter read accessor this is reasonably transparent.
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 short sentences with no filler. The first sentence states the output, and the second sentence gives the practical usage. Every word 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?
For a simple, zero-argument, low-complexity tool with no output schema, the description is complete. It names the return value, the scope, the data source, and the motivating use case, so an agent has enough context to invoke it 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 tool has zero parameters, so there is nothing to document. Per baseline, a parameterless tool receives a 4, and the description appropriately focuses on the returned values rather than inputs.
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 ('Returns') with a precise resource ('min/max stat_date present in cache') and a scope ('for the authenticated tenant'). It clearly communicates what the tool does and differentiates it from the sibling insights_query_* tools by framing it as a boundary discoverer for query_overview.
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 states the intended use: 'Use to bound query_overview windows.' This gives clear context for when to call it, though it does not mention exclusion cases or alternative tools beyond the implicit query_overview relationship.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_pull_insightsAInspect
Async refresh of cached insights from the TikTok Marketing API. Submits one or more pull_tiktok_insights tasks (one per active connection) and returns legacy task_id values. This is the manual refresh compatibility path; Agent Method clients should follow the opaque task_ref returned by insights_query_consistent and consume the terminal result directly.
REQUIRED: none. Optional: days (int 1..90, default 30 — window length, NOT a date pair). EXAMPLE: insights_pull_insights({"days": 7})
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses the key traits: it is async, submits one task per active connection, and returns task_id values rather than the insights themselves. It does not mention potential side effects such as API quota/rate-limit cost or cache invalidation, which is a minor gap for an async refresh operation.
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 dense but every sentence earns its place: purpose/mechanism, the alternative path, the parameter spec, and a concrete example call. It is slightly longer than strictly necessary and could front-load the 'manual refresh compatibility path' note, but nothing is filler.
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 one-parameter async tool with no annotations and no output schema, the description covers purpose, return semantics (task_ids, not data), the alternative path, the parameter spec, and an example. The only missing piece is how to consume the returned task_ids (e.g., via tasks_get_status), which is left implicit.
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 0%, so the description fully compensates by documenting the only parameter: 'days (int 1..90, default 30 — window length, NOT a date pair).' It adds the range, default, and critically disambiguates from the sibling insights_get_date_range tool. This is genuine value added beyond the bare 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+resource: 'Async refresh of cached insights from the TikTok Marketing API,' and clarifies the mechanism (submits pull_tiktok_insights tasks, returns legacy task_id values). It explicitly contrasts itself with insights_query_consistent, so an agent can distinguish it from the query-family siblings without opening their 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 explicit when-not-to-use guidance: 'Agent Method clients should follow the opaque task_ref returned by insights_query_consistent' and names the alternative tool. It labels itself as the 'manual refresh compatibility path.' It stops short of stating when a legacy/manual client would prefer this path over consistent, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_batch_overviewAInspect
Server-side batch overview for comparing multiple explicit scopes. Cache-only read from tiktok_insights_daily; accepts 1 to 20 scopes and avoids client-side concurrent fan-out.
Attribution: omit or use value (TikTok configured window). Custom attribution windows are rejected.
REQUIRED: group_by ∈ {account, campaign, adset, ad}, scopes[] where each scope has date_from, date_to, and one scope filter (ad_account_id or product_id). DATE PARAMS: use date_from / date_to inside each scope (NOT start_date / end_date). EXAMPLE: insights_query_batch_overview({"group_by": "account", "scopes": [{"ad_account_id": "", "date_from": "2026-04-23", "date_to": "2026-04-29"}, {"ad_account_id": "", "date_from": "2026-04-23", "date_to": "2026-04-29"}]})
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| scopes | Yes | ||
| group_by | Yes | ||
| sort_dir | No | desc | |
| sort_key | No | spend | |
| page_size | No | ||
| view_mode | No | grouped | |
| attribution | No | ||
| consistency | No | cached | |
| require_complete_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses meaningful behaviors: cache-only read, server-side execution, 1–20 scope limit, and rejection of custom attribution windows. It does not describe output/pagination or error behavior, which is a minor gap for a read tool.
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 text is front-loaded with purpose, uses labeled REQUIRED/DATE PARAMS/EXAMPLE sections, and includes one useful example without redundant prose. Every sentence adds operational value.
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 10-parameter tool with no output schema and no annotations, it supplies enough to make a correct basic call, including validation constraints and date formats. It does not describe the response shape or explain optional sort/pagination/consistency parameters, so it is strong but not 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?
With 0% schema description coverage, the description compensates for the most critical parameters: group_by, scopes, date_from/date_to, and attribution, plus a full JSON example. However, it omits the valid group_by value 'ad_group' and instructs callers to use product_id even though the schema has no product_id property, weakening its reliability.
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: 'Server-side batch overview for comparing multiple explicit scopes' and adds concrete constraints like 1–20 scopes and cache-only read from tiktok_insights_daily. This clearly distinguishes it from single-scope or row-level insights tools even though it does not name a sibling explicitly.
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 clear usage context: use it for multi-scope comparisons without client-side fan-out, and it provides hard rules for date fields and attribution. It does not explicitly mention alternatives or say when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_consistentAInspect
Canonical Agent Method Profile V1 insight read. Accepts one scope or one server-side batch of up to 20 scopes and returns one ordered compact evidence envelope. TikTok ad_group is accepted natively; adset is only its common-wire adapter alias. Start at page one and follow the server-returned opaque single-use continuation serially when has_more=true. It preserves the original tenant, advertiser, authorization route, dates, grouping, filters, order, effective page size, and source snapshot. Legacy min_as_of is only a freshness lower bound, never a pagination anchor or substitute for continuation/source_snapshot. Each scope requires one tenant-owned ad_account_id; product_ref mapping is not advertised. A wait_ms=0 fresh request has a bounded acknowledgement deadline: poll a returned task_ref, or honor dependency_unavailable backoff once.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| scope | No | ||
| fields | No | ||
| scopes | No | ||
| date_to | Yes | ||
| wait_ms | No | ||
| group_by | Yes | ||
| date_from | Yes | ||
| min_as_of | No | Legacy freshness lower bound only. Never use it as a TikTok pagination anchor; continue pages only with the opaque continuation. | |
| page_size | No | ||
| consistency | No | cached | |
| response_mode | No | compact | |
| date_range_mode | No | explicit | |
| after_mutation_ref | No | ||
| query_contract_version | Yes | ||
| require_complete_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers substantial disclosure: batching limits, the ad_group/adset alias behavior, single-use opaque continuation semantics, the min_as_of freshness-bound constraint, the tenant-owned ad_account_id requirement, and the bounded acknowledgement deadline with dependency_unavailable backoff. This is well beyond typical disclosure for a no-annotation tool. It stops short of stating read-only safety explicitly, though 'insight read' implies it, and the return shape ('evidence envelope') is left underspecified.
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 front-loaded with its core purpose and every sentence adds distinct information, so it is structured rather than padded. However, it is dense with domain jargon — 'Canonical Agent Method Profile V1,' 'common-wire adapter alias,' 'opaque single-use continuation,' 'dependency_unavailable backoff' — which raises cognitive load. It could convey the same guidance in plainer language, and the jargon detracts from readability without adding precision an agent needs.
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 complex 16-parameter tool with no annotations and no output schema, the description covers pagination, batching, alias behavior, and the wait deadline well. But it leaves meaningful gaps: the consistency enum (cached/fresh_if_available/require_fresh) is never explained, the 'evidence envelope' return format is vague, and parameters like require_complete_range, after_mutation_ref, and date_range_mode get no contextual guidance. The coverage is good for the pagination core but incomplete for the full parameter surface.
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 only 6%, so the description must compensate, and it adds real meaning for several high-stakes parameters: scopes/scopes batching (up to 20, one tenant-owned ad_account_id each), min_as_of (legacy lower bound, never an anchor), wait_ms (deadline behavior), and group_by (the adset adapter-alias nuance). But with 16 parameters, many remain unelaborated — consistency enum semantics, fields, date_range_mode, require_complete_range, after_mutation_ref, response_mode — leaving the low-coverage schema only partially compensated.
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-resource pair ('insight read') with concrete scope details: accepts one scope or a server-side batch of up to 20 scopes and returns 'one ordered compact evidence envelope.' This distinguishes it functionally from the continuation tool. However, it never explicitly differentiates itself from sibling readers like insights_query_rows, insights_query_overview, or insights_query_batch_overview, and the opening phrase 'Canonical Agent Method Profile V1' is opaque jargon that adds noise without clarity.
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 real usage guidance: start at page one, follow the server-returned continuation serially when has_more=true, and warns that min_as_of must never be used as a pagination anchor. It also specifies the wait_ms=0 fresh-request deadline with task_ref polling. But it never names alternatives or states when-not-to-use, which matters here given the sibling insights_query_consistent_continue exists for continuation — the description implies continuation but never tells the agent to route subsequent pages to that tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_consistent_continueAInspect
Continue one Agent Method insight read using the opaque tenant-bound continuation returned by the prior page. The server pins every page to the original route, query shape, page size, and source snapshot. The continuation is single-use. Do not pass or synthesize min_as_of; on snapshot_expired or replay rejection, restart the identical page-1 request serially.
| Name | Required | Description | Default |
|---|---|---|---|
| continuation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral burden. It discloses that the continuation is opaque, tenant-bound, single-use, pinned to the original route/query/page size/snapshot, and it specifies error recovery 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 concise sentences, each carrying essential information: the action, the binding constraints, and the error-handling rule. 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?
The description thoroughly covers the continuation semantics, constraints, and failure handling. It does not explicitly describe the return value, but for a pagination-continuation tool the behavior is sufficiently implied by 'continue ... using the continuation returned by the prior page'.
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 input schema provides only name, type, and validation pattern, with no descriptions. The description compensates by explaining the continuation is opaque, tenant-bound, single-use, and must come from the prior page. It provides enough meaning for correct invocation.
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 specific action (continue an insight read) and its resource (Agent Method insight read using the continuation from the prior page). It clearly distinguishes itself from the related starting tool insights_query_consistent by emphasizing pagination continuation.
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 explains when to use this tool: after receiving a continuation from a prior page. It also gives explicit guidance on what not to do (do not pass or synthesize min_as_of) and how to handle failures by restarting the page-1 request serially.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_overviewAInspect
Aggregated insight rows for the authenticated tenant, paginated and sortable. Cache-only read from tiktok_insights_daily — call insights_pull_insights first if data is stale. This legacy common-wire surface maps adset to TikTok's native ad group role.
Attribution: omit or use value (TikTok configured window); custom 1d/7d windows are unsupported. Daily mode returns all day rows in items. result/cost_per_result are separate from conversions/CPA. Metadata describes the latest row within the requested period.
REQUIRED: group_by ∈ {account, campaign, adset, ad}, date_from, date_to, and one scope filter (ad_account_id or product_id). DATE PARAMS: use date_from / date_to (NOT start_date / end_date). EXAMPLE: insights_query_overview({"group_by": "account", "ad_account_id": "", "date_from": "2026-04-23", "date_to": "2026-04-29"})
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| date_to | No | ||
| group_by | Yes | ||
| sort_dir | No | desc | |
| sort_key | No | spend | |
| date_from | No | ||
| page_size | No | ||
| view_mode | No | grouped | |
| management | No | ||
| product_id | No | ||
| attribution | No | ||
| consistency | No | cached | |
| ad_account_id | No | ||
| query_contract_version | No | ||
| require_complete_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses cache-only behavior, legacy common-wire surface mapping adset to TikTok's native ad group role, attribution limitations, daily mode behavior, and metadata semantics. It doesn't mention pagination limits or error behavior, but the disclosed traits are substantial and go well beyond a basic summary.
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 dense but well-structured: a summary sentence, a cache/legacy note, attribution and mode semantics, then REQUIRED/DATE/EXAMPLE blocks. It front-loads the core purpose and uses formatting to make requirements scannable. Slightly long, but every sentence adds value and the structured callouts justify the length.
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 16-parameter tool with no output schema and no annotations, the description covers the essential invocation contract: required fields, date parameter naming, scope filter, attribution constraints, and an example. It doesn't explain the meaning of consistency, require_complete_range, or query_contract_version, and doesn't describe the return shape, but the provided guidance is enough to invoke the tool correctly in the common case.
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 0%, so the description must compensate. It explains the critical semantics: group_by enum values, required date_from/date_to, one scope filter (ad_account_id or product_id), attribution values, and view_mode daily behavior. It doesn't explain every parameter (e.g., consistency, require_complete_range, query_contract_version), but it covers the most decision-critical ones with enough detail to make correct calls.
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 aggregates insight rows for the authenticated tenant, is paginated and sortable, and is a cache-only read from tiktok_insights_daily. It also distinguishes itself from related tools like insights_pull_insights and insights_query_rows by naming them and explaining the relationship.
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 call insights_pull_insights first if data is stale, and notes that attribution custom 1d/7d windows are unsupported. It also provides REQUIRED parameter guidance, DATE PARAMS clarification, and a concrete EXAMPLE, which gives an agent clear when-to-use and how-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_rowsAInspect
Raw insight rows (capped at 5000) for the authenticated tenant. Use for debugging or detail drilldown; query_overview is the main read path.
REQUIRED: date_from, date_to, and one scope filter (ad_account_id or product_id). DATE PARAMS: use date_from / date_to (NOT start_date / end_date). EXAMPLE: insights_query_rows({"ad_account_id": "", "date_from": "2026-04-23", "date_to": "2026-04-29"})
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | ||
| date_from | No | ||
| product_id | No | ||
| ad_account_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the disclosure burden and does well: it reveals the 5000-row cap, tenant scoping, and mandatory filter requirements. It does not describe output structure or pagination beyond the cap, so a small transparency gap remains.
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 purpose is front-loaded, critical requirements are clearly formatted, and the example closes the description. Every line adds functional value with no filler.
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 absence of an output schema and annotations, the description is nearly complete for calling the tool correctly: purpose, cap, tenant, required params, and an example are all present. The main missing piece is what the returned raw rows actually look like, which is a notable gap for a raw-data 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?
Schema coverage is 0%, and the description fully compensates: it marks the required date pair, the exact one-of scope filter condition, warns against wrong date param names, and provides a concrete invocation example. All four parameters are meaningfully explained.
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 resource as 'raw insight rows' capped at 5000 and explicitly contrasts it with query_overview as the main read path. An agent can distinguish this debug/drilldown tool from its siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the intended use ('debugging or detail drilldown'), points to the preferred alternative ('query_overview is the main read path'), and gives required parameter combinations. This is explicit when-to-use guidance with a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interests_archiveAInspect
Archive an existing saved interest pack owned by the authenticated user. Mirrors Meta interests_archive — wire name preserved across products even though TikTok implements this as a hard delete (the TikTok schema does not yet expose a soft-archive status column). After this call the pack no longer appears in interests_list.
REQUIRED: interest_pack_id (str). EXAMPLE: interests_archive({"interest_pack_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| interest_pack_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It explicitly reveals that this is a hard delete (destructive) despite the 'archive' name, explains the naming inconsistency with Meta, and notes the consequence that the pack disappears from interests_list. This is critical, non-obvious information an agent must know.
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 well-structured: main purpose in the first sentence, then important context about the hard-delete behavior, followed by a required-parameter line and an example. The extra context about Meta and TikTok schema is valuable and not redundant. It is slightly verbose but 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?
For a simple one-parameter tool with no output schema, the description covers the core behavioral context: what it does, side effects, and naming rationale. It does not mention error cases or idempotency, but these are not critical for a simple mutation. Overall, it is sufficiently complete for an agent to invoke it 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 coverage is 0%, so the description must compensate. It mentions the required parameter and provides an example, but adds little semantic detail beyond the schema. The parameter name is self-explanatory, and the example is a placeholder. It does not explain what the ID refers to, though that is obvious from context. This is adequate but not enriched.
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 action (archive), the resource (saved interest pack), and ownership (authenticated user). It distinguishes itself from siblings like interests_list by noting the pack disappears from that list after the call. The Meta mirror note adds context without ambiguity.
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?
Usage is implied: if you want to remove an interest pack, use this tool. However, there is no explicit 'use this when' or comparison to alternative tools like interests_delete (which doesn't exist) or interests_save_fetched_pack. It does state a side effect (no longer appears in interests_list), but does not explicitly say 'use this instead of X when Y.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interests_fetch_from_adsetAInspect
Preview a reusable interest pack from one live TikTok adgroup's targeting. Calls /adgroup/get/ + /tool/interest_category/ + /tool/interest_keyword/get/ to resolve category and keyword IDs to human-readable names. Mirrors the Meta sister-product's interests_fetch_from_adset (adset is the MCP wire name for what TikTok calls adgroup — either spelling is accepted).
When name is omitted, returns an unsaved preview only; pass it through to interests_save_fetched_pack to persist. When name IS supplied, fetches and saves in one call.
REQUIRED: advertiser_id (str — TikTok advertiser_id this user owns), adgroup_id OR adset_id (str — TikTok adgroup_id; both names work). OPTIONAL: name (str — when supplied, persists immediately). EXAMPLE: interests_fetch_from_adset({"advertiser_id": "7390000000000000000", "adset_id": "1820000000000000000"})
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| adset_id | No | ||
| adgroup_id | No | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the tool makes multiple API calls, that it can either preview or preview-and-save depending on the `name` parameter, and that the `advertiser_id` must be owned by the user. It does not mention rate limits or failure modes, but for a tool of this complexity the key side effect (persistence) is clearly surfaced.
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 well-structured with clear sections for purpose, behavior, required/optional params, and an example. It is somewhat verbose with the 'Mirrors the Meta sister-product' aside and endpoint lists, but each part contributes to agent comprehension. It is longer than strictly necessary but not bloated.
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 description covers how to invoke the tool, parameter constraints, and side effects, but there is no output schema and the description does not describe the shape or contents of the returned preview. It also does not explain what happens if neither adgroup_id nor adset_id is supplied, even though it advertises them as required. This is a meaningful gap for correct use.
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 0%, so the description is the only source of parameter meaning. It explains every parameter: advertiser_id is a TikTok advertiser the user owns, adgroup_id and adset_id are interchangeable names for the same TikTok adgroup, and name controls persistence. The either-or relationship between adgroup_id and adset_id is explicitly stated, which the schema alone does not convey.
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: 'Preview a reusable interest pack from one live TikTok adgroup's targeting.' It also clarifies its internal behavior (calls three endpoints to resolve IDs). However, it does not explicitly distinguish itself from siblings like interests_get or interests_list, only mentions interests_save_fetched_pack as a follow-up, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: when `name` is omitted it returns an unsaved preview, and when supplied it fetches and saves. It also states required vs. optional parameters and provides a concrete example. It does not, however, tell the agent when to prefer this tool over sibling interest tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interests_getAInspect
Get one saved interest pack owned by the authenticated user by interest_pack_id. Mirrors Meta interests_get. Returns both TikTok-native (source_adgroup_id) and Meta-wire (source_adset_id) keys on the same row so portable agents reading either name work unchanged.
REQUIRED: interest_pack_id (str — UUID from interests_list). EXAMPLE: interests_get({"interest_pack_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| interest_pack_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly signals a read-only operation ('Get') and adds useful behavioral detail about returning both source_adgroup_id and source_adset_id keys. It doesn't mention error cases or permission specifics, but for a simple fetch this is sufficient.
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: purpose, key behavioral guarantee, then required parameter and example. Every sentence earns its place, with no filler or repetition.
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 one-parameter read tool with no output schema, the description covers purpose, parameter provenance, and the notable dual-key return behavior. It doesn't detail the full response shape or error conditions, leaving minor ambiguity but no critical gap for basic usage.
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 only says the parameter is a string and provides no description. The tool description compensates by declaring it REQUIRED, specifying it is a UUID from interests_list, and showing a concrete invocation example.
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 ('Get one saved interest pack owned by the authenticated user') on a specific resource identified by interest_pack_id. It also distinguishes itself from siblings like interests_list and interests_fetch_from_adset by emphasizing single-item retrieval by ID.
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 clear context: use this when you have a specific interest_pack_id from interests_list, and it provides an explicit example call. It doesn't explicitly name when not to use it or compare alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interests_listAInspect
List saved interest packs (reusable audience targeting bundles) for the authenticated user. The wire name is shared, but rows retain TikTok-native targeting semantics.
REQUIRED: none. EXAMPLE: interests_list({})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It notes the wire name is shared but rows retain TikTok-native targeting semantics, adding useful context. The verb 'List' implies read-only, and it states 'for the authenticated user', indicating auth scope. However, it does not explicitly declare non-destructive behavior, nor mention pagination or return format, leaving moderate gaps.
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 plus a required note and an example. The core purpose is front-loaded, and the extra semantics note and example are placed after. No wasted words, and the structure aids quick comprehension.
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 zero-parameter list tool, the description covers the core purpose, the user scope, and provides an example. It does not detail the return structure or pagination, but since there is no output schema and the tool is straightforward, this is acceptable. The note about TikTok-native semantics adds depth.
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 input schema is empty (0 parameters), and schema description coverage is 100% trivially. The description explicitly states 'REQUIRED: none' and provides an example call, which clarifies that no arguments are needed. This adds value beyond the empty schema, aligning with the baseline for zero-parameter tools.
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?
States the exact verb 'List', the resource 'saved interest packs', and clarifies they are 'reusable audience targeting bundles'. It clearly differentiates from sibling tools like interests_get (single fetch) and interests_archive by specifying 'saved' and the listing scope.
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 makes the usage context explicit: it lists all saved interest packs for the authenticated user. While it does not name alternative tools or exclusions, the purpose is clear enough that an agent knows to use this when it wants to enumerate saved packs, not for fetching a specific one or archiving.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interests_save_fetched_packAInspect
Fetch one live TikTok adgroup's interest targeting and save it as a reusable interest pack. Mirrors Meta interests_save_fetched_pack (adset is the MCP wire name for what TikTok calls adgroup — either spelling is accepted). Equivalent to calling interests_fetch_from_adset with name supplied, but matches the Meta two-step flow so portable agent code stays identical.
REQUIRED: advertiser_id (str), name (str, the saved pack's label), adgroup_id OR adset_id (str — TikTok adgroup_id; both names work). EXAMPLE: interests_save_fetched_pack({"advertiser_id": "7390000000000000000", "adset_id": "1820000000000000000", "name": "VN broad interests"})
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| adset_id | No | ||
| adgroup_id | No | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states that the tool fetches and saves, implying a write operation, and clarifies the alias between adset_id and adgroup_id. It does not explicitly mention side effects like overwriting existing packs, return values, or error conditions, but the core behavior is well explained. Minor gaps prevent a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it states purpose, the equivalence to a sibling, the Meta mirroring rationale, required parameters, and an example. It is front-loaded with the core purpose and uses a clear structure (description, requirements, example) without fluff.
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's complexity (combined fetch+save, alias handling, Meta mirroring), the description covers the essential usage points. It does not mention what the tool returns or error behaviors, and there is no output schema to fill that gap. However, for the primary purpose of enabling correct invocation, it is nearly complete, missing only minor return/error details.
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 0%, so the description must compensate. It explicitly enumerates required parameters (advertiser_id, name) and explains that either adgroup_id or adset_id works, clarifying that adset_id is the TikTok adgroup identifier under a different wire name. The example further illustrates the expected format, fully covering parameter 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 opens with a precise verb+resource statement: 'Fetch one live TikTok adgroup's interest targeting and save it as a reusable interest pack.' It clearly differentiates from the sibling interests_fetch_from_adset by noting it is equivalent to that call with a name supplied, and it explicitly references the Meta flow. The purpose is unambiguous and distinct.
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 explicit guidance on when to use this tool versus the alternative: 'Equivalent to calling interests_fetch_from_adset with `name` supplied, but matches the Meta two-step flow so portable agent code stays identical.' It also lists required parameters and provides a concrete example, making usage conditions clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_connectAInspect
Create one new MMP connection and run the initial app + event-mapping metadata sync. WRITE — call is IMMEDIATE and synchronous (~5-15s while we round-trip AppsFlyer); the new connection appears in mmp_get_state on the next call. AppsFlyer Personal API Token v2 only (paste flow — no OAuth, no callback). Raw api_token leaves the TikTok process here and is forwarded to Meta over loopback; it is never persisted on the TikTok side. Call only after the user explicitly requests the connection and supplies the token; this legacy proxy has no mutation-receipt capability. Mirror of Meta MCP mmp_connect.
REQUIRED: provider (str — currently only "appsflyer" is supported), api_token (str — the AppsFlyer Personal API Token v2 string). EXAMPLE: mmp_connect({"provider": "appsflyer", "api_token": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | ||
| api_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden and succeeds: it discloses that this is a WRITE, that it is immediate and synchronous (~5-15s), that the token is forwarded to Meta over loopback and never persisted, and that the connection appears in mmp_get_state on the next call. It also notes the lack of mutation-receipt capability.
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 dense but front-loaded with the core purpose, and every additional sentence earns its place by covering side effects, security handling, timing, and prerequisites. The REQUIRED and EXAMPLE sections make the parameters unambiguous without bloat.
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 mutating tool with no annotations and no output schema, the description is remarkably complete: it explains when to call, what happens, how long it takes, where the result is observed, what token format is required, and the limitation on mutation receipts. The agent can invoke it correctly with no external inference.
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 0%, so the description fully compensates: it specifies that provider currently supports only 'appsflyer', defines api_token as the AppsFlyer Personal API Token v2, and provides a concrete JSON example. This gives the agent more meaning than the bare string properties in 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 opens with a specific verb and resource: 'Create one new MMP connection' plus the initial metadata sync. It is clearly differentiated from siblings by the explicit 'new connection' wording and by naming the outcome in mmp_get_state, so it cannot be confused with mmp_refresh_connection or mmp_delete_connection.
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 explicit call conditions, 'Call only after the user explicitly requests the connection and supplies the token,' and explains the synchronous nature and lack of mutation receipt. It does not name an alternative tool explicitly, but the prerequisite and scope are clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_delete_connectionAInspect
Delete one existing MMP connection by connection_id. WRITE — call is IMMEDIATE and IRREVERSIBLE; Meta cascades the delete to mmp_apps + cohort_configs + cached cohort rows. To re-add, call mmp_connect with the AppsFlyer token again. Show the exact target, obtain explicit user confirmation in the current interaction, call once, and never retry an uncertain outcome. No mutation receipt is advertised. Mirror of Meta MCP mmp_delete_connection.
REQUIRED: connection_id (str — UUID from mmp_get_state). EXAMPLE: mmp_delete_connection({"connection_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and meets it thoroughly. It states the operation is a WRITE, immediate, irreversible, cascades to mmp_apps, cohort_configs, and cached cohort rows, and warns that no mutation receipt is advertised. This goes well beyond basic schema information.
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 information-dense but every sentence serves a purpose: purpose, behavioral warnings, safety instructions, re-add path, and parameter example. The critical destructive nature is front-loaded, and the REQUIRED/EXAMPLE formatting makes the parameter contract unambiguous.
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 destructive, one-parameter tool with no output schema, the description is complete. It explains the input source, the irreversible consequences, the retry rule, and the lack of a receipt, so an agent has everything needed to call it correctly and avoid harmful repetition.
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 0%, so the description must fully compensate. It does: it names connection_id as required, specifies its type as string UUID, tells the agent where to obtain it (from mmp_get_state), and provides a concrete JSON example. This is complete semantic coverage for the single parameter.
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: 'Delete one existing MMP connection by connection_id.' It also distinguishes the operation from related siblings by explicitly noting that re-adding requires mmp_connect, so the agent can tell this tool apart from mmp_refresh_connection and mmp_get_state.
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 explicit when-to-use and safety guidance: it says to show the exact target, obtain explicit user confirmation, call once, and never retry an uncertain outcome. It also names the alternative for reverting the action (call mmp_connect with the AppsFlyer token again), which makes the usage boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_fetch_cohortsAInspect
Fetch and persist cohort rows for one app under one MMP connection. WRITE — call is SYNCHRONOUS and can take 30-60s (Meta calls AppsFlyer in the same thread; loopback timeout is 90s). date_from / date_to range cannot exceed 31 days (AppsFlyer cohort API cap). Treat this as an explicit read refresh, never an onboarding side effect. Mirror of Meta MCP mmp_fetch_cohorts.
REQUIRED: connection_id (str — UUID), app_ref (str), date_from (str, YYYY-MM-DD), date_to (str, YYYY-MM-DD). DATE PARAMS: use date_from / date_to (NOT start_date / end_date), range ≤ 31 days. Optional: selected_source_refs (list[str] — override the config's source list for this fetch only). EXAMPLE: mmp_fetch_cohorts({"connection_id": "", "app_ref": "ai.hailuo.video", "date_from": "2026-04-12", "date_to": "2026-05-12"})
| Name | Required | Description | Default |
|---|---|---|---|
| app_ref | Yes | ||
| date_to | Yes | ||
| date_from | Yes | ||
| connection_id | Yes | ||
| selected_source_refs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it flags 'WRITE' and 'SYNCHRONOUS' behavior, warns about the 30-60s runtime and 90s loopback timeout, explains the underlying thread call to AppsFlyer, and states the 31-day API cap. This is exemplary disclosure beyond what a schema could convey.
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 dense but every sentence earns its place, moving from the most critical behavioral warning first, then required params, then caveats, then an example. The block-structured formatting and sparing use of emphasis make the key constraints scannable. No filler.
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?
Despite high complexity and no annotations/output schema, the description covers purpose, mutation behavior, timing, timeout, API limits, parameter semantics, an anti-pattern, and a complete invocation example. An agent has everything needed to decide correctly and construct valid arguments. Missing return-format details are minor for selection and 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 0%, so the description must supply parameter meaning, and it does thoroughly: connection_id is specified as UUID, date_from/date_to are pinned to YYYY-MM-DD, the 'NOT start_date / end_date' naming is explicitly forbidden, and selected_source_refs is explained as a per-fetch override. The included JSON example solidifies the expected shape.
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-resource pair — 'Fetch and persist cohort rows for one app under one MMP connection' — which clearly delimits the tool's scope and distinguishes it from generic fetch or config tools. It also labels itself a 'Mirror of Meta MCP mmp_fetch_cohorts,' reinforcing its exact identity among the mmp_* 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 description provides clear context and constraints: use only as an explicit read refresh, never as an onboarding side effect, and only for date ranges ≤ 31 days. It does not explicitly name alternative tools or when to prefer them (e.g., mmp_refresh_connection or mmp_save_cohort_config), so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_get_stateAInspect
List MMP connections, synced app metadata, and cohort configs for the current user. Returns {connections, metadata_by_connection, cohort_configs_by_connection}. TikTok and Meta share one mmp_connections row keyed by auth.users.id, so this returns the same data the user would see on adsagent.md/dashboard/mmp. Mirror of Meta MCP mmp_get_state.
Call this BEFORE mmp_save_cohort_config or mmp_fetch_cohorts to discover valid connection_id + app_ref + kpi event names. Typing a kpi that the AppsFlyer app doesn't send silently returns zero rows.
REQUIRED: nothing. EXAMPLE: mmp_get_state({})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the exact return shape, the shared-row detail between TikTok and Meta, that it mirrors the dashboard view, and the silent-zero-rows failure mode. The word 'List' and the tool name also make the read-only nature clear.
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 front-loaded with purpose, followed by behavioral nuance, usage sequencing, and a required/example block. Every sentence adds value, and there is no filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete: it explains what is returned, the cross-provider sharing behavior, when to call it relative to siblings, and the main failure mode. An agent has everything it needs 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?
The tool has zero parameters, so there is little for the description to add beyond the schema. The description reinforces this with 'REQUIRED: nothing' and a concrete example call, mmp_get_state({}), which is useful for confirming no arguments are needed.
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 MMP connections, synced app metadata, and cohort configs for the current user.' It also disambiguates itself by noting it returns cohort configs rather than cohort data and explicitly calls itself a mirror of Meta's mmp_get_state, making it distinct from siblings like mmp_fetch_cohorts.
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 call this BEFORE mmp_save_cohort_config or mmp_fetch_cohorts to discover valid connection_id, app_ref, and KPI event names. It also warns that typing an unsupported KPI silently returns zero rows, giving the agent concrete guidance on when and why 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.
mmp_insights_get_product_event_todayAInspect
Read today's AppsFlyer count, unique-user, and revenue aggregate for one saved product and event, scoped by the server to channel_pid=tiktokglobal_int. The Meta-owned product/MMP service remains the single source of truth; this TikTok tool is a tenant-bound loopback adapter. It does not perform client-side fan-out.
REQUIRED: product_id (from products_list), event_name (from products_get_actions). Optional breakdown: country, placement, campaign, adset, or ad. adset is the AppsFlyer source field and maps to TikTok's native ad_group role; it is not a Meta ad set.
EXAMPLE: mmp_insights_get_product_event_today({"product_id": "", "event_name": "purchase"})
| Name | Required | Description | Default |
|---|---|---|---|
| breakdown | No | ||
| event_name | Yes | ||
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It reveals that this is a tenant-bound loopback adapter, that the Meta-owned MMP service is the source of truth, that the server scopes to a fixed channel_pid, and it clarifies the potentially confusing 'adset' mapping. It does not mention rate limits, data freshness, or error behavior, but for a read operation the key behavior is well disclosed.
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 dense yet efficient. It front-loads the core purpose, adds essential context (adapter, scope, fan-out disclaimer), then provides requirements and an example. Every sentence adds value, and the structure guides the reader logically.
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's simplicity (read operation, 3 parameters, no output schema), the description covers all essential aspects: purpose, parameter provenance, breakdown options, and a usage example. It lacks edge-case guidance (e.g., behavior when no data exists for today), but that is a minor gap for a read-only aggregate endpoint.
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 0%, so the description must compensate. It does so fully: it gives provenance for product_id and event_name, lists all breakdown enum values, and explains the adset nuance ('maps to TikTok's native ad_group role; it is not a Meta ad set'). The example further clarifies the expected payload.
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 ('Read'), a specific resource ('today's AppsFlyer count, unique-user, and revenue aggregate for one saved product and event'), and a precise scope ('scoped by the server to channel_pid=tiktokglobal_int'). It explicitly differentiates from siblings by noting 'It does not perform client-side fan-out', making its purpose 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?
It provides strong usage context: where to obtain required parameters ('product_id (from products_list), event_name (from products_get_actions)'), the optional breakdown options, and a concrete example invocation. It implies exclusions via the adapter/fan-out note, but does not name alternative tools explicitly or state conditions when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_insights_query_product_event_summaryAInspect
Read AppsFlyer count, unique-user, and revenue aggregates for one saved product/event over an inclusive range of at most 90 days. The server fixes channel_pid=tiktokglobal_int and delegates to the Meta-owned product/MMP service, preserving its completeness and source-coverage fields. Do not fan out by date or channel.
REQUIRED: product_id, event_name, date_from, date_to. DATE PARAMS use YYYY-MM-DD. Optional breakdown: country, placement, campaign, adset, or ad. adset is an AppsFlyer adapter field for TikTok's native ad_group role.
EXAMPLE: mmp_insights_query_product_event_summary({"product_id": "", "event_name": "purchase", "date_from": "2026-07-01", "date_to": "2026-07-07"})
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | ||
| breakdown | No | ||
| date_from | Yes | ||
| event_name | Yes | ||
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden itself: it establishes a read operation, discloses the fixed channel_pid, explains delegation to the Meta-owned MMP service, and says completeness/source-coverage fields are preserved. It stops short of describing response shape or auth/rate limits, but the main side-effect and scoping behaviors are covered.
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?
Every sentence earns its place: scope, server behavior, constraints, required/optional parameters, and a full example. The REQUIRED/EXAMPLE formatting makes critical invocation details scannable without bloating the description.
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 five-parameter read tool with no output schema, the description provides enough to invoke correctly: parameters, date format, breakdown enum, range limits, and an example. It omits lower-stakes context such as error cases and response-level details, but the returned aggregate types are already named.
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 0%, and the description compensates thoroughly: it lists required parameters, specifies YYYY-MM-DD dates, enumerates the optional breakdown choices, explains that adset maps to TikTok's native ad_group role, and adds the inclusive at-most-90-day constraint. The example also demonstrates exact invocation syntax.
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: 'Read AppsFlyer count, unique-user, and revenue aggregates for one saved product/event over an inclusive range of at most 90 days.' It also distinguishes scope by noting the server fixes channel_pid=tiktokglobal_int and instructing not to fan out by date or channel.
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 clearly frames intended use: a single saved product/event summary with a max 90-day range, required parameters, and an explicit 'do not fan out' constraint. It doesn't name sibling alternatives, but the stated constraints are enough to route an agent to this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_refresh_connectionAInspect
Refresh one existing MMP connection by connection_id — re-fetches AppsFlyer app list + event mappings and updates the cached metadata. WRITE — call is IMMEDIATE and synchronous (~5-10s while AppsFlyer responds). Use after the user adds/removes apps or changes Sending Events in AppsFlyer, and only on explicit user request. This legacy proxy has no mutation receipt. Mirror of Meta MCP mmp_refresh_connection.
REQUIRED: connection_id (str — UUID from mmp_get_state connections[*].id).
EXAMPLE: mmp_refresh_connection({"connection_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation is a WRITE, is immediate and synchronous (~5-10s), updates cached metadata, and explicitly warns that this legacy proxy has no mutation receipt. This is exceptionally transparent for a tool with zero annotation coverage.
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: action, effect, timing, use case, and a warning all appear within the first two sentences. The required parameter and example are clearly formatted at the end. No sentences are wasted.
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-parameter write tool, the description covers what, when, how, and the parameter source. The only missing element is what the tool returns (though 'no mutation receipt' implies it does not return a confirmation). This is a minor gap given the absence of an 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 0%, so the description must fully explain the parameter. It states connection_id is required, is a string UUID, and gives the exact source (mmp_get_state connections[*].id) plus an example invocation. This fully compensates for the absent parameter documentation.
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 ('Refresh') and resource ('existing MMP connection') and includes the exact scope ('by connection_id'). It clearly distinguishes from siblings like mmp_connect and mmp_delete_connection by stating it refreshes an existing connection rather than creating or deleting one.
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 explicit conditions for use: 'after the user adds/removes apps or changes Sending Events in AppsFlyer' and 'only on explicit user request.' It does not name alternative tools that might also refresh assets (e.g., assets_refresh_all), but the per-connection scope and user-request requirement make the usage boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_save_cohort_configAInspect
Save one cohort config for a specific app under one MMP connection. WRITE — call is IMMEDIATE; the new config drives the next scheduled cohort pull. kpis should be picked from the app's Sending Events — call mmp_get_state first and inspect each metadata row's event_mappings / mapped_events for valid event names. Typing a kpi that the AF app doesn't send silently returns zero rows. Call only for an explicit user-requested config change; no mutation receipt is advertised. Mirror of Meta MCP mmp_save_cohort_config.
REQUIRED: connection_id (str — UUID from mmp_get_state), app_ref (str — the AF app reference, e.g. "ai.hailuo.video" for Android, "id6741675037" for iOS). Optional config fields (any subset; unset = leave existing value alone): cohort_type, min_cohort_size, selected_source_refs (list[str]), preferred_timezone, preferred_currency, partial_data, aggregation_type, period_filters (list[int]), groupings (list[str]), kpis (list[str]). EXAMPLE: mmp_save_cohort_config({"connection_id": "", "app_ref": "ai.hailuo.video", "kpis": ["ug_new_user_payment"], "selected_source_refs": ["tiktokglobal_int"]})
| Name | Required | Description | Default |
|---|---|---|---|
| kpis | No | ||
| app_ref | Yes | ||
| groupings | No | ||
| cohort_type | No | ||
| partial_data | No | ||
| connection_id | Yes | ||
| period_filters | No | ||
| min_cohort_size | No | ||
| aggregation_type | No | ||
| preferred_currency | No | ||
| preferred_timezone | No | ||
| selected_source_refs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: it states the call is immediate, affects the next scheduled pull, silently returns zero rows for invalid kpis, and does not advertise a mutation receipt. It also explains that unset optional fields leave existing values unchanged. This covers the key behavioral traits an agent needs to know.
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 well-structured: opening purpose, behavioral notes, required params, optional fields, and an example. Every sentence adds value, and the most critical information (purpose and immediacy) is front-loaded. It is detailed but not verbose.
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 complexity (12 params, no output schema, no annotations), the description covers everything needed: prerequisites, parameter semantics, behavioral expectations, and a concrete example. It even sets expectations about the lack of a receipt. An agent can call this tool correctly without additional documentation.
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 0%, so the description must compensate. It does: it lists required parameters with types and examples (connection_id as UUID from mmp_get_state, app_ref with Android/iOS examples), explains optional fields with types (list[str], list[int], boolean), and clarifies the 'unset = leave existing value alone' semantics. A full example call is provided.
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 purpose: 'Save one cohort config for a specific app under one MMP connection.' It uses a specific verb (save) and resource (cohort config) and distinguishes it from siblings like mmp_get_state or mmp_fetch_cohorts. It also labels it as WRITE and IMMEDIATE, making its role 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 provides explicit usage guidance: 'Call only for an explicit user-requested config change.' It also gives a clear prerequisite: 'call mmp_get_state first and inspect each metadata row's event_mappings / mapped_events for valid event names.' This tells the agent exactly when and how to prepare, and it warns against misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notifications_listAInspect
List bounded tenant-owned TikTok in-app optimization notifications. This capability does not advertise external webhook delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries behavioral disclosure. It explicitly states that the tool only lists bounded tenant-owned notifications and does not advertise external webhook delivery, preventing false expectations. It does not mention auth or output details, but the non-webhook disclosure is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main action and scope are front-loaded, and the webhook clarification is a single additional sentence that 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?
For a simple list tool with two optional parameters, this is adequate, but the lack of annotations and output schema leaves return shape, pagination, and permission context unspecified. The description covers the tool's boundary but not its full operational context.
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 0%, so the description needed to compensate, but it does not explain limit or state beyond what the schema already shows. The schema provides types, defaults, and the unread/read enum, yet the description adds no parameter-level meaning.
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 a clearly scoped resource ('bounded tenant-owned TikTok in-app optimization notifications'). It also clarifies the notification domain and avoids confusion with notifications_mark_read.
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 useful context, especially the 'does not advertise external webhook delivery' exclusion, but it does not explicitly name alternatives like notifications_mark_read or state conditions for when to choose this tool over siblings. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notifications_mark_readAInspect
Mark one owned TikTok in-app notification as read.
| Name | Required | Description | Default |
|---|---|---|---|
| notification_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the only source of behavioral disclosure. It correctly signals a mutating action and an ownership constraint, but it does not explain side effects, idempotency, authentication requirements, error behavior, or what happens to unread state. These are notable gaps for a state-changing tool.
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?
A single front-loaded sentence with no filler. Every word carries meaning: 'one', 'owned', 'TikTok in-app notification', and 'as read' define the scope and action precisely.
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 one-parameter mutation tool this is minimally adequate: it names the object and the state change. However, it omits how the notification_ref is obtained, any response expectations, and error/failure semantics, which would make the tool fully self-contained.
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 0%, and the description adds only that the parameter refers to an owned TikTok in-app notification. That is useful context beyond the raw notification_ref schema, but it does not explain how to obtain a valid reference (e.g., via notifications_list) or otherwise help populate the value, so compensation is only partial.
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 ('Mark') with a clear object ('one owned TikTok in-app notification') and outcome ('as read'). It is immediately distinguishable from the sibling notifications_list, which lists rather than mutates.
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 intended use is clear: mark a single owned notification read. It does not explicitly name alternatives or when not to use it, but the action is unambiguous and the sibling list tool is easily inferred as the opposite operation, providing clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operations_getAInspect
Read or safely recover a bounded TikTok write receipt by the canonical operation_ref returned by create or delivery confirmation. The legacy mutation_ref argument remains accepted for older delivery-status clients; pass exactly one reference. Recovery uses TikTok getters on the exact original tenant, advertiser, and authorization route. It never replays a write or name-matches an uncertain result.
| Name | Required | Description | Default |
|---|---|---|---|
| mutation_ref | No | ||
| operation_ref | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses safety guarantees ('never replays a write or name-matches an uncertain result') and explains the recovery route ('exact original tenant, advertiser, and authorization route'). It omits error/rate-limit details but covers the main behavioral risks.
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?
Four dense sentences with no filler; the purpose and the critical one-reference constraint are front-loaded. The terminology is technical but every clause 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?
For a two-parameter read tool with no output schema and no annotations, the description covers reference selection, legacy compatibility, and safety behavior. It could mention the return shape or not-found handling, but the agent has enough to invoke the 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 coverage is 0%, and the description fully compensates by explaining the semantic difference between operation_ref (canonical, returned by create/delivery confirmation) and mutation_ref (legacy, for older clients). It also adds the exclusivity rule 'pass exactly one reference' that the optional schema fields do not convey.
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?
States a specific action ('Read or safely recover') on a bounded resource ('TikTok write receipt') and identifies the key reference ('canonical operation_ref'). It doesn't explicitly differentiate from sibling status/read tools, but the operation is unmistakable from the description.
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?
Provides concrete input-selection guidance: 'pass exactly one reference', and clarifies that mutation_ref is legacy for older delivery-status clients while operation_ref is the canonical reference from create/delivery confirmation. It does not compare against sibling tools like tasks_get_status, but the argument-level guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_dismiss_decisionCInspect
Dismiss one open tenant-owned recommendation without mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| decision_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It says 'without mutation,' which is confusing given that 'dismiss' typically implies a state change; this contradiction is not clarified. It does not disclose side effects, required permissions, reversibility, or what happens to the recommendation after dismissal. This is a significant gap for a tool that likely mutates some state.
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, which is concise and front-loads the action. However, it lacks structure (no separate sections) and does not include critical details like parameter guidance or workflow context. While brevity is appreciated, the content is too sparse to be effective.
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's role in an optimization workflow alongside siblings like optimization_prepare_action and optimization_list_decisions, the description is woefully incomplete. It does not explain how this tool fits into the workflow, where decision_ref comes from, or what happens after dismissal. There is no output schema, so the agent has no expectation of the return value. This is inadequate for an agent to invoke it 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 has one required parameter, decision_ref, with a pattern and length constraints but no description. The tool description does not mention this parameter at all, providing no additional meaning about its format, purpose, or how to obtain a valid value. Since schema description coverage is 0%, the description should compensate, but it does not.
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 (dismiss) on a specific resource (recommendation) with qualifiers ('open', 'tenant-owned'). This is a clear verb+resource pairing that differentiates from siblings like optimization_evaluate or optimization_list_decisions, though it does not explicitly name them. The purpose is reasonably clear, but the phrasing 'without mutation' introduces slight ambiguity that could confuse the agent about the action's actual effect.
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 guidance on when to use this tool versus alternatives such as optimization_prepare_action or optimization_list_decisions. There is no mention of workflow context, prerequisites, or situations where this tool should be chosen over others. An agent is left to infer its role solely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_evaluateAInspect
Evaluate one owned TikTok advertiser from complete, fresh cached ledger evidence and persist bounded read-only recommendations. This never mutates TikTok. Choose native campaign or ad_group; do not use Meta adset fields. A pause candidate requires an explicit advertiser-currency max_cost_without_conversion. Budget scaling is capped at 30 percent and remains only a recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | ||
| group_by | Yes | ||
| date_from | Yes | ||
| target_roas | Yes | ||
| advertiser_id | Yes | ||
| min_conversions | No | ||
| budget_increase_percent | No | ||
| max_cost_without_conversion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the tool 'never mutates TikTok' and that recommendations are 'bounded read-only', which is critical behavioral context. It also discloses that budget scaling is 'capped at 30 percent' and 'remains only a recommendation', preventing the agent from assuming the tool executes changes. The only minor gap is that it doesn't specify what the persisted recommendations look like or how they are returned, but the core behavioral traits are well covered.
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 four sentences, each earning its place. The first sentence states the core action and scope, the second clarifies the non-mutating behavior, the third gives a specific condition for pause candidates, and the fourth caps budget scaling. It is front-loaded with the most important information and contains no filler or repetition of schema fields.
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's complexity (8 parameters, 5 required, no output schema, no annotations), the description covers the most critical operational constraints: the non-mutating nature, the campaign/ad_group choice, the pause-candidate requirement, and the budget cap. It does not explain the return format or how recommendations are persisted, but the description is strong enough for an agent to invoke the tool correctly in most cases. The missing parameter semantics for target_roas and min_conversions are a minor 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 description coverage is 0%, so the description must compensate for the schema's lack of parameter documentation. It does so by explaining the key semantic constraints: 'max_cost_without_conversion' is tied to a pause candidate and must be in advertiser currency, and 'budget_increase_percent' is implicitly capped at 30. It also clarifies that 'group_by' should be 'campaign' or 'ad_group' and not Meta adset fields. However, it doesn't explain 'target_roas', 'min_conversions', or the date range parameters, so it doesn't fully compensate for the 0% 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 opens with a specific verb ('Evaluate'), a precise resource ('one owned TikTok advertiser'), and a clear source ('complete, fresh cached ledger evidence'). It also states the output ('persist bounded read-only recommendations') and explicitly distinguishes itself from Meta adset fields, which is a strong differentiator given the sibling list contains many TikTok and Meta-related tools. The phrase 'never mutates TikTok' further clarifies its non-destructive nature, making the purpose unmistakable.
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 explicit when-to-use guidance: 'Choose native campaign or ad_group; do not use Meta adset fields.' It also gives a concrete condition for a pause candidate ('requires an explicit advertiser-currency max_cost_without_conversion') and a constraint on budget scaling ('capped at 30 percent'). This is more than enough for an agent to decide when to invoke this tool versus alternatives like optimization_prepare_action or optimization_list_decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_list_decisionsBInspect
List tenant-owned TikTok optimization recommendations. Decisions contain source snapshot and evidence coverage; they are not proof that any mutation occurred.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It adds a meaningful caveat: decisions are not proof of mutation, which prevents the agent from misinterpreting the data. However, it does not explicitly state that this is a read-only operation (e.g., 'This call does not modify any data'), leaving the agent to infer from the verb 'List'. The caveat is useful but not comprehensive.
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 sentences with no redundancy. The primary purpose is front-loaded, and the caveat about evidence coverage is appended logically. Every word earns its place; it is concise and well-structured.
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 no annotations, no output schema, and 0% schema description coverage, the description should provide more context. It covers the core purpose and data semantics but omits parameter explanations, any statement about side effects (read-only vs. mutation), and return format details. For an agent to call this correctly, it would need to guess about the meaning of status values and the response shape, making the description incomplete.
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 0%, and the description does not mention the parameters 'limit' or 'status' at all. The names hint at their purpose (a count limit and a status filter), but the status enum values (open/prepared/dismissed) are unexplained, and there is no guidance on how limit behaves (e.g., default or max). The description fails to compensate for the schema's lack of parameter documentation.
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 a clear resource 'tenant-owned TikTok optimization recommendations', scoped to tenant ownership. It also clarifies the nature of the data ('source snapshot and evidence coverage'), which distinguishes it from action-oriented siblings like optimization_dismiss_decision or optimization_prepare_action. The purpose 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 description implies this tool is for viewing recommendations rather than acting on them, and the sibling names (dismiss, prepare, evaluate) suggest alternatives. However, it does not explicitly state when to use this vs. those tools, nor provide exclusions or conditions. The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimization_prepare_actionAInspect
Prepare the exact management action for one open owned decision. The server performs a fresh native TikTok read on the original advertiser route. Show the sanitized approval and obtain explicit confirmation with the returned delivery_status_confirm or budget_confirm tool. Never auto-confirm or replay uncertainty.
| Name | Required | Description | Default |
|---|---|---|---|
| decision_ref | Yes | ||
| idempotency_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the server performs a fresh native TikTok read on the original advertiser route, presents a sanitized approval, and forbids auto-confirmation or replay of uncertainty, which is meaningful behavioral context. It omits error behavior and side effects, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences front-load the purpose and add behavioral constraints, with no filler. Some jargon like 'sanitized approval' and 'replay uncertainty' is not fully unpacked, so it is concise but not maximally clear.
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 description covers the preparation workflow, fresh read behavior, confirmation requirement, and next tool family, which is substantial context. However, with no annotations and no output schema, it still lacks parameter semantics, decision eligibility details and idempotency behavior, leaving notable gaps for a two-parameter 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?
Schema description coverage is 0%, so the description must compensate, but it only implicitly maps decision_ref to 'one open owned decision' and never explains idempotency_key semantics or the decision_ref format. The description alone is insufficient to understand the two required parameters.
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: 'Prepare the exact management action for one open owned decision.' It further differentiates itself by noting the result is a sanitized approval that must be confirmed via returned delivery_status_confirm or budget_confirm tool, so an agent can distinguish preparation from confirmation.
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 clear workflow guidance: prepare first, then obtain explicit confirmation via the returned confirm tool, and never auto-confirm or replay uncertainty. It does not explicitly contrast it with optimization_list_decisions or replacement tools, but the sequencing versus confirmation siblings is explicit enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overview_get_live_configsAInspect
Read allowlisted current TikTok configuration for up to 50 tenant-owned campaigns, native ad groups, or ads in one server-side request. Returns configured and effective status, advertiser-currency budget/bid, objective, optimization, billing, schedule, Smart+, Spark, format, and source coverage when TikTok exposes them. configured includes actual parent IDs, app_id, optimization_event and schedule times; ad configured.creative preserves actual copy, ordered text/CTA variants, video/image references and music. Check null values and readback_omitted_fields/creative.omitted_fields before comparing with an approved draft; complete means entity coverage, not field equality. For a response_budget_exceeded entity, follow its exact-ID next_action with a smaller read; do not retry the same oversized batch or fan out. An ad may include its exact parent campaign_id to retrieve Smart+ fields when generic ad readback omits the ad; hints are bounded to 20 unique campaigns per advertiser. adset is only the common-wire alias for ad_group. This is a live read, not a mutation receipt; uncertain writes must still recover with operations_get on the exact original route.
| Name | Required | Description | Default |
|---|---|---|---|
| entities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it delivers. It discloses that this is 'a live read, not a mutation receipt,' explains what 'configured' includes (actual parent IDs, app_id, optimization_event, schedule times), defines the semantics of 'complete,' bounds hints to '20 unique campaigns per advertiser,' and clarifies the adset/ad_group alias. The null-value warning and omitted_fields caveat further disclose partial-coverage 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?
The description is long, but every sentence carries operational value — no filler. It is front-loaded with the core purpose and progressively layers caveats (field coverage, error handling, hints, alias, mutation recovery). Given zero annotations and zero output schema, the density is justified rather than bloated; it is only slightly longer than the minimum needed for a tool of this complexity.
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 complex multi-entity read with no annotations and no output schema, the description is remarkably complete. It covers return semantics (configured vs effective status, field coverage), error handling (response_budget_exceeded with next_action), data-quality caveats (null values, omitted_fields, 'complete means entity coverage, not field equality'), limits (50 entities, 20 hints), alias clarification, and the distinction from mutation receipts. An agent has everything needed to call 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 0%, so the description must fully compensate for the single entities parameter, and it does. It explains the entity types (campaign/ad_group/adset/ad), the alias ('adset is only the common-wire alias for ad_group'), the 50-item ceiling, and the purpose of the optional campaign_id ('An ad may include its exact parent campaign_id to retrieve Smart+ fields when generic ad readback omits the ad'). The description adds substantial meaning beyond the raw 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 opening sentence is a precise verb+resource+scope statement: 'Read allowlisted current TikTok configuration for up to 50 tenant-owned campaigns, native ad groups, or ads in one server-side request.' It identifies the resource (TikTok config), the operation (read), and the cardinality (up to 50) unambiguously. It also clearly enumerates the covered entity types, distinguishing it from any mutation or list tool in the sibling set.
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 explicit operational guidance: 'Check null values and readback_omitted_fields/creative.omitted_fields before comparing with an approved draft,' and 'complete means entity coverage, not field equality.' It prescribes recovery behavior for errors ('follow its exact-ID next_action with a smaller read; do not retry the same oversized batch or fan out') and explicitly names the alternative for uncertain writes: 'must still recover with operations_get on the exact original route.' This is textbook when-to-use and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
products_get_actionsAInspect
Return AppsFlyer MMP event candidates for one product. This is metadata discovery, not a product mutation. Returns {events: [{event_name, metrics: [...]}, ...], product_id}. This server exposes the candidates read-only; product-card edits remain outside standard MCP. The backing store is shared, but this is a TikTok tenant-scoped read contract.
REQUIRED: product_id (str — UUID from products_list). EXAMPLE: products_get_actions({"product_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It discloses read-only behavior ('not a product mutation', 'read-only'), output format ('Returns {events: [{event_name, metrics: [...]}, ...], product_id}'), and tenant scoping ('TikTok tenant-scoped read contract'). It does not mention potential limitations like pagination, but for a read tool that is acceptable.
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 well-structured: purpose first, then safety, then output, then required parameter, then example. Every sentence adds value—no filler. The line breaks and explicit REQUIRED/EXAMPLE sections make it easy 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?
With one parameter, no output schema, and no annotations, the description provides everything: purpose, usage context, parameter format, output shape, and a call example. Nothing an agent needs to correctly invoke this tool 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 only says product_id is a string. The description adds critical meaning: 'REQUIRED: product_id (str — UUID from products_list).' This tells the agent the exact format and source, which is essential for correct invocation. Given schema coverage is 0%, the description fully compensates.
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: 'Return AppsFlyer MMP event candidates for one product.' It clearly distinguishes this from mutations by stating 'This is metadata discovery, not a product mutation.' and adds tenant-scoped context, making it unambiguous among many sibling 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 provides clear context: it's a read-only metadata operation requiring a product_id from products_list. It does not explicitly name alternatives or say 'use when not', but it implies usage by stating the read-only nature and that product-card edits are outside MCP. That is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
products_get_top_campaignsAInspect
Top-N TikTok campaigns by spend for a single TikTok-owned product card. Reads tiktok_insights_daily filtered by the card's matching_rules — a product-card rollup, NOT a live campaign inventory.
For campaign names, cached status, and spend, use insights_query_overview or insights_query_consistent with ad_account_id, date_from/date_to, and group_by=campaign. Native overview returns status/secondary_status; compact reads return configured_status/effective_status. These report only the returned cached entities, not exhaustive current inventory. An empty report does not prove all campaigns paused or no ads created. Use overview_get_live_configs for current configuration of known IDs; that bounded read does not discover other campaigns.
REQUIRED: product_id (str — stable product id from this server's read-only products_list; the row is shared with the Meta-owned product store, but no server switch is required for discovery). EXAMPLE: products_get_top_campaigns({"product_id": "", "limit": 10})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It clearly states the data source, that it is a rollup rather than live inventory, and explicitly warns that an empty result does not imply no campaigns exist. This is exceptional transparency beyond what annotations would typically provide.
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 dense but every sentence adds value: purpose, data source, limitations, alternatives, required parameter, and an example. It is front-loaded with the core purpose and then systematically addresses usage guidance, making it efficient for an agent 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?
Given the tool's complexity (many siblings, no annotations, no output schema), the description is remarkably complete. It covers purpose, usage, alternatives, parameter semantics, and limitations. The only minor gap is not describing the output format (e.g., list of campaign objects with spend), but this is not critical for selecting the 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 0%, so the description must compensate. It thoroughly explains product_id (stable ID from products_list, shared with Meta store, no server switch needed) and provides a usage example. limit is self-evident as a top-N count with a default of 10, so while not explicitly detailed, the description adds sufficient meaning beyond the bare 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 explicitly states the tool returns top-N TikTok campaigns by spend for a single product card, and immediately clarifies it is a rollup from tiktok_insights_daily, not a live inventory. This clearly distinguishes it from sibling tools like insights_query_overview and overview_get_live_configs.
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 explicit routing: it names insights_query_overview and insights_query_consistent as alternatives for campaign names, status, and spend, and overview_get_live_configs for current configuration. It also states what this tool does NOT do (empty report does not prove all campaigns paused), leaving no ambiguity about when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
products_listAInspect
List TikTok-owned product cards for the current user. Reads via Meta's loopback internal-list scoped to channel_pid=tiktokglobal_int by default. Mirror of Meta MCP products_list — product card identity is the same row either way because both products share the Meta-owned public.products table.
REQUIRED: none. Optional: channel_pid (str, default "tiktokglobal_int"; pass another AF channel slug, or "all" for the union — note that TikTok agents typically only care about tiktokglobal_int). EXAMPLE: products_list({})
| Name | Required | Description | Default |
|---|---|---|---|
| channel_pid | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose read-only behavior ('List' and 'Reads via Meta's loopback') plus the default scoping. It also adds context about the shared Meta-owned products table, but does not mention auth, rate limits, or error/return 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?
The description is dense but well-organized: a clear purpose sentence, a scoping/identity note, and a structured REQUIRED/Optional/EXAMPLE block. The Meta-table parity explanation is slightly technical but relevant to understanding the mirror behavior.
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 one-parameter read-only list tool, the description covers purpose, default scope, optional parameter usage, and provides an example call. Since there is no output schema, it could have described the returned product card fields more explicitly, but the core invocation context is 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 coverage is 0%, so the description fully compensates by explaining channel_pid's type, default behavior, valid alternatives, and the practical relevance for TikTok agents. This is substantially more useful than the bare schema property with a null default.
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 action and resource: 'List TikTok-owned product cards for the current user.' It further clarifies the default channel scope and notes it is a mirror of Meta's products_list, which helps distinguish it from sibling tools like products_get_actions and products_get_top_campaigns.
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 states that no arguments are required and explains exactly how to use the optional channel_pid parameter, including the 'all' union option and the recommendation that TikTok agents typically only care about tiktokglobal_int. It does not explicitly compare against alternatives, but provides sufficient context for the single optional parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_begin_channel_connectAInspect
Tri-channel alias for TikTok connect. Arg channel must be 'tiktok'. Returns authorize_url, connect_id (session id), and expires guidance. Delegates to tiktok_begin_auth_onboarding. Do NOT poll automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that it delegates, returns authorize_url/connect_id/expires, and warns against polling. However, it omits side effects, error conditions, authentication prerequisites, and the full flow continuation, leaving gaps in behavioral understanding.
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 sentences with no fluff: each clause adds value—purpose, constraint, returns, delegation, and a warning. Information is front-loaded and efficiently delivered.
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 single-parameter tool with no output schema, the description covers the essential aspects: purpose, parameter value, return fields, and a behavioral warning. It could mention next steps (e.g., continue with tiktok_continue_auth_onboarding), but that's not critical for basic 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?
The schema provides only a property name with zero description coverage. The description compensates by stating the only allowed value ('must be 'tiktok''), giving essential semantic meaning that the schema lacks.
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 tool is an alias for TikTok connect, names the exact delegate (tiktok_begin_auth_onboarding), and specifies the required channel value. This clearly differentiates it from other setup tools and the full onboarding flow.
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 a behavioral instruction ('Do NOT poll automatically') but does not explicitly compare this alias with alternatives like tiktok_begin_auth_onboarding or setup_check_channel_connect. The delegation note implies when to use it, but the 'when vs when-not' guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_check_channel_connectAInspect
Check TikTok authorization AFTER the user confirms they finished. Args: channel='tiktok' and connect_id from setup_begin_channel_connect. Reads that exact tenant-owned session even if a newer session exists; never substitute the latest session or poll before user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| connect_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explicitly discloses that the tool reads the exact tenant-owned session rather than the latest one, and that polling before user confirmation is prohibited. This reveals a non-obvious behavioral quirk. Minor gap: it doesn't state the return format or failure behavior, but the disclosed caveats show strong transparency.
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 sentences deliver all necessary information: the action, the timing, the parameter sources, and the critical session-handling caveat. Information is front-loaded in order of importance, with zero filler.
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 2-parameter check tool with no annotations or output schema, the description covers the operation, prerequisites, parameter provenance, and an important behavioral constraint. It would benefit from stating what the check returns or whether it is a read-only operation, but nothing essential for invoking it correctly 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 provides only property names ('Channel', 'Connect Id') with no descriptions, 0% coverage. The description compensates by specifying channel='tiktok' as the expected literal and clarifying that connect_id comes from setup_begin_channel_connect. It adds meaningful source 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 states a specific verb ('Check'), resource ('TikTok authorization'), and a clear timing condition ('AFTER the user confirms they finished'). It distinguishes itself from the sibling setup_begin_channel_connect by name-dropping that tool as the source of connect_id, making its role in the workflow 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?
Provides explicit when-to-use guidance: call only after user confirmation. It also states what NOT to do ('never substitute the latest session or poll before user confirmation') and identifies where the connect_id comes from (setup_begin_channel_connect), which is clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_get_statusAInspect
Read the current TikTok-side setup state for the authenticated user — connection email, advertiser counts, auto-pull cadence.
TOKEN-IDENTITY CHECK: connection.email echoes the auth account this token resolved to. Verify it matches the user you expect; mismatch means the token is bound to the wrong account, NOT that the user switched. This is the TikTok-native setup envelope.
REQUIRED: nothing. EXAMPLE: setup_get_status({})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers well beyond the obvious: it explicitly frames the operation as read-only, reveals that connection.email reflects the token-resolved auth account, and warns that a mismatch means the token is bound to the wrong account rather than a user switch. This prevents a likely misinterpretation.
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 purpose is front-loaded in the first sentence, and the TOKEN-IDENTITY CHECK, REQUIRED, and EXAMPLE sections are compact and each add actionable value. There is no filler or repeated schema content.
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 zero-parameter read with an output schema present, the description is complete: it defines what the tool returns at a high level, warns about token identity semantics, states required inputs, and gives an invocation example. Nothing needed to call or interpret the tool correctly 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?
This is a zero-parameter tool, so the baseline is 4 per the rubric. The input schema fully covers the argument surface, and the description reinforces it with 'REQUIRED: nothing' and the example 'setup_get_status({})'.
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, 'Read', and names the resource, 'current TikTok-side setup state', along with concrete contents such as connection email, advertiser counts, and auto-pull cadence. It does not explicitly contrast with sibling setup status tools, like setup_check_channel_connect or tiktok_get_assets_status, so it misses the strongest sibling 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 intended use is clear: call it to read the authenticated user's TikTok-side setup state, and it adds an important interpretation step for the connection.email value. It does not state exclusions or alternative sibling tools, but for a zero-parameter read with no prerequisites, the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spark_ads_authorize_codesAInspect
Authorize 1..20 fresh TikTok Spark Ad authorization codes for one exact advertiser and return route-bound identity/item receipts. This tool performs the provider authorization immediately: call it only after the user explicitly supplies the codes and asks to authorize them. The server checkpoints each code before the provider call, stores only a tenant/advertiser-scoped fingerprint, executes serially, and never returns a raw authorization code.
REQUIRED: advertiser_id from assets_list_ad_accounts; auth_codes (1..20 strings); ad_names (the same length, in matching order). Each result carries request_index. Pass every status=ok row's identity_id, identity_type, tiktok_item_id, and spark_receipt unchanged to campaigns_quick_create or its batch variant, and set ad_params.ad_format from that row's supported_ad_formats.
SAFETY: never call for discovery and never automatically retry the whole request. If authorization_applied is true, or the row is outcome_uncertain, do not resubmit that code; use its support_ref for receipt reconciliation or call spark_ads_list_posts read-only. Retry only a row explicitly marked authorization_applied=false and retryable=true, after the stated backoff.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_names | Yes | ||
| auth_codes | Yes | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses immediate provider authorization, per-code checkpointing, tenant/advertiser-scoped fingerprint storage, serial execution, and that raw codes are never returned. It also details safety rules on retries and error handling. No contradictions exist since annotations are absent.
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 dense but every sentence earns its place. It front-loads purpose, then requirements, then safety, with clear labeling. For a tool with this complexity and zero annotations, the length is justified; there is 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?
It covers prerequisites, parameter semantics, return value usage, retry policy, error handling, and alternatives. Without an output schema, it fully specifies what an agent needs to call it correctly and process results. Nothing critical 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 coverage is 0%, so the description must compensate. It does: advertiser_id is sourced from assets_list_ad_accounts, auth_codes must be 1..20 fresh strings, ad_names must match length and order. It also explains how each result maps to downstream tools, adding far more than the bare 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 opens with a specific verb (Authorize) and resource (TikTok Spark Ad authorization codes), scoped to 1..20 codes for one exact advertiser, and states the return type (route-bound identity/item receipts). This clearly distinguishes it from all sibling tools, none of which perform authorization, so there is no ambiguity.
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 explicitly states when to call (only after user supplies codes and asks), and provides hard exclusions: never for discovery, never automatically retry the whole request. It names the alternative spark_ads_list_posts for read-only reconciliation and defines retry conditions per row. This is model guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spark_ads_list_postsAInspect
List reusable Spark posts already authorized for one exact TikTok advertiser. Each item includes identity_id, identity_type=AUTH_CODE, tiktok_item_id, media_kind, supported_ad_formats, create_eligible=true, bounded authorization status and expiry evidence, and a short-lived spark_receipt binding the exact tenant/advertiser/identity/item/media tuple. Set ad_params.ad_format to one returned supported_ad_formats value. Expired, revoked, unverified, or too-soon-expiring posts are excluded and counted in coverage.ineligible_reasons. Pass eligible fields unchanged to campaigns_quick_create or campaigns_quick_create_batch. This is read-only and does not authorize new codes or publish ads.
REQUIRED: advertiser_id from assets_list_ad_accounts. Optional: limit (1..50), search (up to 200 characters), and the opaque next_cursor returned by the previous page. Continue until has_more=false and coverage.complete=true before treating the listing as exhaustive. Refresh and re-list when a receipt expires; never reuse a receipt across advertisers or OAuth routes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| search | No | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels. It discloses read-only behavior, exclusions for expired/revoked/unverified posts, pagination termination conditions, short-lived receipt semantics, and the prohibition on reusing receipts across advertisers or OAuth routes.
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?
Every sentence is dense and purposeful, with the core purpose front-loaded and details ordered logically: item contents, usage instruction, exclusions, pagination, and receipt caveats. Despite its length, there is no fluff or repetition.
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 no output schema and no annotations, the description is remarkably complete. It specifies returned item fields, eligibility filtering, ineligible_reasons accounting, pagination completion criteria, required input provenance, and downstream integration with campaigns_quick_create tools.
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 0%, so the description must compensate, and it does. It explains advertiser_id's source, limit's range (1..50), search's length limit (200 characters), and cursor's nature as an opaque next_cursor from the previous page. All four parameters receive meaningful semantic context 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 opens with a specific verb and resource: 'List reusable Spark posts already authorized for one exact TikTok advertiser.' It clearly distinguishes this from sibling tools like spark_ads_authorize_codes by emphasizing listing already-authorized posts rather than authorizing new codes.
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 strong context: advertiser_id must come from assets_list_ad_accounts, results feed into campaigns_quick_create, and the tool is read-only and does not authorize new codes. It stops short of explicitly naming alternative tools for authorization, though the exclusion is implied clearly enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
support_get_report_statusAInspect
Read the customer-safe state of one tenant-owned TikTok support report. It returns no internal issue URL, operator note, stack trace, provider response, or other tenant data.
| Name | Required | Description | Default |
|---|---|---|---|
| report_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It adds value by explicitly stating the redaction boundary: no internal issue URL, operator note, stack trace, provider response, or other tenant data. The verb 'Read' also implies a non-mutating operation, though this is not explicitly guaranteed.
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 short sentences with no filler. The main action and resource are front-loaded, and the negative scope is efficiently listed in a second sentence. Every word 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?
For a simple single-parameter read tool, the description gives the core purpose and safety boundary, but leaves important gaps: possible status values, how to obtain report_ref, and error/not-found behavior. Since there is no output schema, the description could better describe what 'state' looks like in the response.
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 0% for the only parameter, report_ref. The description mentions 'one tenant-owned TikTok support report' but does not define what report_ref is, how it should be formatted, where it comes from, or whether it is an ID, string, or reference. The parameter name alone is insufficient for an agent to construct a valid call.
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 ('Read'), a specific resource ('customer-safe state of one tenant-owned TikTok support report'), and reinforces scope by listing what is intentionally excluded. It is clearly distinguishable from siblings like support_report_error, which suggests creating/reporting an error, whereas this reads status.
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 provided about when to use this tool versus alternatives such as support_report_error, operations_get, or tasks_get_status. The description does not mention prerequisites like how a report_ref is obtained or when a status check is appropriate rather than other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
support_report_errorAInspect
Manually submit one tenant-scoped TikTok support_ref with bounded classification fields after explicit user approval. Read setup_get_status.support_reporting first. This tool never collects prompts, request bodies, tokens, advertiser IDs, provider responses, or free-form descriptions, and never retries or replays an ad operation.
| Name | Required | Description | Default |
|---|---|---|---|
| client | Yes | ||
| locale | No | ||
| task_stage | Yes | ||
| support_ref | Yes | ||
| user_impact | Yes | ||
| idempotency_key | Yes | ||
| submission_mode | Yes | ||
| observation_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it explicitly states what the tool never collects (prompts, request bodies, tokens, advertiser IDs, provider responses, free-form descriptions) and that it never retries or replays an ad operation. These are meaningful behavioral boundaries beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then prerequisite, then behavioral constraints. Every sentence adds distinct value with 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?
The description covers purpose, prerequisites, and data-handling constraints, which is strong for such a compact definition. However, with no annotations, no output schema, and 8 parameters at 0% schema coverage, it leaves parameter semantics and post-submission behavior (e.g., how to check status via support_get_report_status, idempotency usage) largely unaddressed.
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 0%, so the description must compensate, but it only mentions 'bounded classification fields' and 'tenant-scoped' without explaining any of the 8 parameters, the required idempotency_key, the manual submission_mode const, or the enum semantics. The agent is left to infer most parameter meaning from names and enum values.
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: 'Manually submit one tenant-scoped TikTok support_ref with bounded classification fields.' It clearly distinguishes this from the sibling support_get_report_status by signaling this is the submission action rather than a status read.
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 provides clear preconditions: explicit user approval is required, and the agent must 'Read setup_get_status.support_reporting first.' This establishes when to use the tool and a prerequisite step, though it does not explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_cancelAInspect
Cancel one pending task owned by the current user. WRITE — call is IMMEDIATE. Only tasks in pending state can be cancelled (already-running tasks must complete on their own). Tenant-isolated. Mirror of Meta MCP tasks_cancel.
REQUIRED: task_id (str — UUID). EXAMPLE: tasks_cancel({"task_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It explicitly flags this as a WRITE operation, notes that the call is IMMEDIATE, limits cancellation to pending tasks, and mentions tenant isolation. It stops short of describing return values or failure modes, but the main behavioral risks are covered.
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 well-structured and front-loaded, with the core purpose stated first, followed by behavioral constraints and an example. The phrase 'Mirror of Meta MCP tasks_cancel' adds limited value and could be mildly confusing, but the overall structure remains tight.
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 single-parameter write tool with no output schema, the description covers the essential context: what it does, when it applies, the required input, and an example. It does not describe the response or error behavior, but the essential usage context is largely 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 0%, but the description compensates by specifying the parameter as 'task_id (str — UUID)' and providing a concrete example. This adds meaningful type and format context beyond the bare schema field 'Task Id'.
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 ('Cancel one pending task owned by the current user') with a clear verb, resource, and scope. It is readily distinguishable from sibling tools like tasks_list or tasks_get_status, which are about querying rather than mutating tasks.
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 clear context: only tasks in 'pending' state can be cancelled, and already-running tasks must complete on their own. It does not explicitly name alternative tools for checking status, but it does give a clear precondition and ownership constraint ('owned by the current user').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_get_create_detailAInspect
Return a sanitized TikTok creation snapshot for one create task. The creation_snapshot is from the task's original payload/result; set include_live=true to also fetch current TikTok campaign/adgroup/ad config via /campaign/get, /adgroup/get, /ad/get. Agents should compare the snapshots themselves and use live_snapshot to detect later manual TikTok Ads Manager edits.
REQUIRED: task_id. Optional: include_live (bool, default false). EXAMPLE: tasks_get_create_detail({"task_id": "", "include_live": true})
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| include_live | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral info. It discloses that the snapshot is sanitized, that include_live triggers extra API calls, and that the agent must compare snapshots itself. It doesn't mention potential side effects, but as a read-only operation it's sufficient.
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 dense sentences plus a parameter summary and example. Information is front-loaded, no redundancy, and every sentence adds value. The structure guides the agent from purpose to usage to exact invocation.
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 two-parameter get tool with no output schema, the description covers the return content, the live option, and the intended comparison. It doesn't detail error cases or exact snapshot structure, but those are minor for this simple 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?
Schema coverage is 0%, but the description fully explains both parameters: task_id is required and identifies the task; include_live (default false) fetches current config. The example clarifies usage. This compensates entirely for the schema gap.
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 returns a sanitized creation snapshot for a single create task, with an optional live-snapshot fetch. It distinguishes from sibling tasks_get_status (status), tasks_list (list), and tasks_latest (latest) by specifying 'one create task' and the snapshot content.
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 when to use it—to inspect creation details and detect manual edits via live_snapshot—but doesn't explicitly name alternatives or state when not to use it. It provides a clear usage scenario but lacks direct comparison with other tasks_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_get_statusAInspect
Poll an Agent Method task by opaque task_ref using the bounded common response. Legacy task_id input remains accepted but returns the same bounded status-only envelope, never raw result or logs. At terminal=true, consume result and source_anchor directly; never resubmit the original page-one Agent Method query merely to recover that task. A later user request to check again starts a new cached page-one query without old cursors/anchors; it does not request a provider refresh.
REQUIRED: exactly one of task_ref (opaque ref from insights_query_consistent) or task_id (legacy UUID). Optional: response_mode=compact for task_ref. EXAMPLE: tasks_get_status({"task_ref": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | ||
| task_ref | No | ||
| response_mode | No | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the bounded response envelope, the terminal=true consumption requirement, that no raw result or logs are returned, and that re-checking starts a new cached query without old cursors/anchors and no provider refresh. These are critical behavioral details that an agent needs to invoke 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 information-dense but well-structured: the main purpose is front-loaded, followed by behavioral caveats, a clear REQUIRED/Optional section, and a concrete example. Every sentence contributes value, and the formatting aids quick comprehension despite its length.
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's complexity (polling with both legacy and modern refs, terminal states, caching behavior) and the lack of an output schema or annotations, the description covers all critical aspects an agent needs to call it correctly. It explains the response envelope, when to consume result/source_anchor, and how re-checks work. Nothing essential 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 0%, so the description must compensate, and it does. It explains task_ref as an opaque ref from insights_query_consistent, task_id as a legacy UUID, and response_mode as optional and compact for task_ref. The example further clarifies the intended call shape, adding meaning well beyond the bare 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 'Poll' and the resource 'Agent Method task', and distinguishes this from the many sibling task tools by focusing on status retrieval via task_ref or legacy task_id. It also clarifies it returns a bounded status-only envelope, not raw results or logs, which separates it from related query 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?
Explicitly states when to use: polling a specific Agent Method task, with a REQUIRED section that exactly one of task_ref or task_id must be provided. It also gives a negative guideline ('never resubmit the original page-one Agent Method query merely to recover that task') and explains the behavior of later checks, effectively telling the agent when not to use alternative recovery approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_latestAInspect
Return the latest completed-or-partial task for one task_type. Returns has_task=false when nothing is found. Mirror of Meta MCP tasks_latest.
REQUIRED: task_type (str — one of: pull_tiktok_insights, sync_tiktok_pixels, sync_tiktok_audiences, sync_tiktok_identities, sync_tiktok_shops, sync_tiktok_tt_accounts, sync_tiktok_apps, sync_tiktok_cta_portfolios, create_tiktok_ad, handle_create_tiktok_ad, create_ad, refresh_assets). EXAMPLE: tasks_latest({"task_type": "pull_tiktok_insights"})
| Name | Required | Description | Default |
|---|---|---|---|
| task_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses that an empty result returns has_task=false, and indicates it is a mirror of Meta MCP tasks_latest, but does not describe side effects, error handling, or whether it is read-only. For a simple lookup this is adequate but not exhaustive.
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 front-loaded with the core behavior, then lists required parameter values and an example. It is somewhat long due to the enum list, but each element serves a purpose and the structure (REQUIRED, EXAMPLE) aids parsing.
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 one-parameter tool with no output schema, the description covers purpose, allowed values, example, and a key return behavior (has_task=false). An agent has sufficient information to call it correctly. Minor omissions like error responses are unlikely to block correct usage.
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 provides no description or enum, but the description fully compensates by listing all allowed task_type values and giving an example call. This is high-value, exceeding typical schema-only information.
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?
States a specific verb 'Return' with resource 'latest completed-or-partial task' and parameter task_type. It also mentions the return value behavior with has_task=false, making the purpose unambiguous. No confusion with siblings like tasks_list which likely lists all tasks.
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 when-to-use guidance or alternatives. The description implies use for fetching the latest task of a type, but does not contrast with tasks_list or tasks_get_status. An agent must infer that this is the correct tool for latest-task queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_listAInspect
List recent async task summaries for the current user. Returns bounded items, count, complete, meta.has_more and next_cursor ordered most-recent-first. Continue cursors serially with identical status/days/limit until complete=true before claiming absence. snapshot_at fences new tasks; task status can still change.
REQUIRED: none. Optional: status (comma-separated subset of pending,running,completed,partial_completed,failed,cancelled), days (1..365, default 7), limit (1..50, default 20), cursor (opaque, bound to tenant/tool/filters). Use returned task_ref with tasks_get_status, or legacy id as task_id.
EXAMPLE: tasks_list({"status": "running,pending", "days": 3})
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| cursor | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does so thoroughly by explaining bounded pagination, ordering, cursor opacity and binding, the snapshot_at fence, and the fact that task status can still change after listing.
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 front-loaded with the core purpose, then gives result shape, continuation rules, parameters, and an example in compact form. Every sentence carries essential operational information without filler.
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 no output schema and no annotations, the description explains return fields, ordering, pagination semantics, constraints, and a concrete invocation example. An agent has enough context to call the tool correctly and interpret its response.
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 0%, and the description fully compensates. It defines the status subset and comma-separated format, days and limit ranges, cursor behavior, and defaults, adding meaning well beyond the bare input 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 action and resource: 'List recent async task summaries for the current user.' It is clear and informative, but it does not explicitly distinguish this tool from nearby siblings such as tasks_latest or tasks_list_create_history, so it misses the full 'differentiates from siblings' bar.
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?
Usage guidance is strong: it describes cursor continuation ('Continue cursors serially... until complete=true'), filtering options, and the downstream step ('Use returned task_ref with tasks_get_status'). However, it doesn't explicitly state when not to use this tool instead of a sibling list tool, so the exclusion guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_list_create_historyAInspect
List recent TikTok create task history for the current user. Use this before comparing two launches such as '16号 cardyes 和昨天 targeting 有什么不同'. Returns public task summaries plus creation_snapshot_summary; it does NOT call TikTok live APIs.
REQUIRED: none. Optional: status (terminal status filter), days (1..365, default 30), search (campaign/adgroup/ad/id substring), limit (1..50, default 20). EXAMPLE: tasks_list_create_history({"search": "cardyes", "days": 14, "limit": 5})
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| search | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses useful behavioral traits: results are public summaries plus creation_snapshot_summary, and it explicitly says it does NOT call TikTok live APIs. It also clarifies scope to the current user. It does not explicitly say there are no side effects, but the 'List' framing and read-only-oriented wording largely cover that.
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 dense but well organized: purpose, use case, return behavior, parameter list, then example. Nothing is wasted, and the most important facts are front-loaded.
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-style list tool with four optional parameters, no required params, and no output schema, the description supplies all operational essentials: scope, return content, non-live-API behavior, parameter ranges, and a runnable example. No annotation or output schema is needed to invoke it 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 0%, and the description fully compensates by documenting every parameter: status as a terminal-status filter, days with 1..365 and default 30, search as a campaign/adgroup/ad/id substring, and limit with 1..50 and default 20. The example reinforces how to combine them.
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 recent TikTok create task history for the current user.' This clearly differentiates it from sibling list tools like tasks_list and tasks_latest, and makes the tool's scope obvious before any parameter details are introduced.
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 before comparing two launches such as...' and states what the tool returns, while noting it does not call TikTok live APIs. It does not name alternative tools or say when not to use them, so it stops short of full when/not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_createAInspect
Create a new saved template for the authenticated user. Mirrors Meta templates_create. adset_params is accepted as the Meta wire alias for adgroup_params (TikTok native); pass either — adset is the MCP wire name for what TikTok calls adgroup. Same shape on both products. Image templates may store ad_params.music_info={music_id:} with one nonempty ID of at most 256 characters. Select it with assets_list_music for the intended advertiser; omit music_info to select music during create preparation. Store media selections on the create request, not in the template.
REQUIRED: name (str, <= 200 chars). OPTIONAL: tags (list[str]), campaign_params (dict), adset_params / adgroup_params (dict), ad_params (dict), source_advertiser_id (str), source_adset_id / source_adgroup_id (str), source_receipt (str; required for reverse-engineered source fields), source_campaign_name (str), source_adset_name / source_adgroup_name (str), campaign_naming (str), adset_naming / adgroup_naming (str). EXAMPLE: templates_create({"name": "WebConv VN", "tags": ["vn", "prospecting"], "campaign_params": {"objective_type": "WEB_CONVERSIONS"}, "adset_params": {"bid_type": "BID_TYPE_NO_BID"}})
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| tags | No | ||
| ad_params | No | ||
| adset_naming | No | ||
| adset_params | No | ||
| adgroup_naming | No | ||
| adgroup_params | No | ||
| source_receipt | No | ||
| campaign_naming | No | ||
| campaign_params | No | ||
| source_adset_id | No | ||
| source_adgroup_id | No | ||
| source_adset_name | No | ||
| source_adgroup_name | No | ||
| source_advertiser_id | No | ||
| source_campaign_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It explains the alias relationship between adset and adgroup parameters, which is useful behavioral context. However, it does not disclose behavior like idempotency, permission requirements, or whether the operation is reversible. It doesn't contradict annotations because none exist.
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 well-structured with a clear introduction, parameter breakdown, and example. It fronts the key purpose and alias explanation, and every sentence adds value. It is detailed but not bloated.
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 16-parameter tool with no output schema and no annotations, the description provides strong parameter guidance and an example, which is critical. It covers most important aspects, though it could maybe mention error conditions or response format, but given constraints, it's quite 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 0%, so the description must compensate, and it does exceptionally well. It clearly lists required and optional parameters, explains the alias relationship, provides constraints (name <= 200 chars), and gives an example. This goes far beyond the bare 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 it creates a new saved template for the authenticated user, distinguishes it from templates_get/list/update/delete, and uses a specific verb, resource, and scope. It also mentions it mirrors Meta's templates_create, which adds clarity.
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 provides a clear example and explains when to use it (create new template) and includes context like selecting music with assets_list_music and storing media selections on the create request. However, it does not explicitly state when not to use it or mention alternatives like templates_update, though the sibling context makes this clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_deleteAInspect
Hard-delete an existing saved template owned by the authenticated user. Mirrors Meta templates_delete. Destructive — confirm with the user before calling.
REQUIRED: template_id (str). EXAMPLE: templates_delete({"template_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden. It clearly labels the operation as 'Hard-delete' and 'Destructive', which is a critical behavioral trait. It also states the ownership requirement, which implies authentication. It doesn't detail side effects like whether related data is cascade-deleted, but for a delete operation, the destructive warning is the most important behavior and it is clearly disclosed. Not a full 5 because it could mention reversibility or impact on dependent resources, but the bar is met.
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: two sentences plus a REQUIRED note and an example. It front-loads the most important information (hard-delete, destructive warning) and then provides the essential parameter requirement. Every sentence serves a purpose, with no filler.
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 single-parameter delete tool with no output schema, the description covers the critical aspects: what it does, the destructive nature, the required parameter, and an example. The complexity is low, so this is complete. An agent has all the info needed to call it correctly and understand the risk.
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 0%, so the description must compensate. It explicitly marks 'template_id' as REQUIRED and provides an example call. This adds clear meaning beyond the schema, which only lists the parameter as a string. It could explain the format (e.g., UUID), but the example hints at that. Given the low coverage, this is strong compensation for a single param.
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 action ('Hard-delete'), the resource ('existing saved template'), and the ownership constraint ('owned by the authenticated user'). It also mentions the Meta mirror, which adds specificity and distinguishes it from other template operations like templates_update or templates_create. This is a clear and specific purpose.
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 warns that the operation is destructive and instructs to confirm with the user before calling, which is a strong usage guideline. It also marks 'template_id' as required and gives an example call. However, it does not explicitly contrast with alternatives (e.g., when to use templates_update or templates_delete_folder), but the clear purpose and destructive warning are sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_getAInspect
Get one saved template owned by the authenticated user by exact template_name (preferred, Meta-portable) or template_id. Mirrors Meta templates_get. A missing exact selector returns complete=true, found=false, status=not_found as a normal read — it does not authorize a write. Returns Meta-wire (adset_params) and TikTok-native (adgroup_params) keys plus effective_creation_defaults (CBO/ABO budget_level, is_smart_plus, identity, copy/CTA, ad_format and music_info). Create preparation preserves the template's explicit music choice and verifies that exact track for the target advertiser before approval. An unavailable track requires a new explicit choice, not silent replacement.
REQUIRED: template_id OR template_name. EXAMPLE: templates_get({"template_name": "iOS14 AEO"}) EXAMPLE: templates_get({"template_id": ""})
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | No | ||
| template_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the not_found edge case (`complete=true, found=false, status=not_found` as a normal read), the return key groups, and detailed downstream behavior around music preservation and explicit track verification.
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 dense but every sentence adds useful operational information, from selector behavior to return shapes to edge-case handling. Key requirements and examples are placed at the end for easy scanning, and there is no repetition of schema fields.
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?
Despite having no output schema or annotations, the definition gives the agent enough to call the tool correctly: required input, return key structure, missing-selector behavior, and follow-up implications. No critical operational detail needed for correct invocation 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 coverage is 0%, so the description is the only source of parameter meaning. It clearly explains both parameters, their roles as mutually exclusive selectors, the preference for `template_name`, and the required-one constraint, which the schema itself does not express.
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: retrieving one saved template by exact `template_name` or `template_id`. It also names the broader Meta API it mirrors, and the selector semantics make it distinguishable from sibling `templates_list` and other template 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?
It explicitly states the required selector contract (`REQUIRED: template_id OR template_name`), marks `template_name` as preferred, and provides two concrete invocation examples. It does not explicitly contrast with siblings, but the context is clear enough for an agent to know when this single-fetch tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_listAInspect
List saved ad templates for the authenticated user. Mirrors the Meta sister product's templates_list so the same agent code works on either MCP server.
REQUIRED: none. EXAMPLE: templates_list({})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the transparency burden. It states 'REQUIRED: none' and the example 'templates_list({})' show it takes no arguments, and 'for the authenticated user' scopes the data, and the mirroring note suggests a stable contract. It does not describe return shape, but for a no-argument list operation the major behavioral risk is low.
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, front-loaded with the core function, and each line ('REQUIRED: none', example) earns its place without redundancy. The Meta mirroring sentence adds useful compatibility context rather than filler.
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 tool with zero parameters and a clear 'list saved ad templates' purpose, the description is nearly complete; the output shape is not explicitly described but no output schema exists. The absence of return-format detail is a minor gap for a list operation.
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 has no parameters and the description makes that explicit with 'REQUIRED: none' and the 'EXAMPLE: templates_list({})'. Since there are no parameters to explain, the description fully compensates for the missing schema detail.
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-resource pair, 'List saved ad templates for the authenticated user,' and the 'REQUIRED: none' plus example make the callable contract clear. It is easy to distinguish from sibling templates_create/get/update/delete.
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 does not say when to prefer templates_list over sibling read tools such as templates_get; the only comparative context is the Meta-compatibility note. The usage context is implied by 'List...' but no alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_reverse_engineerAInspect
Reverse-engineer a template preview from one live TikTok adgroup. Fans out /campaign/get/ + /adgroup/get/ + /ad/get/ and returns an unsaved preview plus a signed source_receipt. Review the preview, then pass its extracted fields and source_receipt unchanged to templates_create before expiry. Mirrors Meta templates_reverse_engineer (Meta adset_id == TikTok adgroup_id — adset is the MCP wire name for what TikTok calls adgroup; either spelling is accepted). Image music is retained only when every actual image variant uses one unambiguous track. Video cover images and Spark post previews do not supply reusable image music. Conflicting or missing source tracks are omitted for target-specific selection.
REQUIRED: advertiser_id (str — TikTok advertiser_id this user owns), adgroup_id OR adset_id (str — TikTok adgroup_id; both names work). EXAMPLE: templates_reverse_engineer({"advertiser_id": "7390000000000000000", "adset_id": "1820000000000000000"})
| Name | Required | Description | Default |
|---|---|---|---|
| adset_id | No | ||
| adgroup_id | No | ||
| advertiser_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so well. It states the operation is unsaved, describes the network fan-out, the signed source_receipt with expiry, the Meta-to-TikTok naming mapping, and nuanced image-music retention/omission behavior. An agent gets realistic expectations about side effects and limitations.
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 long but densely informative; every block earns its place: core behavior, workflow, naming mapping, music edge cases, required parameters, and example. It is front-loaded with the most important function and does not repeat schema content.
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 tool with no output schema and no annotations, the description covers the full operational lifecycle: inputs, outputs, next step, expiry, and edge cases. An agent can invoke it correctly and know exactly how to hand off to templates_create without ambiguity.
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 0%, so the prose must compensate. It does by naming the required advertiser_id, clarifying that adgroup_id and adset_id are interchangeable spellings for the same TikTok value, and providing a complete example. However, the prose says adgroup_id OR adset_id is required while the schema only marks advertiser_id as required, creating a minor prose/schema mismatch.
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 object: 'Reverse-engineer a template preview from one live TikTok adgroup.' It also names the internal fan-out endpoints, the return artifacts, and the downstream handoff, making it clearly distinct from template CRUD siblings like templates_create, templates_list, and templates_get.
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 a concrete usage workflow: review the preview, then pass extracted fields and source_receipt unchanged to templates_create before expiry. That is clear context, but it does not explicitly enumerate alternatives or exclusions, such as when to prefer fetching an existing template over reverse-engineering one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
templates_updateAInspect
Update an existing saved template owned by the authenticated user. Mirrors Meta templates_update. Only the fields you pass get patched; provenance / source_* fields are immutable after save (re-run templates_reverse_engineer to refresh those). adset_params is the Meta wire alias for adgroup_params — pass either. ad_params may retain a validated music_info={music_id:} image setting; the create route preserves and checks this exact track for its target advertiser.
REQUIRED: template_id (str). OPTIONAL: name, tags, campaign_params, adset_params / adgroup_params, ad_params, campaign_naming, adset_naming / adgroup_naming. EXAMPLE: templates_update({"template_id": "", "tags": ["vn", "retargeting"]})
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| tags | No | ||
| ad_params | No | ||
| template_id | Yes | ||
| adset_naming | No | ||
| adset_params | No | ||
| adgroup_naming | No | ||
| adgroup_params | No | ||
| campaign_naming | No | ||
| campaign_params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that only passed fields are patched (not replaced), that provenance/source_* fields are immutable after save, and it explains the alias for adset_params/adgroup_params. It also reveals validation behavior for music_info. Minor omissions include return format or error handling, but the disclosed behaviors are substantial.
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 well-structured with a main explanation, then REQUIRED/OPTIONAL/EXAMPLE blocks. It is compact given the amount of detail, though the phrase 'Mirrors Meta `templates_update`' adds little value and could be considered filler. Overall, 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?
For a 10-parameter mutation tool, the description covers the critical nuances: patching behavior, immutability, aliases, and a validation quirk. It does not describe return values, but with no output schema and a simple update operation, that is acceptable. It lacks explicit guidance on what happens if template_id doesn't exist, but the core usage is well covered.
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?
With schema coverage at 0%, the description lists all required and optional parameters and explains the alias relationship. It also highlights the music_info special case in ad_params. However, it does not explain the meaning or structure of the params_ objects (e.g., what campaign_params contains), leaving their semantics largely to the agent's prior knowledge. The example focuses only on tags.
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 action and resource: 'Update an existing saved template owned by the authenticated user.' It differs from siblings like templates_create, templates_delete, templates_get (read), and templates_reverse_engineer, making the tool's purpose unambiguous and distinct.
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 explains when to use this tool (for updates) and implicitly differentiates from create. It also gives guidance for the edge case of immutable fields, directing the agent to re-run templates_reverse_engineer to refresh them. However, it lacks an explicit exclusion statement (e.g., 'do not use for creating new templates').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_begin_auth_onboardingBInspect
Begin TikTok auth onboarding for the authenticated tenant and return the browser authorization URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return value (URL) and mentions 'authenticated tenant' as a prerequisite, but does not explain side effects, whether it initiates an OAuth flow, or if it is safe to call multiple times. It is somewhat transparent but lacks depth.
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?
A single, focused sentence that front-loads the action and return value. There is no unnecessary detail, making it highly concise and clear.
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 simplicity (no params, no output schema), the description is mostly complete but lacks details on prerequisites beyond 'authenticated tenant', potential failure modes, or what the agent should do with the returned URL. Some context is missing, but not critical.
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?
There are zero parameters, so the description has nothing to add beyond the schema. Per the baseline rule for 0 params, this is acceptable; the description does not need to explain parameters.
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 action ('Begin'), resource ('TikTok auth onboarding'), and the return value ('browser authorization URL'). It is specific but does not explicitly distinguish from sibling tools like tiktok_continue_auth_onboarding, though the verb 'begin' implies it is the initial step.
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 provided on when to use this tool versus related siblings (e.g., continue_auth_onboarding, get_assets_status). The description does not mention context, prerequisites, or alternative tools, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_continue_auth_onboardingAInspect
Continue the authenticated tenant's latest TikTok auth onboarding session without requiring manual state or connection identifiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the tool operates on the latest session and requires no manual state, which is useful. However, it doesn't disclose what 'continue' entails (e.g., whether it mutates state, what happens if no session exists, or whether it returns a URL/status).
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?
A single, well-structured sentence that front-loads the action and resource, then explains the key benefit. No wasted words.
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 zero-parameter tool, the description is mostly complete. However, it lacks information about prerequisites (e.g., must have an existing onboarding session) and what the output/result looks like. Given no output schema and no annotations, a bit more context would help.
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 tool has zero parameters, so the schema is trivially complete. The description adds context by explaining why no parameters are needed (it automatically uses the latest session), which is valuable for an agent deciding whether to call 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 clearly states the action ('continue'), the resource ('the authenticated tenant's latest TikTok auth onboarding session'), and the key benefit (no manual state or connection identifiers needed). It distinguishes itself from tiktok_begin_auth_onboarding, which starts a new session, though it doesn't explicitly name 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?
The description implies when to use it: after beginning an onboarding session, when continuing the latest session without identifiers. However, it doesn't explicitly state when not to use it (e.g., when a new session is needed) or mention alternatives like tiktok_begin_auth_onboarding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_assets_statusAInspect
Read cached TikTok authorization asset status for the authenticated tenant, optionally scoped to one connection_id.
REQUIRED: none. Optional: connection_id (str — UUID of one tiktok_auths row). EXAMPLE: tiktok_get_assets_status({})
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses that this is a read of cached state scoped to the authenticated tenant/connection_id, but does not describe freshness semantics, return shape, failure modes, or whether it ever invokes TikTok APIs.
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 purpose is front-loaded and the optional/required/example lines are compact and useful. No filler or repetition of the schema.
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 one-optional-parameter read tool this is largely complete: purpose, param semantics, tenant context, and example. It only lacks an explicit statement of what the returned status payload contains, which could matter since there is no 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 coverage is 0%, yet the description fully compensates: connection_id is optional, is a string UUID identifying one tiktok_auths row, and scopes the cached status. The example confirms the no-argument call.
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?
States a precise verb+resource: 'Read cached TikTok authorization asset status for the authenticated tenant.' The explicit 'cached' and 'status' wording distinguishes it from tiktok_refresh_assets and the assets_list_* 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?
Gives practical invocation details ('REQUIRED: none', optional connection_id) and implies a cached read path, but never states when to choose this over tiktok_refresh_assets or when fresh data is needed. No explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_cached_insight_overviewCInspect
Read the authenticated tenant's cached TikTok insight overview without leaving the read-only MCP surface.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| date_to | No | ||
| group_by | No | account | |
| sort_dir | No | desc | |
| sort_key | No | spend | |
| date_from | No | ||
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly notes 'read-only MCP surface,' which signals a non-destructive operation, and 'cached' implies data may be stale. Since no annotations are present, the description carries the full disclosure burden. However, it does not describe the response format, pagination behavior, or whether filters like date ranges affect the cached data, leaving significant behavior unexplained.
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, front-loaded sentence with no filler. It efficiently communicates the core function and read-only nature, making every word contribute. This is appropriately concise.
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 tool with 8 parameters, no parameter explanations, no usage guidelines, and no output schema, this description is incomplete. An agent would not know the return shape, how caching interacts with filters, or what results to expect. It only covers the top-level purpose.
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?
With 8 parameters and 0% schema description coverage, the description must compensate, but it explains none of the parameters. It does not clarify what 'page', 'search', 'group_by', 'sort_dir', 'sort_key', 'date_from', 'date_to', or 'page_size' mean in the context of the overview. An agent has no semantic anchor for these inputs.
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?
States a specific verb and resource: 'read the authenticated tenant's cached TikTok insight overview.' It clearly indicates a read operation on cached data, and the phrase 'read-only MCP surface' reinforces this. However, it does not explicitly distinguish it from sibling insight tools like insights_query_overview or insights_pull_insights, so an agent must infer which to choose based on the 'cached' qualifier.
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 provided about when to use this tool versus the numerous insight-related siblings. The description does not mention prerequisites, cache-freshness expectations, or scenarios where this tool is preferred over others. An agent is left to guess based on the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_refresh_assetsAInspect
Trigger the authenticated tenant's existing TikTok asset refresh flow, either across all active pullable connections or for one connection_id.
REQUIRED: none. Optional: connection_id (str — UUID of one tiktok_auths row). EXAMPLE: tiktok_refresh_assets({})
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'trigger' a refresh flow, without stating whether it is asynchronous, what side effects occur (e.g., data updates, rate limits), whether it is reversible, or what the return value is. The lack of any behavioral details beyond the action itself is a significant gap.
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 purpose. It includes required/optional labels, a parameter explanation, and an example. Every sentence earns its place, and there is no 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 trigger action with one optional parameter and no output schema, the description covers the invocation but misses context about the result (e.g., status check, async behavior). It also fails to mention related tools like 'tiktok_get_assets_status' or 'assets_refresh_all', which could be useful for follow-up. The description is adequate but not 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?
The description adds meaning to connection_id by specifying it as a 'UUID of one tiktok_auths row', which is not present in the schema. It also clarifies that omitting it refreshes all connections. Though the schema has no description, the tool description provides useful semantic context, justifying a score above 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 clearly states the action: 'Trigger the authenticated tenant's existing TikTok asset refresh flow', with a specific verb 'trigger' and resource 'TikTok asset refresh flow'. It also specifies scope (all connections or one connection_id), making it distinct from generic refresh tools. Even without naming a sibling, the purpose 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 description explains how to use it: either omit connection_id to refresh all active pullable connections, or provide a connection_id for one. However, it does not differentiate from the sibling 'assets_refresh_all' or mention when not to use this tool. The usage context is implied but no exclusions or alternative routing is provided.
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.
98 tool updates
- First observed
assets_list_ad_accounts - First observed
assets_list_apps - First observed
assets_list_business_centers - First observed
assets_list_cta_portfolios - First observed
assets_list_identities - First observed
assets_list_music - First observed
assets_list_pixels - First observed
assets_list_shops - First observed
assets_list_tt_accounts - First observed
assets_lookup_business_links - First observed
assets_refresh_all - First observed
bid_confirm - First observed
bid_prepare - First observed
budget_confirm - First observed
budget_prepare - First observed
campaigns_quick_create - First observed
campaigns_quick_create_batch - First observed
campaigns_quick_create_confirm - First observed
campaigns_quick_create_deny - First observed
campaigns_recreate_confirm - First observed
campaigns_recreate_deny - First observed
campaigns_recreate_from_task - First observed
copy_ad_clone_structure - First observed
copy_ad_clone_structure_confirm - First observed
copy_ad_clone_structure_deny - First observed
copy_ad_quick_copy - First observed
copy_ad_quick_copy_confirm - First observed
copy_ad_quick_copy_deny - First observed
creatives_abandon_upload - First observed
creatives_confirm_upload - First observed
creatives_create_folder - First observed
creatives_delete - First observed
creatives_delete_folder - First observed
creatives_get - First observed
creatives_list - First observed
creatives_list_folders - First observed
creatives_reconcile - First observed
creatives_rename_folder - First observed
creatives_request_upload - First observed
creatives_request_upload_v2 - First observed
delivery_status_confirm - First observed
delivery_status_prepare - First observed
insights_export_csv - First observed
insights_get_date_range - First observed
insights_pull_insights - First observed
insights_query_batch_overview - First observed
insights_query_consistent - First observed
insights_query_consistent_continue - First observed
insights_query_overview - First observed
insights_query_rows - First observed
interests_archive - First observed
interests_fetch_from_adset - First observed
interests_get - First observed
interests_list - First observed
interests_save_fetched_pack - First observed
mmp_connect - First observed
mmp_delete_connection - First observed
mmp_fetch_cohorts - First observed
mmp_get_state - First observed
mmp_insights_get_product_event_today - First observed
mmp_insights_query_product_event_summary - First observed
mmp_refresh_connection - First observed
mmp_save_cohort_config - First observed
notifications_list - First observed
notifications_mark_read - First observed
operations_get - First observed
optimization_dismiss_decision - First observed
optimization_evaluate - First observed
optimization_list_decisions - First observed
optimization_prepare_action - First observed
overview_get_live_configs - First observed
products_get_actions - First observed
products_get_top_campaigns - First observed
products_list - First observed
setup_begin_channel_connect - First observed
setup_check_channel_connect - First observed
setup_get_status - First observed
spark_ads_authorize_codes - First observed
spark_ads_list_posts - First observed
support_get_report_status - First observed
support_report_error - First observed
tasks_cancel - First observed
tasks_get_create_detail - First observed
tasks_get_status - First observed
tasks_latest - First observed
tasks_list - First observed
tasks_list_create_history - First observed
templates_create - First observed
templates_delete - First observed
templates_get - First observed
templates_list - First observed
templates_reverse_engineer - First observed
templates_update - First observed
tiktok_begin_auth_onboarding - First observed
tiktok_continue_auth_onboarding - First observed
tiktok_get_assets_status - First observed
tiktok_get_cached_insight_overview - First observed
tiktok_refresh_assets
Related MCP Connectors
Hosted Meta ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Hosted Google Ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Google Ads MCP with 20,000+ account peer context and staged approve-then-execute writes.
Hosted MCP server for Google Ads and LinkedIn Ads analysis.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables MCP clients to read and analyze TikTok advertising data, with optional preview-first write tools for managing campaigns, ad groups, and budgets.27208 npmApache 2.0
- AlicenseAqualityAmaintenanceSelf-hosted TikTok Ads MCP server with 35 read tools and 29 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/tiktok-ads-mcp-server; npm package remains @getmcpads/tiktok-ads-mcp-server.35208 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceUnified MCP server for managing Meta Ads, LinkedIn Ads, Google Ads, GA4, and Search Console with 89 read/write tools, multi-account support, OAuth setup, and safe dry-run mutations.MIT
- AlicenseBqualityCmaintenanceA read-only MCP server that provides comprehensive access to the TikTok Business API for retrieving advertising data, including campaigns, ad groups, ads, and performance reports.24MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.