Ads Analytics MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TIKTOK_APP_ID | No | TikTok Marketing API app ID | |
| TIKTOK_APP_SECRET | No | TikTok Marketing API app secret | |
| GOOGLE_ADS_CLIENT_ID | No | Google Ads OAuth client ID | |
| GOOGLE_ADS_CLIENT_SECRET | No | Google Ads OAuth client secret | |
| GOOGLE_ADS_DEVELOPER_TOKEN | No | Google Ads API developer token |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_clientsA | Lists all configured accounts available in this MCP server. For each account, shows the ID (used in other tools), name, and which platforms are configured (google_ads, meta_ads, tiktok_ads). Call this first when you need to know which client_id to pass to other tools. |
| get_google_ads_campaign_performanceA | Retrieves Google Ads campaign performance metrics for a client. Returns normalized metrics: spend, impressions, clicks, CTR, CPC, CPM, conversions, CPA, conversion value, ROAS, plus bidding_strategy_type and channel_type. Default aggregation = 'campaign' (one row per campaign over the full period). Pass aggregation='campaign_day' for trend analysis or 'day' for account-level timeseries. Supports filtering by date range, campaign IDs, and campaign status. Use list_clients to see available client IDs. |
| get_google_ads_search_termsA | Retrieves search term performance data from Google Ads. Identifies wasted spend: terms with budget consumed but zero conversions. Returns total_spend, wasted_spend, and wasted_spend_pct at the response level. Use zero_conversions_only=true to focus exclusively on wasted spend. Use min_spend to filter out negligible terms. Use list_clients to see available client IDs. |
| get_google_ads_keywordsA | Retrieves keyword performance and Quality Score data from Google Ads. Returns quality_score_distribution summarising QS spread across the account. Quality Score 1–4 keywords are flagged for optimization — low QS raises CPC. Use min_impressions=100 to focus on keywords with enough data for reliable QS. Use list_clients to see available client IDs. |
| get_google_ads_impression_shareA | Retrieves impression share metrics for Search and Performance Max campaigns. Shows what fraction of eligible impressions each campaign is winning. Breaks down impression share loss into budget-lost vs rank-lost. estimated_missed_impressions shows the scale of the opportunity. Budget-lost IS > 20% = increase budget. Rank-lost IS > 30% = improve bids/QS. Use list_clients to see available client IDs. |
| get_google_ads_hourly_performanceA | Returns Google Ads performance broken down by hour-of-day (0–23) and day-of-week (MONDAY–SUNDAY) per campaign. Use for dayparting / ad-schedule analysis — identify when ads perform best and worst, inform ad_schedule bid adjustments. Metrics per bucket: impressions, clicks, spend, conversions, conversion_value, ctr, cpc, cpa, roas. Hours are in the advertiser's time zone as configured in Google Ads. |
| get_meta_campaign_performanceA | Retrieves Meta (Facebook/Instagram) campaign performance metrics for a client. Returns normalized metrics: spend, impressions, clicks, reach, CTR, CPC, CPM, conversions, CPA, conversion value, ROAS. Supports filtering by date range, ad account IDs, campaign IDs, and campaign status. Data is returned at campaign × day granularity. Use list_clients to see available client IDs. |
| get_meta_hourly_performanceA | Returns Meta Ads performance broken down by hour-of-day (0–23) and day-of-week (MONDAY–SUNDAY) per campaign. Use for dayparting / ad-set scheduling analysis — identify when ads perform best and worst in the advertiser's audience time zone. Metrics per bucket: impressions, clicks, spend, conversions (from client.meta_ads.conversion_action), conversion_value, ctr, cpc, cpa, roas. Day-of-week is derived client-side from the Meta insights date; hours are buckets from Meta's hourly_stats_aggregated_by_audience_time_zone breakdown. |
| get_meta_opportunity_scoreA | Returns Meta's account-level Opportunity Score (0–100) plus the active recommendations queue (consolidation, Advantage+, audience expansion, creative variants, etc.). Wraps the /act_/recommendations Marketing API edge — same data Meta's official MCP surfaces, but using the client's stored access token. Each recommendation is normalized: { recommendation_type, level, entity_id, title, description, estimated_lift, status }. Use to (a) score an account quickly, (b) feed concrete recommendations into a Meta audit, (c) prioritise the highest-lift fixes. |
| get_meta_auction_rankingsA | Returns Meta's three auction-ranking labels per ad: quality_ranking, engagement_rate_ranking, conversion_rate_ranking — each one of ABOVE_AVERAGE, AVERAGE, BELOW_AVERAGE_35/20/10, or UNKNOWN. Computes below_average_count (0–3) and sorts the worst offenders to the top — 2+ below-average rankings is a creative-refresh trigger. Filters out ads under min_impressions (default 1000) since Meta only assigns labels above that volume. Same data Meta's MCP |
| get_meta_anomaly_signalA | Detects daily anomalies in Meta campaign performance using a rolling-baseline Z-score model — equivalent in intent to Meta's MCP |
| get_tiktok_campaign_performanceA | Retrieves TikTok Ads campaign performance metrics for a client. Returns normalized metrics: spend, impressions, clicks, CTR, CPC, CPM, conversions, CPA, conversion value, ROAS. Supports filtering by date range, advertiser IDs, campaign IDs, and campaign status. Data is returned at campaign × day granularity from the TikTok Marketing API /report/integrated/get/ endpoint. |
| get_tiktok_hourly_performanceA | Returns TikTok Ads performance broken down by hour-of-day (0–23) and day-of-week (MONDAY–SUNDAY) per campaign. Source: /report/integrated/get/ with stat_time_hour dimension. Hours are in the advertiser's account time zone. Use for dayparting / ad-schedule analysis. TikTok-specific peaks: lunch (12–14) and evening (19–23) in Spain. |
| get_tiktok_ad_performanceA | Returns TikTok Ads performance at the ad level (campaign → ad group → ad). Includes the four core video-engagement signals: video_play_actions, video_watched_2s, video_watched_6s, average_video_play_per_user. video_watched_2s / impressions = hold rate (best proxy for hook strength on TikTok). 2s hold < 30% = creative-refresh signal. |
| get_tiktok_auction_rankingsA | Returns per-ad TikTok ranking signals: video_quality_score (0–10), engagement_rate_ranking, conversion_rate_ranking — each one of ABOVE_AVERAGE / AVERAGE / BELOW_AVERAGE / UNKNOWN. Computes below_average_count (0–2) and sorts the worst offenders to the top — 1+ below-average rankings is a creative-refresh trigger on TikTok (the platform burns creatives faster than Meta). Filters out ads under min_impressions (default 1000). When a tier doesn't expose video_quality_score the field is null and the row still surfaces ranking labels. |
| get_tiktok_anomaly_signalA | Detects daily anomalies in TikTok campaign performance using the same rolling-baseline Z-score model as get_meta_anomaly_signal. For each campaign × metric (CTR, CPM, CPC, CPA, spend, conversions), evaluates trailing days against a baseline of the prior baseline_days (default 14). Flags any day with |z| ≥ z_threshold (default 2.0). Severity: |z| ≥ 2× threshold = severe, ≥ 1.5× = moderate, otherwise mild. Sorted severity → most-recent → |z|. |
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 16 tools
Each tool is scoped by a platform prefix (google_ads/meta/tiktok) plus a specific entity or metric, so even parallel tools like get_meta_hourly_performance and get_tiktok_hourly_performance or the two anomaly signals are clearly distinguishable by platform and purpose. There is no meaningful overlap where an agent could reasonably misselect.
All data tools follow the consistent get_{platform}_{metric_or_entity} pattern (e.g. get_google_ads_keywords, get_meta_auction_rankings, get_tiktok_anomaly_signal). The single discovery tool list_clients deviates slightly but is a natural, predictable exception with no competing convention.
16 tools sits at the upper edge of the ideal range, but the count is justified: three ad platforms each get parallel coverage of performance, hourly, and diagnostics. It is slightly heavy but every tool maps to a concrete analytical need rather than being filler.
The surface covers a strong analytics lifecycle across all three platforms: campaign performance, dayparting/hourly, auction rankings, anomaly detection, plus discovery. Minor asymmetries exist (Google Ads has no auction-rankings or anomaly tool, and Meta lacks ad-level performance), but these are workaroundable gaps rather than dead ends.