Google Ads MCP Server
Provides tools for monitoring and managing Google Ads accounts, including performance reporting, arbitrary GAQL queries, budget updates, campaign/ad group/keyword management, negative keywords, geo targeting, ad schedules, and campaign/ad creation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Ads MCP Serverwhat's my campaign performance for last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Ads MCP Server (template)
A starting point you are meant to fork. Google's official googleads/google-ads-mcp is read-only and ships three tools. This template keeps that architecture and adds the write and reporting tools you need to actually manage an account, so you can clone it, point it at your own Google Cloud project, and cut it down to the tools your team should be allowed to call.
Start with the Complete Setup Guide, then delete what you do
not need from ads_mcp/tools/.
Set
GOOGLE_ADS_MCP_READ_ONLY=trueif you want the official server's read-only behaviour with this server's reporting tools.
A remote MCP server that lets Claude (and any other MCP-capable AI assistant) monitor and manage your Google Ads accounts: pull performance reports, run arbitrary GAQL queries, adjust budgets, pause/enable campaigns, add keywords and negative keywords, and create new campaigns and ads.
Built on the architecture of Google's official read-only googleads/google-ads-mcp server, extended with write/management tools and canned reports for routine (e.g. weekly) account reviews.
Tools
Monitoring (read-only)
Tool | What it does |
| Account IDs the authenticated user can access |
| Client accounts under a manager (MCC) account |
| Campaign metrics + status, budget, bidding strategy |
| Ad group metrics |
| Keyword metrics incl. quality score |
| Actual user queries — the input for negative keyword mining |
| Who/what changed in the account recently |
| Arbitrary GAQL query against any Google Ads resource |
| Field discovery for building |
| Audit what Smart Bidding optimizes toward |
| Audit a campaign's geo/schedule/device targeting |
| Resolve place names to geo target IDs |
All report tools accept predefined ranges (LAST_7_DAYS, LAST_30_DAYS, LAST_MONTH, …) or custom start_date/end_date.
Management (write)
Tool | What it does |
| Create or resize daily budgets |
| New Search/Display campaign — always created PAUSED |
| Pause / enable / remove a campaign |
| Create ad groups, change status or default CPC bid |
| New RSA — always created PAUSED |
| Pause / enable / remove an ad |
| Add or pause/enable/remove keywords |
| Campaign-level negative keywords |
| Promote/demote what bidding optimizes toward |
| Manage geo targeting |
| Restrict ads to staffed hours |
| Phone numbers on ads |
| Set target CPA on Maximize Conversions campaigns |
Safety rails:
Every write tool takes
validate_only=trueto preview a change without applying it.New campaigns and ads are always created paused so nothing spends money before you review it.
Set
GOOGLE_ADS_MCP_READ_ONLY=trueto hide all write tools entirely (monitoring-only deployments).
New user? Follow the step-by-step Complete Setup Guide — it covers the Google Ads manager account, developer token, the whole Google Cloud Console setup (project, billing, APIs, OAuth consent screen and client), Cloud Run deployment, connecting claude.ai, and a troubleshooting table of real-world errors.
Related MCP server: Google Ads MCP Server (Fork with Write Tools)
Prerequisites
A Google Ads developer token — in a Google Ads manager account, go to Tools & Settings → Setup → API Center (direct link) and apply for a token. A "Basic" access token is enough for managing your own accounts. (docs)
Only have a regular (non-manager) account? The API Center is exclusive to manager accounts (MCC). Create a free one at ads.google.com/home/tools/manager-accounts — it's just an umbrella account with no ads or billing of its own — then link your existing account under it (Accounts → Sub-account settings → + → Link existing account) before applying, since Google's token review verifies the advertiser accounts beneath the manager. If the token is initially granted at "Test account" level, request Basic access from the same API Center page, and set
GOOGLE_ADS_LOGIN_CUSTOMER_IDto the manager account's ID when running this server.A Google Cloud project with an OAuth 2.0 client — in Google Cloud Console, create an OAuth client. Add your Google account as a test user on the consent screen (or publish the app) and include the scope
https://www.googleapis.com/auth/adwords. (docs)
Option 1 — Remote server for claude.ai (recommended)
This is the setup that lets claude.ai (web/mobile/desktop) connect as a custom connector, with each user signing in with their own Google account.
Deploy to Cloud Run
gcloud run deploy google-ads-mcp \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars "GOOGLE_ADS_DEVELOPER_TOKEN=YOUR_DEV_TOKEN" \
--set-env-vars "GOOGLE_ADS_MCP_OAUTH_CLIENT_ID=YOUR_CLIENT_ID" \
--set-env-vars "GOOGLE_ADS_MCP_OAUTH_CLIENT_SECRET=YOUR_CLIENT_SECRET" \
--set-env-vars "GOOGLE_ADS_MCP_BASE_URL=https://PLACEHOLDER"Then take the service URL Cloud Run prints (e.g. https://google-ads-mcp-xxxx-uc.a.run.app) and:
Re-deploy (or update the env var) with
GOOGLE_ADS_MCP_BASE_URLset to that URL.In Google Cloud Console, add
https://YOUR_SERVICE_URL/auth/callbackto the OAuth client's Authorized redirect URIs.
--allow-unauthenticatedis required so the MCP client can reach the endpoint; actual access is protected by the Google OAuth flow the server enforces. If you use a manager account, also setGOOGLE_ADS_LOGIN_CUSTOMER_ID.
Connect claude.ai
claude.ai → Settings → Connectors → Add custom connector.
URL:
https://YOUR_SERVICE_URL/mcp.Claude will walk you through the Google sign-in; grant the Google Ads scope.
Any other MCP client that supports streamable HTTP + OAuth (Claude Code, ChatGPT connectors, etc.) can connect the same way.
Option 2 — Local (stdio) for Claude Code / Claude Desktop
No deployment needed; credentials come from your environment.
pipx run --spec git+https://github.com/FlatbuzhZubumafu/google-ads-mcp-template.git google-ads-mcpClaude Code registration:
claude mcp add google-ads \
-e GOOGLE_ADS_DEVELOPER_TOKEN=YOUR_DEV_TOKEN \
-e GOOGLE_ADS_LOGIN_CUSTOMER_ID=YOUR_MCC_ID \
-- pipx run --spec git+https://github.com/FlatbuzhZubumafu/google-ads-mcp-template.git google-ads-mcpCredentials are resolved in this order:
OAuth token of the connected user (remote mode above).
Refresh token env vars:
GOOGLE_ADS_OAUTH_CLIENT_ID,GOOGLE_ADS_OAUTH_CLIENT_SECRET,GOOGLE_ADS_REFRESH_TOKEN.Application Default Credentials:
gcloud auth application-default login \ --scopes=https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform
See .env.example for every variable.
Running your ads on a weekly cadence
A workflow that works well once connected — save it as a project instruction or scheduled prompt for Claude:
get_campaign_performance(LAST_7_DAYSvs the previous week) — spot cost/conversion swings.get_search_terms_report— find wasted spend; propose negatives.get_keyword_performance— flag low quality scores and zero-conversion spenders.get_change_history— review everything that changed last week.Apply agreed changes (
add_negative_keywords,update_campaign_budget,set_campaign_status, …) — usingvalidate_only=truefirst, then for real after your confirmation.
Development
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytestRun locally over HTTP without OAuth (trusted networks only):
GOOGLE_ADS_MCP_TRANSPORT=http GOOGLE_ADS_DEVELOPER_TOKEN=... .venv/bin/google-ads-mcpDisclaimer
This server can spend and modify real money in your ad accounts. Review what your AI assistant proposes — especially budget changes and status changes — and prefer validate_only previews plus read-only mode wherever write access isn't needed. This is not an official Google product; portions are derived from googleads/google-ads-mcp (Apache 2.0).
Available Tools
31 toolsadd_keywordsAdd KeywordsC
Adds keywords to an ad group (ENABLED).
| Name | Required | Description | Default |
|---|---|---|---|
| cpc_bid | No | Optional max CPC bid in currency units for these keywords. | |
| keywords | Yes | Keyword texts to add (plain text, no match-type punctuation — match type is set separately). | |
| match_type | No | EXACT, PHRASE, or BROAD (applied to all keywords in this call; call again for a different match type). | PHRASE |
| ad_group_id | Yes | The numeric id of the ad group. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructiveHint=false, so the description carries most of the behavioral burden. It hints that created keywords start enabled, but says nothing about duplicate keywords, partial-batch failure, per-keyword error reporting, or that match_type applies uniformly to the whole call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler, which is good, but for a six-parameter mutation tool it is under-specified rather than genuinely concise. The parenthetical is the only extra information and it is ambiguous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, but the description still omits essential mutation context: duplicate handling, batch semantics, and how match_type/cpc_bid interplay with the required inputs. Only destructiveHint=false is available to characterize risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including cpc_bid, match_type and validate_only are already documented with good detail. The description adds no parameter-level meaning beyond the implicit '(ENABLED)' status note, which makes the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a clear verb and resource — 'Adds keywords to an ad group' — so an agent knows the core action without opening the schema. It offers no differentiation from closely named siblings such as add_negative_keywords, and the trailing '(ENABLED)' is unexplained shorthand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives like add_negative_keywords for negative keywords or set_keyword_status for pausing existing ones. The agent must infer scope from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_location_targetingAdd Location TargetingA
Adds location targeting criteria to a campaign.
Resolve human-readable places to ids first with suggest_geo_targets.
| Name | Required | Description | Default |
|---|---|---|---|
| negative | No | If True, EXCLUDE these locations instead. | |
| campaign_id | Yes | The campaign to target. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. | |
| geo_target_ids | Yes | Numeric geo target constant ids (e.g. 1013962). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (destructiveHint=false only), so the description carries most of the behavioral burden. 'Adds' implies an additive mutation consistent with the annotation, but the description does not say whether existing targeting is replaced or merged, whether permissions are required, or what a conflict does. It adds some but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the prerequisite. Zero filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and schema coverage is complete. The prerequisite workflow is covered. It lacks mutation details (merge vs replace, permission needs) that would matter for a write tool with sparse annotations, so not a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all five parameters (including negative, validate_only, and the id format example 1013962). The description only reinforces the id-resolution requirement for `geo_target_ids`, which the schema itself covers, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds location targeting criteria to a campaign'), and explicitly names the sibling tool (`suggest_geo_targets`) it depends on rather than duplicating. An agent can distinguish this writer from the resolver and from `remove_campaign_criterion` and `add_negative_keywords` 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear prerequisite: resolve human-readable places to ids via `suggest_geo_targets` first. This is an actionable routing instruction rather than generic advice. It stops short of an exclusion ('do not call with place names directly') or a when-not-to-use case, so it is not a full 5.
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
Adds campaign-level negative keywords, preventing ads from showing
on those queries. The usual follow-up to reviewing
get_search_terms_report.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | Keyword texts to exclude. | |
| match_type | No | EXACT, PHRASE, or BROAD (applied to all keywords in this call). | PHRASE |
| campaign_id | Yes | The numeric id of the campaign. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so the description must carry the rest. It does disclose the real-world effect of adding negatives, but is silent on duplicate handling, permission needs, whether validate_only alters behavior meaningfully, and irreversibility. Reasonable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded before the workflow hint. Every clause earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and all five parameters are documented in the schema. What remains thin is behavioral edge cases (duplicates, match-type interactions) for a mutation tool with minimal annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no syntax or format guidance for keywords, match_type, or validate_only beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds campaign-level negative keywords') plus the concrete effect ('preventing ads from showing on those queries'). The word 'negative' cleanly distinguishes it from the sibling add_keywords, and the 'campaign-level' scope is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the upstream workflow explicitly ('the usual follow-up to reviewing get_search_terms_report'), which tells the agent when this tool belongs in a sequence. It stops short of stating when NOT to use it (e.g., ad-group-level negatives) or naming a conflicting alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_groupCreate Ad GroupB
Creates a standard search ad group (ENABLED) in a campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique ad group name within the campaign. | |
| cpc_bid | No | Optional default max CPC bid in currency units (used with manual bidding). | |
| campaign_id | Yes | The numeric id of the parent campaign. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare destructiveHint=false, so the description carries more of the burden. It usefully discloses that the ad group is created ENABLED and is a 'standard search' type, but omits what happens on duplicate names, permission/auth requirements, and whether failures are atomic. The added status detail is genuine value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core action and resulting state come first, and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a creation/mutation tool with minimal annotations and three required parameters, the description leaves gaps around duplicate handling, error behavior, and failure semantics that an agent would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all five parameters, including cpc_bid, validate_only, and required ids. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Creates a standard search ad group') plus the resulting state ('ENABLED in a campaign'). It is clearly distinguishable from siblings like update_ad_group or create_responsive_search_ad, though it does not name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says what the tool does but gives no guidance on when to use it, prerequisites (e.g. needing a valid campaign_id), or how it relates to update_ad_group. No when-not conditions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_call_assetCreate Call AssetA
Creates a call asset (clickable phone number shown with ads).
Returns its resource name; attach it to a campaign with
link_asset_to_campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | The Google Ads account. | |
| country_code | No | Two-letter country code of the number. | US |
| phone_number | Yes | The business phone number, e.g. "(480) 555-0100". | |
| validate_only | No | If True, only validates the request. | |
| call_conversion_action_id | No | Optional conversion action to count calls from this asset against (e.g. a "Calls from ads" action). If omitted, the account-level setting is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only destructiveHint=false is annotated, so the description carries most of the burden. It usefully discloses the return value (resource name) and the downstream workflow step, but says nothing about permissions, account-level scoping, or whether repeated calls duplicate assets — modest but real added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero padding, and the core definition plus the actionable next step are both front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-resource creation tool with a rich schema, an output schema, and one annotation, the description covers purpose, returned handle, and the required follow-up call. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including validate_only and call_conversion_action_id are already fully documented. The description adds no parameter-level syntax or format detail, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a call asset') and immediately clarifies what that resource is ('clickable phone number shown with ads'), so no sibling tool like create_ad_group or create_campaign could be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the follow-up action and the sibling that performs it ('attach it to a campaign with link_asset_to_campaign'), giving a clear workflow context. It does not state when this tool would be inappropriate or what alternatives exist, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignCreate CampaignA
Creates a new campaign in PAUSED state (so it never spends money
before a human reviews and enables it). Create a budget first with
create_campaign_budget.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique campaign name. | |
| end_date | No | Optional end date (YYYY-MM-DD). | |
| start_date | No | Optional start date (YYYY-MM-DD). | |
| target_cpa | No | Optional target cost-per-action in currency units (only with MAXIMIZE_CONVERSIONS). | |
| customer_id | Yes | The Google Ads account. | |
| target_roas | No | Optional target return on ad spend, e.g. 3.5 (only with MAXIMIZE_CONVERSION_VALUE). | |
| channel_type | No | Advertising channel, e.g. SEARCH or DISPLAY (default SEARCH). | SEARCH |
| validate_only | No | If True, only validates the request. | |
| bidding_strategy | No | One of MANUAL_CPC, MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE. | MAXIMIZE_CLICKS |
| budget_resource_name | Yes | Resource name returned by create_campaign_budget (customers/123/campaignBudgets/456). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only destructiveHint=false provided, the description adds meaningful behavioral context: the campaign starts PAUSED and cannot spend money until a human enables it. This is non-obvious, safety-relevant information not present in annotations or schema. It stops short of describing auth needs or return behavior, but output schema covers the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the tool's purpose and the safety-relevant PAUSED state. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter creation tool with full schema coverage and an output schema, the description covers the two things an agent most needs: the creation state and the budget prerequisite. Missing only minor niceties like validation-mode guidance (though validate_only is documented in schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters are already documented in the schema (including budget_resource_name's origin and bidding strategy enums). The description only reinforces the budget dependency. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Creates) and resource (campaign) and adds the crucial default state (PAUSED). This clearly distinguishes it from siblings like create_ad_group and create_campaign_budget. An agent knows exactly what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the prerequisite ('Create a budget first with `create_campaign_budget`'), which routes the agent to the correct preceding tool. It does not name exclusion conditions or alternatives, but the ordering constraint is clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaign_budgetCreate Campaign BudgetA
Creates a daily campaign budget. Returns its resource name, which is required when creating a campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique budget name. | |
| customer_id | Yes | The Google Ads account to create the budget in. | |
| daily_amount | Yes | Daily budget in the account's currency units (e.g. 25.50 means $25.50 for a USD account). | |
| validate_only | No | If True, only validates the request without creating anything. | |
| explicitly_shared | No | Whether the budget can be shared by multiple campaigns (default False). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, leaving the write semantics to the description, which does say it 'Creates' and what it returns. It does not disclose permission requirements, the effect of explicitly_shared, or error/validation behavior beyond what the schema already covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and then the return-value consequence. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the description still supplies the one fact an agent needs for chaining (the resource name feeds campaign creation). For a mutation tool with thin annotations, slightly more on preconditions would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including validate_only and explicitly_shared are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a daily campaign budget') and adds the workflow-relevant fact that it returns a resource name needed by campaign creation. It does not explicitly contrast with the sibling update_campaign_budget, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention that the returned resource name is required when creating a campaign implies the ordering context, but there is no explicit when-to-use guidance or named alternative (e.g., update_campaign_budget for modifying an existing budget). Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_responsive_search_adCreate Responsive Search AdA
Creates a responsive search ad in PAUSED state (enable it with
set_ad_status after review).
| Name | Required | Description | Default |
|---|---|---|---|
| path1 | No | Optional first display-URL path segment (max 15 chars). | |
| path2 | No | Optional second display-URL path segment (max 15 chars, requires path1). | |
| final_url | Yes | The landing page URL. | |
| headlines | Yes | 3 to 15 headlines, each at most 30 characters. | |
| ad_group_id | Yes | The numeric id of the ad group to place the ad in. | |
| customer_id | Yes | The Google Ads account. | |
| descriptions | Yes | 2 to 4 descriptions, each at most 90 characters. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so they say little. The description supplies the genuinely useful behavioral fact that the ad is created PAUSED and must be enabled with set_ad_status, which an agent could not infer otherwise. It stops short of covering permissions, validation failures, or duplicate handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence; the creation act and the paused-state caveat are front-loaded with zero filler, and the follow-up tool is named in parentheses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the schema covers all 8 parameters. For a mutation tool with thin annotations, the description covers the essential state behavior but leaves error/permission context unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with headline/description counts, character limits, and path constraints all documented in the schema. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a responsive search ad') and adds the non-obvious initial state (PAUSED). It does not explicitly contrast itself with sibling creation tools like create_ad_group, though the resource is distinct enough to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear lifecycle instruction: the ad lands paused and is enabled later via set_ad_status, implying a review step. No explicit when-not-to-use or alternative creation path is offered, but the follow-up routing is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_hierarchyGet Account HierarchyARead-only
Lists all client accounts under a (manager) account, including the account itself.
Useful when the authenticated user works through an MCC/manager account: run this against the manager's customer ID to find the child account IDs to use with reporting and management tools.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | The manager (or standalone) account ID, digits only or in 123-456-7890 form. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioural detail beyond that: the result set is scoped to descendants of the given manager and includes the parent account itself, which affects how the agent interprets the output. Return format and pagination are not discussed, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler: the first defines what is returned, the second the situation that motivates the call. Front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with a full schema, an output schema and readOnly annotations, the description supplies the remaining context (manager context, result scope). It omits what happens when a non-manager ID is supplied, a minor gap for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single parameter, so the schema already documents customer_id thoroughly (digit-only format, accepted variants). The description only echoes the intent ('run this against the manager's customer ID'), adding no format or edge-case detail beyond the schema. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists all client accounts under a (manager) account') and adds a distinguishing scope detail ('including the account itself'), so it separates itself from a plain customer listing. It does not explicitly contrast with the sibling list_accessible_customers, which covers similar ground, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage context ('when the authenticated user works through an MCC/manager account') and the purpose of the call ('to find the child account IDs to use with reporting and management tools'). It does not name an alternative tool or state when not to use it, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ad_group_performanceGet Ad Group PerformanceBRead-only
Ad-group-level performance report with the core metrics (impressions, clicks, CTR, cost, conversions). Ordered by cost.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Optional custom range end (YYYY-MM-DD). | |
| date_range | No | Predefined range (see get_campaign_performance). | LAST_7_DAYS |
| start_date | No | Optional custom range start (YYYY-MM-DD). | |
| campaign_id | No | Optionally restrict to a single campaign. | |
| customer_id | Yes | The Google Ads account to report on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true in annotations already establishes this as a safe read. The description adds the output sorting behavior ('Ordered by cost'), which is a genuine trait beyond the annotation, but says nothing about time-range defaults, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the resource scope front-loaded and the metric list and ordering compactly attached. Nothing extraneous, though it is not richly informative either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be described, and the description still adds the metric list and sort order. With full schema coverage and a read-only annotation, the remaining gap is only the absent usage/alternative guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (customer_id, date_range, start_date, end_date, campaign_id) are already documented in the schema. The description adds no parameter-level meaning, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Ad-group-level performance report') and enumerates the metrics returned, so the agent knows exactly what this tool produces. The 'ad-group-level' scope inherently distinguishes it from get_campaign_performance and get_keyword_performance siblings, though it never names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative routing is given. The agent must infer from the name alone that this is the ad-group granularity counterpart to the campaign and keyword reports. 'Ordered by cost' describes output, not usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_performanceGet Campaign PerformanceARead-only
Campaign-level performance report: impressions, clicks, CTR, cost, conversions, conversion value, plus campaign status, bidding strategy and daily budget. Ordered by cost, highest first.
Cost and budget fields are in micros: divide by 1,000,000 for the account currency amount.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Optional custom range end (YYYY-MM-DD). | |
| date_range | No | A predefined range such as LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS, LAST_MONTH, THIS_MONTH. Ignored when start_date/end_date are given. | LAST_7_DAYS |
| start_date | No | Optional custom range start (YYYY-MM-DD). | |
| customer_id | Yes | The Google Ads account to report on. | |
| include_removed | No | Include removed campaigns (default False). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds genuinely useful behavior beyond that: results are ordered by cost descending, and cost/budget fields are in micros requiring division by 1,000,000. This is real operational context, not a restatement of the safety hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs, both front-loaded: the metric list first, then the ordering and unit convention. No filler sentences and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure needn't be explained, and the description still covers ordering and unit interpretation. Given the low-complexity read-only nature of the tool, this is close to complete; only the sibling routing to finer-grained reports is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by documenting the micros unit convention for cost and budget fields, which is a non-obvious domain quirk not present in the schema property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Campaign-level performance report') and enumerates the metrics returned (impressions, clicks, CTR, cost, conversions, conversion value, status, bidding strategy, daily budget). The 'campaign-level' scoping implicitly separates it from sibling reports like get_ad_group_performance and get_keyword_performance, though those siblings are never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the report name and by the mention of date granularity, but there is no explicit 'use this when...' statement, no exclusions, and no pointer to the ad-group or keyword-level reports that cover the same ground at finer granularity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_change_historyGet Change HistoryARead-only
Recent changes made to the account (by users, tools, or this server): what changed, when, and by whom. Useful for a weekly review of account activity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events to return (API requires a LIMIT <= 10000). | |
| days_back | No | How many days of history to fetch (max 29 — the API only keeps change events for ~30 days). | |
| customer_id | Yes | The Google Ads account to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context by naming the change sources (users, tools, the server itself), but says nothing about pagination, event granularity, or truncation behavior beyond what the schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the resource and the returned fields, followed by the single use case. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and readOnlyHint covers safety. The description is adequate for a simple read tool, though it could say more about the volume/ordering of events returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – limit, days_back, and customer_id are all documented in the schema, including the API limits. The description adds no parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (recent account changes) with explicit facets: what changed, when, and by whom. It is unambiguous about what the tool returns, but it never differentiates itself from any sibling, which the 5-level requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful for a weekly review of account activity" implies a usage context, but there is no guidance on when NOT to use it, what alternatives exist, or prerequisites such as needing a valid customer_id. Usage is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_performanceGet Keyword PerformanceARead-only
Keyword-level performance report: keyword text, match type, status, quality score, and the core metrics. Ordered by cost, highest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (default 200). | |
| end_date | No | Optional custom range end (YYYY-MM-DD). | |
| date_range | No | Predefined range (see get_campaign_performance). | LAST_7_DAYS |
| start_date | No | Optional custom range start (YYYY-MM-DD). | |
| campaign_id | No | Optionally restrict to a single campaign. | |
| customer_id | Yes | The Google Ads account to report on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, and the description adds genuinely useful behavioral context by stating the ordering ('by cost, highest first'). It does not mention pagination/limit behavior or how the default 200-row cap interacts with ordering, so it goes modestly beyond annotations but not far.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with the resource and its granularity, followed by the returned fields and sort order. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the read-only annotation covers the safety profile. The only real gap is that limit/pagination interaction with the cost ordering is never addressed, which is minor for a report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all six parameters including defaults and formats. The description adds no parameter-level meaning beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Keyword-level performance report') and enumerates the returned fields, so an agent can tell it is the keyword-granularity counterpart to get_campaign_performance and get_ad_group_performance. It does not name those siblings explicitly, but the granularity is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'keyword-level performance report', but there is no explicit statement of when to prefer this over get_campaign_performance or get_ad_group_performance, nor any prerequisites. The date_range parameter only points back to a sibling's docs rather than giving guidance here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resource_metadataGet Resource MetadataARead-only
Retrieves the selectable, filterable, and sortable fields for a specific Google Ads resource, including compatible metrics and segments.
Use this tool to find out which fields you can select, filter by, or
sort by when querying a specific resource (e.g., 'campaign',
'ad_group') with the search tool. Metric and segment field names
start with 'metrics.' and 'segments.' respectively.
Do not guess fields — use this tool to discover them before constructing a query. Responses can be cached; they rarely change.
| Name | Required | Description | Default |
|---|---|---|---|
| resource_name | Yes | The name of the Google Ads resource (e.g., 'campaign', 'ad_group'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered structurally. The description adds genuinely useful behavior beyond that: the caching note ('responses can be cached; they rarely change'), which informs an agent that re-fetching is usually unnecessary. It stops short of describing cache invalidation or return shape, but the output schema covers the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight paragraphs: what it returns, when to use it with the alternative named, and the anti-guessing/caching caveat. Every sentence earns its place and the most decision-relevant content (purpose plus usage) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter discovery tool with a full output schema, annotations covering safety, and 100% parameter coverage, nothing an agent needs in order to call it correctly is missing. Discovery-before-query guidance is exactly the context this tool needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single well-described resource_name parameter, so the baseline is 3. The description reinforces the parameter's domain (resource names like 'campaign', 'ad_group') but largely repeats schema content, and the metrics./segments. prefix note describes output fields rather than the input parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieves) and resource (selectable/filterable/sortable fields for a Google Ads resource), plus the scope of what's returned (compatible metrics and segments). An agent can distinguish this discovery/meta tool from the sibling query and mutation tools at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('to find out which fields you can select, filter by, or sort by ... with the `search` tool') and adds a clear directive not to guess fields before constructing a query. The alternative path (the `search` tool) is named, so routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_terms_reportGet Search Terms ReportARead-only
Search terms report: the actual user queries that triggered ads, with the core metrics. The main input for finding negative keyword candidates and new keyword opportunities. Ordered by cost.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (default 200). | |
| end_date | No | Optional custom range end (YYYY-MM-DD). | |
| date_range | No | Predefined range (see get_campaign_performance). | LAST_7_DAYS |
| start_date | No | Optional custom range start (YYYY-MM-DD). | |
| campaign_id | No | Optionally restrict to a single campaign. | |
| customer_id | Yes | The Google Ads account to report on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds a genuinely useful trait beyond the annotation — 'ordered by cost' — which tells the agent how results are ranked. Beyond that it is thin: no mention of row limits, pagination, or truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the resource is and what it is for, with no filler. Nothing is padded, though the brevity leaves room for more concrete routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations cover the safety profile. For a read-only report with fully documented params, the description covers what an agent needs; only limit/pagination behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (limit, date_range, start/end date, campaign_id, customer_id) is documented inline in the schema. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and clarifies its semantics: 'the actual user queries that triggered ads, with the core metrics.' This implicitly distinguishes it from keyword-based siblings, but it never names an alternative, so the differentiation is left for the agent to infer rather than made explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'The main input for finding negative keyword candidates and new keyword opportunities' gives a clear usage context, which is more than most report tools offer. However, it names no alternatives or when-not-to-use conditions (e.g., versus get_keyword_performance), so routing between sibling report tools is still implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_asset_to_campaignLink Asset To CampaignB
Links an asset (e.g. a call asset) to a campaign so it serves with that campaign's ads.
| Name | Required | Description | Default |
|---|---|---|---|
| field_type | No | The asset's role, e.g. CALL or SITELINK. | CALL |
| campaign_id | Yes | The campaign to attach the asset to. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. | |
| asset_resource_name | Yes | Resource name returned by create_call_asset (customers/123/assets/456). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only destructiveHint=false available, the description must carry the behavioral burden. It discloses that linking causes the asset to serve with campaign ads, but omits key details such as required permissions, whether the operation is idempotent, what happens on validation-only calls, or whether existing links are replaced. These gaps leave the agent under-informed for a 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the action and outcome efficiently, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need not be described, and the input schema is fully documented. However, for a mutation tool with minimal annotations, the description still lacks important contextual details such as prerequisites, permissions, or side effects. It is adequate but leaves clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all five parameters in detail, including defaults and examples. The description adds only the example 'call asset' and does not meaningfully expand on parameter meaning beyond the schema. A baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Links') and names both resource types ('asset' and 'campaign'), making the action unambiguous. It also states the outcome ('so it serves with that campaign's ads'), which helps distinguish it from creation tools like create_call_asset. However, it does not explicitly name or contrast any sibling tool, so it falls short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case by stating the effect on ads, but provides no explicit guidance on when to call this tool versus alternatives, when not to use it, or any prerequisites. It assumes the agent will infer that the asset must already exist and be suitable for linking.
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 CustomersARead-only
Returns the ids of Google Ads accounts directly accessible by the authenticated user.
Use this tool first to discover available customer IDs if the user hasn't provided one. Most other tools require a valid customer ID.
Returns: List[str]: A list of customer IDs (10-digit strings, no dashes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, but the description adds a useful formatting detail (10-digit strings, no dashes) that an agent needs when passing IDs onward. It does not mention auth scope or empty-result behavior, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded blocks (purpose, when-to-use, return shape) with no filler, each earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A no-parameter read tool with annotations and an output schema; the description covers purpose, usage ordering, and ID format, leaving nothing essential unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline 4 case; the description correctly implies no filtering input is accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns) and resource (IDs of Google Ads accounts directly accessible by the authenticated user), with the 'directly accessible' qualifier distinguishing it from hierarchy-style siblings like get_account_hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it first when the user hasn't supplied a customer ID and explains why ('Most other tools require a valid customer ID'), giving the agent a clear selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaign_criteriaList Campaign CriteriaARead-only
Lists a campaign's targeting criteria: locations, proximity radii, ad schedules, devices, and negative criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign whose criteria to list. | |
| customer_id | Yes | The Google Ads account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safe read nature, and the description usefully enumerates what categories of criteria are returned. However, it adds no other behavioral context such as permission requirements, pagination, or scope limits. With annotations carrying the safety profile and an output schema present, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It leads with the action and resource and then lists the relevant criteria categories, every element earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the readOnlyHint annotation, full schema coverage, and an existing output schema, the description covers what the agent needs to select and invoke the tool. It could mention scope or ordering, but nothing essential is missing for a simple read-only list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema itself. The description adds no parameter-level meaning beyond confirming the campaign context, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (a campaign's targeting criteria) and enumerates the criteria categories covered: locations, proximity radii, ad schedules, devices, negative criteria. This is clearly distinguishable from siblings like remove_campaign_criterion (mutation) and unrelated list tools such as list_conversion_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only listing verb and the resource, but the description never states when to use this instead of related tools (e.g., get_campaign_performance) or any exclusions. No prerequisites or context beyond the obvious are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversion_actionsList Conversion ActionsARead-only
Lists the account's conversion actions with category, type, status, and whether each is primary for optimization (primary_for_goal).
Use this to check what Smart Bidding is actually optimizing toward — e.g. whether phone calls are primary and page-view style actions are secondary.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | The Google Ads account to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes that this is a safe read. The description adds that the result conveys optimization primacy, which is useful framing, but the enumerated fields largely restate what the output schema already defines and it says nothing about pagination, result volume, or account-scope constraints beyond record count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the what (fields returned) front-loaded and the why (Smart Bidding check) second. No filler, though the field enumeration is slightly verbose without adding much beyond the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is not required, and the description covers purpose, contents, and usage intent for a simple single-parameter read. It is complete enough to call correctly, missing only pagination/volume expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (customer_id) with 100% schema description coverage, so the schema fully documents it. The description adds no syntax, format, or ID-source guidance beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (conversion actions) and enumerates what is returned: category, type, status, and primary_for_goal. An agent can distinguish it from write siblings like set_conversion_action_primary or set_campaign_conversion_goals at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a concrete usage context — checking what Smart Bidding optimizes toward, e.g. whether phone calls are primary. It does not name an explicit alternative or a when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_campaign_criterionRemove Campaign CriterionADestructive
Removes a single targeting criterion (e.g. a wrong location or an obsolete ad schedule) from a campaign.
Find criterion ids with list_campaign_criteria. Removing a criterion
only changes targeting; it does not touch ads, keywords, or budgets.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign the criterion belongs to. | |
| customer_id | Yes | The Google Ads account. | |
| criterion_id | Yes | The criterion to remove. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety profile is known. The description adds meaningful scope disclosure -- removal affects targeting only and leaves ads/keywords/budgets untouched -- which helps the agent reason about blast radius. It doesn't mention irreversibility or validation-only behavior (that lives in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with the action and followed by the id-lookup pointer and scope boundary. Every sentence carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and the destructive scope is stated. For a mutation tool the description covers what is affected and how to source the id; only minor gaps like reversibility/validation-only guidance remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are documented structurally. The description only indirectly helps by pointing to the id-lookup tool; it adds no format or semantics beyond what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (removes) plus resource (targeting criterion) and scopes it to a single criterion of a campaign, with concrete examples ('wrong location', 'obsolete ad schedule'). Clearly differentiable from create/update siblings and from list_campaign_criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to `list_campaign_criteria` for obtaining criterion ids, which is a real prerequisite. It also clarifies scope boundaries (does not touch ads, keywords, budgets). No explicit when-not-to-use or alternative removal tools are named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchCRead-only
Fetches data from the Google Ads API using the search method.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of rows to return | |
| fields | Yes | The fields to fetch | |
| resource | Yes | The resource to return fields from | |
| orderings | No | How the data is ordered | |
| conditions | No | List of conditions to filter the data, combined using AND clauses | |
| customer_id | Yes | The id of the customer |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation covers the safety profile, so the bar is lower, but the description adds nothing beyond what annotations already state. It does not mention rate limits, pagination/limit behavior, permission requirements, or that it is a general read-query escape hatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no padding, so it is concise, but the brevity comes at the cost of substance rather than from tight editing of useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic query tool with three required and three optional parameters manipulated in combination (resource + fields + conditions), the description is far too thin. Although an output schema exists so return values need not be explained, the agent gets no help composing a valid query or routing to more specialized siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all six parameters (fields, resource, conditions, orderings, limit, customer_id) are documented in the schema. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description essentially restates the tool name and title ("search" → "using the search method") plus a generic "fetches data from the Google Ads API." It does not say what kind of data, what query dialect is used, or how it differs from the many specific sibling tools like get_campaign_performance or list_campaign_criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. With roughly thirty sibling tools, the agent is given no signal about when this generic query tool is preferable to the dedicated report/list tools, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_scheduleSet Ad ScheduleA
Adds ad schedule criteria to a campaign (which days/hours ads run).
A campaign with no ad schedule runs 24/7. Once any schedule entries exist, ads run ONLY during the scheduled windows — so include every window you want covered. Hours are in the account's time zone.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule | Yes | Entries like {"day": "MONDAY", "start_hour": 8, "end_hour": 18}. day is MONDAY..SUNDAY; hours are 0-24. | |
| campaign_id | Yes | The campaign to schedule. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply destructiveHint=false, so the description carries most of the burden. It discloses the critical replacement gotcha (include every window you want covered) and the account time-zone assumption, which an agent would otherwise get wrong. It does not cover auth requirements or response behavior, keeping it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler. Purpose is front-loaded, then the two behavioral caveats that matter most. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema present (no need to explain returns) and only a destructiveHint annotation, the description supplies the semantics that matter most: full-window coverage and time zone. Adequate, though it could note interaction with remove_campaign_criterion or validate_only's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both the schedule entry shape and validate_only are already documented; baseline would be 3. The description adds genuinely new information not in the schema: hours are interpreted in the account's time zone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Adds ad schedule criteria to a campaign') and parenthetically clarifies what an ad schedule is (which days/hours ads run). Clear enough to distinguish from siblings like remove_campaign_criterion, though it never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides meaningful operational context: a campaign with no schedule runs 24/7, and once entries exist ads run ONLY in the listed windows. This tells the agent exactly when and how to use it. It stops short of naming sibling alternatives for removing or listing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_statusSet Ad StatusBDestructive
Pauses, enables, or removes an ad.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | The numeric id of the ad. | |
| status | Yes | ENABLED, PAUSED, or REMOVED. REMOVED is permanent — confirm with the user before using it. | |
| ad_group_id | Yes | The numeric id of the ad group containing the ad. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint=true annotation already tells the agent this can destroy data, and the schema description carries the key behavioral warning (REMOVED is permanent). The description itself adds nothing beyond restating that it removes an ad — no idempotency, permission requirements, or validate_only behavior context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the verb and resource come first and the three operations complete the picture. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema fully documents all five parameters including the risky REMOVED option, so the description need not repeat them. It is adequate for a mutation tool, though a sentence on validate_only or confirmation workflow would have closed the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the critical REMOVED permanence note and validate_only semantics, so the baseline is 3. The description lists the operations but supplies no parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (an ad) and enumerates the three operations it performs (pause, enable, remove), so an agent can distinguish it from set_campaign_status and set_keyword_status by resource. It is clear, though it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The only routing signal is the resource name. An agent must infer that this tool applies only to ads and not ad groups or campaigns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_conversion_goalsSet Campaign Conversion GoalsADestructive
Overrides, per campaign, which conversion goals Smart Bidding optimizes toward — regardless of the account-level primary/secondary settings.
Use this when account-level conversion actions can't be edited (e.g. system-generated "Local actions") but a campaign must optimize only to real outcomes such as phone calls. This switches the campaign to campaign-level goal configuration and sets each listed goal's biddable flag; include every category/origin combination that exists in the account, marking the ones to optimize toward biddable=true and the rest biddable=false.
| Name | Required | Description | Default |
|---|---|---|---|
| goals | Yes | Entries like {"category": "PHONE_CALL_LEAD", "origin": "WEBSITE", "biddable": true}. Categories/origins are ConversionActionCategoryEnum / ConversionOriginEnum names (e.g. PHONE_CALL_LEAD, PAGE_VIEW, CONTACT, ENGAGEMENT, GET_DIRECTIONS / WEBSITE, GOOGLE_HOSTED, CALL_FROM_ADS). | |
| campaign_id | Yes | The campaign to configure. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the requests. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only destructiveHint=true is annotated, and the description adds crucial behavioral detail beyond that: this switches the campaign into campaign-level goal configuration (a mode change), and it must be called with every category/origin combination in the account, marking non-target goals biddable=false. That replace-style requirement is exactly the kind of consequence the annotation alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the override semantics followed by the use-case trigger and the enumeration requirement. Dense but every clause carries information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool, the description covers purpose, the when-to-use condition, and the non-obvious completeness requirement for the goals array. An output schema exists, so return values need no explanation, and nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: the goals array must enumerate every existing category/origin pair rather than just the desired ones, which is not evident from the schema alone. It does not add format detail beyond the enum examples already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (overrides) and resource (per-campaign conversion goals for Smart Bidding), and immediately scopes the behavior as distinct from account-level primary/secondary settings. An agent can distinguish this from set_conversion_action_primary without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering scenario: use when account-level conversion actions cannot be edited (system-generated 'Local actions') but the campaign must optimize only to real outcomes. It contrasts with account-level configuration, though it does not name a sibling tool as the alternative, so it stops just short 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_campaign_statusSet Campaign StatusBDestructive
Pauses, enables, or removes a campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ENABLED, PAUSED, or REMOVED. REMOVED is permanent — confirm with the user before using it. | |
| campaign_id | Yes | The numeric id of the campaign. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint=true annotation already tells the agent this tool can cause irreversible change, so the bar is lower. The description reinforces this with 'removes' but adds no supplementary context such as permission requirements, reversibility of pause/enable, or rate limits. It does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single six-word sentence with no filler, and the operation verb leads. Every word earns its place; nothing is buried or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and full parameter coverage means the return value and inputs are handled elsewhere, so the description need not restate them. The main remaining gap is the absence of any permission or confirmation guidance for a destructive mutation, though the destructiveHint annotation and the schema's permanence warning partially compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the critical 'REMOVED is permanent — confirm with the user' note and the validate_only dry-run flag. The description adds nothing beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (pauses, enables, removes) against a specific resource (campaign), so the agent knows exactly what operation this performs. It distinguishes itself from siblings like set_ad_status and set_keyword_status by resource, though it does not name any alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g. required account permissions), and no routing to alternatives such as create_campaign or update_campaign_budget. The only usage constraint — that REMOVED is permanent and needs user confirmation — lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_target_cpaSet Campaign Target CpaADestructive
Sets (or updates) the target CPA on a campaign that uses the Maximize Conversions bidding strategy.
Only do this once the campaign has ~30+ conversions of history; setting a tCPA too early or too low throttles delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| target_cpa | Yes | Target cost-per-action in the account's currency units (e.g. 85.0). | |
| campaign_id | Yes | The campaign to update. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true; the description adds prerequisites and failure modes the annotations cannot convey: the bidding-strategy requirement, the ~30-conversion history floor, and delivery throttling from setting tCPA too early or too low. It stops short of saying what happens on an invalid campaign or whether the change is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler. The operation is stated first and the risk guidance follows, which is the right front-loading for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the bidding-strategy prerequisite and the conversion-history threshold. It could say more about error behavior on a non-Maximize-Conversions campaign or whether validate_only is worth using first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with units and meaning already documented for target_cpa, campaign_id, customer_id and validate_only. The description adds only indirect meaning ('too low throttles delivery') and no syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (sets/updates), a specific resource (target CPA on a campaign), and an explicit precondition (campaign must use Maximize Conversions bidding). No sibling tool touches tCPA, so an agent can route to it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use condition ('only do this once the campaign has ~30+ conversions of history') plus a warning about the consequence of premature or low values. It does not name an alternative tool for campaigns on other bidding strategies, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_conversion_action_primarySet Conversion Action PrimaryADestructive
Marks a conversion action as primary (optimized toward by Smart Bidding) or secondary (observed/reported only).
This is the main lever for making campaigns optimize toward real
outcomes (e.g. phone calls) instead of soft actions (page views,
direction clicks). Find ids with list_conversion_actions.
Note: some system-generated conversion actions cannot be edited via the API; the error will say so if this one can't.
| Name | Required | Description | Default |
|---|---|---|---|
| primary | Yes | True to make it primary, False to demote to secondary. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. | |
| conversion_action_id | Yes | The numeric id of the conversion action. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint=true, which is somewhat counterintuitive for a setting toggle but acknowledges mutability. The description adds valuable context about what primary vs secondary means, the error behavior for system-generated actions, and the optimization implications. It doesn't cover reversibility or exact API error formats, but provides solid beyond-annotation detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently front-loads the core action in the first sentence, then explains the semantic impact, provides a discovery hint, and notes an edge case—all in three concise sentences with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a boolean mutation tool with full schema coverage and an output schema, the description is nearly complete. It covers purpose, side effects, discovery, and a known limitation. A bit more on idempotency or required permissions could push it to 5, but it's strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-specific syntax or format details beyond what's in the schema, though it does clarify the primary parameter's meaning in context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (sets/marks) and resource (conversion action primary/secondary), and explains the domain meaning (Smart Bidding optimization target). Clearly distinguishable from siblings like list_conversion_actions or set_campaign_conversion_goals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for why you'd use it (optimizing toward real outcomes vs soft actions) and points to list_conversion_actions for finding IDs. However, it doesn't explicitly state when NOT to use it or name direct alternatives for setting conversion goals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_keyword_statusSet Keyword StatusADestructive
Pauses, enables, or removes a keyword.
Find criterion ids with get_keyword_performance
(ad_group_criterion.criterion_id).
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ENABLED, PAUSED, or REMOVED. REMOVED is permanent — confirm with the user before using it. | |
| ad_group_id | Yes | The numeric id of the ad group containing the keyword. | |
| customer_id | Yes | The Google Ads account. | |
| criterion_id | Yes | The keyword's criterion id. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation already signals this is a mutating, potentially destructive call, so the bar is lower. The description's warning that REMOVED is permanent adds context, but that same warning is already present verbatim in the status parameter's schema description, so the incremental value is small; it says nothing about permissions or reversibility of ENABLED/PAUSED.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler and the core action front-loaded. The prerequisite lookup cue follows the action statement rather than burying it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the destructive hint plus the permanence note cover the safety profile. What remains thin is the distinction between ENABLED and PAUSED effects on an existing REMOVED keyword, which is left to the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description does contribute one real thing the schema does not: the origin of criterion_id, pointing the agent to get_keyword_performance and the ad_group_criterion.criterion_id field. That materially helps fill the most obscure required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (pauses, enables, removes) and the exact resource (a keyword), which cleanly separates it from set_ad_status and set_campaign_status in the sibling list. An agent can pick the right status-mutation tool without reading any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives concrete workflow guidance: find criterion ids via get_keyword_performance before calling, and it names the exact field (ad_group_criterion.criterion_id). It does not state exclusions or alternatives for the status change itself, but the sequencing advice is genuinely actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_geo_targetsSuggest Geo TargetsARead-only
Resolves human-readable location names (e.g. 'Phoenix, Arizona', 'Gilbert, Arizona') to Google Ads geo target constant IDs, for use with add_location_targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | No | Two-letter country code to scope the lookup. | US |
| location_names | Yes | Location names to resolve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that the operation is a name-to-ID resolution, but says nothing about ambiguous or unresolved names, rate limits, or partial-match behavior, so it adds only modest context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core transformation front-loaded and the downstream dependency appended. Every clause carries information, though the example pair is mildly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter lookup with an output schema present and read-only annotations, the description covers the essential purpose and integration point. Only edge-case behavior (no match, ambiguous match) is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The examples ('Phoenix, Arizona') clarify the expected granularity of location_names slightly, but country_code scoping and array/format expectations are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('resolves') and a precise transformation (human-readable location names -> Google Ads geo target constant IDs), with concrete examples. It is clearly distinguishable in function from the sibling tools, though it does not name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties the tool to its downstream consumer: 'for use with add_location_targeting', which tells the agent where this fits in the workflow. It stops short of stating when not to use it or how it relates to other lookup tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_groupUpdate Ad GroupCDestructive
Updates an ad group's status and/or default max CPC bid.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Optional new status: ENABLED, PAUSED, or REMOVED. | |
| cpc_bid | No | Optional new default max CPC bid in currency units. | |
| ad_group_id | Yes | The numeric id of the ad group. | |
| customer_id | Yes | The Google Ads account. | |
| validate_only | No | If True, only validates the request. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only annotation is destructiveHint=true, and the description adds nothing beyond it. It does not disclose that setting status to REMOVED is irreversible or what other side effects the update has, so for a destructive mutation the description is thin relative to the safety profile it should explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the action and target front-loaded. Nothing is wasted, though it is arguably too terse to carry the needed behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich schema and an output schema present, return values need not be explained. However, a destructive update tool should describe the irreversible REMOVED transition and the effect of applying only one of the two optional fields, which is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 status, cpc_bid, ad_group_id, customer_id, and validate_only. The description restates the two mutable fields without adding format, validation, or interaction detail, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Updates) and resource (ad group) plus the two mutable fields (status, default max CPC bid). This clearly separates it from create_ad_group and get_ad_group_performance, though it doesn't call out how it differs from sibling status setters like 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no mention of prerequisites (e.g. that at least one mutable field should be supplied, or that validate_only is available). The agent must infer usage from the parameter names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaign_budgetUpdate Campaign BudgetADestructive
Changes the daily amount of an existing campaign budget.
Find the budget id via the search tool (campaign_budget.id) or from
a campaign's campaign.campaign_budget resource name.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | The numeric id of the budget to update. | |
| customer_id | Yes | The Google Ads account. | |
| daily_amount | Yes | New daily budget in the account's currency units. | |
| validate_only | No | If True, only validates the request without applying it. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true so the agent knows this mutates state; the description reinforces this with 'changes ... an existing campaign budget.' It adds the id-discovery path but says nothing about permission requirements, reversibility, or what happens to the prior amount, so it adds only modest value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action, followed by the id-discovery hint. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the required parameters are documented in the schema. The description covers the main practical gap (obtaining budget_id) but omits any note on the effect of validate_only or the mutation's scope, leaving a small gap for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema's generic 'numeric id of the budget' by explaining where that id comes from (search tool / campaign_budget resource name), which materially helps correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (changes), resource (campaign budget), and the exact field affected (daily amount), scoped to an existing budget. This cleanly distinguishes it from the sibling create_campaign_budget and read-only list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions for calling it: it tells the agent where to obtain budget_id via the `search` tool (campaign_budget.id) or a campaign's campaign_budget resource name. It does not, however, state when not to use it or name an alternative update path.
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.
31 tool updates
v0.2.2- First observed
add_keywords - First observed
add_location_targeting - First observed
add_negative_keywords - First observed
create_ad_group - First observed
create_call_asset - First observed
create_campaign - First observed
create_campaign_budget - First observed
create_responsive_search_ad - First observed
get_account_hierarchy - First observed
get_ad_group_performance - First observed
get_campaign_performance - First observed
get_change_history - First observed
get_keyword_performance - First observed
get_resource_metadata - First observed
get_search_terms_report - First observed
link_asset_to_campaign - First observed
list_accessible_customers - First observed
list_campaign_criteria - First observed
list_conversion_actions - First observed
remove_campaign_criterion - First observed
search - First observed
set_ad_schedule - First observed
set_ad_status - First observed
set_campaign_conversion_goals - First observed
set_campaign_status - First observed
set_campaign_target_cpa - First observed
set_conversion_action_primary - First observed
set_keyword_status - First observed
suggest_geo_targets - First observed
update_ad_group - First observed
update_campaign_budget
TDQS
Scored across 31 tools
Most tools target a distinct resource and action, and the performance reports are clearly differentiated by level. However, the generic `search` tool overlaps conceptually with the prebuilt `get_*_performance` tools, and `list_accessible_customers` vs `get_account_hierarchy` could be confused for account discovery.
Nearly all tools follow a snake_case verb_noun pattern (e.g., create_campaign, set_ad_status, add_keywords). Minor deviations include the single-word `search` and mixed use of `list` vs `get` for retrieval operations.
At 31 tools, the set is well above the typical well-scoped range of 3–15. Several tools could be consolidated, such as the separate status setters (`set_ad_status`, `set_campaign_status`, `set_keyword_status`) and the budget create/update pair.
Core workflows for creating and pausing campaigns, ad groups, ads, and keywords are covered, along with reporting and conversion goal management. However, important update operations are missing, including changing campaign or ad group names, updating keyword bids, and editing ad copy beyond creation.
Maintenance
Related MCP Connectors
Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
Build, edit and sync Google, Microsoft, Reddit and Meta ad campaigns from your assistant.
Run Google, Meta, Microsoft, TikTok and LinkedIn Ads from Claude or ChatGPT. Writes need approval.
Run Google Ads and Meta Ads from ChatGPT or Claude: audit wasted spend, create and manage campaigns.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables comprehensive management of Google Ads campaigns through natural language, including campaign creation, ad group management, keyword operations, Performance Max campaigns, conversion tracking, and performance insights with support for multiple accounts.4-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to manage Google Ads accounts by providing tools for querying account data and performing write operations such as updating campaign budgets, statuses, and bidding strategies.2Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to access and manage Google Ads data, including campaigns, ad groups, keywords, budgets, and visualizations, through natural language interactions.19-
- FlicenseNot gradedqualityDmaintenanceEnables natural language access to Google Ads campaigns, accounts, and performance metrics via Claude, with tools for managing ad groups, keywords, budgets, and visualizing data.1-