Skip to main content
Glama
dhawalshah

tiktok-ads-mcp

TikTok Ads MCP

A Model Context Protocol (MCP) server for the TikTok Business API. Connect Claude (or any MCP-compatible AI client) directly to your TikTok ad accounts to query campaigns, video performance, audience targeting, benchmarks, and more — all in natural language.

The server speaks the MCP authorization spec (2025-06-18), so it works as a remote connector anywhere Claude supports custom MCP servers — claude.ai (personal), Claude Desktop, and Claude Teams. Add one URL, click "Connect", sign in with TikTok, done. For a Teams plan, the org owner adds the URL once and each member individually authenticates on first use.

What you can do

Account & Business Center

  • List authorized advertiser accounts under your TikTok identity

  • Get advertiser metadata (currency, timezone, industry, status)

  • List Business Centers, BC members, and BC assets

Campaigns, Ad Groups & Ads

  • List standard campaigns and Smart+ (AI-optimised) campaigns

  • List ad groups and individual ads with creatives and status

  • Inspect video assets and creative fatigue scores

Reporting & Performance

  • Custom reports with any TikTok dimensions and metrics over any date range

  • Video-specific metrics (2s/6s views, completion rate, average watch time)

  • Ad benchmark comparisons against industry CTR/CVR/CPM/CPC

  • Async reports for large date ranges (partner-programme tools)

Audience, Pixels, Conversions

  • Browse all interest categories for audience targeting

  • Audience reach estimates

  • List TikTok Pixel installs + conversion event stats

  • List offline event sets

Account Operations

  • Advertiser balance for the authorised account


Related MCP server: tiktok-mcp

How auth works

There are two modes. Pick one.

Mode A — Local STDIO (one user, no server)

Use this if you only want it on your own machine. Run the included one-shot OAuth flow (get_token.py / catch_auth.py) once, set TIKTOK_ACCESS_TOKEN in your env, and Claude Desktop launches the server as a subprocess. No Firestore, no Cloud Run, no public URL.

Mode B — Remote HTTP server (Claude Teams, claude.ai, multi-user)

The MCP server is also an OAuth 2.1 authorization server. When Claude connects:

  1. Claude discovers our metadata at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server.

  2. Claude registers itself via Dynamic Client Registration (POST /oauth/register).

  3. Claude redirects the user to /oauth/authorize. We delegate identification to TikTok Business OAuth.

  4. After TikTok login, we issue our own opaque bearer token to Claude — TikTok credentials never leave the server.

  5. On each /mcp request Claude sends our bearer; we map it server-side to the right user's stored TikTok credentials and call the TikTok Business APIs.

A note on access control. TikTok returns whatever email the user signed up with — usually personal (gmail, hotmail, etc.) rather than work email. Domain-based restriction therefore isn't reliable. By default this MCP allows any TikTok Business user to connect; the security comes from TikTok's own permission model (each user only sees ad accounts their TikTok profile has been authorised for). For tighter control, set ALLOWED_EMAILS to a comma-separated allow-list of TikTok-account emails.


Prerequisites

  • Python 3.10+

  • A TikTok Business app with at least one advertiser authorised

  • A Google Cloud project (Mode B only)


Step 1 — Create a TikTok Developer App

  1. Go to the TikTok Business API Developer Portal and create an app.

  2. Note your App ID and Secret (used as the OAuth client credentials).

  3. Under Advertiser redirect URLs, add:

    • http://localhost:8080/oauth/callback (local dev)

    • https://YOUR-CLOUD-RUN-URL/oauth/callback (Mode B — add after deploy)

  4. Note: TikTok shows a 10-minute propagation delay for new redirect URLs.


Step 2 — Install

git clone https://github.com/dhawalshah/tiktok-ads-mcp
cd tiktok-ads-mcp
pip install -r requirements.txt
cp env.template .env       # fill in values

Step 3 — Mode A: Local STDIO

Run the one-shot OAuth flow (visits TikTok, captures the auth_code, exchanges for tokens):

python catch_auth.py        # opens browser, prints access_token
# Copy the access_token into .env as TIKTOK_ACCESS_TOKEN

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "tiktok-ads": {
      "command": "tiktok-ads-mcp",
      "env": {
        "TIKTOK_APP_ID": "your_app_id",
        "TIKTOK_SECRET": "your_app_secret",
        "TIKTOK_ACCESS_TOKEN": "your_access_token"
      }
    }
  }
}

Restart Claude Desktop. You're done — skip the rest.


Step 3 — Mode B: Remote HTTP server (Claude Teams / claude.ai)

Enable Firestore

The server stores OAuth bearer tokens and per-user TikTok credentials in Firestore.

  1. In Cloud Console, Firestore → Create database → Native mode, pick a region.

  2. Grant the Cloud Run service account Cloud Datastore User role under IAM & Admin → IAM.

Deploy to Cloud Run

gcloud run deploy tiktok-ads-mcp \
  --source . \
  --region YOUR_REGION \
  --project YOUR_PROJECT_ID \
  --platform managed \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "GCP_PROJECT_ID=your-project-id,BASE_URL=https://YOUR-SERVICE-URL.run.app,TIKTOK_APP_ID=...,TIKTOK_SECRET=..."

Recommended: store TIKTOK_SECRET in Secret Manager and inject via --set-secrets rather than as a plain env var.

After it's up, go back to the TikTok Developer Portal and add the live callback URL:

https://YOUR-SERVICE-URL.run.app/oauth/callback

Connect from Claude

Claude Teams (org owner adds it once for everyone):

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

  • Each member clicks Connect, signs in with TikTok, done.

claude.ai personal:

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

Claude Desktop with a remote server:

{
  "mcpServers": {
    "tiktok-ads": {
      "url": "https://YOUR-SERVICE-URL.run.app/mcp"
    }
  }
}

Claude Desktop will run the OAuth dance the first time you use it.


Environment Variables

Variable

Required

Description

TIKTOK_APP_ID

Yes

App ID from your TikTok Business Developer app.

TIKTOK_SECRET

Yes

App secret from your TikTok Business Developer app.

TIKTOK_REDIRECT_URI

No

Override the TikTok callback URL. Defaults to ${BASE_URL}/oauth/callback.

BASE_URL

Mode B

Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to.

GCP_PROJECT_ID

Mode B

GCP project hosting Firestore.

ALLOWED_EMAILS

No

Comma-separated allow-list of TikTok-account emails. Empty = no restriction.

TIKTOK_ACCESS_TOKEN

Mode A

Your single-user access token. Not used by the HTTP server.

TIKTOK_ADVERTISER_ID

Mode A (optional)

Default advertiser to query.

TIKTOK_SANDBOX

No

true to use the TikTok sandbox API base URL. Default false.

TIKTOK_REQUEST_TIMEOUT

No

HTTP timeout in seconds. Default 30.

PORT

No

HTTP port (default 8080).


Available Tools

Tool

Description

get_authorized_ad_accounts_tool

List all advertiser accounts accessible under the current TikTok identity

get_advertiser_info_tool

Account metadata: currency, timezone, industry, status

get_advertiser_balance_tool

Current balance for the authorised advertiser

get_business_centers_tool

List Business Centers accessible to this user

get_bc_assets_tool

List assets owned by a Business Center

get_bc_members_tool

List members of a Business Center

get_campaigns_tool

List standard campaigns with optional filters

get_smart_plus_campaigns_tool

List AI-optimised Smart+ campaigns

get_ad_groups_tool

List ad groups under a campaign or advertiser

get_ads_tool

List individual ads with detailed creative and status data

get_reports_tool

Performance reports with custom dimensions, metrics, date ranges

get_video_performance_tool

TikTok video metrics: 2s/6s views, completion rate, average watch time

get_video_assets_tool

List video assets in an advertiser library

get_ad_benchmark_tool

Compare ad CTR, CVR, CPM, CPC against industry benchmarks

get_creative_fatigue_tool

Creative fatigue scores and refresh recommendations

get_audience_reach_tool

Estimated audience reach for given targeting

get_targeting_options_tool

All interest categories available for audience targeting

get_pixels_tool

List TikTok Pixel installations and tracked conversion events

get_pixel_event_stats_tool

Stats per pixel event

get_offline_event_sets_tool

List offline event sets

create_async_report_tool

Create an async report task for large datasets (partner programme)

check_async_report_tool

Check status of an async report task

download_async_report_tool

Download data from a completed async report


Example Prompts

List all my TikTok advertiser accounts

Show spend and impressions by campaign for the last 30 days

Which campaigns had the highest CPM last week?

What's the 6-second view rate for campaign 12345?

Show me Smart+ campaigns and their status

How does ad 111 CTR compare to industry benchmarks?

What interest categories can I target for a fitness audience?

List the pixel events on advertiser 67890

OAuth endpoint reference (Mode B)

For developers who want to verify the implementation or write their own MCP client.

Endpoint

Spec

Purpose

GET /.well-known/oauth-protected-resource

RFC 9728

Advertises the canonical resource URI and authorization server.

GET /.well-known/oauth-authorization-server

RFC 8414

Authorization server metadata.

POST /oauth/register

RFC 7591

Dynamic Client Registration.

GET /oauth/authorize

OAuth 2.1

Starts the auth code flow with PKCE; redirects to TikTok.

GET /oauth/callback

TikTok redirects here; we mint our authorization code and bounce back to the MCP client.

POST /oauth/token

OAuth 2.1

Authorization code + refresh token grants.

A GET /mcp without a valid bearer returns 401 with a WWW-Authenticate: Bearer resource_metadata="…" header pointing at the protected-resource metadata document, which is how a standards-compliant MCP client discovers the rest.

PKCE caveat: TikTok's OAuth implementation does not support PKCE on the upstream side, so PKCE is only enforced on the Claude → us channel. The us → TikTok channel uses a state parameter for CSRF protection.

Token format quirks: TikTok's token endpoint accepts a JSON body with app_id, secret, auth_code (rather than the standard form-encoded client_id / code). Their access token is sent as an Access-Token header (rather than Authorization: Bearer). The OAuth proxy here normalises both into standard OAuth 2.1 for the Claude side.


Tech Stack

  • Python 3.10+

  • FastMCP — MCP server framework

  • Starlette + uvicorn — HTTP wrapper

  • httpx — HTTP client for TikTok APIs

  • google-cloud-firestore — per-user token storage and OAuth-server state (Mode B)

  • Google Cloud Run — Serverless hosting


About Dhawal Shah

I run a 40-plus person digital marketing agency out of Singapore, and I build the automation my own teams use. This server is one of those tools rather than a weekend project: it runs against live TikTok Ads accounts every week, which is why the read-only surface is wide and the write surface is deliberately narrow.

Fourteen years building companies across Asia behind it. 5,000+ campaigns, 400+ brands, 30+ startups advised, and 300+ training sessions for teams including Sony, Toyota, DHL and Interpol. I am also an Accredited Director with the Singapore Institute of Directors, which in practice means I get asked what breaks, who is accountable and what it costs before anyone asks what it can do.

I write up the routines and agents I actually run at dhawalshah.net.

Worth reading alongside this repo: Google Ads, Meta, LinkedIn & TikTok MCPs for Claude: Agency Setup Guide.


License

MIT

Available Tools

23 tools
check_async_report_toolA

Checks the status of an async report task created by create_async_report_tool. Status will be PROCESSING, COMPLETE, or FAILED. If PROCESSING, inform the user the report is still generating and check again shortly. When COMPLETE, call download_async_report_tool with the same task_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the expected statuses (PROCESSING, COMPLETE, FAILED) and the non-obvious callback behavior to download_async_report_tool. It does not specify how to handle FAILED or any rate-limit/retry behavior, which is a minor gap but not a contradiction.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and uses bolded directives for the conditional actions. Every sentence adds operational value and none are wasted.

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

Completeness4/5

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

The description covers the main polling workflow and handoff to the download tool, and an output schema exists for return-value details. The only notable omission is guidance for the FAILED status, but the overall context is sufficient for an agent to invoke the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only clarifies that task_id should be the same as the one from creation; advertiser_id is never mentioned or explained. The agent would have to infer the meaning and required relationship of advertiser_id from context.

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

Purpose5/5

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

The description clearly states the action ('Checks the status of an async report task') and names the producing tool ('created by create_async_report_tool'). It is easily distinguishable from sibling tools like create_async_report_tool and download_async_report_tool.

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

Usage Guidelines5/5

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

The description gives explicit conditional guidance: if PROCESSING, inform the user and check again; if COMPLETE, call download_async_report_tool with the same task_id. This clearly routes the agent between polling and handoff behavior, leaving little to inference.

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

create_async_report_toolA

Creates an async report task for large datasets or long date ranges. After calling this tool, immediately use check_async_report_tool with the returned task_id to monitor progress. When status is COMPLETE, use download_async_report_tool to retrieve the data. Inform the user that the report is being generated and you will check on it. report_type: BASIC | AUDIENCE. data_level: AUCTION_AD | AUCTION_ADGROUP | AUCTION_CAMPAIGN. Dates are YYYY-MM-DD.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricsYes
end_dateYes
data_levelYes
dimensionsYes
start_dateYes
report_typeYes
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool is asynchronous, returns a task_id, requires progress monitoring, and produces retrievable data only after status COMPLETE. It also provides user-communication expectations. It does not mention failure modes, polling intervals, or task expiration, but the core async behavior is transparently described.

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

Conciseness4/5

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

The description is dense but purposeful: the first sentence states the core function, the middle provides a clear action sequence, and the end lists critical parameter constraints. The workflow instructions could be more visually structured with line breaks, but every sentence earns its place and the most important info is front-loaded.

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

Completeness3/5

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

The description covers the async lifecycle well and gives the agent end-to-end instructions, but several required parameters remain semantically opaque (dimensions, metrics, advertiser_id) and no alternative synchronous path is mentioned. Since the output schema exists, the return value is not the main gap; parameter semantics and alternative-tool context are the missing pieces.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning by enumerating report_type values, data_level values, and the YYYY-MM-DD date format. However, it leaves dimensions, metrics, and advertiser_id underspecified, so the compensation is only partial for a seven-parameter schema with no property descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Creates an async report task for large datasets or long date ranges.' It clearly identifies the tool's role within an async workflow and distinguishes it from sibling tools by naming the follow-up check/download tools. An agent can immediately understand what this tool does and why it exists.

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

Usage Guidelines4/5

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

The description gives explicit procedural guidance: call check_async_report_tool immediately with the returned task_id, retrieve data with download_async_report_tool when status is COMPLETE, and inform the user. It also sets a clear usage context ('large datasets or long date ranges'). However, it does not explicitly say when not to use this tool or compare it to get_reports_tool for synchronous reporting.

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

download_async_report_toolA

Downloads the completed data for an async report task. Only call after check_async_report_tool returns status COMPLETE. Returns the report rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the behavioral burden. It clearly indicates a non-destructive download action and reveals the return payload ('report rows'). It does not mention retention windows, size limits, or whether the downloaded data is consumed/one-time, but for a straightforward async download step the transparency is adequate.

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

Conciseness5/5

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

The description is three short, front-loaded lines with no filler. The critical precondition is bolded for visibility, and the return statement is minimal but sufficient.

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

Completeness4/5

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

Given an output schema, the description covers the main contract: what to call, when to call it, and what it returns. The missing context around advertiser_id and download-specific caveats is minor but keeps this from being fully complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description needed to compensate. It clarifies what task_id refers to, but it never explains advertiser_id or how the two IDs relate. The names are fairly self-explanatory and consistent with sibling advertiser-scoped tools, but a clear semantic gap remains.

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

Purpose5/5

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

The description uses a specific verb ('downloads') and a clear resource ('completed data for an async report task'), and states the output ('report rows'). It also distinguishes itself from the status-checking sibling check_async_report_tool by framing this as the follow-up data-fetching step.

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

Usage Guidelines5/5

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

The description gives an explicit, unambiguous condition: only call after check_async_report_tool returns status COMPLETE. This directly tells the agent when the tool is appropriate and prevents premature calls. No alternative download tool exists among the siblings, so no further exclusions are needed.

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

get_ad_benchmark_toolA

Get benchmark metrics (CTR, CVR, CPM, CPC) for specific ads compared to industry averages. ad_ids is required. dimensions defaults to ['PLACEMENT']. Allowed dimension values: AD_CATEGORY, EXTERNAL_ACTION, LOCATION, PLACEMENT. objective_type example: 'CONVERSIONS'.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idsYes
dimensionsNo
advertiser_idYes
objective_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It does disclose useful configuration behavior: default dimensions, allowed dimension values, and an objective_type example. However, it omits output behavior, failure/empty cases, time range, and any side effects, which is a meaningful gap for an unannotated tool.

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

Conciseness5/5

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

Compact and front-loaded: the opening sentence states the core purpose, and each subsequent sentence adds a specific usage constraint. No filler, repetition, or unnecessary background.

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

Completeness3/5

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

The tool is straightforward and has an output schema, so return-value documentation is less critical. But with no annotations, no alternative guidance, and incomplete parameter coverage (advertiser_id), the description is adequate for a basic call but not fully complete for confident tool selection and invocation.

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

Parameters2/5

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

The description adds value by explaining ad_ids (required), dimensions (allowed values and default), and giving an objective_type example, which is important since schema description coverage is 0%. However, it omits advertiser_id, a required parameter, and its claim that 'dimensions defaults to ['PLACEMENT']' conflicts with the schema's `default: null`, creating ambiguity for the agent.

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

Purpose5/5

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

States a specific verb ('Get'), a concrete resource ('benchmark metrics'), names the exact metrics (CTR, CVR, CPM, CPC), and defines the scope ('for specific ads compared to industry averages'). This clearly separates it from sibling reporting tools like get_reports_tool and get_creative_fatigue_tool.

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

Usage Guidelines3/5

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

Provides practical invocation hints (ad_ids required, dimensions defaults, allowed dimension values, objective_type example), but never explicitly says when to use this tool vs alternatives or when not to. The 'compared to industry averages' framing implies benchmark use, but there are no exclusions or routing to sibling tools.

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

get_ad_groups_toolC

Get ad groups for a specific advertiser with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filtersNo
page_sizeNo
campaign_idNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It does not disclose pagination behavior (implied by page/page_size), the nature of filters, or any side effects (e.g., read-only). The bare statement 'Get ad groups' suggests a safe read operation but lacks critical 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.

Conciseness3/5

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

The description is a single sentence, making it concise. However, it lacks structure (e.g., separate lines for purpose, usage, parameters) and is arguably too terse for a tool with 5 parameters and an output schema.

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

Completeness1/5

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

Given the tool has 5 parameters, nested objects, and an output schema, the description is severely incomplete. It does not explain pagination, filter syntax, campaign constraints, or the structure of the response. The output schema exists but the description should still provide an overview of the return value.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the input schema provides no parameter descriptions. The description only mentions 'optional filtering' without explaining the `filters` object, `page`, `page_size`, or `campaign_id` parameters. This adds almost no value over the schema itself.

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

Purpose5/5

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

The description clearly states the verb 'Get' and resource 'ad groups', and specifies the scope 'for a specific advertiser' with optional filtering. This distinguishes it from sibling tools like get_ads_tool or get_campaigns_tool, which target different resources.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives or what prerequisites are needed. The description only implies use when retrieving ad groups for an advertiser, but fails to mention exclusions or comparisons to siblings.

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

get_ads_toolC

Get ads for a specific advertiser with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filtersNo
page_sizeNo
adgroup_idNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must convey behavioral traits. It only states the basic action and optional filtering, failing to disclose pagination behavior, the nature of filtering, or any side effects. The tool has parameters for page and page_size, but these are not mentioned.

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

Conciseness2/5

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

The description is a single short sentence, but it sacrifices informativeness for brevity. It fails to provide necessary details about parameters or usage, making it under-specified rather than concise.

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

Completeness2/5

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

Given the complexity of 5 parameters including optional filtering and pagination, the description is woefully incomplete. It lacks guidance on how to construct filters or use pagination, leaving critical gaps that are not filled by the schema or annotations. The presence of an output schema is noted but does not compensate.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description adds nothing about the five parameters. 'Optional filtering' does not explain how the 'filters' object works, nor does it address page, page_size, or adgroup_id. This leaves agents completely in the dark.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'ads', constrained to 'a specific advertiser', which precisely identifies the tool's function. This distinguishes it from sibling tools that focus on different resources like ad groups or reports.

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

Usage Guidelines2/5

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

The description provides no information on when to use this tool versus alternatives, nor does it mention prerequisites, exclusions, or typical use cases. Given the variety of sibling tools, this omission hinders correct selection.

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

get_advertiser_balance_toolA

Get cash balance and credit limit for all advertiser accounts within a Business Center. Returns advertiser_id, balance, credit_limit, and currency for each account. Use get_business_centers_tool first to get bc_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bc_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does state that it returns advertiser_id, balance, credit_limit, and currency for each account, which clarifies the outcome. However, it does not mention read-only behavior, authentication requirements, pagination, possible empty results, or error cases, leaving some behavioral gaps.

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

Conciseness5/5

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

The description is three short, purposeful sentences with no filler. It leads with the tool's purpose, then the return values, then the prerequisite. Every sentence earns its place.

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

Completeness4/5

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

For a one-parameter getter with an output schema, the description covers the essential context: what it returns é and how to get the required bc_id. It lacks explicit notes on access restrictions or empty results, but those are not critical for this simple read-oriented tool.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It successfully ties the lone parameter bc_id to a Business Center and tells the agent exactly where to get it via get_business_centers_tool. While it does not provide format details, this is sufficient for a single string parameter.

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

Purpose5/5

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

The description clearly states a specific action ('Get cash balance and credit limit') and a specific resource ('all advertiser accounts within a Business Center'), and it lists the returned fields. This is distinct from sibling tools like get_advertiser_info_tool or get_authorized_ad_accounts_tool because it focuses on balance and credit limit scoped to a Business Center.

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

Usage Guidelines4/5

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

The description gives an explicit prerequisite: 'Use get_business_centers_tool first to get bc_id.' This tells the agent how to obtain the required parameter and establishes a clear call order. It does not spell out when not to use this tool, but the context is sufficient for a simple getter.

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

get_advertiser_info_toolA

Get account-level metadata (currency, timezone, industry, status) for one or more advertisers. This is foundational context for interpreting all other data — especially date breakdowns, which depend on the account timezone.

ParametersJSON Schema
NameRequiredDescriptionDefault
advertiser_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It indicates a read-only metadata operation and adds a meaningful behavioral caveat about timezone dependency, but it does not address permissions, response shape, batch size limits, or error behavior. This is adequate for a simple getter but not fully transparent.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence states exactly what the tool does and what it returns; the second explains why it matters. This is an appropriately sized, front-loaded definition.

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

Completeness5/5

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

For a one-parameter metadata lookup with an output schema, the description is complete. It tells the agent what will be returned, and why the data is important for interpreting other tools. Nothing critical is missing for an agent to decide to call and correctly invoke this tool.

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

Parameters4/5

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

The schema has 0% description coverage, but the description compensates by specifying the parameter applies to 'one or more advertisers' and explaining what metadata is retrieved. The parameter 'advertiser_ids' is self-explanatory in context, and the description adds meaning beyond the raw schema by clarifying batch usage.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get account-level metadata' and enumerates the exact fields returned (currency, timezone, industry, status). It also clarifies the tool operates on 'one or more advertisers', which sets it apart from sibling tools focused on campaigns, ads, reports, or business-center assets.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: it is 'foundational context for interpreting all other data', specifically noting date breakdowns depend on the account timezone. It does not explicitly name alternatives or state when not to use it, but the guidance is strong enough to route an agent effectively.

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

get_audience_reach_toolB

Get estimated audience reach for given targeting criteria. NOTE: This endpoint requires allowlist access from TikTok. Contact TikTok support if you receive a 404 error. objective_type examples: 'TRAFFIC', 'CONVERSIONS', 'APP_INSTALL'. gender: 'GENDER_MALE' | 'GENDER_FEMALE' | 'GENDER_UNLIMITED'. Returns estimated_audience_size_lower, estimated_audience_size_upper, reach_trend.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageNo
genderNo
placementsNo
location_idsNo
advertiser_idYes
objective_typeYes
interest_category_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the allowlist requirement and the 404 error possibility, which is useful behavioral context. It also lists the return fields (estimated_audience_size_lower, estimated_audience_size_upper, reach_trend). However, it doesn't mention rate limits, pagination, or what happens with invalid targeting criteria. The description adds some value but not rich behavioral detail.

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

Conciseness4/5

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

The description is compact and front-loaded with the core purpose. The additional notes on allowlist access and parameter formats are useful and not redundant. It's a bit dense with multiple notes in one paragraph, but each sentence earns its place. No wasted words.

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

Completeness3/5

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

The tool has 7 parameters, no annotations, and an output schema exists. The description covers the return fields and two parameter formats, but leaves several parameters unexplained. The allowlist note is important context. For a tool with this complexity, the description is adequate but not complete—an agent might still be unsure about how to format location_ids or interest_category_ids.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains objective_type and gender formats, which adds meaning beyond the schema. However, it doesn't explain age, placements, location_ids, interest_category_ids, or advertiser_id. With 7 parameters and only 2 explained, the compensation is partial. Baseline 3 is appropriate because the description does add some value but leaves gaps.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get estimated audience reach for given targeting criteria.' This is a specific verb ('Get') and resource ('estimated audience reach'), and it distinguishes itself from sibling tools like get_targeting_options_tool (which likely returns targeting options rather than reach estimates). It doesn't explicitly name a sibling, but the purpose is clear enough.

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

Usage Guidelines3/5

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

The description provides some usage context: it notes the endpoint requires allowlist access and gives examples for objective_type and gender. However, it doesn't explicitly state when to use this tool versus alternatives like get_targeting_options_tool or get_reports_tool. The allowlist note is useful but not a full usage guideline.

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

get_authorized_ad_accounts_toolB

Get all authorized ad accounts accessible by the current access token

ParametersJSON Schema
NameRequiredDescriptionDefault
random_stringNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits beyond the basic read operation. There is no mention of pagination, rate limits, or authentication requirements.

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

Conciseness5/5

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

A single sentence that is front-loaded with the key action and resource. No redundant information.

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

Completeness3/5

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

Given the simple nature of the tool (list ad accounts) and the existence of an output schema, the description is minimally adequate but lacks behavioral transparency and usage context.

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

Parameters2/5

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

Schema description coverage is 0%; the description does not explain the purpose of the 'random_string' parameter. Although it has a default value and is not required, the description should clarify its use.

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

Purpose5/5

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

Description clearly states verb (Get), resource (authorized ad accounts), and scope (accessible by current access token). It distinguishes itself from sibling tools like get_ad_groups_tool by being specific to ad accounts.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. With many sibling tools, explicit context on when to choose this over others is missing.

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

get_bc_assets_toolA

Get all assets of a given type within a Business Center. asset_type must be one of: ADVERTISER, PIXEL, CATALOG. Returns asset_id, asset_name, asset_type, status for each asset. Use get_business_centers_tool first to get bc_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bc_idYes
asset_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It discloses the return fields and the asset_type constraint, adding value beyond the name. However, it does not state whether this is a read-only operation, how invalid asset_type values are handled, or whether results are paginated — a moderate gap given zero annotation coverage.

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

Conciseness5/5

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

Four sentences, each earning its place: purpose, constraint, return fields, and prerequisite. The primary action is front-loaded and there is zero filler or redundancy.

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

Completeness4/5

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

With only two simple required parameters, an output schema present, and the cross-tool prerequisite stated, the definition is largely complete for a list-style tool. Minor omissions like pagination behavior or an explicit read-only statement are acceptable at this complexity level but prevent a 5.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does: asset_type gets explicit enum values in prose, and bc_id gets provenance ('Use get_business_centers_tool first to get bc_id'). It stops short of describing bc_id's format or giving examples, but it makes both parameters meaningfully usable.

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

Purpose5/5

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

Description states a specific verb and resource ('Get all assets of a given type within a Business Center') and explicitly enumerates the three valid asset types (ADVERTISER, PIXEL, CATALOG), which differentiates it from siblings like get_video_assets_tool and get_pixels_tool. The scope and return fields are unambiguous.

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

Usage Guidelines4/5

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

Provides clear sequencing guidance: 'Use get_business_centers_tool first to get bc_id,' which tells the agent what must happen before invoking this tool. It does not explicitly state exclusions or direct the agent to alternatives for other asset types, so it earns a 4 rather than a 5.

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

get_bc_members_toolA

Get all members of a Business Center, their roles, and access status. Returns user_id, username, email, role, status for each member. Useful for access audits. Use get_business_centers_tool first to get bc_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bc_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose the return fields and the prerequisite of bc_id, which is helpful. However, it does not mention whether this is a read-only operation, whether it requires special permissions, or whether it returns paginated results. For a read-only list tool, this is adequate but not rich.

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

Conciseness5/5

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

Three sentences with no filler. The first sentence states the core function, the second lists return fields, and the third gives usage guidance. Every sentence earns its place and the most important information is front-loaded.

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

Completeness4/5

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

For a simple one-parameter read tool with an output schema, the description is nearly complete. It covers what the tool does, what it returns, and how to obtain the required parameter. The only minor gap is the lack of explicit read-only/permission context, but the output schema and simple parameter make this a minor omission.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains that bc_id is the Business Center identifier and instructs the agent to get it from get_business_centers_tool first. This adds meaning beyond the bare schema property 'Bc Id' and effectively documents the only parameter.

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

Purpose5/5

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

The description states a specific verb ('Get'), a specific resource ('all members of a Business Center'), and the exact data returned (user_id, username, email, role, status). It clearly distinguishes itself from sibling tools like get_business_centers_tool and get_bc_assets_tool by focusing on members and access status.

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

Usage Guidelines5/5

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

The description explicitly says to use get_business_centers_tool first to obtain bc_id, which is a clear prerequisite and usage instruction. It also states the tool is 'Useful for access audits,' giving a concrete use case. This is strong guidance for an agent deciding when to invoke this tool.

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

get_business_centers_toolC

Get business centers accessible by the current access token

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
bc_idNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

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

No annotations provided; description implies read-only access but lacks details on pagination, rate limits, or behavior when no centers are returned.

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

Conciseness3/5

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

Single sentence is concise but too minimal, missing parameter details and usage context. It is front-loaded but under-specified.

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

Completeness2/5

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

Given the presence of an output schema, the description partially covers return values, but it omits pagination behavior and filtering semantics, making it incomplete for a 3-parameter tool.

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

Parameters1/5

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

Schema coverage is 0% and description provides no explanation of page, bc_id, or page_size parameters, leaving the agent to infer their purpose.

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

Purpose4/5

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

The description clearly states the tool retrieves business centers accessible by the current token. It distinguishes from sibling tools focused on ads and reports.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives, no exclusions or prerequisites mentioned.

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

get_campaigns_toolC

Get campaigns for a specific advertiser with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only mentions retrieving campaigns with optional filtering, but does not disclose side effects (likely none), permissions, pagination, or rate limits. Minimal transparency for a data retrieval tool.

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

Conciseness3/5

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

The description is a single sentence of 10 words, very concise. However, conciseness comes at the expense of missing crucial details. It earns a mid score because it is not verbose but could include more information without becoming long.

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

Completeness2/5

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

Given no annotations, 0% schema coverage, and an existing output schema (unseen), the description is incomplete. It does not explain return format, filtering syntax, or prerequisites needed for an agent to correctly invoke the tool.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate. It mentions 'optional filtering' which hints at the filters parameter, but provides no details on format or allowed keys. The advertiser_id is partially explained via 'specific advertiser', but overall adds little value beyond parameter names.

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

Purpose5/5

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

The description clearly states the tool retrieves campaigns for a specific advertiser with optional filtering. This verb+resource+scope pattern is specific and distinguishes it from siblings like get_ad_groups_tool (different resource) or get_gmvmax_campaigns_tool (different scope).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives such as get_ad_groups_tool or get_gmvmax_campaigns_tool. The description implies usage for advertiser campaigns but lacks when-not-to-use or alternative recommendations.

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

get_creative_fatigue_toolA

Get creative fatigue scores per ad. Indicates when an ad has been shown too frequently to the same audience and needs refreshing. Returns fatigue_status, fatigue_level, and recommendations per ad. Optionally filter by ad_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
ad_idsNo
page_sizeNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It does state the output fields (fatigue_status, fatigue_level, recommendations) and notes optional filtering by ad_ids. However, it does not mention pagination behavior, data scope, auth requirements, or other operational traits, leaving a noticeable gap.

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

Conciseness5/5

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

Two concise sentences front-load the core action, add a one-line definition, list the return fields, and note the optional filter. No filler or redundant restatement.

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

Completeness3/5

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

The description plus output schema covers the main purpose and return values, but for a tool with 4 parameters, no annotations, and no schema descriptions, it leaves out pagination semantics and any guidance on when not to use it. Adequate but not complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only clarifies ad_ids as an optional filter; advertiser_id, page, and page_size are left unexplained beyond their names. That is insufficient compensation for 4 undocumented parameters.

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

Purpose5/5

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

The description opens with a specific verb plus resource: 'Get creative fatigue scores per ad.' It then defines what fatigue means ('shown too frequently... needs refreshing'), which differentiates it from sibling getters like get_reports and get_video_performance. No ambiguity about the tool's purpose.

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

Usage Guidelines4/5

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

The description gives clear context: use this when you need to determine whether ads have been shown too frequently to the same audience and need refreshing. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5, but the intended use is clear.

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

get_offline_event_sets_toolB

List offline conversion event sets configured for an advertiser. Shows what offline events (e.g. in-store purchases, phone leads) are being matched back to TikTok ad exposure. Returns event_set_id, name, status, event_types, and create_time.

ParametersJSON Schema
NameRequiredDescriptionDefault
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

There are no annotations, so the description must carry the full burden. It does disclose that the tool returns event sets and lists specific fields, but it never explicitly states it is read-only, nor does it mention any pagination, permissions, or side effects. The implied read-only nature covers some ground, but more explicit transparency would be better.

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

Conciseness5/5

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

The description is three sentences with no fluff. It leads with the primary action, then explains what is shown, then lists the return fields. Every sentence earns its place, making it efficient and easy to parse.

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

Completeness4/5

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

The description covers the core purpose, the scope, and the return fields. Given that an output schema exists to detail the response structure, this is fairly complete. However, it omits any mention of pagination, error conditions, or the need for advertiser_id (though that is in the schema), so it's not fully exhaustive.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It does give context by saying 'configured for an advertiser', tying the advertiser_id to the resource being listed. However, it doesn't explain the format, constraints, or why the parameter is required beyond that. This adds some meaning but not a thorough explanation.

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

Purpose4/5

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

The description clearly states the action ('List') and the resource ('offline conversion event sets') plus the scope ('configured for an advertiser'). It's specific enough, but does not explicitly distinguish it from sibling tools like get_pixels or get_campaigns, so it misses the top score for sibling differentiation.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. It doesn't mention prerequisites, fail conditions, or scenarios where another tool would be preferred. With a large sibling set, this omission hurts discoverability.

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

get_pixel_event_stats_toolA

Get aggregated conversion event counts (Purchase, AddToCart, ViewContent, etc.) per pixel over a date range. Use after get_pixels_tool to get pixel_ids. Dates are YYYY-MM-DD. Returns one row per pixel per event type per day.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
pixel_idsYes
start_dateYes
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the output shape ('Returns one row per pixel per event type per day') and the prerequisite for pixel_ids. This gives the agent a good sense of what to expect and what is needed. It does not explicitly state that the operation is read-only or has no side effects, but the 'get' prefix and the nature of the tool imply a safe read operation. It also doesn't mention rate limits or error handling, but for a stats tool, the provided details are sufficient. The output format and prerequisite are valuable behavioral traits beyond the schema.

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

Conciseness5/5

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

The description is three sentences, each adding distinct value: purpose, usage prerequisite, and output/date format. It is front-loaded with the core purpose, and there is no fluff or redundancy. It is efficient and well-structured, earning a high score.

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

Completeness4/5

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

The tool has 4 parameters, no annotations, and an output schema is indicated. The description covers the purpose, the output shape ('Returns one row per pixel per event type per day'), and the prerequisite for pixel_ids. It also specifies the date format. It does not mention potential limits (e.g., date range restrictions, pixel count limits) or error conditions, but given the output schema exists and the tool is relatively simple, the description provides enough context for an agent to call it correctly. The missing advertiser_id clarification is a minor gap.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies the date format: 'Dates are YYYY-MM-DD,' which directly explains start_date and end_date. It also explains the source of pixel_ids: 'Use after get_pixels_tool to get pixel_ids.' This adds meaning beyond the raw schema. It does not explicitly describe advertiser_id, but that is likely self-explanatory from its name. The description also ties pixel_ids to the output granularity ('per pixel'), which is helpful. Given the zero coverage, it does a good job of illuminating the key parameters, though it could have added a brief note on advertiser_id.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get aggregated conversion event counts (Purchase, AddToCart, ViewContent, etc.) per pixel over a date range.' It specifies the resource (pixel event counts), the action (get), and the scope (per pixel, per date range). It also distinguishes itself from siblings by mentioning 'Use after get_pixels_tool to get pixel_ids,' indicating a specific workflow that separates it from other reporting tools. This is a specific verb+resource with clear differentiation.

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

Usage Guidelines4/5

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

The description provides a clear usage prerequisite: 'Use after get_pixels_tool to get pixel_ids.' This tells the agent that pixel_ids must be obtained from another tool first, which is a concrete when-to-use instruction. However, it does not explicitly compare with alternative reporting tools like get_reports_tool or the async report tools, nor does it state when not to use this tool. It gives clear context but lacks explicit exclusions or alternatives.

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

get_pixels_toolC

List all TikTok Pixel installations for an advertiser. Shows which conversion events are being tracked and whether measurement is set up correctly. Returns pixel_id, pixel_name, pixel_code, status, create_time, and tracked events.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses the return fields (pixel_id, pixel_name, pixel_code, etc.) and mentions that it shows whether measurement is set up correctly, which is useful. However, it does not describe pagination behavior, rate limits, or side effects. As a read-only getter, this is partially sufficient but not comprehensive.

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

Conciseness5/5

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

Two sentences with zero wasted words. The main action is front-loaded, and the return fields are listed compactly. Excellent structure for quick scanning.

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

Completeness3/5

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

The description covers the core purpose and return fields, but it lacks usage guidance and parameter semantics. Pagination via page/page_size is implied but not explained, and the output schema (though present) is not described. For a simple list tool it is adequate, but missing details prevent full self-sufficiency.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The tool description does not compensate: it only implies advertiser_id by saying 'for an advertiser' but offers no explanation of page, page_size, or their defaults. This is a significant gap for a 3-parameter tool.

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

Purpose4/5

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

States a specific verb 'List' and resource 'TikTok Pixel installations' for an advertiser, and clarifies that it shows conversion events and measurement status. It is distinct from sibling get_pixel_event_stats_tool (which focuses on event statistics), though it does not explicitly name that alternative. The purpose is clear and unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention any related tools, exclusions, or conditions for use. An agent has no context on when this is preferable to other getters like get_pixel_event_stats_tool or get_reports_tool.

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

get_reports_toolC

Get performance reports and analytics with comprehensive filtering and grouping options

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
bc_idNo
filtersNo
metricsNo
end_dateNo
page_sizeNo
data_levelNoAUCTION_CAMPAIGN
dimensionsNo
order_typeNoDESC
start_dateNo
order_fieldNo
report_typeNoBASIC
service_typeNoAUCTION
advertiser_idNo
advertiser_idsNo
query_lifetimeNo
enable_total_metricsNo
multi_adv_report_in_utc_timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It implies a read operation but doesn't disclose side effects, permissions, rate limits, or return format beyond 'reports and analytics'.

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

Conciseness3/5

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

The description is a single sentence, which is concise, but it lacks necessary details. It is front-loaded but not efficiently structured to convey essential information.

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

Completeness1/5

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

Given 18 parameters, no annotations, and an output schema present but not described, the description is severely incomplete. It fails to provide sufficient context for an agent to correctly invoke the tool.

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

Parameters1/5

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

Schema description coverage is 0%, and the description only vaguely mentions 'filtering and grouping options' without explaining any of the 18 parameters (e.g., filters, dimensions, metrics).

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

Purpose4/5

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

The description clearly states the tool gets performance reports and analytics with filtering and grouping, but it doesn't differentiate from sibling tools like get_ads_range_report_tool or get_gmvmax_reports_tool that may have similar purposes.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no exclusions, and no context about prerequisites or typical use cases.

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

get_smart_plus_campaigns_toolA

Get Smart+ (AI-optimised) campaigns for an advertiser. Smart+ campaigns do NOT appear in get_campaigns_tool — accounts using Smart+ have a blind spot without this tool. Returns campaign_id, name, status, budget, objective_type, create/modify times. status filter examples: 'ENABLE', 'DISABLE', 'DELETE'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNo
page_sizeNo
campaign_idsNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of explaining behavior. It openly states that Smart+ campaigns are excluded from get_campaigns_tool, lists returned fields, and gives status filter examples. It does not discuss pagination behavior or side effects, but the get semantics and return-field disclosure provide meaningful transparency.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose first, then the key differentiator from get_campaigns_tool, followed by returned fields and filter examples. Every sentence carries information and there is no filler.

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

Completeness4/5

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

The description provides enough to call the tool correctly for typical use, and an output schema exists to cover return details. It could be more complete by explaining pagination parameters and campaign_ids filtering, but those are reasonably inferable and not critical gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds useful meaning for 'status' with concrete filter examples ('ENABLE', 'DISABLE', 'DELETE') and implies advertiser_id's role)Skip. However, page, page_size, and campaign_ids are not explained, leaving the agent to infer their semantics from names alone.

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

Purpose5/5

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

The description clearly states the tool retrieves Smart+ (AI-optimised) campaigns for an advertiser, with a specific verb and resource. It also explicitly distinguishes itself from get_campaigns_tool by noting that Smart+ campaigns do not appear there, eliminating ambiguity.

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

Usage Guidelines5/5

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

The description gives a direct usage cue: use this when Smart+ campaigns are relevant, since they are absent from get_campaigns_tool. It explicitly names the sibling alternative and explains the blind spot this tool fills, so an agent can route correctly.

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

get_targeting_options_toolA

Get all available interest categories for audience targeting. Returns a list of interest categories with their IDs, names, levels, and sub-category IDs. Use the returned interest_category_id values when setting up ad group targeting. Optionally filter by objective_type (e.g. 'TRAFFIC', 'CONVERSIONS').

ParametersJSON Schema
NameRequiredDescriptionDefault
advertiser_idYes
objective_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden, and it delivers the key behavioral facts: it returns a list of interest categories, specifies the returned fields, and notes optional filtering by objective_type. It does not discuss pagination or error behavior, but for a simple read-style getter the disclosed behavior is sufficient.

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

Conciseness5/5

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

Four concise sentences flow logically: what it does, what it returns, how to use the output, and the optional filter. Every sentence adds useful information, and the purpose is front-loaded with no filler.

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

Completeness4/5

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

The output schema covers return-value structure, so that gap is already filled. The description covers purpose, usage context, and the optional parameter. The main missing piece is a clearer explanation of advertiser_id's role in determining the available categories, but the overall definition is strong enough for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does explain objective_type with example values ('TRAFFIC', 'CONVERSIONS') and optionality, but advertiser_id—a required parameter—receives no semantic explanation beyond the schema title 'Advertiser Id.' This is partial compensation only.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get all available interest categories for audience targeting.' It also lists the returned fields (IDs, names, levels, sub-category IDs), making the tool's purpose unmistakable and distinct from siblings like get_audience_reach_tool, which is about audience size rather than interest taxonomy.

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

Usage Guidelines4/5

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

The description gives clear operational context: 'Use the returned interest_category_id values when setting up ad group targeting' and explains the optional objective_type filter. It does not explicitly mention alternatives or when not to use this tool, but the intended use case is clear enough.

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

get_video_assets_toolA

Browse the creative video asset library for an advertiser. Returns video_id, video_name, duration, width, height, cover_url, create_time, size. Optional filtering dict supports keys like 'video_name' for name search.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filteringNo
page_sizeNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It communicates that this is a read-oriented browsing operation and discloses the returned fields and filtering capability. However, it does not mention pagination behavior, response limits, or any operational side effects.

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

Conciseness5/5

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

The description is compact and front-loaded with the core purpose, followed by useful return-field information and filtering guidance. Every sentence adds value and there is no redundancy.

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

Completeness3/5

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

The description covers the main purpose, return fields, and a filtering example, and an output schema exists. However, it omits pagination semantics and any guidance on when to use this tool versus related video or asset tools, leaving moderate gaps for an agent planning a call.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for the filtering object by mentioning the 'video_name' key and implies advertiser_id via 'for an advertiser'. However, it does not explain the page or page_size parameters, leaving part of the parameter space undocumented.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Browse') and resource ('creative video asset library for an advertiser'). It also lists the exact return fields, distinguishing it from sibling tools like get_campaigns_tool or get_video_performance_tool.

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

Usage Guidelines2/5

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

No guidance is provided about when to choose this tool over alternatives or when not to use it. The description implies use when browsing video assets, but it does not explicitly mention sibling tools or exclusion criteria.

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

get_video_performance_toolA

Get TikTok-specific video engagement metrics not available in the standard integrated report: 2-second views, 6-second views, completion rate, average watch time, and video play actions. At least one of campaign_ids, adgroup_ids, or ad_ids is required. data_level: AUCTION_AD | AUCTION_ADGROUP | AUCTION_CAMPAIGN. Dates are YYYY-MM-DD.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
ad_idsNo
end_dateNo
page_sizeNo
data_levelNoAUCTION_AD
dimensionsNo
start_dateNo
adgroup_idsNo
campaign_idsNo
advertiser_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses metric scope, required filter conditions, data_level choices, and date format, which helps. However, it does not mention pagination behavior, date-range limits, or other API-level caveats such as auth or rate limits.

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

Conciseness5/5

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

The description is compact and front-loaded, with the purpose stated first, metric list in a clear block, and constraints in short, direct sentences. Every sentence adds useful information with no filler.

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

Completeness4/5

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

For a 10-parameter tool with output schema presentheb, the description covers the core invocation requirements: purpose, required ID filter, valid data_level values, and date format. It lacks detail on dimensions and pagination, but an agent can reasonably invoke the tool with the information provided.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning for data_level, date format, and the conditional requirement on campaign/adgroup/ad IDs. However, several parameters such as dimensions, page, and page_size are left unexplained, and the description does not cover all 10 parameters.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get TikTok-specific video engagement metrics' and enumerates the exact metrics returned. It explicitly positions the tool against the 'standard integrated report', distinguishing it from sibling reporting tools.

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

Usage Guidelines4/5

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

The description clearly notes that at least one of campaign_ids, adgroup_ids, or ad_ids is required)Skip and specifies valid data_level values and date format. It gives a clear usage context via 'not available in the standard integrated report', though it does not explicitly name sibling alternatives or provide 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 23 tool updatesv0.1.0
    • First observedcheck_async_report_tool
    • First observedcreate_async_report_tool
    • First observeddownload_async_report_tool
    • First observedget_ad_benchmark_tool
    • First observedget_ad_groups_tool
    • First observedget_ads_tool
    • First observedget_advertiser_balance_tool
    • First observedget_advertiser_info_tool
    • First observedget_audience_reach_tool
    • First observedget_authorized_ad_accounts_tool
    • First observedget_bc_assets_tool
    • First observedget_bc_members_tool
    • First observedget_business_centers_tool
    • First observedget_campaigns_tool
    • First observedget_creative_fatigue_tool
    • First observedget_offline_event_sets_tool
    • First observedget_pixel_event_stats_tool
    • First observedget_pixels_tool
    • First observedget_reports_tool
    • First observedget_smart_plus_campaigns_tool
    • First observedget_targeting_options_tool
    • First observedget_video_assets_tool
    • First observedget_video_performance_tool

TDQS

B3.4/5.0

Scored across 23 tools

Disambiguation5/5

Each tool maps to a distinct TikTok Ads resource or reporting concernasi get_reports_tool, get_video_performance_tool, get_ad_benchmark_tool, and get_creative_fatigue_tool are clearly differentiated by their descriptions. The explicit note that Smart+ campaigns do not appear in get_campaigns_tool removes a likely source of confusion.

Naming Consistency5/5

Tool names follow a predictable snake_case verb_noun pattern: get_* for reads and create/check/download_async_report for the async report workflow. Minor abbreviations like 'bc' are still consistent and readable.

Tool Count3/5

With 23 tools, the set is on the heavy side and above the ideal 3–15 range. Most tools represent legitimate distinct endpoints, but several niche analytics tools could reasonably be consolidated or split into a separate reporting-focused server.

Completeness3/5

The read/analytics surface is broad, covering accounts, campaigns, ads, pixels, targeting, assets, and reports. However, there are no create, update, or delete tools for campaigns, ad groups, or ads, which is a notable gap if the server is intended to support actual ad management rather than read-only insights.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for managing Google Ads, Meta Ads, LinkedIn Ads, and TikTok Ads via AI. 210+ tools including account audits, wasted spend detection, and PMax insights.
    2
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    MCP server for TikTok that enables searching videos, users, hashtags, and fetching trending content, user profiles, and video details via official API or public scraping.
    8
    -
  • A
    license
    B
    quality
    B
    maintenance
    A read-only MCP server that provides comprehensive access to the TikTok Business API for retrieving advertising data, including campaigns, ad groups, ads, and performance reports.
    24
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for TikTok that publishes videos to your own TikTok account and retrieves video performance metrics through TikTok's official Content Posting and Display APIs.
    6
    MIT