Skip to main content
Glama

Apogee: Bulk Ad Launcher for Meta, TikTok & Snapchat

TikTok / Snapchat performance by campaign, ad set or ad

get_platform_performance
Read-onlyIdempotent

TikTok or Snapchat results per campaign, ad set or ad. TikTok or Snapchat: one row per campaign, ad set (TikTok ad group / Snapchat ad squad) or ad of an ad account over a date range, with its status, its daily budget and its metrics (spend, impressions, clicks, CTR, CPC, CPM, purchases, revenue, ROAS, CPA…), sorted (default by spend). Filters: campaign_id, adset_id, status, min_spend. TikTok ads: the standard ads and the Smart+ ads (smart_plus: true), not the variations TikTok generates. Money in the ad account's currency, days in its time zone; one platform at a time (never add TikTok and Snapchat up). For Meta: get_campaigns / get_adsets / get_ads.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "platform": "<platform>",
      "ad_account_id": "<ad_account_id>",
      "level": "<level>"
    },
    "name": "get_platform_performance"
  }
}

Input Schema

NameRequiredDescriptionDefault
sortNoDefault spend. cpa, cpc and cpm: the lowest first; the others: the highest first
levelYescampaign, adset (a TikTok ad group / a Snapchat ad squad) or ad
limitNoDefault 50
sinceNoYYYY-MM-DD, with until (both included), instead of date_preset
untilNoYYYY-MM-DD, with since
statusNoOnly the active or only the paused ones
adset_idNoOnly this ad group / ad squad (level adset), or its ads (level ad)
platformYestiktok or snapchat (Meta has its own reads and actions)
min_spendNoOnly the rows that spent at least this much (account currency)
campaign_idNoOnly this campaign (level campaign), or its ad groups / ad squads / ads
date_presetNoDefault last_7d (the 7 days before today, today left out), in the ad account's time zone
ad_account_idYesThe ad account, from list_ad_accounts with the same platform: a TikTok advertiser id (digits), a Snapchat ad account id (a UUID)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds real behavior: default sort by spend, currency and time-zone semantics of the returned money and days, the rule that platforms must never be summed, and the TikTok nuance that Smart+ ads are included but generated variations are not. These are exactly the traps an agent would otherwise fall into when aggregating results.

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 definition is front-loaded with purpose and scope before the metric list, filter list, and cross-platform caveats. It is dense with parentheticals and slightly run-on, but nearly every clause carries operational information rather than filler.

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 12-parameter, no-output-schema read tool, the description supplies what the schema cannot: the returned columns, the grain of each row, sort default, currency/time-zone semantics, and the platform-mixing prohibition. Nothing essential for a correct first call appears to be missing.

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 100%, so the schema already documents every parameter including defaults, enums and formats. The description only restates the filter set (campaign_id, adset_id, status, min_spend) and the default sort, adding grouping context but no meaning beyond the schema; baseline 3 applies.

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 opening line names a specific verb ('results') and resource ('TikTok or Snapchat ... per campaign, ad set or ad'), and the body makes the row granularity explicit. It also draws a hard boundary against the Meta siblings by naming get_campaigns / get_adsets / get_ads, so an agent can pick this over get_platform_overview or get_platform_top_performers without opening schemas.

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?

It gives an explicit exclusion plus the alternative for it ('For Meta: get_campaigns / get_adsets / get_ads') and a strong constraint ('one platform at a time (never add TikTok and Snapchat up)'). It does not, however, say when to prefer this over nearby siblings such as get_platform_daily_breakdown or get_platform_top_performers, so routing among the platform-performance family is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.