{"name":"com.getmcpads/tiktok-ads","slug":"getmcpads-tiktok-ads","title":"TikTok Ads","description":"TikTok Ads MCP server: 35 read tools, 30 opt-in preview-first writes.","url":"https://mcp.market/server/getmcpads-tiktok-ads","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":32,"stars":0,"forks":0,"downloads_week":550,"last_push_at":"2026-10-26T13:50:19.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/get-mcp-ads/tiktok-ads-mcp-server","website":"https://www.getmcpads.com/tools/tiktok-ads","version":"2.1.1","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@getmcpads/tiktok-ads-mcp-server","version":"2.1.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"TikTok Business API access token.","isRequired":true,"isSecret":true,"name":"TIKTOK_ACCESS_TOKEN"},{"description":"App ID the token belongs to.","isRequired":true,"name":"TIKTOK_APP_ID"},{"description":"Comma-separated advertiser IDs this server may access. Recommended; required from 3.0.0.","name":"TIKTOK_ADVERTISER_IDS"},{"description":"App secret, for endpoints needing app authentication.","isSecret":true,"name":"TIKTOK_APP_SECRET"},{"description":"Default advertiser ID. When TIKTOK_ADVERTISER_IDS is set, must be one of them.","name":"TIKTOK_ADVERTISER_ID"},{"description":"Default Business Center ID, for Business Center scoped reads.","name":"TIKTOK_BC_ID"},{"description":"Alias of TIKTOK_BC_ID, read when TIKTOK_BC_ID is unset.","name":"TIKTOK_BUSINESS_CENTER_ID"},{"description":"true exposes 30 write tools. Defaults to false. Calls preview unless confirm is true.","name":"TIKTOK_ENABLE_WRITES"},{"description":"production (default) or sandbox. Sandbox binds every call to one advertiser ID.","name":"TIKTOK_ENVIRONMENT"},{"description":"debug, info (default), warn or error. Logs go to stderr.","name":"LOG_LEVEL"}]}],"tools":[{"name":"tiktok_create_campaign","description":"Create a TikTok campaign. It is always created disabled and there is no option to create it running. Previews by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_get_adgroups","description":"Read full native ad group configuration including targeting, custom/lookalike audience references and exclusions, geo, language, age/gender, placements, interests/behaviors, budget and schedule. Set smartPlus:true for upgraded Smart+ targeting_spec. Missing fields are unknown, not unrestricted targeting. Paginated.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_ads","description":"List ads for a TikTok advertiser. Returns ad ID, name, operation status, and creative info.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_advertiser_info","description":"Get detailed information for specific TikTok advertiser accounts: currency, timezone, status, balance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_asset_urls","description":"Re-resolve fresh, publicly fetchable URLs for specific TikTok library assets (file/video/ad/info and file/image/ad/info). Call at display or download time: every TikTok media URL is signed and expires.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_async_report_status","description":"Check a TikTok async report task status by taskId when async report endpoints are available. No report creation or mutation is performed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_audience_details","description":"Get custom/lookalike/saved audience details where TikTok DMP endpoints are accessible. Read-only only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_audience_overlap","description":"Read-only audience overlap diagnostics across ad groups, custom audiences, saved audiences, and targeting fields.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_audience_report","description":"Read TikTok AUDIENCE performance reports by age or gender at advertiser, campaign, ad group or ad level, including delivery from eligible Smart+ campaigns. Multiple demographics return separate reports, not a joint distribution. Explicit pagination and native provider errors; no inference of configured targeting or Custom Audience membership.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_audiences","description":"List custom and lookalike audiences for a TikTok advertiser account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_campaigns","description":"List campaigns for a TikTok advertiser account. Returns campaign ID, name, status, budget, and objective.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_carousel_music","description":"Get TikTok music recommendations for exactly the uploaded images in a standard, non-catalog image ad (one card) or carousel. Verifies each image is carousel-usable. Read-only; select a returned music_id in the approval preview and use the same images in the ad. Music is for use on TikTok only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_creative_fatigue_recipes","description":"Find likely creative fatigue patterns from ad-level daily reporting and return read-only refresh recipes. Does not create, edit, or upload creatives.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_creatives","description":"Get creative details (video, image, text) for specific ads in a TikTok advertiser account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_delivery_status","description":"Aggregate campaign, ad group, and ad delivery status/operation_status with simple diagnostics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_entities_raw","description":"List TikTok campaigns, ad groups, or ads with caller-selected native fields, filtering, sorting, and pagination. This GET-only escape hatch exposes newly released entity fields without waiting for the MCP's curated schemas.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_events","description":"Discover pixel/app events or accessible tracking diagnostics for an advertiser. Uses best-effort endpoint checks plus reporting dimensions as fallback.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_insights","description":"Query TikTok Ads performance insights using the current native/calculated metric catalog and query planning. Use tiktok://metrics resource to see available metrics. Use tiktok://dimensions for dimensions. Age/gender dimensions route automatically to AUDIENCE reports via tiktok_get_audience_report, including campaign/ad group levels. Other dimensions use the BASIC planner. Multiple audience breakdo","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_pixels","description":"List TikTok pixels and, when permissions allow it, pixel event metadata for an advertiser. Falls back with explicit warnings when endpoints are unavailable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_read_endpoint","description":"Advanced GET-only TikTok Business API escape hatch for documented JSON read endpoints not yet modeled by a specialized MCP tool. Relative v1.3 paths and JSON-compatible query parameters are validated; OAuth, mutations, downloads, and lead-record paths are blocked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_report_raw","description":"Run a native TikTok BASIC or AUDIENCE synchronous report with caller-selected dimensions and metrics. AUDIENCE supports demographics such as age/gender at campaign/adgroup levels; tiktok_get_audience_report provides a guided path. Use when a current API field is not yet in tiktok://metrics; unlike tiktok_get_insights, this tool does not calculate aliases or auto-split incompatible selections.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_get_search_ads_maturity","description":"Diagnose TikTok Search Ads maturity from keyword/search-term reporting and optional keyword recommendation endpoints. Read-only diagnostics only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_shop_catalog_diagnostics","description":"Read-only TikTok Shop/catalog/e-commerce diagnostics. Tries catalog reporting first, then Shop auction metrics, and returns endpoint warnings when catalog permissions are unavailable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_spark_ads","description":"Return Spark Ads context from ad fields when available, with a conservative fallback if Spark-specific fields are not supported.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_spark_organic_joins","description":"Join accessible Spark Ads fields with paid page/post reporting and optional organic identity/post endpoints when permissions allow. Read-only only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_targeting","description":"Read configured ad group targeting and audience references: custom/lookalike inclusions/exclusions, geo, language, age/gender, placements, interests and behaviors. Supports classic and upgraded Smart+ (smartPlus:true), preserving targeting_spec and automatic targeting settings. Does not infer delivered audiences or hidden Smart+ signals. Use tiktok_get_audiences for audience names/types and tiktok","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_targeting_catalog","description":"Read TikTok targeting and planning catalogs: locations, languages, interests, behaviors, hashtags, Search Ads keyword ideas/health, devices, carriers, contextual tags, content exclusions, and time zones.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_uploaded_video","description":"Read one uploaded video from this advertiser\\u2019s media library. Returns ready only after its media information is available with positive duration and dimensions. Does not upload again.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_video_assets","description":"Return ad-linked TikTok video asset metadata from ad/get and video material endpoints when available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_get_write_context","description":"Read the exact TikTok entity, parent settings and advertiser currency/timezone before editing or building a new configuration. Read-only.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_health_check","description":"Read-only health check for TikTok credentials, accessible advertisers, and advertiser info. Never returns tokens or secrets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_list_ad_images","description":"List the advertiser's whole image library (file/image/ad/search): file name, dimensions, signature, carousel usability, and a publicly served image URL signed for roughly thirty days (image_url_expires_at gives the exact instant).","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_list_ad_videos","description":"List the advertiser's whole video library (file/video/ad/search): file name, duration, dimensions, signature, and publicly served preview and cover URLs. Every TikTok URL is signed and expires after roughly six hours: re-resolve with tiktok_get_asset_urls before use.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_list_advertisers","description":"List the TikTok advertiser accounts accessible with the current token, limited to TIKTOK_ADVERTISER_IDS. Returns advertiser ID, name, and status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_search_keywords","description":"Get keyword suggestions for TikTok Search Ads. Returns recommended keywords with search volume estimates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tiktok_update_adgroup_budget","description":"Change the budget of a TikTok ad group. Amount in the account currency, sent as is. Previews by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_update_adgroup_status","description":"Pause or reactivate a TikTok ad group. Previews by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_update_campaign_budget","description":"Change a TikTok campaign budget, in the account currency. Previews by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_update_campaign_status","description":"Pause or reactivate a TikTok campaign. Previews by default.","write_action":true,"price_micros":0,"input_schema":null},{"name":"tiktok_validate_query","description":"Validate a TikTok metric/dimension combination BEFORE executing. Checks dimension grouping rules, lifetime compatibility, and metric/dimension compatibility.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":80,"grade":"B","scanned_at":"2026-10-30T06:00:29.064Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-30T06:00:29.035Z","components":{"code":{"score":25,"max":25,"notes":["9 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@getmcpads/tiktok-ads-mcp-server","version":"2.1.1","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-10-26T14:44:43.620Z","repositoryUrl":"git+https://github.com/get-mcp-ads/tiktok-ads-mcp-server.git","weeklyDownloads":550}],"repo":{"found":true,"owner":"get-mcp-ads","repo":"tiktok-ads-mcp-server","archived":false,"pushedAt":"2026-10-26T13:50:19Z","stars":0,"forks":0,"openIssues":4,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/333092235?v=4","ownerCreatedAt":"2026-09-23T20:58:16Z","license":"Apache-2.0"},"icon":{"url":"https://www.getmcpads.com/icon.svg?icon.04oocdq1kv3ro.svg","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":550,"license":"Apache-2.0","lastPushAt":"2026-10-26T13:50:19.000Z","score":32}}}},"grade_history":[{"kind":"restore","fromGrade":"C","toGrade":"B","reason":"score 80","createdAt":"2026-10-30T06:00:30.083Z"}],"reviews":[]}