tiktok-ads-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port (default 8080). | 8080 |
| BASE_URL | No | Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to. | |
| TIKTOK_APP_ID | Yes | App ID from your TikTok Business Developer app. | |
| TIKTOK_SECRET | Yes | App secret from your TikTok Business Developer app. | |
| ALLOWED_EMAILS | No | Comma-separated allow-list of TikTok-account emails. Empty = no restriction. | |
| GCP_PROJECT_ID | No | GCP project hosting Firestore. | |
| TIKTOK_SANDBOX | No | Set to 'true' to use the TikTok sandbox API base URL. Default false. | false |
| TIKTOK_ACCESS_TOKEN | No | Your single-user access token. Not used by the HTTP server. | |
| TIKTOK_REDIRECT_URI | No | Override the TikTok callback URL. Defaults to ${BASE_URL}/oauth/callback. | ${BASE_URL}/oauth/callback |
| TIKTOK_ADVERTISER_ID | No | Default advertiser to query. | |
| TIKTOK_REQUEST_TIMEOUT | No | HTTP timeout in seconds. Default 30. | 30 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_business_centers_toolC | Get business centers accessible by the current access token |
| get_authorized_ad_accounts_toolB | Get all authorized ad accounts accessible by the current access token |
| 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. |
| get_campaigns_toolC | Get campaigns for a specific advertiser with optional filtering |
| get_ad_groups_toolC | Get ad groups for a specific advertiser with optional filtering |
| get_ads_toolC | Get ads for a specific advertiser with optional filtering |
| get_reports_toolC | Get performance reports and analytics with comprehensive filtering and grouping options |
| 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. |
| 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. |
| 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'. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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'). |
| 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. |
| 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'. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
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.
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.
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.
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.