Skip to main content
Glama

Google Ads performance

google_campaign_performance
Read-onlyIdempotent

Google Ads metrics for the account, its campaigns, ad groups or keywords over a period: cost, impressions, clicks, CTR, CPC, conversions, value, CPA, ROAS. Period: date_preset (LAST_* periods do not include today) or since and until, in the account time zone. level: account, campaign (default), ad_group or keyword; campaign_id narrows campaign, ad group and keyword rows to one campaign. by_day adds a row per date. Rows are ordered by cost, highest first (by date with by_day). Cost is in micros and as text in the account currency; conversions_value is in the account currency. Cost and clicks update about hourly, and conversions can be added for days afterwards. totals are over the returned rows; complete=false means more rows exist than were returned. Ads: google_ad_performance; search terms: google_search_terms. Read-only and free: changes nothing and does not count toward the monthly change limit. An identical read within 30 seconds may return the same data (see data_age_seconds).

Input Schema

NameRequiredDescriptionDefault
levelNoaccount, campaign, ad_group or keyword. Default campaign.
limitNoMost rows to return, 1–500. Default 200.
sinceNoFirst day, YYYY-MM-DD, in the account time zone. Goes with until.
untilNoLast day, YYYY-MM-DD, in the account time zone. Goes with since.
by_dayNoA row per date instead of one row for the whole period.
connectionNoWhich connected Google Ads account to use: the connection id from start_here or the customer id (123-456-7890 or 1234567890). Needed only when several Google Ads accounts are connected.
campaign_idNoOnly this campaign: for level campaign, ad_group or keyword.
date_presetNoA predefined period. Omit with since and until; with neither, LAST_7_DAYS.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds substantial non-obvious behavior: cost is in micros and as text in account currency, cost/clicks refresh roughly hourly while conversions can postdate days, totals cover only returned rows with complete=false signaling truncation, and an identical read within 30 seconds may return cached data (data_age_seconds). It also states the tool is free and does not consume the monthly change limit.

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?

Front-loaded with purpose and metric list before the period/level mechanics, then behavior and routing. It is dense and long for a single paragraph, but nearly every clause carries distinct operational information (freshness, caching, ordering, units) rather than repeating the schema.

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?

With no output schema, the description carries the return-value burden and does so: row ordering by cost (or by date with by_day), totals scope, complete=false truncation, and data_age_seconds. Combined with unit and freshness notes, an agent has everything needed to call and interpret this tool correctly.

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 100%, so baseline is 3, but the description goes beyond it: it warns that LAST_* presets do not include today, confirms the campaign default level, explains that campaign_id narrows campaign/ad_group/keyword rows, and specifies that cost is in micros plus text while conversions_value is plain currency. The limit parameter's default of 200 is only in the schema, so it is not fully additive.

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+resource: Google Ads performance metrics across four levels (account/campaign/ad_group/keyword) over a period, with the exact metric list (cost, impressions, clicks, CTR, CPC, conversions, value, CPA, ROAS). It also explicitly routes to nearby siblings, naming google_ad_performance for ads and google_search_terms for search terms, so an agent can separate it from the other google_ads_* 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?

Gives clear usage context: how to pick a period (date_preset vs since/until, and the default LAST_7_DAYS), how level selects granularity, when campaign_id applies, and when by_day is useful. Two alternatives are named for adjacent result types. It stops short of exclusions against other read siblings like google_ads_read or performance_overview, so it is clear context rather than full when/when-not guidance.

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.