Skip to main content
Glama
kiarashedraki

google-ads-mcp

google-ads-api-mcp

An MCP (Model Context Protocol) server for the Google Ads API. Lets any MCP client — Claude, Cursor, obot, etc. — report on and manage Google Ads accounts: GAQL queries, campaign/ad group/keyword performance, search terms, budgets, pausing, negatives.

Zero Google client-library dependency: it talks to the REST endpoint directly with fetch, so it starts fast under npx and tracks new API versions with one environment variable.

Tools

Discover

Tool

Description

list_accessible_customers

Accounts the credentials can reach, plus the full MCC client tree

account_overview

Account details + account-wide totals for a date range

gaql_fields

Field metadata: data types, enum values, what selects with what

Read

Tool

Description

list_campaigns / list_ad_groups / list_ads

Structure with status, budgets, bids, RSA headlines/descriptions, policy status

campaign_performance / ad_group_performance

Metrics by date range, optionally segmented by date/week/month/device/network

keyword_performance

Keywords with quality score, match type, bid, metrics

search_terms_report

Real search queries with matched keyword — the negative-keyword goldmine

geo_performance

Metrics by user location

gaql_search

Any GAQL query, paginated, with micros converted

Write

Tool

Description

set_campaign_status / set_ad_group_status / set_ad_status

Enable or pause

set_campaign_budget

Daily budget in currency units; refuses shared budgets unless told otherwise

update_keyword

Status and/or max CPC bid

add_keywords / add_negative_keywords

Bulk add, campaign- or ad-group-level negatives, validate_only dry run

remove_resource

Remove a keyword, ad, ad group, campaign by resource name

mutate

Raw GoogleAdsService.mutate passthrough for everything else, with validate_only

Niceties handled for you:

  • Micros → moneycost_micros: 3300000 comes back as cost: 3.3; budgets and bids are given and returned in currency units.

  • Paginationgaql_search follows page tokens until your limit.

  • Readable errorsGoogleAdsFailure details are flattened to ERROR_CODE — message (field: …) plus the request id.

  • MCC aware — set GOOGLE_ADS_LOGIN_CUSTOMER_ID to a manager account and every tool can target any client under it via customer_id.

  • Token caching — the refresh token is exchanged once per hour, not per call.

Related MCP server: Google Ads MCP Server

Setup

You need four things from Google, all one-time:

  1. Developer token — Google Ads → a manager account → Tools → API Center. A test-account token works for test accounts only; apply for Basic access for production.

  2. OAuth client — Google Cloud Console → APIs & Services → Credentials → OAuth client ID (Desktop app). Enable the Google Ads API on the project.

  3. Refresh token — run any OAuth flow for scope https://www.googleapis.com/auth/adwords with that client. The official guide has scripts; any generic "get refresh token" helper works.

  4. Customer IDs — the account to report on, and (if you go through an MCC) the manager account ID.

Then configure your MCP client:

{
  "mcpServers": {
    "google-ads": {
      "command": "npx",
      "args": ["-y", "google-ads-api-mcp"],
      "env": {
        "GOOGLE_ADS_DEVELOPER_TOKEN": "...",
        "GOOGLE_ADS_OAUTH_CLIENT_ID": "....apps.googleusercontent.com",
        "GOOGLE_ADS_OAUTH_CLIENT_SECRET": "...",
        "GOOGLE_ADS_REFRESH_TOKEN": "1//...",
        "GOOGLE_ADS_LOGIN_CUSTOMER_ID": "1234567890",
        "GOOGLE_ADS_CUSTOMER_ID": "0987654321"
      }
    }
  }
}

Environment variables

Variable

Required

Description

GOOGLE_ADS_DEVELOPER_TOKEN

yes

From API Center in a manager account

GOOGLE_ADS_OAUTH_CLIENT_ID

yes

OAuth 2.0 client ID

GOOGLE_ADS_OAUTH_CLIENT_SECRET

yes

OAuth 2.0 client secret

GOOGLE_ADS_REFRESH_TOKEN

yes

Refresh token with the adwords scope

GOOGLE_ADS_LOGIN_CUSTOMER_ID

no

Manager (MCC) account to authenticate through; needed when the account is accessed via a manager

GOOGLE_ADS_CUSTOMER_ID

no

Default client account when a tool call omits customer_id

GOOGLE_ADS_API_VERSION

no

Default v24. Bump when Google releases a new version; versions sunset roughly yearly

Docker

docker build -t google-ads-api-mcp .
docker run -e GOOGLE_ADS_DEVELOPER_TOKEN=... -e GOOGLE_ADS_OAUTH_CLIENT_ID=... -e GOOGLE_ADS_OAUTH_CLIENT_SECRET=... -e GOOGLE_ADS_REFRESH_TOKEN=... google-ads-api-mcp

The container speaks MCP over stdio; use your platform's stdio wrapper (e.g. obot's runtime) to expose it over HTTP.

GAQL cheatsheet

Ask the model to use gaql_fields when unsure, but the shape is always:

SELECT campaign.name, metrics.clicks, metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_30_DAYS AND campaign.status = 'ENABLED'
ORDER BY metrics.cost_micros DESC
LIMIT 50

Useful FROM resources: campaign, ad_group, ad_group_ad, keyword_view, search_term_view, geographic_view, conversion_action, campaign_budget, asset, change_event, recommendation, customer_client.

Development

npm install
npm run build
GOOGLE_ADS_DEVELOPER_TOKEN=... GOOGLE_ADS_OAUTH_CLIENT_ID=... GOOGLE_ADS_OAUTH_CLIENT_SECRET=... GOOGLE_ADS_REFRESH_TOKEN=... GOOGLE_ADS_CUSTOMER_ID=... node dist/index.js
npm run smoke   # spawns the server over stdio and exercises the read tools against your account

License

MIT

Available Tools

21 tools
account_overviewAccount overviewA
Read-only

Account details (name, currency, time zone, auto-tagging, status) plus account-wide totals for the date range: impressions, clicks, cost, conversions.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful output context (returned fields and account-wide metrics) but does not disclose operational behavior such as how date range selection interacts with parameters; the schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the key output categories and lists precise fields and metrics. There is no filler, and every phrase contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description enumerates the returned account details and metrics well enough for an agent to understand what it will receive. Remaining invocation details are fully covered by the input schema.

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 fully documents all four parameters. The description adds no parameter-specific detail beyond referencing the date range, which is already represented by start_date, end_date, and date_range.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (account) and the payload (account settings plus performance totals). It distinguishes account-level scope from sibling campaign/ad-group tools, but lacks an explicit action verb such as 'get' or 'list'.

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?

The phrase 'account-wide totals' gives clear context that this is for account-level reporting, which separates it from campaign_performance, ad_group_performance, and similar siblings. It does not explicitly name alternatives or exclusion conditions, but the scope is clear enough for selection.

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

add_keywordsAdd keywordsA
Idempotent

Add keywords to an ad group. Each keyword has text, match type and an optional max CPC bid (currency units). Set validate_only to check for policy/duplicate errors without saving.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoENABLED
keywordsYes
ad_group_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
validate_onlyNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish write, idempotent, non-destructive behavior, and the description adds valuable context about validate_only acting as a dry-run that checks policy/duplicate errors without saving. It also clarifies that cpc_bid is in currency units. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, and no filler. Every clause carries meaning: the resource, the keyword fields, and the validation mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is adequate for invocation because required parameters are visible in the schema, but with no output schema and no sibling differentiation it leaves some gaps. An agent may not know what the response contains or when to choose add_negative_keywords instead.

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 coverage is only 20%, so the description must compensate. It explains the keyword subfields (text, match_type, cpc_bid) and validate_only, but it leaves ad_group_id and status semantics to the schema, which lacks descriptions. Helpful but not complete for all parameters.

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?

Description starts with 'Add keywords to an ad group,' a specific verb+resource statement that clearly distinguishes this from sibling tools like update_keyword and add_negative_keywords. It also outlines the main object shape (text, match type, optional bid), making the tool's job unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance or comparison with alternatives. The only usage hint is the validate_only mode, but the description never states when to prefer this tool over add_negative_keywords, update_keyword, or mutate.

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

add_negative_keywordsAdd negative keywordsA
Idempotent

Add negative keywords at campaign level (default) or ad group level. Typical follow-up to search_terms_report. Negatives at campaign level block the term for every ad group in the campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYes
ad_group_idNoAd group for ad-group-level negatives (use instead of campaign_id)
campaign_idNoCampaign for campaign-level negatives
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
validate_onlyNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral nuance: campaign-level negatives block the term for every ad group in the campaign, and campaign level is the default. It does not mention validate_only or response behavior, but annotations reduce the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the action and default scope, the workflow context, and the practical effect of campaign-level negatives. The most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter mutation tool, the description combined with the schema and annotations is largely sufficient: the agent knows the required keywords, the level selection, the default behavior, and the follow-up context. Minor gaps include no explicit mention of validate_only behavior or output/return format, but these are less critical given the annotations and schema.

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?

The description adds meaning beyond the schema by explaining the semantic choice between campaign_id and ad_group_id and identifying the default level. It does not detail match_type or validate_only, but those are partially covered by the schema and enum/default definitions, so the description adds meaningful value without needing to duplicate every field.

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 description opens with a specific verb and resource: 'Add negative keywords at campaign level (default) or ad group level.' It clearly identifies the tool's scope and the level distinction, and 'negative' differentiates it from the sibling add_keywords tool.

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?

The phrase 'Typical follow-up to search_terms_report' gives a clear workflow context, and stating the campaign-level default plus the ad-group-level option tells the agent when to choose each scope. It does not explicitly name alternatives or say when not to use this tool, but the usage context is strong.

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

ad_group_performanceAd group performanceA
Read-only

Per-ad-group metrics for a date range, optionally filtered to a campaign and segmented.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
segmentNoBreak rows down by a segment (date, week, month, device, network) or return totalsnone
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
include_removedNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds some scoping behavior (date range, campaign filter, segmentation) but does not disclose return-value details, default date-range behavior, or any edge cases. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence conveys the core scope and optionality without filler. Every phrase adds value and the description is appropriately compact for a straightforward reporting tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 optional parameters and no output schema, the description gives enough to understand what the tool does and when to pick it, but it omits what specific metrics are returned and how date_range interacts with custom start/end dates. Schema descriptions and annotations compensate partially, making this minimally viable.

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 75%, with most parameters already documented in the input schema. The description lightly reinforces date range, campaign filtering, and segmentation but does not add meaningful detail beyond the schema. Baseline 3 is appropriate here.

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 description names the exact resource level (ad groups), the nature of the data (metrics), and the scoping options (date range, campaign filter, segmentation). This distinguishes it clearly from sibling report tools like campaign_performance, keyword_performance, and geo_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the primary use case clear: retrieving per-ad-group metrics, with optional campaign filtering and segmentation. However, it does not explicitly contrast with alternatives such as campaign_performance or keyword_performance, nor does it state when not to use this tool.

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

campaign_performanceCampaign performanceA
Read-only

Per-campaign metrics for a date range: impressions, clicks, CTR, avg CPC, cost, conversions, conversion value, cost/conv, plus search impression share. Optionally segment by date/week/month/device/network. Money is in account currency units.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
segmentNoBreak rows down by a segment (date, week, month, device, network) or return totalsnone
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
campaign_idsNoRestrict to these campaign IDs
include_removedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond the annotations: the exact metric set, segmentation options, and the fact that money is in account currency units.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first front-loads the core function and metric list, the second summarizes segmentation and currency. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 appropriately enumerates returned metrics and explains the segmentation behavior. It does not describe row identity fields or default date-range behavior, but those are either implied by 'per-campaign' or covered in the input schema. The description is adequate for an agent to form a correct mental model.

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 88%, so the schema already documents most parameter meanings. The description reinforces the concept behind the 'segment' parameter and clarifies the output metrics, but it does not add per-parameter detail absent from the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this returns per-campaign metrics for a date range and enumerates the specific metrics reported. It lacks an explicit operative verb like 'retrieves' or 'returns', but the resource and scope are clear and the metrics list distinguishes it from sibling reporting tools such as ad_group_performance and keyword_performance.

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?

The description provides clear context: this is the tool for campaign-level performance metrics with optional segmentation. It does not explicitly state when not to use it or name alternatives, but the per-campaign scope and metric list make the intended use obvious relative to the sibling tools.

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

gaql_fieldsGAQL field metadataA
Read-only

Look up GAQL fields, resources, segments and metrics: data type, whether selectable/filterable/sortable, enum values, and which resources they can be selected with. Use name_like with SQL wildcards (e.g. 'campaign.%' for every campaign field, 'metrics.%conversion%').

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
categoryNo
name_likeYesLIKE pattern on the field name, e.g. 'ad_group_criterion.keyword.%'
selectable_onlyNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about returned metadata categories and filtering behavior, but it does not disclose response shape, pagination defaults, or how limit applies to results. That is acceptable given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the core purpose, the query mechanism, and illustrative wildcard patterns with no redundant filler. The most important information is front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only metadata lookup tool with four parameters and no output schema, the description covers the primary use case, the key parameter behavior, and the nature of returned metadata. It does not go into depth about output formatting or pagination, but those are not critical for an agent to invoke the tool successfully.

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?

With only 25% schema description coverage, the description compensates well by explaining the intended use of name_like with wildcard examples and by referencing categories (fields, resources, segments, metrics) that map to the category enum. It does not explicitly describe selectable_only or limit, but those are reasonably self-explanatory from their names and schema defaults.

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 description opens with a specific verb and object: 'Look up GAQL fields, resources, segments and metrics,' and enumerates the exact metadata returned. It is clearly distinct from sibling gaql_search, which would execute queries rather than describe schema metadata.

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?

The description gives practical usage context by telling the agent to use name_like with SQL wildcards and provides concrete examples like 'campaign.%' and 'metrics.%conversion%'. It implies this is for metadata discovery rather than data retrieval, though it does not explicitly name gaql_search as the alternative.

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

geo_performanceGeographic performanceA
Read-only

Metrics by user location for a date range (country/region/city geo target constants). Resolve the constant names with gaql_search on geo_target_constant if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds location scoping and the gaql_search companion step, but does not disclose further behavioral traits such as response shape, pagination, or metric definitions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core purpose is front-loaded, followed by a useful pointer to gaql_search. Every clause contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient to recognize the tool as a location-based performance report and to know how to resolve constants. However, there is no output schema, and the description does not enumerate which metrics are returned or the response structure, leaving an agent somewhat blind to call results.

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 83%, so most parameters are already documented. The description does not add parameter-specific detail beyond mentioning geo target constants, and it does not clarify how those constants relate to the listed input properties. The undocumented campaign_id parameter is not addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies this as a location-based performance metrics tool: 'Metrics by user location for a date range' and names country/region/city geo target constants. This distinguishes it from sibling reports like campaign_performance or keyword_performance, though it lacks an explicit action verb such as 'get' or 'return'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: use this when geographic/location-based performance metrics are needed. It also gives a practical pointer to gaql_search for resolving geo target constant names. However, it does not explicitly state when to prefer this over sibling reporting tools or what scenarios are not appropriate.

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

keyword_performanceKeyword performanceA
Read-only

Per-keyword metrics for a date range with match type, status, quality score and effective CPC bid. Filter by campaign or ad group. Sorted by cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
ad_group_idNo
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
include_removedNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral facts: returned metrics are per-keyword, results are sorted by cost, and campaign/ad-group filtering is available. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core return value, then states the filters and sort order. Every clause adds useful information with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only report tool without an output schema, the description states the key returned fields, the available filters, and the ordering, which is enough to guide invocation. It does not mention defaults for date range or limit or clarify include_removed behavior, but those are partially addressed by the schema, so the remaining gap is modest.

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 coverage is about 63%, so the schema already documents the date and customer parameters. The description adds meaning for the campaign_id and ad_group_id parameters by stating they serve as filters, and it mentions the sort order that affects the limit parameter's usefulness. However, include_removed remains unexplained and no extra format or syntax detail is provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as per-keyword metrics for a date range and lists distinguishing fields such as match type, status, quality score, and effective CPC bid. It is specific enough to separate it from campaign- or ad-group-level reports, though it does not explicitly name or contrast sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for keyword-level reporting and says results can be filtered by campaign or ad group, giving some contextual guidance. However, it does not explicitly state when to prefer this tool over sibling reporting tools like campaign_performance or search_terms_report, nor does it provide exclusion conditions.

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

list_accessible_customersList accessible customersA
Read-only

List the Google Ads accounts reachable with the configured credentials: the accounts the OAuth user can access directly, plus the full client tree under GOOGLE_ADS_LOGIN_CUSTOMER_ID when it is a manager (MCC). Use this to find a customer_id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral detail by explaining the scope of the listing (direct accounts plus client tree), which is not fully covered by the annotations alone. It does not describe the exact output format, but that is not required for a read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two clear sentences with no redundant information. It front-loads the primary action (list accounts) and provides essential context (reachable with credentials) and a direct use case (find customer_id).

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?

Given the tool has no input parameters and no output schema, the description provides sufficient context: it explains what is listed (accessible accounts), the scope (direct and client tree), and the intended use (finding a customer_id). This is complete for a simple listing tool.

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?

There are no parameters in the schema, so parameter semantics are trivially complete. The description does not need to add parameter-specific information, and the baseline of 3 is appropriate given the high schema coverage (100% with zero parameters).

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 description clearly states the tool lists Google Ads accounts reachable with the configured credentials, specifying both direct access and the client tree under a login customer ID. This distinguishes it from sibling tools that list other resources like campaigns or ad groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use this tool to find a customer_id, providing a clear call-to-action. It implicitly indicates this is the tool for identifying accessible accounts, making the use case unambiguous.

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

list_ad_groupsList ad groupsA
Read-only

List ad groups (id, name, status, type, default CPC bid) with their campaign. Optionally filter to one campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
include_removedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail by stating the exact output fields and the optional campaign filter, going beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The core purpose and key scope are front-loaded, and every phrase adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool, the description covers the resource, returned fields, and optional filtering. It does not explain include_removed semantics or pagination, but the schema documents limit and the name is reasonably self-explanatory, so the tool is usable without further clarification.

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 coverage is 50%; limit and customer_id are already described in the schema. The description adds meaning to campaign_id via 'Optionally filter to one campaign', but it does not clarify include_removed, which has no schema description. Overall, the description partially compensates for the schema gaps but not fully.

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 description uses a specific verb and resource ('List ad groups') and enumerates the returned fields (id, name, status, type, default CPC bid) plus the campaign association. This clearly distinguishes it from siblings like list_campaigns, list_ads, and ad_group_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need ad group details with their campaign, optionally scoped to a single campaign. However, it does not explicitly contrast it with alternatives such as list_ads or ad_group_performance, leaving some selection judgment to the agent.

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

list_adsList adsA
Read-only

List ads with type, status, policy approval, ad strength, final URLs and — for responsive search ads — all headlines and descriptions with pinning. Filter by campaign or ad group.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
ad_group_idNo
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
include_removedNo

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only behavior is known. The description adds value by detailing what fields are returned, especially the special handling for responsive search ads with headlines, descriptions, and pinning. This goes beyond what structured annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the core purpose and immediately lists useful output details. Every clause contributes meaningful information with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the main return fields and available filters, which is largely sufficient. The main gap is the undocumented include_removed parameter, but the overall context is strong enough for an agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, and the description only partially compensates by clarifying that campaign_id and ad_group_id act as filters. It does not explain include_removed, which is a non-obvious boolean parameter, and it adds minimal semantic value beyond the schema's own descriptions for limit and customer_id.

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 description uses a specific verb ('List') and identifies the exact resource ('ads'), while also enumerating the returned data (type, status, policy approval, ad strength, final URLs, and responsive search ad assets). This clearly separates it from sibling tools like list_campaigns and list_ad_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that filtering by campaign or ad group is possible, which gives some usage context. However, it does not explicitly explain when to choose this tool over alternatives such as gaql_search or other list tools, nor does it provide any exclusion criteria.

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

list_campaignsList campaignsA
Read-only

List campaigns with status, channel type, bidding strategy, daily budget (currency units), schedule and serving status. No metrics; use campaign_performance for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
statusNoOnly campaigns with this status
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
include_removedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, non-destructive, open-world behavior, so the bar is lower. The description adds useful behavioral context by listing exactly which campaign attributes are returned and by confirming that performance metrics are intentionally excluded. It does not mention pagination behavior, but for a simple read-only list tool this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core purpose and returned fields front-loaded, and the metric exclusion placed second. No filler or repetition of schema details.

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 read-only campaign list tool with no output schema, the description is complete: it states what is returned, what is not returned, and where to go for the excluded data. Parameter defaults and constraints are already covered by the input schema and annotations.

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 75% and the schema documents limit, status, and customer_id. The description does not add input-parameter meaning beyond mentioning output fields; include_removed remains undocumented in both schema and description, though its name is reasonably self-explanatory.

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 description names a specific operation (List) and resource (campaigns), and enumerates the fields returned (status, channel type, bidding strategy, daily budget, schedule, serving status). It also distinguishes itself from campaign_performance, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states 'No metrics; use campaign_performance for those,' which gives a clear when-not-to-use condition and names the alternative tool. This is more than enough routing guidance relative to sibling tools.

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

mutateRaw mutateA
Destructive

Advanced: send raw GoogleAdsService.mutate operations using REST field names (camelCase), e.g. [{ campaignOperation: { update: { resourceName, status }, updateMask: 'status' } }]. Supports every resource the API can create/update/remove (campaigns, ads, assets, conversion actions, extensions…). Use validate_only: true first to dry-run. Operations are atomic unless partial_failure is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
validate_onlyNo
partial_failureNo

TDQS

A4.7/5.0
Behavior4/5

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

The description discloses destructive behavior through 'create/update/remove' and mentions atomicity and dry-run validation, going beyond the annotations. It does not detail error response shapes or partial-failure result handling, but the provided guidance is sufficient for a raw mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured, including a concrete example, scope, and usage cautions in just a few sentences. Every sentence adds meaningful information without redundancy.

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?

Given the tool's advanced and open-ended nature, the description covers the essential aspects: syntax, supported resources, validation flow, and failure semantics. The absence of an output schema is acceptable because the description focuses on request construction and side effects.

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?

The description compensates for the sparse schema by explaining the operations parameter with a concrete camelCase example and clarifies validate_only and partial_failure behavior. customer_id is already described in the schema, while validate_only and partial_failure are implied through the text.

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 description explicitly states 'send raw GoogleAdsService.mutate operations using REST field names', which clearly identifies the tool's function and resource scope. It also contrasts with sibling tools by labeling itself 'Advanced' and covering 'every resource the API can create/update/remove'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides direct guidance: use camelCase field names, 'Use validate_only: true first to dry-run', and notes atomicity unless partial_failure is true. This effectively advises when and how to use the tool relative to the more specific sibling operations.

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

remove_resourceRemove resourceA
DestructiveIdempotent

Remove (soft-delete) a keyword, negative keyword, ad, ad group or campaign by its resource name (e.g. customers/123/adGroupCriteria/456~789). Removal is permanent in Google Ads; removed entities stay visible in reports with status REMOVED.

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
resource_nameYesFull resource name as returned by other tools

TDQS

A4.2/5.0
Behavior5/5

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

The description goes beyond the annotations by explaining that removal is permanent, that it is a soft-delete in reporting terms, and that removed entities remain visible with status REMOVED. This is valuable behavioral context that the destructiveHint and idempotentHint annotations do not fully convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no unnecessary words. The core action and resource types are front-loaded, and the permanence caveat is placed second for emphasis. The example resource name is compact and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with strong annotations, the description is mostly complete: it states the resource types, the input format, and the post-removal behavior. It could mention what happens on success or whether an error is returned for invalid resource names, but the core invocation context is sufficiently covered.

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 coverage is 100%, so the schema already documents both parameters. The description adds a concrete example of a resource_name and clarifies that the resource name is the addressing mechanism, but it does not add substantive semantics beyond the schema.

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 description states a specific action (remove/soft-delete) and names the exact resource types it applies to: keyword, negative keyword, ad, ad group, or campaign. It also clarifies the addressing mechanism via resource name. This clearly distinguishes it from sibling tools like set_ad_status or update_keyword.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by listing the resource types and requiring a full resource name 'as returned by other tools.' However, it does not explicitly compare against alternatives such as mutate or set_ad_status, nor does it state when not to use this tool.

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

search_terms_reportSearch terms reportA
Read-only

Actual search queries that triggered your ads, with the matching keyword, status (ADDED/EXCLUDED/NONE) and metrics. The main source for finding negative keywords to add. Sorted by impressions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
end_dateNoCustom range end, YYYY-MM-DD
date_rangeNoPreset date range. Ignored when start_date and end_date are both given. ALL_TIME applies no date filter.LAST_30_DAYS
start_dateNoCustom range start, YYYY-MM-DD
ad_group_idNo
campaign_idNo
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
min_impressionsNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already establish that the tool is read-only and non-destructive, so the description only needs to add behavioral context. It adds that results are sorted by impressions and include a status field with ADDED/EXCLUDED/NONE values, but it does not disclose pagination, metric definitions, or open-world response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences pack the core output, the main use case, and sorting behavior with no filler. Every sentence earns its place and the most identifying information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter report with no output schema, the description is serviceable but not complete. It conveys the main columns and purpose, but leaves filter scoping, date-range behavior, and metric details to the schema or agent inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level meaning; it never mentions date ranges, filters, limit, or min_impressions. With 8 parameters and only 63% schema description coverage, the text should compensate for the undocumented ad_group_id, campaign_id, and min_impressions, but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the report as actual search queries that triggered ads, with keyword, status, and metrics, which clearly states what the tool returns. It does not use an explicit verb like 'retrieves' and does not name sibling tools, but the content is specific enough to distinguish it from keyword_performance and other reports.

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?

The description explicitly frames the tool as 'the main source for finding negative keywords to add,' giving agents a clear trigger for when to use it. It stops short of naming alternatives or stating when not to use it, so it lacks the full when/when-not guidance of a 5.

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

set_ad_group_statusEnable or pause ad groupA
Idempotent

Set an ad group to ENABLED or PAUSED.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
ad_group_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.

TDQS

A3.7/5.0
Behavior3/5

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

The description does not contradict the annotations (e.g., readOnlyHint=false aligns with 'set'). It adds no context about side effects beyond the annotations, but the annotations already convey safety profiles.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no fluff. It directly states the action and the target resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple setter tool. It does not mention output format, but given the simplicity and the presence of schema and annotations, nothing critical is missing. Slight lack of explicit mention of required parameters, but those are in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with only customer_id having a description. status is self-documenting via enum, but ad_group_id has no description and the tool description does not compensate for the lack of parameter details.

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 description clearly states the verb 'set' and the resource 'ad group', and specifies the two possible statuses (ENABLED, PAUSED). It distinguishes itself from sibling tools like set_campaign_status and set_ad_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for changing ad group status but does not explicitly state when to use it versus alternatives. It is clear enough from context but lacks explicit guidance.

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

set_ad_statusEnable or pause adA
Idempotent

Set an ad (within its ad group) to ENABLED or PAUSED.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idYes
statusYes
ad_group_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already cover mutation (readOnlyHint=false), idempotency (idempotentHint=true), and non-destructiveness (destructiveHint=false). The description adds little behavioral context beyond the operation itself, although the parenthetical 'within its ad group' clarifies the required relationship between ad_id and ad_group_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence with no filler. The verb, resource, scope, and possible states are all front-loaded, and the parenthetical adds the necessary ad-group relationship without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status-setter with annotations covering idempotency and non-destructiveness, the description is mostly complete: it states the operation, the target resource, the allowed states, and the parent scope. The main missing piece is explicit guidance about when to choose this tool over sibling status tools, but the name and resource wording make that reasonably inferable.

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 only 25%, so the description carries part of the parameter-explanation burden. It adds the useful clue that the ad lives 'within its ad group,' which helps explain ad_group_id, but it does not elaborate on ad_id or the meaning of the status values beyond what the enum already provides.

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 description uses a specific verb and resource: 'Set an ad ... to ENABLED or PAUSED.' It clearly identifies the object as an individual ad, scoped 'within its ad group,' which differentiates it from sibling tools like set_ad_group_status and set_campaign_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the resource type and title: this tool is for enabling or pausing a single ad. However, it does not explicitly say when to use it versus sibling status tools like set_ad_group_status or set_campaign_status, nor does it mention any exclusions or prerequisites.

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

set_campaign_budgetSet campaign daily budgetA
Idempotent

Change a campaign's daily budget, given in account currency units (e.g. 5.50). Looks up the campaign's budget resource first. Refuses to change a shared budget unless allow_shared is true, since that affects every campaign using it.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
allow_sharedNo
daily_amountYesNew daily budget in currency units

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations, the description adds useful behavioral context: it looks up the budget resource first and refuses to change shared budgets unless allow_shared is true. This gives agents a clearer picture of side effects and guardrails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it states the action, gives a concrete example, and explains the key guardrail in two sentences with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose, the input unit, and the shared-budget restriction. It does not describe return values or error behavior, but no output schema is provided and the tool's behavior is reasonably complete for a mutation action.

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?

The description adds meaning to daily_amount by specifying account currency units and explains allow_shared through the shared-budget refusal behavior. The schema already documents customer_id, and campaign_id is self-evident from the tool purpose.

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 description clearly states the action ('Change a campaign's daily budget') and the specific resource (campaign budget), distinguishing it from sibling tools that operate on statuses, keywords, or reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when changing a daily budget) and provides important caveats about shared budgets and currency units, but it does not explicitly mention alternatives or contrast with sibling tools.

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

set_campaign_statusEnable or pause campaignA
Idempotent

Set a campaign to ENABLED or PAUSED.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
campaign_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already convey readOnly=false, destructive=false, and idempotent=true, so the behavioral safety profile is covered. The description itself adds no extra behavioral context beyond the status assignment, such as effects on serving or reversibility, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler or redundancy. It front-loads the action and includes the only essential operational detail: the allowed statuses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter status setter, the description combined with the schema and annotations is largely sufficient to invoke the tool correctly. A bit more detail about return behavior or side effects would be helpful, but nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: only customer_id has meaningful schema documentation. The description repeats the status enum values already present in the schema but does not explain campaign_id or clarify when customer_id is needed, so it fails to compensate for the low schema coverage.

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 description uses a specific verb ('Set') and names the exact resource ('a campaign') plus the two valid target states ('ENABLED or PAUSED'). This clearly distinguishes it from sibling tools like set_ad_group_status and set_ad_status by focusing on campaign-level status changes.

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?

The description provides clear context: this tool is for campaign status changes, so an agent can infer it is the right choice for campaigns and not for ad groups or ads. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full routing guidance.

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

update_keywordUpdate keywordA
Idempotent

Change a keyword's status (ENABLED/PAUSED) and/or its max CPC bid (currency units). Identify the keyword by ad_group_id and criterion_id from keyword_performance.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
cpc_bidNoNew max CPC bid in currency units
ad_group_idYes
customer_idNoGoogle Ads customer ID (10 digits, dashes allowed). Defaults to GOOGLE_ADS_CUSTOMER_ID.
criterion_idYes

TDQS

A4.2/5.0
Behavior4/5

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

The description clearly states the mutation effect (change status and/or bid) and does not contradict annotations such as readOnlyHint=false, destructiveHint=false, and idempotentHint=true. It adds modest behavioral context like currency units and identifier sourcing, though it does not describe side effects beyond the mutation itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first sentence states purpose and parameters, the second gives identifier sourcing. Well organized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for a mutation tool with no output schema: it states what will change, which fields are involved, and how to identify the target keyword. Minor gap: it does not explicitly state that at least one of status or cpc_bid must be provided, though 'and/or' implies this.

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?

The description adds meaning for ad_group_id and criterion_id by pointing to keyword_performance, and reinforces that cpc_bid is in currency units. Schema already covers customer_id and status enum values, but ad_group_id and criterion_id formats are not detailed.

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 action (change status and/or max CPC bid) on a specific resource (keyword) and identifies the keyword via ad_group_id and criterion_id from keyword_performance. This clearly distinguishes it from sibling tools like set_ad_status, add_keywords, or remove_resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful context for sourcing identifiers from keyword_performance, implying use after listing keywords. However, it does not explicitly contrast with sibling tools such as add_keywords, remove_resource, or set_ad_status, so when to use this tool versus alternatives is only implicit.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 21 tool updatesv0.1.0
    • First observedaccount_overview
    • First observedad_group_performance
    • First observedadd_keywords
    • First observedadd_negative_keywords
    • First observedcampaign_performance
    • First observedgaql_fields
    • First observedgaql_search
    • First observedgeo_performance
    • First observedkeyword_performance
    • First observedlist_accessible_customers
    • First observedlist_ad_groups
    • First observedlist_ads
    • First observedlist_campaigns
    • First observedmutate
    • First observedremove_resource
    • First observedsearch_terms_report
    • First observedset_ad_group_status
    • First observedset_ad_status
    • First observedset_campaign_budget
    • First observedset_campaign_status
    • First observedupdate_keyword

TDQS

A3.5/5.0
Disambiguation1/5

Multiple tools have overlapping purposes, e.g., set_ad_group_status, set_campaign_status, set_ad_status, update_keyword, and mutate all modify statuses or bids. The generic mutate duplicates nearly all specific tools, creating significant ambiguity in choosing the right tool.

Naming Consistency2/5

Naming conventions are inconsistent. Some tools follow verb_noun (set_ad_group_status), others use noun_verb (gaql_search), and some are generic (mutate). The mix of snake_case and camelCase in tool names (e.g., gaql_search vs. update_keyword) further reduces predictability.

Tool Count3/5

With 21 tools, the count is within the 16-25 range, but many tools are redundant (e.g., multiple status setters, update_keyword vs. mutate). The surface area could be trimmed to ~10 distinct tools without losing functionality, making the set feel heavy.

Completeness4/5

The tool set covers most Google Ads entities (campaigns, ad groups, ads, keywords, search terms, geo) and provides a generic GAQL query and mutate for advanced operations. However, it lacks specific create/read operations for some entities and relies on generic tools, leaving minor gaps in direct coverage.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Google Ads API through MCP, allowing search and listing of accessible customers.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects MCP clients to the Google Ads API v23, enabling account listing, GAQL queries, campaign management, and performance reporting through natural language.
    GPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for managing Google Ads campaigns through the official Google Ads API, covering accounts, campaigns, budgets, keywords, search terms, and keyword ideas. It provides tools for both reading and mutating live ads data, such as pausing campaigns, updating budgets, and adding keywords.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kiarashedraki/google-ads-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server