TikTok Ads by Get MCP Ads
Provides tools for managing and analyzing TikTok advertising campaigns, including reading performance metrics, dimensions, and creative assets, and optionally updating budgets, statuses, and creating campaigns.
TikTok Ads MCP server
Make sense of your TikTok advertising.
Explore campaign performance, inspect native assets and prepare changes from your MCP client.
Watch the demo · What's new · Install · Tool reference · Try hosted getmcpads

Play the 27-second product film
The film demonstrates hosted getmcpads with staged data. Its creative galleries and MCP Apps interface belong to the hosted product. This repository provides the standalone native API tools.
35 read tools · 29 write tools, disabled by default.
Run locally with your own platform credentials and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the platform. For managed connections, including supported ChatGPT setups, use the hosted option.
What's new
v2.0.1: Native tools and security update · September 20, 2026
Preserve exact unquoted 64-bit IDs in read, write and verification responses.
Fix campaign field selection and default list limits.
Update native write validation for budgets, schedules, targeting and readback. Add carousel music, uploaded-video readiness, CTA portfolio and custom identity tools.
Require Node.js 22.12 or newer and check Node 22/24 in CI.
Update vulnerable dependencies and regenerate the MCP catalog.
Full changelog · Source synchronization details · All releases
Upgrade notes
Requires Node.js 22.12 or newer. CI covers Node 22 and 24. Version 2.0.1 drops Node 18 and 20 support. Read the current tool schemas before reusing saved arguments. Writes remain optional and require explicit confirmation. Hosted creative integrations and MCP Apps UI are outside this release.
Related MCP server: Meta Ads by Get MCP Ads
Install this release
This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.
git clone --branch v2.0.1 --depth 1 https://github.com/get-mcp-ads/tiktok-ads-mcp-server.git
cd tiktok-ads-mcp-server
npm ci
npm run buildConfigure your MCP client to run node with the absolute path to dist/cli.js and the platform credentials documented below.
Prefer a managed connection? Use TikTok Ads with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.
What you get
35 read tools | Campaigns, ad groups, ads, creatives, audiences, pixels, events, Spark Ads, catalogs, delivery diagnostics |
29 write tools | Off by default. Campaign and ad group status, budgets, campaign creation. Each one previews before it applies |
277 metrics | Including derived ones computed client-side |
16 dimensions | With a compatibility matrix that catches invalid combinations before they hit the API |
5 resources | Live catalogues the model can read: metrics, dimensions, compatibility rules, 12 workflow recipes |
Keyword research |
|
Forward-compatible reads |
|
The query planner
TikTok rejects many metric and dimension combinations, and its error messages rarely say why. This server encodes the compatibility matrix, so it splits an impossible request into several valid API calls and merges the results instead of failing.
tiktok_validate_query lets the model check a combination before spending a call on it.
One trap this server handles for you
TikTok answers HTTP 200 even when the call failed. The applicative code field is what
decides. A client that trusts the HTTP status reports imaginary successes back to the model,
which then reasons on data that was never returned. Every call here checks code first.
Getting a token
TikTok needs two values, not one: an access token and the App ID it belongs to.
Create a developer app on the TikTok for Business developer portal.
Note the App ID and App Secret from the app's page.
Authorize the advertiser accounts you want to reach. TikTok grants access per advertiser, so an account you skip here stays invisible to the server no matter what the token allows.
Complete the OAuth authorization flow to exchange the returned
auth_codefor an access token. TikTok's long-lived tokens do not expire on a fixed schedule, but they are revoked when the authorization is withdrawn.Put the token in
TIKTOK_ACCESS_TOKENand the App ID inTIKTOK_APP_ID.
📖 TikTok API for Business documentation
Run tiktok_health_check as your first call. It verifies the credentials, lists the
advertiser accounts you can actually reach, and reports what is missing, without printing
your token.
Which permissions?
Scope group | When you need it |
Reporting and read scopes | Always. Campaigns, ad groups, ads, insights |
Campaign management scopes | Only if you set |
Catalog and Business Center scopes | Optional, for |
Setup
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"tiktok-ads": {
"command": "npx",
"args": ["-y", "@getmcpads/tiktok-ads-mcp-server"],
"env": {
"TIKTOK_ACCESS_TOKEN": "your-token-here",
"TIKTOK_APP_ID": "your-app-id-here"
}
}
}
}Restart Claude Desktop. Ask it: "list my TikTok advertiser accounts".
Claude Code
claude mcp add tiktok-ads --env TIKTOK_ACCESS_TOKEN=your-token --env TIKTOK_APP_ID=your-app-id -- npx -y @getmcpads/tiktok-ads-mcp-serverCursor
.cursor/mcp.json in your project, same shape as the Claude Desktop config above.
From source
git clone https://github.com/get-mcp-ads/tiktok-ads-mcp-server.git
cd tiktok-ads-mcp-server
npm install && npm run build
cp .env.example .env # then fill in your credentials
npm startConfiguration
Variable | Default | Meaning |
| none | Required. Your access token |
| none | Required. The App ID the token belongs to |
| none | Optional, for endpoints needing app authentication |
| none | Optional default, saves passing it on every call |
| none | Optional Business Center ID |
| unset | Set to |
|
|
|
Check your setup at any time:
npm run doctorWrites, and why they preview first
Write tools are disabled by default. Enable them with TIKTOK_ENABLE_WRITES=1.
When enabled, every write tool returns a preview and changes nothing:
// tiktok_update_adgroup_budget { advertiserId: "7...", adGroupId: "1...", budget: 50 }
{
"applied": false,
"action": "tiktok_update_adgroup_budget",
"change": { "advertiser": "7...", "adGroup": "1...", "newBudget": 50,
"budgetMode": "BUDGET_MODE_DAY" },
"message": "Preview only, nothing was changed. Repeat the same call with confirm: true to apply this change to the live account."
}Only a second call carrying confirm: true touches the live account.
This is deliberate. An assistant composes these calls, and it can pick the wrong advertiser, the wrong campaign, or the wrong order of magnitude on a budget. A mandatory preview makes the mistake visible before it costs money, and gives a human the stopping point the protocol does not guarantee on its own.
One further guardrail: tiktok_create_campaign always creates the campaign DISABLE.
There is no option to create it running.
Tool | What it changes |
| Pause or reactivate |
| Budget, in the account currency |
| Creates a campaign, always |
Tools
Every tool is listed below. See server-card.json for complete parameter and output schemas.
Tool | Purpose |
| Read-only health check for TikTok credentials, accessible advertisers, and advertiser info. |
| List all TikTok advertiser accounts accessible with the current token. |
| Get detailed information for specific TikTok advertiser accounts: currency, timezone, status, balance. |
| List campaigns for a TikTok advertiser account. |
| Read full native ad group configuration including targeting, custom/lookalike audience references and exclusions, geo, language, age/gender, placements, interests/behaviors, budget and schedule. |
| Read configured ad group targeting and audience references: custom/lookalike inclusions/exclusions, geo, language, age/gender, placements, interests and behaviors. |
| Read TikTok AUDIENCE performance reports by age or gender at advertiser, campaign, ad group or ad level, including delivery from eligible Smart+ campaigns. |
| List ads for a TikTok advertiser. |
| Query TikTok Ads performance insights using the current native/calculated metric catalog and query planning. |
| Get creative details (video, image, text) for specific ads in a TikTok advertiser account. |
| List custom and lookalike audiences for a TikTok advertiser account. |
| Get keyword suggestions for TikTok Search Ads. |
| Validate a TikTok metric/dimension combination BEFORE executing. |
| List TikTok pixels and, when permissions allow it, pixel event metadata for an advertiser. |
| Discover pixel/app events or accessible tracking diagnostics for an advertiser. |
| Aggregate campaign, ad group, and ad delivery status/operation_status with simple diagnostics. |
| Check a TikTok async report task status by taskId when async report endpoints are available. |
| Return ad-linked TikTok video asset metadata from ad/get and video material endpoints when available. |
| Return Spark Ads context from ad fields when available, with a conservative fallback if Spark-specific fields are not supported. |
| Get custom/lookalike/saved audience details where TikTok DMP endpoints are accessible. |
| Read-only TikTok Shop/catalog/e-commerce diagnostics. |
| Diagnose TikTok Search Ads maturity from keyword/search-term reporting and optional keyword recommendation endpoints. |
| Find likely creative fatigue patterns from ad-level daily reporting and return read-only refresh recipes. |
| Read-only audience overlap diagnostics across ad groups, custom audiences, saved audiences, and targeting fields. |
| Join accessible Spark Ads fields with paid page/post reporting and optional organic identity/post endpoints when permissions allow. |
| List the advertiser's whole video library (file/video/ad/search): file name, duration, dimensions, signature, and publicly served preview and cover URLs. |
| List the advertiser's whole image library (file/image/ad/search): file name, dimensions, signature, carousel usability, and a publicly served image URL signed for roughly thirty days (image_url_expires_at gives the exact instant). |
| Re-resolve fresh, publicly fetchable URLs for specific TikTok library assets (file/video/ad/info and file/image/ad/info). |
| List TikTok campaigns, ad groups, or ads with caller-selected native fields, filtering, sorting, and pagination. |
| Run a native TikTok BASIC or AUDIENCE synchronous report with caller-selected dimensions and metrics. |
| Read TikTok targeting and planning catalogs: locations, languages, interests, behaviors, hashtags, Search Ads keyword ideas/health, devices, carriers, contextual tags, content exclusions, and time zones. |
| Advanced GET-only TikTok Business API escape hatch for documented JSON read endpoints not yet modeled by a specialized MCP tool. |
| Get TikTok music recommendations for exactly the uploaded images in a standard, non-catalog image ad (one card) or carousel. |
| Read one uploaded video from this advertiser’s media library. |
| Read the exact TikTok entity, parent settings and advertiser currency/timezone before editing or building a new configuration. |
Disabled by default. Calls preview unless explicitly confirmed. Check the configuration and exact schema before use.
Tool | Purpose |
| Create a dynamic CTA portfolio from the exact approved recommendations returned by creative/cta/recommend for this advertiser. |
| Create an advertiser-owned CUSTOMIZED_USER advertising identity for Pangle or Global App Bundle. |
| Create DISABLED classic TikTok campaign. |
| Update classic TikTok campaign. |
| Create DISABLED classic TikTok adgroup. |
| Update classic TikTok adgroup. |
| Create DISABLED classic TikTok ads (video, image, carousel or authorized Spark content). |
| Update classic TikTok ads (video, image, carousel or authorized Spark content). |
| Create DISABLED upgraded Smart+ TikTok campaign. |
| Update upgraded Smart+ TikTok campaign. |
| Create DISABLED upgraded Smart+ TikTok adgroup. |
| Update upgraded Smart+ TikTok adgroup. |
| Create DISABLED upgraded Smart+ TikTok ads (video, image, carousel or authorized Spark content). |
| Update upgraded Smart+ TikTok ads (video, image, carousel or authorized Spark content). |
| Pause or reactivate exactly one classic ad. |
| Pause or reactivate exactly one Smart+ campaign. |
| Pause or reactivate exactly one Smart+ adgroup. |
| Pause or reactivate exactly one Smart+ ad. |
| Pause or reactivate selected creative materials inside one upgraded Smart+ ad. |
| Rename one classic TikTok campaign. |
| Rename one classic TikTok adgroup. |
| Rename one classic TikTok ad. |
| Import a image from a public HTTPS media URL or base64 file (up to 5 MiB). |
| Import a video from a public HTTPS media URL or base64 file (up to 5 MiB). |
| Pause or reactivate a TikTok campaign. |
| Create a TikTok campaign. |
| Change a TikTok campaign budget, in the account currency. |
| Pause or reactivate a TikTok ad group. |
| Change the budget of a TikTok ad group. |
URI | Contents |
| What this server exposes, and its current mode |
| All 277 metrics with categories and formats |
| All 16 dimensions and where they are valid |
| The compatibility matrix |
| 12 step-by-step workflows |
Security
The server holds a credential that can read, and optionally modify, live ad accounts. Concretely:
The token is never logged. Debug output prints
Access-Token: [redacted].Requests go only to
business-api.tiktok.com, and only under/open_api/v1.3/. Any other host or path is refused rather than called. Covered by tests.Redirects are refused once a token is attached, so a redirect cannot forward your credential elsewhere.
Mutating and OAuth endpoints are blocked on the generic read paths. Covered by tests.
No telemetry. The server makes no network call other than to the TikTok Business API. You can verify this by grepping the source for
fetch.
Full policy and reporting instructions: SECURITY.md.
Looking for a managed, multi-platform version?
Try hosted TikTok Ads if you want to use this source without operating a local server. getmcpads also connects advertising, Search Console and GA4 through one MCP URL. Source availability and plan limits are listed on the site; connecting an account is still required.
Follow the TikTok Ads connection guide.
Select the account or property your assistant may read.
Try a read-only review: “Compare campaign delivery and conversion trends over complete periods. State missing data and do not change anything.”
See the current hosted tool catalogue and pricing before choosing a paid plan. This Apache 2.0 adapter remains independently useful with your own credentials.
Contributing
Issues and pull requests are welcome. See CONTRIBUTING.md. Please read SECURITY.md before reporting anything security-related.
Licence
Apache License 2.0. See also NOTICE.
TikTok and TikTok for Business are trademarks of ByteDance Ltd. and its affiliates. This project is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance. It is an independent client of a public API.
MCP contracts and desktop bundle
Every tool declares read/write annotations, parameter descriptions and a structured output schema. Successful calls expose the payload as structuredContent.result; errors retain isError: true. The generated server card contains definitions only.
Run npm run bundle -- /path/to/output to build a .mcpb desktop bundle from the current catalog. Credentials are entered locally during installation. Write tools remain disabled unless explicitly enabled.
More from getmcpads
Meta Ads · Google Ads · Google Analytics 4 · Google Search Console · Pinterest Ads · X Ads
Maintained by Emmanuel at getmcpads. Questions: hello@getmcpads.com.
Available Tools
35 toolstiktok_get_adgroupstiktok get adgroupsARead-onlyIdempotent
Read full native ad group configuration including targeting, custom/lookalike audience references and exclusions, geo, language, age/gender, placements, interests/behaviors, budget and schedule. Set smartPlus:true for upgraded Smart+ targeting_spec. Missing fields are unknown, not unrestricted targeting. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to request, starting at 1. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| smartPlus | No | Use true for upgraded Smart+ ad groups: reads their native targeting_spec and exact placements via smart_plus/adgroup/get. No fallback to classic settings. | |
| adgroupIds | No | Restrict TikTok results to these ad group IDs. | |
| campaignId | No | Exact TikTok numeric ID, as a string. | |
| advertiserId | Yes | Exact TikTok numeric ID, as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds valuable behavior disclosure: 'Missing fields are unknown, not unrestricted targeting' clarifies the open-world semantics, and 'Paginated' sets pagination expectations. The smartPlus:true note also explains a mode switch that differs from the default classic read, all while remaining consistent with the readOnly/idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: what is read, the Smart+ special case, and the missing-fields caveat plus pagination. No filler or repetition of schema details, making it compact and 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?
Given the rich annotations, a full input schema, and an output schema, the description covers the important behavioral notes that are not in structured data. It could additionally mention when to prefer a sibling tool, but the core information an agent needs to invoke the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, including the smartPlus behavior and defaults. The description mentions smartPlus:true and pagination, but adds little per-parameter meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Read' and targets a precise resource: 'full native ad group configuration', then enumerating major contents (targeting, audiences, geo, language, age/gender, placements, budget, schedule). This clearly distinguishes the tool from siblings like tiktok_get_ads or tiktok_get_campaigns by identifying exactly which resource is returned.
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 use case is clear: call this when you need the full native ad group configuration, including targeting and budget details. It also gives explicit guidance for Smart+ ad groups via 'Set smartPlus:true', though it does not explicitly mention when not to use it or name sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_adstiktok get adsBRead-onlyIdempotent
List ads for a TikTok advertiser. Returns ad ID, name, operation status, and creative info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| adgroupId | No | Filter by ad group ID | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds a list of returned fields but no behavioral context beyond that, such as pagination behavior, rate limits, auth needs, or caveats about operation status or data scope. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the operation and the primary return contents, making it appropriately sized and 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?
For a simple read-only listing tool with full schema coverage, an output schema, and clear annotation hints, the description plus structured metadata is sufficient for correct invocation. It is slightly incomplete in not mentioning filter behavior or alternative sibling tools, but those gaps are partly covered by the schema and purpose clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides for advertiserId, adgroupId, and limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List ads for a TikTok advertiser') and clarifies returned fields (ad ID, name, operation status, creative info). It is clear enough to distinguish ads from campaigns or ad groups, though it does not explicitly contrast with siblings such as tiktok_get_creatives or tiktok_get_adgroups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to prefer this tool over alternatives, no exclusions, and no mention of using adgroupId to narrow results. It only implies usage through the tool name and the phrase 'for a TikTok advertiser,' which is insufficient among many sibling list/get tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_advertiser_infotiktok get advertiser infoARead-onlyIdempotent
Get detailed information for specific TikTok advertiser accounts: currency, timezone, status, balance.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiserIds | Yes | One or more advertiser IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the fields returned, but this is likely redundant with the output schema. No additional behavioral context (auth, rate limits, pagination) is given, so it adds moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and resource, and wastes no words. It efficiently communicates the tool's purpose and key return 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 simple one-parameter tool with an output schema and strong annotations, the description is nearly complete. It clearly states the purpose and the parameter's role, though it lacks explicit routing guidance vs. siblings. This is a minor gap for such a focused 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?
The schema description coverage is 100%, so the sole parameter advertiserIds is fully documented in the schema. The description only hints that the IDs target 'specific' accounts, which is already implied by the schema name. Baseline 3 is appropriate because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('TikTok advertiser accounts') and enumerates the return fields (currency, timezone, status, balance). The qualifier 'specific' differentiates it from sibling tiktok_list_advertisers, so an agent can distinguish it without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need details for particular advertiser accounts, but it does not explicitly name alternatives or state when not to use it. With siblings like tiktok_list_advertisers, this leaves the agent to infer the selection logic, so it's adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_asset_urlstiktok get asset urlsARead-onlyIdempotent
Re-resolve fresh, publicly fetchable URLs for specific TikTok library assets (file/video/ad/info and file/image/ad/info). Call at display or download time: every TikTok media URL is signed and expires.
| Name | Required | Description | Default |
|---|---|---|---|
| imageIds | No | Image IDs to refresh | |
| videoIds | No | Video IDs to refresh (at most 60 per call, TikTok's documented cap) | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds valuable context about URL expiry and the need to re-resolve, which is not covered by annotations. It doesn't contradict any annotation.
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. The key action and rationale are front-loaded, and the structure is clean and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety/idempotency, the description covers the essential purpose and usage timing. The optional nature of imageIds/videoIds is implicit from the schema's required field list, and the video cap is noted in the schema. 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 description coverage is 100%, so all parameters are documented. The description adds minimal parameter info beyond the schema—it mentions the asset types but not specific parameter details. Baseline 3 is appropriate when schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (re-resolve fresh URLs) on a specific resource (TikTok library assets) and lists the asset types (file/video/ad/info and file/image/ad/info). It is clear and not a tautology. It doesn't explicitly name an alternative sibling, but the purpose is distinct from listing or retrieving assets.
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 at display or download time and explains why (URLs are signed and expire). This gives clear contextual guidance. It doesn't state when not to use or name alternatives, but the when-to-use is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_async_report_statustiktok get async report statusARead-onlyIdempotent
Check a TikTok async report task status by taskId when async report endpoints are available. No report creation or mutation is performed.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Async report task ID returned by TikTok report task creation outside this read-only MCP. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the rich readOnly/idempotent/destructive annotations, the bar is lower; the description adds a useful caveat that no report creation or mutation is performed, which is slightly beyond the annotation. However, it doesn't disclose polling behavior, error semantics, or availability details, so it adds only modest behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences with no filler. The main lookup action and the read-only caveat are front-loaded, making the description easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With complete parameter descriptions, an output schema, and strong annotations, the description covers most of what the agent needs. The only notable gap is the vague 'when async report endpoints are available' condition, which is not elaborated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both taskId and advertiserId documented in the input schema. The description only repeats 'by taskId' and adds no semantic value beyond the schema, so it earns the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('TikTok async report task status') and identifies the lookup key (taskId). It is clear about what it does, but it doesn't explicitly differentiate from sibling tools or name an alternative, so it stops short of the highest rating.
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 rough condition ('when async report endpoints are available') and disclaims mutation, but the condition is undefined and no alternative tool is named for creating or mutating reports. The use case is implied rather than explicitly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_audience_detailstiktok get audience detailsBRead-onlyIdempotent
Get custom/lookalike/saved audience details where TikTok DMP endpoints are accessible. Read-only only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| audienceIds | No | Optional custom/lookalike audience IDs. If omitted, lists available audiences. | |
| advertiserId | Yes | TikTok advertiser ID | |
| includeSavedAudiences | No | Also include saved audience targeting details when available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description reinforces read-only status and adds a mild availability qualifier about DMP endpoints, but does not disclose deeper behaviors like pagination, result shape, or endpoint-specific limitations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action and resource. The phrase 'Read-only only' is somewhat redundant given the annotations, but it does not bloat the description materially.
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 tool with a complete input schema and an output schema, the core information is present. However, the description lacks guidance on how this tool relates to tiktok_get_audiences and leaves the 'DMP endpoints accessible' condition ambiguous, so completeness is adequate but not strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented in the schema. The description itself adds little about how limit, audienceIds, advertiserId, or includeSavedAudiences behave beyond what the schema provides, earning the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a read-only GET operation on audience details and specifies the audience types: custom/lookalike/saved. This helps distinguish it from report-oriented tools, though it does not explicitly name sibling tools like tiktok_get_audiences.
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 only usage hint is 'where TikTok DMP endpoints are accessible,' which is vague and does not explain when to choose this tool over tiktok_get_audiences or tiktok_get_audience_report. No explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_audience_overlaptiktok get audience overlapARead-onlyIdempotent
Read-only audience overlap diagnostics across ad groups, custom audiences, saved audiences, and targeting fields.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| smartPlus | No | Use true for upgraded Smart+ ad groups: reads their native targeting_spec and exact placements via smart_plus/adgroup/get. No fallback to classic settings. | |
| adgroupIds | No | Optional ad group IDs to compare. | |
| campaignId | No | Optional campaign ID filter. | |
| advertiserId | Yes | TikTok advertiser ID | |
| overlapThreshold | No | Overlap threshold used to flag audience pairs, in the units declared by this schema. | |
| includeSavedAudiences | No | Include accessible saved-audience metadata in the overlap analysis. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Read-only' agrees with that. The description adds modest context about the diagnostic scope, but no additional behavioral traits such as rate limits, auth requirements, or how the overlap is computed. With annotations covering the safety profile, 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one focused sentence that front-loads the core purpose and scope. There is no filler, no redundant restatement of the schema, and 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 read-only diagnostic tool, the one-line description plus rich annotations, a detailed schema, and an output schema is almost complete. It loses one point because it doesn't clarify the relationship between the compared entities or suggest the intended use case, leaving some agent reasoning to 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 description coverage is 100%, so the baseline is 3 even without parameter details in the description. The entity list loosely maps to parameters like adgroupIds, includeSavedAudiences, and smartPlus, but it does not add meaning beyond the schema. The schema itself documents defaults, bounds, and smart_plus behavior.
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 diagnostic resource — audience overlap — and names the entity types it spans: ad groups, custom audiences, saved audiences, and targeting fields. It clearly differentiates from sibling tools like tiktok_get_audience_details and tiktok_get_audience_report by focusing on overlap rather than details or reports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to choose this tool over sibling audience tools or how it relates to tiktok_get_audiences, tiktok_get_audience_details, tiktok_get_audience_report, or tiktok_get_targeting. There is no when-to-use or when-not-to-use signal; the agent must infer suitability from the name and scope alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_audience_reporttiktok get audience reportARead-onlyIdempotent
Read TikTok AUDIENCE performance reports by age or gender at advertiser, campaign, ad group or ad level, including delivery from eligible Smart+ campaigns. Multiple demographics return separate reports, not a joint distribution. Explicit pagination and native provider errors; no inference of configured targeting or Custom Audience membership.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to request, starting at 1. | |
| adIds | No | Restrict results to these ad IDs. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | Yes | Last date of the reporting period, in YYYY-MM-DD format, on or after startDate. | |
| metrics | Yes | Native AUDIENCE metric keys, e.g. spend, impressions, clicks, ctr, cpc, conversion. Provider rejects unsupported metric combinations; BASIC metric availability does not imply AUDIENCE support. | |
| dataLevel | No | TikTok reporting aggregation level. Metrics and dimensions must be compatible with this level. | AUCTION_CAMPAIGN |
| orderType | No | Sort direction for the selected ordering field. | |
| startDate | Yes | First date of the reporting period, in YYYY-MM-DD format. | |
| adgroupIds | No | Restrict TikTok results to these ad group IDs. | |
| dimensions | Yes | age and/or gender, optionally with the ID matching dataLevel. Multiple demographics return separate reports, never a fabricated age × gender cross-tab. | |
| orderField | No | Provider field used to order report rows. | |
| campaignIds | No | Restrict results to these campaign IDs. | |
| advertiserId | Yes | Exact TikTok numeric ID, as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, covering the safety profile. The description goes beyond this by disclosing that multiple demographics return separate reports (not a joint distribution), that pagination and native provider errors are explicit, and that the tool does not infer configured targeting or Custom Audience membership. This is meaningful behavioral context, though it doesn't cover rate limits or response-size nuances, which the output schema may partially address.
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 sentences with no fluff. The first sentence front-loads the core action, resource, and scope; the second clarifies an important behavioral nuance; the third covers error/pagination behavior and a key limitation. Every sentence earns its place and the structure supports quick scanning.
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 (13 parameters, 5 required, output schema present, annotations provided), the description is largely complete. It covers the operation, scope, demographic behavior, pagination/errors, and non-inference caveats. The only minor gap is that it does not explicitly mention metric/dimension compatibility with data levels, but the schema descriptions already address that, so the description does not need to duplicate it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a description in the input schema. The description restates the key semantic point about separate reports for multiple demographics, which is already present in the dimensions parameter description. It does not add new parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a precise resource ('TikTok AUDIENCE performance reports'), and the key dimensions (age/gender) and levels (advertiser, campaign, ad group, ad). It distinguishes itself from siblings like tiktok_get_audience_details and tiktok_get_audience_overlap by focusing on performance reports by demographics, and the Smart+ eligibility note adds valuable 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 usage context is clear: an agent would call this when needing age/gender audience performance reports. It also states limitations (separate reports, no inference of targeting or Custom Audience membership), which guides expectations. However, it never explicitly names alternatives or gives 'when not to use' guidance relative to sibling tools like tiktok_get_audience_details, so the routing 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.
tiktok_get_audiencestiktok get audiencesARead-onlyIdempotent
List custom and lookalike audiences for a TikTok advertiser account.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Follow page_info.total_page to read the full audience library. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side-effect profile. The description adds no further behavioral context (e.g., pagination behavior, rate limits, or response format). Given the annotations, this is adequate but not enriched beyond the structured data.
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 that directly states the function and scope. No wasted words, and the essential information is presented immediately.
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 with only three parameters and no nested objects. An output schema exists, so return structure is covered. The description, combined with the schema and annotations, provides sufficient context for an agent to invoke the tool correctly. Minor gaps like pagination usage are already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (advertiserId, page, limit) are fully documented in the schema. The description does not add any parameter-specific nuance beyond what the schema already provides. With high schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and the resource (custom and lookalike audiences) for a specific account. It distinguishes from siblings like tiktok_get_audience_details (which implies details for a single audience) and tiktok_get_audience_report (which implies reporting). The scope is unambiguous and the tool's function is immediately evident.
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 conveys what the tool does but does not explicitly state when to use it versus alternatives such as tiktok_get_audience_details or tiktok_get_audience_overlap. No explicit exclusions or alternative routing is provided; the usage context is implied by the sibling names rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_campaignstiktok get campaignsARead-onlyIdempotent
List campaigns for a TikTok advertiser account. Returns campaign ID, name, status, budget, and objective.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| advertiserId | Yes | TikTok advertiser ID | |
| statusFilter | No | Native status values used to filter the returned entities. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, and the description is consistent with them. The description adds the concrete returned field list, but since an output schema exists, this is modest extra behavioral context; pagination and status filtering behavior are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words or redundant restatement of the tool name. It communicates action, scope, and return contents efficiently.
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 is a low-complexity read-only list operation with rich parameter descriptions, strong annotations, and an output schema. Nothing critical is missing for an agent to select and invoke it correctly, and the resource name 'campaigns' makes the intended target unambiguous.
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 has 100% description coverage for all three parameters, including limit bounds and statusFilter enum semantics, so the schema carries the parameter-level explanation. The description only echoes the advertiser account scope without adding further parameter detail, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a resource ('campaigns'), a scope ('for a TikTok advertiser account'), and the main returned fields (ID, name, status, budget, objective). This makes it immediately distinguishable from sibling tools like tiktok_get_ads and tiktok_get_adgroups.
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 case is inferable from the description and the required advertiserId, but there is no explicit statement of when to choose this tool over alternatives. It does not mention exclusions or sibling tools, so usage guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_carousel_musictiktok get carousel musicARead-onlyIdempotent
Get TikTok music recommendations for exactly the uploaded images in a standard, non-catalog image ad (one card) or carousel. Verifies each image is carousel-usable. Read-only; select a returned music_id in the approval preview and use the same images in the ad. Music is for use on TikTok only.
| Name | Required | Description | Default |
|---|---|---|---|
| imageIds | Yes | Ordered list of 1-35 distinct uploaded image IDs owned by this advertiser. Use the exact same images in the approved carousel. | |
| advertiserId | Yes | Exact TikTok numeric ID as a string, never a rounded JavaScript number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag read-only/idempotent/non-destructive, and the description reinforces safety while adding the non-obvious behavior that it 'verifies each image is carousel-usable.' It also explains the downstream workflow—select a returned music_id in the approval preview and reuse the same images—and the TikTok-only restriction, which are useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core action and scope, the second reveals verification and read-only behavior plus the follow-up workflow, and the third restricts usage. Information is front-loaded and no filler is present.
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 only two schema-covered parameters, an output schema, and annotations that establish safety, the description covers the operational context an agent needs: when the call applies, what it validates, and what to do with the result. The main workflow note about approval preview and matching image IDs makes the tool self-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?
Both parameters are already fully described in the schema (100% coverage), including 'ordered list of 1-35 distinct uploaded image IDs' and the exact numeric ID requirement, so the description carries no additional load. The description only restates the same-images requirement rather than adding new parameter detail, matching the baseline-3 standard for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Get TikTok music recommendations', naming a specific verb and resource. Scope is sharpened by 'for exactly the uploaded images in a standard, non-catalog image ad (one card) or carousel', which distinguishes it from the sibling read tools. No ambiguity about what it 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 clearly states the intended use case: music recommendations for a standard non-catalog image ad or carousel built from the exact uploaded images. It implicitly excludes catalog ads but does not name a fallback or explicitly say when not to use it, so it falls one step short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_creative_fatigue_recipestiktok get creative fatigue recipesARead-onlyIdempotent
Find likely creative fatigue patterns from ad-level daily reporting and return read-only refresh recipes. Does not create, edit, or upload creatives.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | No | End date YYYY-MM-DD. Defaults to today. | |
| startDate | No | Start date YYYY-MM-DD. Defaults to 14 days ago. | |
| advertiserId | Yes | TikTok advertiser ID | |
| minImpressions | No | Minimum reported impressions required for a row to enter the analysis. | |
| declineThresholdPct | No | Percentage decline used as a candidate signal for creative fatigue, requiring further evidence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value beyond annotations by stating the tool 'Does not create, edit, or upload creatives' and by framing the output as 'read-only refresh recipes' – this clarifies the operational contract. It does not disclose details like rate limits or whether the analysis is deterministic, but the annotations cover the safety profile well.
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 zero waste. The core purpose is front-loaded, and the read-only clarification is placed 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?
The tool has a rich input schema (100% coverage), a true output schema, and annotations covering read-only/idempotent behavior. The description is complete enough for an agent to select and invoke the tool correctly. A minor gap: it does not explain what a 'refresh recipe' contains or how the fatigue patterns are computed, but the output schema likely covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds the conceptual context that minImpressions and declineThresholdPct are 'candidate signal' thresholds, but it does not add syntax or format details beyond the schema. Baseline 3 is appropriate because the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a specific resource ('creative fatigue patterns from ad-level daily reporting'), and explicitly distinguishes itself from write operations ('Does not create, edit, or upload creatives'). It clearly differentiates from sibling read tools by naming the fatigue-analysis 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 implies when to use it: when the agent needs to identify likely creative fatigue patterns from ad-level daily reporting. It does not explicitly name alternative sibling tools or state when not to use it, but the read-only framing and the 'read-only refresh recipes' phrasing provide clear context. A small gap: no explicit exclusion such as 'use tiktok_get_creatives for raw creative metadata'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_creativestiktok get creativesBRead-onlyIdempotent
Get creative details (video, image, text) for specific ads in a TikTok advertiser account.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Specific ad IDs to get creatives for | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only behavior is covered. The description adds minimal context about the content types returned but does not disclose pagination behavior, authentication needs, or how the optional adIds affect the result scope.
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. The parenthetical '(video, image, text)' efficiently conveys the returned content types without extra prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema, complete parameter descriptions, and safety annotations, the description is largely adequate for a read-only retrieval tool. The only gap is that it doesn't specify whether omitting adIds returns all creatives for the advertiser, which could affect how an agent invokes it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents advertiserId, adIds, and limit with defaults and bounds. The description adds no new parameter semantics beyond the general phrase 'for specific ads,' so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource—'Get creative details (video, image, text) for specific ads'—so an agent can understand what the tool returns. It doesn't explicitly differentiate from sibling tools like tiktok_get_ads or tiktok_list_ad_videos, but the resource and content types are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving creative details, but it gives no guidance on when to use this tool versus siblings such as tiktok_get_ads, tiktok_get_video_assets, tiktok_list_ad_videos, or tiktok_list_ad_images. There is no mention of exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_delivery_statustiktok get delivery statusBRead-onlyIdempotent
Aggregate campaign, ad group, and ad delivery status/operation_status with simple diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| adgroupId | No | Optional ad group ID filter. | |
| campaignId | No | Optional campaign ID filter. | |
| includeAds | No | Include ad-level status diagnostics. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so this is clearly a safe read operation. The description adds little beyond 'simple diagnostics,' which is vague and doesn't disclose pagination behavior or response structure (though the output schema covers that). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 11 words, with no filler or redundancy. It is front-loaded with the key action and scope, though the phrase 'simple diagnostics' is somewhat under-specified.
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 existence of an output schema and comprehensive parameter descriptions, the description is adequate but not rich. It lacks guidance on when to use the tool versus siblings and what 'simple diagnostics' entails, which an agent might need for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all five parameters, so the schema already explains limit, adgroupId, campaignId, includeAds, and advertiserId. The tool description provides no additional parameter meaning beyond what the schema offers.
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 the specific verb 'Aggregate' and names the resources (campaign, ad group, ad delivery status/operation_status). It clearly distinguishes from sibling tools like tiktok_get_campaigns or tiktok_get_adgroups by focusing on aggregate status and diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as tiktok_get_campaigns or tiktok_get_ads. No exclusions or conditions are provided; the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_entities_rawtiktok get entities rawARead-onlyIdempotent
List TikTok campaigns, ad groups, or ads with caller-selected native fields, filtering, sorting, and pagination. This GET-only escape hatch exposes newly released entity fields without waiting for the MCP's curated schemas.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to request, starting at 1. | |
| fields | Yes | Native provider fields to return. Select only fields supported by the chosen object or report. | |
| pageSize | No | Maximum items requested per page. Follow the returned pagination information for remaining results. | |
| filtering | No | Native TikTok filtering object, for example {campaign_ids:["..."]} | |
| orderType | No | Sort direction for the selected ordering field. | |
| entityType | Yes | Provider entity type to retrieve. | |
| orderField | No | Provider field used to order report rows. | |
| advertiserId | Yes | TikTok advertiser account ID as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds context about exposing newly released fields and caller-selected native fields, but does not go beyond that into caveats like invalid field errors or pagination continuation behavior; this is acceptable given annotation coverage but not exceptional.
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, front-loaded with the action and resource, and every clause earns its place. The second sentence justifies the tool's existence as an escape hatch rather than repeating schema 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 raw/open-world tool with a full input schema and output schema, the description is sufficiently complete: it states what is listed, the flexible field selection model, and the reason to prefer it over curated endpoints. It could name the curated siblings or caution about field validation, but the schema already carries most of that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already has a meaningful description (e.g. native provider fields, filtering object example, pagination). The description's mention of caller-selected fields, filtering, sorting, and pagination is an accurate summary but adds little per-parameter meaning above 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 resource—listing TikTok campaigns, ad groups, or ads—and immediately distinguishes the tool as a raw GET escape hatch from the MCP's curated schemas. An agent can tell it apart from curated siblings like tiktok_get_campaigns or tiktok_get_ads and understand its broader 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 gives clear context for when the raw tool is appropriate: when newly released native fields are needed before curated schemas catch up. It does not explicitly name the curated alternatives or state when not to use it, so it stops short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_eventstiktok get eventsARead-onlyIdempotent
Discover pixel/app events or accessible tracking diagnostics for an advertiser. Uses best-effort endpoint checks plus reporting dimensions as fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| bcId | No | Optional Business Center ID. Defaults to TIKTOK_BC_ID/TIKTOK_BUSINESS_CENTER_ID for BC pixel discovery. | |
| appId | No | Optional TikTok app ID for app event lookup when the endpoint is available. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | No | End date YYYY-MM-DD for tracking diagnostics. Defaults to today. | |
| pixelId | No | Optional pixel ID for pixel event lookup. | |
| startDate | No | Start date YYYY-MM-DD for tracking diagnostics. Defaults to 7 days ago. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context with 'best-effort endpoint checks plus reporting dimensions as fallback', but it does not disclose rate limits, error conditions, or what happens when endpoints are unavailable.
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 core purpose is front-loaded, and the fallback mechanism is stated compactly. Every phrase 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?
With an output schema, full parameter descriptions, and annotations covering read-only/idempotent behavior, the description is largely complete. The only noticeable gap is that 'best-effort endpoint checks plus reporting dimensions as fallback' is not expanded, but structured data makes up for most of that 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 100%, and each parameter (advertiserId, bcId, appId, pixelId, date range, limit) is already fully documented. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('pixel/app events or accessible tracking diagnostics') and scopes it to an advertiser, which distinguishes it from list-style siblings like tiktok_get_pixels. The verb 'Discover' is slightly vague, but the object is concrete enough for an agent to identify the tool's job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: finding pixel/app events and tracking diagnostics for an advertiser. It does not explicitly state when to prefer this over alternatives or name any sibling alternative, so selection guidance relies mainly on inference from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_insightstiktok get insightsARead-onlyIdempotent
Query TikTok Ads performance insights using the current native/calculated metric catalog and query planning. Use tiktok://metrics resource to see available metrics. Use tiktok://dimensions for dimensions. Age/gender dimensions route automatically to AUDIENCE reports via tiktok_get_audience_report, including campaign/ad group levels. Other dimensions use the BASIC planner. Multiple audience breakdowns remain separate reports, never joined.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | AUDIENCE report page; follow nextPage. | |
| adIds | No | Restrict AUCTION_AD reports to these ad IDs, including daily trends. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | Yes | End date YYYY-MM-DD | |
| metrics | Yes | Metric keys from tiktok://metrics (e.g., spend, impressions, clicks) | |
| dataLevel | No | TikTok reporting aggregation level. Metrics and dimensions must be compatible with this level. | AUCTION_CAMPAIGN |
| orderType | No | Native sort direction; defaults to DESC when orderField is selected. | |
| startDate | Yes | Start date YYYY-MM-DD | |
| adgroupIds | No | Restrict audience reports to these ad groups. | |
| dimensions | No | Dimension keys from tiktok://dimensions (e.g., stat_time_day, campaign_id) | |
| orderField | No | Order the native report before limiting rows. Include this metric in metrics. | |
| reportType | No | Defaults to AUDIENCE for age/gender, BASIC otherwise. Explicit BASIC with demographics is rejected. | |
| campaignIds | No | Restrict audience reports to these campaigns. | |
| advertiserId | Yes | TikTok advertiser ID | |
| queryLifetime | No | Query lifetime metrics (cannot use time dimensions) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's burden is lower. It adds genuinely valuable behavioral context beyond the schema: automatic routing of age/gender to AUDIENCE reports, the 'never joined' guarantee for multiple audience breakdowns, and the existence of query planning. No contradictions with annotations. A 4 rather than 5 because it doesn't disclose error behavior, rate limits, or when queries become async (a sibling async-status tool exists).
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 sentences, each earning its place: purpose in the first sentence, resource lookup in the second, routing in the third, and the no-join caveat in the fourth. The structure is front-loaded and logical. A 4 rather than 5 because the opening mention of 'query planning' is never elaborated, leaving a slightly vague concept in the most important 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 15-parameter tool with an output schema and safety annotations, the description covers the critical judgment points: where to source valid metric/dimension keys, how report types are chosen, and how the tool relates to the audience-report sibling. What's missing is modest — no mention of pagination beyond what the schema's 'follow nextPage' already says, no async/rate-limit behavior. Given the output schema and annotations pick up the rest, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does add some semantic value by instructing the agent to consult tiktok://metrics and tiktok://dimensions for valid keys (which enriches the metrics and dimensions parameters) and by encoding the reportType routing rule (explicit BASIC with demographics is rejected). However, the schema already documents date formats, limits, enums, and defaults, so the description isn't carrying a heavy parameter load. A 3 is correct.
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 ('Query TikTok Ads performance insights') and immediately frames the tool as a catalog-driven query planner. It differentiates itself from the tiktok_get_audience_report sibling by explicitly stating that age/gender dimensions route to that tool, and it also distinguishes itself from the raw report tools in the sibling list. The purpose is unambiguous and well-scoped.
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 routing rules: age/gender dimensions go through tiktok_get_audience_report, other dimensions use the BASIC planner, and audience breakdowns are never joined. It also tells the agent where to look up valid metrics and dimensions (tiktok://metrics and tiktok://dimensions), which is practical selection guidance rather than leaving it to inference. This is strong alternative-routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_pixelstiktok get pixelsARead-onlyIdempotent
List TikTok pixels and, when permissions allow it, pixel event metadata for an advertiser. Falls back with explicit warnings when endpoints are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| bcId | No | Optional Business Center ID. Defaults to TIKTOK_BC_ID/TIKTOK_BUSINESS_CENTER_ID for BC pixel endpoints. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| pixelIds | No | Optional pixel IDs/codes to inspect. If omitted, the tool discovers pixels from BC pixel endpoints first, then advertiser pixel/list. | |
| advertiserId | Yes | TikTok advertiser ID | |
| includeEvents | No | Also try to fetch pixel events for discovered or provided pixel IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond those: pixel event metadata is only fetched 'when permissions allow it,' and the tool 'falls back with explicit warnings when endpoints are unavailable.' This discloses real-world failure modes.
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 compact sentences with no filler. The core action is front-loaded, and the fallback/warning behavior is stated in one short second 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 read-only listing tool with full schema coverage, annotations indicating safety, and an output schema, the description provides everything an agent needs to select and invoke the tool correctly. It also covers permissions and fallback behavior, which are the main practical uncertainties.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented in the schema. The description adds only a high-level reference to pixels, event metadata, and advertiser scope, but no meaningful parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List TikTok pixels and, when permissions allow it, pixel event metadata for an advertiser.' It clearly states the operation's scope and differentiates the tool from siblings by focusing on the pixel resource rather than campaigns, ads, or audiences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given for when to use this tool versus alternatives like tiktok_get_events or other listing tools. The description mentions permission limits and fallback behavior, but it does not state when this tool should be preferred or when another sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_read_endpointtiktok get read endpointARead-onlyIdempotent
Advanced GET-only TikTok Business API escape hatch for documented JSON read endpoints not yet modeled by a specialized MCP tool. Relative v1.3 paths and JSON-compatible query parameters are validated; OAuth, mutations, downloads, and lead-record paths are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint | Yes | Relative endpoint such as split_test/result/get, file/video/ad/info, store/list, or business/video/list | |
| parameters | No | Native query parameters for this allowlisted read endpoint. Do not provide credentials or account overrides. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond that: relative v1.3 path validation, JSON-compatible query parameter validation, and the specific blocked path categories. GET-only fully aligns with the readOnly annotation; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. The purpose is front-loaded ('Advanced GET-only... escape hatch') before constraints, and each clause earns its place — path validation, block categories, and scope are all packed in efficiently.
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 generic escape hatch with an output schema and rich annotations, the description is nearly complete: it covers purpose, scope, validation behavior, and exclusions. The only minor gap is not spelling out what happens on an invalid or non-allowlisted path, which would further guide error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the endpoint parameter carries concrete examples (split_test/result/get, file/video/ad/info, store/list), so the schema does the heavy lifting. The description adds one meaningful constraint beyond the schema — 'JSON-compatible query parameters' — which specifies the accepted format for the parameters object.
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: a GET-only escape hatch for the TikTok Business API's documented JSON read endpoints. It explicitly carves out its niche ('not yet modeled by a specialized MCP tool'), which distinguishes it from the 34 specialized siblings like tiktok_get_ads and tiktok_get_campaigns. No ambiguity about what it is or when it applies.
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 condition 'not yet modeled by a specialized MCP tool' is an explicit when-to-use signal that routes the agent away from siblings, and the blocked categories (OAuth, mutations, downloads, lead-record) define exclusions. However, it stops short of naming concrete alternative tools for those excluded cases, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_report_rawtiktok get report rawARead-onlyIdempotent
Run a native TikTok BASIC or AUDIENCE synchronous report with caller-selected dimensions and metrics. AUDIENCE supports demographics such as age/gender at campaign/adgroup levels; tiktok_get_audience_report provides a guided path. Use when a current API field is not yet in tiktok://metrics; unlike tiktok_get_insights, this tool does not calculate aliases or auto-split incompatible selections.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to request, starting at 1. | |
| endDate | No | Last date of the reporting period, in YYYY-MM-DD format, on or after startDate. | |
| metrics | Yes | Native or documented calculated metric names to request. Check compatibility with the selected dimensions. | |
| pageSize | No | Maximum items requested per page. Follow the returned pagination information for remaining results. | |
| dataLevel | Yes | TikTok reporting aggregation level. Metrics and dimensions must be compatible with this level. | |
| filtering | No | Native provider filter expressions; credentials and account overrides are not allowed. | |
| orderType | No | Sort direction for the selected ordering field. | |
| startDate | No | First date of the reporting period, in YYYY-MM-DD format. | |
| dimensions | Yes | Native reporting dimensions. Validate compatibility with the selected metrics. | |
| orderField | No | Provider field used to order report rows. | |
| reportType | No | Native provider report type; determines supported metrics and dimensions. | BASIC |
| serviceType | No | TikTok report service category. | AUCTION |
| advertiserId | Yes | TikTok advertiser account ID as a string. | |
| queryLifetime | No | Request lifetime reporting instead of the explicit reporting period where TikTok supports it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false. The description adds real behavioral limits beyond those: the report is synchronous, it does not calculate aliases, and it does not auto-split incompatible selections. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then audience scope, then routing guidance. No filler, though the second sentence packs two ideas (demographic support plus the guided alternative) into one sentence, making it slightly denser than ideal.
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 14-parameter raw report tool, the description covers purpose, when-to-use, alternatives, and behavioral limits. Schema at 100% coverage, annotations, and an output schema carry the remaining load (pagination is already explained in the pageSize description). Nothing 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 description coverage is 100%, so baseline 3 applies. The description adds modest parameter meaning ('AUDIENCE supports demographics such as age/gender at campaign/adgroup levels'), but compatibility constraints are already documented in the schema property descriptions, so added value is marginal.
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 ('Run a native TikTok BASIC or AUDIENCE synchronous report') with caller-selected dimensions/metrics. Explicitly distinguishes from siblings: 'unlike tiktok_get_insights, this tool does not calculate aliases or auto-split incompatible selections' and points to tiktok_get_audience_report as the guided 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?
'Use when a current API field is not yet in tiktok://metrics' gives an explicit trigger condition. It also states when not to use: tiktok_get_insights handles aliases/auto-splitting, and tiktok_get_audience_report is the guided audience path — clear alternatives with selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_search_ads_maturitytiktok get search ads maturityARead-onlyIdempotent
Diagnose TikTok Search Ads maturity from keyword/search-term reporting and optional keyword recommendation endpoints. Read-only diagnostics only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | No | End date YYYY-MM-DD. Defaults to today. | |
| dataLevel | No | TikTok reporting aggregation level. Metrics and dimensions must be compatible with this level. | AUCTION_ADGROUP |
| startDate | No | Start date YYYY-MM-DD. Defaults to 14 days ago. | |
| advertiserId | Yes | TikTok advertiser ID | |
| seedKeywords | No | Optional seed keywords for keyword recommendation endpoint diagnostics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description reinforces read-only behavior and adds that it works from keyword/search-term reporting and optional keyword recommendation endpoints, but it does not add significant behavioral detail beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose. The second sentence restates read-only behavior already present in annotations, which is slightly redundant, so not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, full schema parameter descriptions, and strong annotations. The description adequately states the tool's purpose and data sources; combined with structured fields, an agent has enough to invoke it. It lacks explicit usage guidance, which is already scored separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies. The description does not explain parameter syntax or defaults, though 'optional keyword recommendation endpoints' loosely maps to seedKeywords. The schema carries parameter 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 ('Diagnose') and a specific resource ('TikTok Search Ads maturity') and names the data sources. It is clear, but it does not explicitly differentiate from sibling diagnostic tools such as tiktok_shop_catalog_diagnostics or tiktok_creative_fatigue_recipes.
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 implied by 'Diagnose TikTok Search Ads maturity' and 'Read-only diagnostics only,' but there is no explicit guidance on when to choose this tool over sibling tools or when not to use it. No alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_shop_catalog_diagnosticstiktok get shop catalog diagnosticsARead-onlyIdempotent
Read-only TikTok Shop/catalog/e-commerce diagnostics. Tries catalog reporting first, then Shop auction metrics, and returns endpoint warnings when catalog permissions are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| bcId | No | Optional TikTok Business Center ID. Defaults to TIKTOK_BC_ID/TIKTOK_BUSINESS_CENTER_ID, then advertiser discovery. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | No | End date YYYY-MM-DD. Defaults to today. | |
| catalogId | No | Optional catalog ID for product/product-set inventory endpoint attempts. | |
| dimension | No | Reporting dimension used to group and compare results. | product_id |
| startDate | No | Start date YYYY-MM-DD. Defaults to 14 days ago. | |
| productIds | No | Optional product IDs to filter report rows where supported. | |
| advertiserId | Yes | TikTok advertiser ID | |
| includeDaily | No | Add stat_time_day to report dimensions where supported. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavior beyond the annotations: it discloses a fallback chain (catalog reporting → Shop auction metrics) and notes that endpoint warnings are returned when catalog permissions are unavailable. This supplements the readOnlyHint, openWorldHint, and idempotentHint without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the read-only domain and packs in the fallback behavior and warning behavior. Every part earns its place; there is no filler or repetition of annotation data.
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 a fully described schema, an output schema, and annotations covering the safety profile, the description covers the essential behavioral complexity—fallback logic and permission warnings. The only notable gap is the lack of guidance for choosing this tool over the many reporting siblings, but that is a usage-guideline concern rather than a completeness gap for invoking 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 100%, so the parameters are fully documented in the input schema. The description itself contributes no additional parameter-level semantics beyond what the schema already provides, which is acceptable at the baseline for high 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 identifies a specific domain—TikTok Shop/catalog/e-commerce diagnostics—and explains the core behavior of trying catalog reporting first, then Shop auction metrics. It is clear about the read-only nature, though 'diagnostics' is a noun rather than an explicit verb like 'retrieve' or 'get'. It does not explicitly contrast with sibling tools, but the scope is distinctive enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided, and no alternatives are named relative to siblings like tiktok_get_insights or tiktok_get_report_raw. The phrase 'TikTok Shop/catalog/e-commerce diagnostics' implies a niche use case, but the description leaves the choice entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_spark_adstiktok get spark adsARead-onlyIdempotent
Return Spark Ads context from ad fields when available, with a conservative fallback if Spark-specific fields are not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Optional ad IDs to inspect. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| adgroupId | No | Optional ad group ID filter. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'conservative fallback if Spark-specific fields are not supported' behavior, which is a useful behavioral trait beyond annotations. However, it doesn't disclose error handling, rate limits, or what 'conservative' means in practice.
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, compact sentence with no filler. It front-loads the primary action (return Spark Ads context) and mentions the fallback. It is concise but not overly terse, earning a strong score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (4 parameters, no nested objects), the presence of an output schema, and the annotations covering safety, the description adequately covers what an agent needs. The fallback behavior is mentioned, and the return format is handled by the output schema. Nothing critical is missing, though the meaning of 'Spark Ads context' could be elaborated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (adIds, limit, adgroupId, advertiserId) are already documented. The description adds no parameter-specific meaning beyond what the schema provides. The baseline of 3 applies since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns Spark Ads context from ad fields, with a specific fallback behavior. It distinguishes itself from siblings like tiktok_get_spark_organic_joins by naming the resource (Spark Ads) and the conservative fallback. However, it doesn't explicitly state what 'Spark Ads context' includes, relying on the output schema for detail.
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 retrieving Spark Ads context when available, but provides no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among the sibling tools. The fallback behavior hints at graceful handling, but the agent is left to infer the appropriate context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_spark_organic_joinstiktok get spark organic joinsBRead-onlyIdempotent
Join accessible Spark Ads fields with paid page/post reporting and optional organic identity/post endpoints when permissions allow. Read-only only.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Optional ad IDs to inspect. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| endDate | No | End date YYYY-MM-DD for page_id reporting. Defaults to today. | |
| adgroupId | No | Optional ad group ID filter. | |
| startDate | No | Start date YYYY-MM-DD for page_id reporting. Defaults to 14 days ago. | |
| advertiserId | Yes | TikTok advertiser ID | |
| includeOrganicEndpoints | No | Try identity/post metadata endpoints when Spark IDs are discovered. | |
| includeExperimentalEndpoints | No | Also try undocumented/unstable Organic API endpoint candidates that may return 404. Disabled by default to keep warnings actionable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Read-only only' merely repeats that. It does add useful context by mentioning permissions and optional organic endpoints, which implies some requests may fail or be skipped. However, it does not disclose failure behavior, pagination, or rate-limit concerns beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core join concept, but the phrase 'Read-only only' is redundant and slightly awkward. The first sentence is dense and could be more legible, yet there is no substantial waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full parameter schema coverage, and rich annotations, the description provides a serviceable high-level orientation. However, for a tool with 8 parameters and sibling tools like tiktok_get_spark_ads, it lacks enough context about what the joined output contains, when to select it over alternatives, and how the optional endpoints behave when permissions are insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters with defaults, bounds, and filters. The description adds no parameter-level detail, so it does not exceed the baseline expected when the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Join') and names the resource ('Spark Ads fields', 'paid page/post reporting', 'organic identity/post endpoints'). It conveys that this tool merges multiple data sources, which is reasonably distinct from a plain get_tool. It could be clearer about what the returned joined record looks like, but it is not tautological or vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to use this tool versus alternatives. It does not mention tiktok_get_spark_ads, tiktok_get_ads, or tiktok_get_insights, nor does it state exclusion criteria. The only conditional context is 'when permissions allow,' which is about endpoint availability rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_targetingtiktok get targetingARead-onlyIdempotent
Read configured ad group targeting and audience references: custom/lookalike inclusions/exclusions, geo, language, age/gender, placements, interests and behaviors. Supports classic and upgraded Smart+ (smartPlus:true), preserving targeting_spec and automatic targeting settings. Does not infer delivered audiences or hidden Smart+ signals. Use tiktok_get_audiences for audience names/types and tiktok_get_audience_report for delivered demographics.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to request, starting at 1. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| smartPlus | No | Use true for upgraded Smart+ ad groups: reads their native targeting_spec and exact placements via smart_plus/adgroup/get. No fallback to classic settings. | |
| adgroupIds | No | Restrict TikTok results to these ad group IDs. | |
| campaignId | No | Exact TikTok numeric ID, as a string. | |
| advertiserId | Yes | Exact TikTok numeric ID, as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat safety. It adds important behavioral context: it preserves targeting_spec and automatic targeting settings, does not fall back to classic settings when smartPlus is true, and does not infer delivered audiences or hidden Smart+ signals. This goes beyond annotations and clarifies scope 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 concise and front-loaded with the tool's primary purpose, followed by scope limitations and sibling references. It avoids redundancy with the schema and annotations. It is slightly dense but every sentence adds information, earning a 4 rather than a 5 due to the density of technical terms (e.g., Smart+) that might require quick 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?
Given the tool's moderate complexity and the presence of a rich schema and annotations, the description is complete enough for an agent to invoke it correctly. It covers the key behavioral nuances (Smart+ handling, no inference of delivered audiences) and routes to appropriate siblings. The output schema exists, so return format details are not needed. 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 100%, so parameters are well-documented in the schema itself. The description adds value by explaining the smartPlus parameter's role and behavior (reads native targeting_spec, no fallback), which is not fully captured in the schema. It also clarifies that adgroupIds restricts results, adding semantic context beyond the schema's terse 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 reads configured ad group targeting and audience references, enumerating specific targeting dimensions (e.g., geo, language, age/gender, placements). It distinguishes itself from sibling tools like tiktok_get_audiences and tiktok_get_audience_report by explaining what it does not do (inferring delivered audiences or hidden Smart+ signals).
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 provides usage context: it supports both classic and upgraded Smart+ ad groups, and instructs to use 'smartPlus:true' for upgraded Smart+ ad groups. It also explicitly names alternatives (tiktok_get_audiences, tiktok_get_audience_report) and what they are for, giving clear when-to-use vs. when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_targeting_catalogtiktok get targeting catalogARead-onlyIdempotent
Read TikTok targeting and planning catalogs: locations, languages, interests, behaviors, hashtags, Search Ads keyword ideas/health, devices, carriers, contextual tags, content exclusions, and time zones.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search text used to find matching entries in the selected catalogue. | |
| catalog | Yes | Allowlisted targeting dictionary or catalog to inspect. | |
| parameters | No | Additional native parameters documented for the selected GET endpoint | |
| advertiserId | No | TikTok advertiser account ID as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful functional scope by listing the catalog categories, but it does not describe return format, pagination, rate limits, or whether certain catalogs may be unavailable for some advertisers. This parallels the benchmark case where the description contributes context but no behavioral depth beyond safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The leading verb and resource are clear, and the following colon-led list is informative without being excessive. Every part of the sentence contributes to understanding.
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?
While the tool is read-only with a rich schema and output schema, the description does not explain how to choose between the `catalog` parameter and the free-form `parameters` object, nor does it mention that some catalogs may require `advertiserId` or `query`. Given the nested objects and 17 enum values, the description alone is too sparse for fully confident invocation, though annotations and schema partially compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not elaborate on any parameters, such as how `query` or `parameters` interact with a chosen `catalog`. It provides no additional meaning beyond what the schema already documents.
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 the specific verb "Read" plus a clear resource (“targeting and planning catalogs”) and enumerates the catalog contents (locations, languages, interests, behaviors, hashtags, etc.). This is distinctive enough to separate it from sibling tools like tiktok_get_targeting or tiktok_search_keywords, since it focuses on dictionary/catalog data rather than account or campaign records.
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 that this tool is used when an agent needs to inspect or validate targeting catalog values, but it never explicitly states when to choose this tool over alternatives such as tiktok_get_targeting or tiktok_search_keywords. There are no when/when-not conditions or references to sibling tools, so the 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.
tiktok_get_uploaded_videotiktok get uploaded videoARead-onlyIdempotent
Read one uploaded video from this advertiser’s media library. Returns ready only after its media information is available with positive duration and dimensions. Does not upload again.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | Exact uploaded video ID returned by TikTok. | |
| advertiserId | Yes | Exact TikTok numeric ID as a string, never a rounded JavaScript number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, but the description adds useful behavioral context beyond those flags: the result is only ready once positive duration and dimensions exist, and the call does not upload again. This helps set expectations for polling or post-upload checks. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler: purpose, readiness behavior, and non-upload clarification. The core identity is front-loaded, and every sentence contributes useful 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 two-parameter read-only tool with full schema coverage, rich safety annotations, and an output schema, the description is complete. It tells the agent what is read, when the result is ready, and what the call does not do, leaving no essential operational 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?
The input schema fully describes both parameters (advertiserId and videoId) with 100% coverage, so the description does not need to repeat their meaning. It also adds no additional parameter-level nuance, which is acceptable given the schema's clarity.
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: 'Read one uploaded video from this advertiser’s media library.' It clearly signals a single-item read rather than a list or upload, which helps distinguish it from tools like tiktok_list_ad_videos, although no sibling is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The readiness condition ('Returns ready only after its media information is available with positive duration and dimensions') implies this tool should be used to check an uploaded video after processing. However, it does not explicitly say when to choose this over similar video-related siblings, so the guidance remains 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.
tiktok_get_video_assetstiktok get video assetsBRead-onlyIdempotent
Return ad-linked TikTok video asset metadata from ad/get and video material endpoints when available.
| Name | Required | Description | Default |
|---|---|---|---|
| adIds | No | Optional ad IDs to inspect. | |
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| videoIds | No | Optional video IDs to look up directly in material endpoints. | |
| adgroupId | No | Optional ad group ID filter. | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds some behavioral context by naming the underlying endpoints and suggesting conditional availability ('when available'), but it does not describe edge cases like empty results or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. It immediately states the action and resource, 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?
While the output schema covers return shape and annotations cover safety, the description lacks guidance on how this tool relates to sibling asset-listing tools and what 'ad-linked' specifically means in terms of linkage (e.g., via adIds vs videoIds). This leaves some ambiguity for an agent selecting among similar 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 100%, so all five parameters are already documented in the schema. The description does not add any parameter-level semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Return') and resource ('ad-linked TikTok video asset metadata') from named endpoints. It is distinguishable from many siblings by emphasizing 'ad-linked' and 'video asset metadata', but it does not explicitly name alternative tools or contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus the many sibling tools (e.g., tiktok_list_ad_videos, tiktok_get_asset_urls). 'When available' hints at a condition but does not explain the intended use case or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_get_write_contexttiktok get write contextARead-onlyIdempotent
Read the exact TikTok entity, parent settings and advertiser currency/timezone before editing or building a new configuration. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | Entity level to inspect. | |
| entityId | Yes | Exact TikTok numeric ID as a string, never a rounded JavaScript number. | |
| smartPlus | No | Use the dedicated upgraded Smart+ endpoints rather than classic endpoints. | |
| advertiserId | Yes | Exact TikTok numeric ID as a string, never a rounded JavaScript number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds useful context about what is read (entity, parent settings, currency/timezone) beyond the annotations, which is valuable for agents deciding whether to call this tool. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero redundancy. It states the purpose and usage context efficiently without wasting 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 an output schema exists and annotations cover safety, the description is sufficient. It clearly explains the purpose, usage timing, and scope of what is read, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% per context signals, so the schema fully documents all four parameters. The description does not add syntax or format details beyond what the schema provides, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the exact TikTok entity, parent settings, and advertiser currency/timezone, which is a specific verb+resource. It also frames it as a pre-write step ('before editing or building'), distinguishing it from general read tools among the many get_* 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?
It gives a clear usage context: 'before editing or building a new configuration.' This implies when to use it, but it does not explicitly name alternative tools or state when not to use it, falling 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.
tiktok_health_checktiktok health checkARead-onlyIdempotent
Read-only health check for TikTok credentials, accessible advertisers, and advertiser info. Never returns tokens or secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| advertiserId | No | Advertiser ID to verify. Defaults to TIKTOK_ADVERTISER_ID, then the first accessible advertiser. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds a valuable security guarantee—'Never returns tokens or secrets'—which goes beyond the annotations and provides critical behavioral context for an agent handling credentials. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler. The core purpose ('Read-only health check') leads immediately, and the security note is a concise addition. 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?
Given the low complexity (one optional parameter), existing output schema, and annotations covering safety, the description is complete. It tells the agent what the tool checks and what it guarantees not to return, leaving no critical gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter, so the schema fully documents advertiserId, including its default behavior. The description adds no additional parameter-level detail, which matches the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('health check') and resource (TikTok credentials, accessible advertisers, and advertiser info). It distinguishes itself from sibling data-retrieval tools by framing it as a diagnostic check, not a data pull. 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 usage as a verification/health-check tool but does not explicitly state when to use it versus alternatives (e.g., tiktok_list_advertisers or tiktok_get_advertiser_info). No exclusions or conditional guidance are provided, leaving the agent to infer its role from the 'health check' label.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_list_ad_imagestiktok list ad imagesARead-onlyIdempotent
List the advertiser's whole image library (file/image/ad/search): file name, dimensions, signature, carousel usability, and a publicly served image URL signed for roughly thirty days (image_url_expires_at gives the exact instant).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (page_info.total_page in the response gives the bound) | |
| pageSize | No | Items per page (TikTok caps file library pages at 100) | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context beyond this: image URLs are publicly served and signed for about thirty days, with the exact expiration provided via image_url_expires_at. This informs the agent about time-sensitive data without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the primary action and resource, then adds the most critical return fields and URL expiry behavior. Every clause earns its place, 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?
Given an output schema exists, the description adequately covers what an agent needs to know: the resource scope, pagination hints through 'whole library', and the time-sensitive nature of the URLs. It is complete for a read-only list operation with three well-documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (advertiserId, page, pageSize) are already well documented. The description does not add parameter-specific semantics beyond noting it lists the 'whole' library, which implicitly suggests pagination is relevant. Baseline 3 is appropriate because the schema carries the parameter 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 states a specific verb ('List'), resource ('advertiser's whole image library'), and enumerates the exact fields returned (file name, dimensions, signature, carousel usability, signed URL). This clearly distinguishes it from sibling tools like tiktok_list_ad_videos and tiktok_get_video_assets, which target different asset types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: when the agent needs the advertiser's full image library, including all categories (file/image/ad/search). It does not explicitly name alternatives or state exclusions, but the context is clear enough for an agent to select it over video-focused siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_list_advertiserstiktok list advertisersARead-onlyIdempotent
List all TikTok advertiser accounts accessible with the current token. Returns advertiser ID, name, and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context about token scoping ('accessible with the current token') and the returned fields. It does not describe pagination or error behavior, but those are less critical given the strong annotation coverage and presence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver purpose, scope, and return fields with no filler. The main action and scope are front-loaded, and every word contributes meaning.
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-only list operation with annotations and an output schema already present, the description covers what an agent needs: what is listed, token scoping, and the returned fields. No prerequisites or missing caveats are needed 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?
The input schema has zero parameters and schema coverage is 100%, so there is no parameter ambiguity for the description to resolve. The description appropriately says nothing about parameters, and the 0-param baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List all' with a clear resource ('TikTok advertiser accounts') and a scope constraint ('accessible with the current token'). It also states the exact returned fields (advertiser ID, name, status), making the tool's purpose immediately distinguishable from siblings like tiktok_get_advertiser_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the right use case: when an agent needs the full set of advertiser accounts under the current token. However, it does not explicitly mention when to prefer this over sibling tools like tiktok_get_advertiser_info or asset-listing tools, nor does it name any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_list_ad_videostiktok list ad videosARead-onlyIdempotent
List the advertiser's whole video library (file/video/ad/search): file name, duration, dimensions, signature, and publicly served preview and cover URLs. Every TikTok URL is signed and expires after roughly six hours: re-resolve with tiktok_get_asset_urls before use.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (page_info.total_page in the response gives the bound) | |
| pageSize | No | Items per page (TikTok caps file library pages at 100) | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds substantial behavioral facts beyond that: URLs are signed, expire after roughly six hours, need re-resolving, and the response includes publicly served preview/cover URLs. This is exactly the kind of non-obvious behavior 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?
Two sentences with no filler: the first states the scope and returned fields, the second delivers the critical expiry caveat and the follow-up action. It is front-loaded and every sentence carries 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?
With an output schema present and only three well-documented parameters, the description covers what an agent needs to invoke the tool correctly. It explains the response's notable fields and the URL re-resolution requirement, so there are no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, including pagination bounds and defaults. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (list), a clear resource (the advertiser's whole video library), and enumerates the returned fields (file name, duration, dimensions, signature, preview/cover URLs). It is distinct from list-type siblings such as tiktok_list_ad_images because it is explicitly about videos and the full library 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 establishes clear operational context: this returns the full video library and the URLs must be re-resolved via tiktok_get_asset_urls before use because they expire in about six hours. It does not explicitly contrast with siblings such as tiktok_get_video_assets or tiktok_get_uploaded_video, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_search_keywordstiktok search keywordsARead-onlyIdempotent
Get keyword suggestions for TikTok Search Ads. Returns recommended keywords with search volume estimates.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of returned items or rows. The declared bounds and default apply; use pagination for additional results. | |
| keywords | Yes | Seed keywords to get suggestions for | |
| advertiserId | Yes | TikTok advertiser ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it is a safe read operation. The description adds that it returns recommended keywords with volume estimates, which is useful but not extensive. There is no contradiction, and the annotation coverage means the description doesn't need to carry the full burden.
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 redundancy. The purpose is front-loaded, and the return detail is stated succinctly. 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?
With a rich annotation set covering safety and idempotency, a complete parameter schema, and an output schema (has_output_schema=true), the description covers the core purpose and return shape. It doesn't mention any prerequisites or caveats, but given the overall context, 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 description coverage is 100%, so all three parameters (advertiserId, keywords, limit) are already documented in the schema. The description adds no extra parameter-level semantics beyond what the schema provides, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (get), resource (keyword suggestions), and context (TikTok Search Ads), plus the return value (keywords with search volume estimates). It is unambiguous and distinct from the many sibling tools, which are all about audiences, ads, campaigns, or reports.
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 for generating keyword suggestions but does not explicitly state when to prefer it over alternatives or when not to use it. No exclusions or alternative tool references are given, leaving the agent to infer the context from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tiktok_validate_querytiktok validate queryARead-onlyIdempotent
Validate a TikTok metric/dimension combination BEFORE executing. Checks dimension grouping rules, lifetime compatibility, and metric/dimension compatibility.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | Yes | Metric keys to validate | |
| dataLevel | No | TikTok reporting aggregation level. Metrics and dimensions must be compatible with this level. | AUCTION_CAMPAIGN |
| dimensions | No | Dimension keys to validate | |
| reportType | No | Native provider report type; determines supported metrics and dimensions. | |
| queryLifetime | No | Request lifetime reporting instead of the explicit reporting period where TikTok supports it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds useful behavioral context about the validation logic (dimension grouping, lifetime compatibility) and that it is a pre-execution step. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight two-sentence structure with the primary purpose front-loaded. Every sentence adds distinct value with 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?
With an output schema present, return values need not be explained. The description covers purpose, timing, and validation scope, which is sufficient for an agent to decide when to call it. It does not detail failure behavior or prerequisites, but these are likely covered by the output schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema. The description does not add parameter-specific semantics beyond what the schema provides; it only references the metric/dimension combination generically. This meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: validating a TikTok metric/dimension combination before executing. It specifies what is checked (dimension grouping rules, lifetime compatibility, metric/dimension compatibility), which distinguishes it from all sibling tools that fetch data rather than validate.
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 indicates usage context with 'BEFORE executing', implying it should be used prior to query tools like tiktok_get_insights or tiktok_get_report_raw. However, it does not explicitly name alternatives or provide when-not-to-use guidance, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
35 tool updates
v2.0.1- First observed
tiktok_get_adgroups - First observed
tiktok_get_ads - First observed
tiktok_get_advertiser_info - First observed
tiktok_get_asset_urls - First observed
tiktok_get_async_report_status - First observed
tiktok_get_audience_details - First observed
tiktok_get_audience_overlap - First observed
tiktok_get_audience_report - First observed
tiktok_get_audiences - First observed
tiktok_get_campaigns - First observed
tiktok_get_carousel_music - First observed
tiktok_get_creative_fatigue_recipes - First observed
tiktok_get_creatives - First observed
tiktok_get_delivery_status - First observed
tiktok_get_entities_raw - First observed
tiktok_get_events - First observed
tiktok_get_insights - First observed
tiktok_get_pixels - First observed
tiktok_get_read_endpoint - First observed
tiktok_get_report_raw - First observed
tiktok_get_search_ads_maturity - First observed
tiktok_get_shop_catalog_diagnostics - First observed
tiktok_get_spark_ads - First observed
tiktok_get_spark_organic_joins - First observed
tiktok_get_targeting - First observed
tiktok_get_targeting_catalog - First observed
tiktok_get_uploaded_video - First observed
tiktok_get_video_assets - First observed
tiktok_get_write_context - First observed
tiktok_health_check - First observed
tiktok_list_ad_images - First observed
tiktok_list_ad_videos - First observed
tiktok_list_advertisers - First observed
tiktok_search_keywords - First observed
tiktok_validate_query
TDQS
Scored across 35 tools
Many tools have overlapping boundaries: tiktok_get_campaigns, tiktok_get_adgroups, tiktok_get_ads, and tiktok_get_entities_raw all list entity configurations, while tiktok_get_insights, tiktok_get_audience_report, and tiktok_get_report_raw cover overlapping reporting territory. The descriptions are detailed, but an agent would need very careful parsing to reliably pick the right tool.
All tool names follow a consistent tiktok_{verb}_{noun} pattern in snake_case, with get and list as the dominant verbs. Minor exceptions like tiktok_health_check and tiktok_validate_query still fit the overall readable convention.
35 tools is a large surface for a single server, and many are narrow variants or raw fallback/escape-hatch tools that could be consolidated. While the TikTok Ads domain is broad, the set feels over-decomposed.
For a read-only analytics/insights server, coverage is strong: campaigns, ad groups, ads, audiences, creatives, pixels, events, targeting catalogs, diagnostics, and raw API escape hatches are all represented. The intentional absence of write operations is a scope choice rather than a dead end, though a general-purpose TikTok Ads server would need mutation tools.
Maintenance
Related MCP Connectors
Hosted TikTok ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Google Ads MCP server: 16 tools for reporting, campaigns, keywords, assets. Writes preview first.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Related MCP Servers
- AlicenseAqualityBmaintenanceSelf-hosted Google Ads MCP server: 35 read tools and 10 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/google-ads-mcp-server; npm package remains @getmcpads/google-ads-mcp-server.35248 npmApache 2.0
- AlicenseAqualityAmaintenanceSelf-hosted Meta Ads MCP server with 41 read tools and 23 opt-in, preview-first write tools. Maintained source relocated from getmcpads-com/meta-ads-mcp-server; npm package remains @getmcpads/meta-ads-mcp-server.41255 npmApache 2.0
- AlicenseNot gradedqualityAmaintenanceSelf-hosted Pinterest Ads MCP server with 28 read tools and 25 opt-in, preview-first write tools. Maintained source relocated to get-mcp-ads/pinterest-ads-mcp-server; npm package remains @getmcpads/pinterest-ads-mcp-server.229 npmApache 2.0
- AlicenseAqualityAmaintenanceSelf-hosted Google Analytics 4 MCP server with 27 read-only tools for the Google Analytics Data and Admin APIs. Maintained source relocated to get-mcp-ads/google-analytics-mcp-server; npm package remains @getmcpads/google-analytics-mcp-server.27219 npmApache 2.0