Google Ads MCP Unofficial
This server provides an unofficial Model Context Protocol (MCP) interface to Google Ads, enabling AI agents to read, analyze, and (with gating) modify Google Ads accounts via the Google Ads API.
Meta/Diagnostics: Check connection status, capabilities, agent manifest, data inventory, privacy audit, and cache status/clear.
Authentication: Generate OAuth URLs, exchange authorization codes for tokens (stored locally), and revoke access.
Shared Profile Management: Read/update a shared Delx profile and run onboarding; updates require explicit intent.
Read-Only Data Retrieval: List accounts, campaigns, ad groups, keywords; get single campaign; fetch performance metrics for account, campaign, or keywords over date ranges.
Workflow Helpers: Generate daily performance reports with CPC alerts; identify waste keywords (high cost, zero conversions) and quick-win keywords (low CPC, high CTR, conversions).
Gated Mutations (require
GOOGLE_ADS_ALLOW_MUTATIONS=trueandexplicit_user_intent=true): Pause/resume keywords and campaigns, set keyword bids, and adjust campaign budgets.Privacy & Caching: Choose summary, structured, or raw response modes with redaction of sensitive data; optional SQLite caching of API responses with inspect/clear tools.
Provides tools for reading, analyzing, and (gated) acting on a Google Ads account, including managing keywords, campaigns, budgets, and performance data.
google-ads-mcp-unofficial
Unofficial Model Context Protocol server that lets AI agents read, analyze, and (gated) act on a Google Ads account — pause keywords, set bids, adjust budgets — without leaving your stack.
Unofficial. Not affiliated with Google. This is a local-first MCP server that speaks the Google Ads REST API directly. It does NOT include automated financial-account changes beyond what the Google Ads API allows. Always review proposed changes before enabling GOOGLE_ADS_ALLOW_MUTATIONS.
HTTP (v2 stateless)
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
npx -y google-ads-mcp-unofficial --http
# GET http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp (sessionless)Env: GOOGLE_ADS_MCP_HOST, GOOGLE_ADS_MCP_PORT, GOOGLE_ADS_MCP_TRANSPORT=http.
Related MCP server: Google Ads MCP Server
Quick start (30 seconds)
npx -y google-ads-mcp-unofficial setupThe setup wizard collects your developer token + OAuth client, writes ~/.google-ads-mcp/config.json (chmod 600), then walks you through the OAuth dance via a local callback at http://127.0.0.1:3000/callback.
Verify:
npx -y google-ads-mcp-unofficial doctorThen add it to your agent (Claude Desktop, Cursor, Hermes, OpenClaw, Codex — see examples below).
What it does
22 tools across 6 categories.
Category | Count | Examples |
Meta / diagnostic | 5 |
|
Shared Delx profile | 3 |
|
Auth | 3 |
|
Reads (always safe) | 8 |
|
Workflow | 2 |
|
Mutations (gated) | 6 |
|
Full tool reference: see AGENTS.md.
Setup wizard
npx -y google-ads-mcp-unofficial setup [--allow-mutations] [--client hermes|claude|cursor|...]What it does:
Prompts for: developer token, OAuth client id/secret, optional login_customer_id (MCC), redirect URI, privacy mode.
Writes
~/.google-ads-mcp/config.jsonwithchmod 600.Writes an MCP client config (e.g. merges into
claude_desktop_config.jsonon macOS; writes a Hermes block and skill file for--client hermes).Runs the OAuth dance (unless
--no-auth) by opening Google's consent screen and listening on127.0.0.1:3000.
Mutations are off by default.
--allow-mutationsenables write tools. ASK THE USER before turning this on — it lets agents change campaigns, bids, budgets, and pause/resume keywords.
Auth model
This MCP requires two credentials:
Google Ads Developer Token — from your MCC (Manager) account at https://ads.google.com/aw/apicenter. New tokens start in "Test account access" mode and need approval for production traffic.
Google OAuth 2.0 Client — a "Desktop" or "Web" client created in Google Cloud Console. The single OAuth scope used is
https://www.googleapis.com/auth/adwords.
⚠️ Refresh token gotcha: Google only returns a
refresh_tokenon first consent or after you revoke the prior grant at https://myaccount.google.com/permissions. Ourauthflow usesprompt=consentto maximize the chance Google returns one — but if your code-exchange response is missingrefresh_token, the tool will tell you to revoke and retry.
Variable | Purpose | Stored where | Secret? |
| Approved developer token |
| yes |
| OAuth client id | local or env | no |
| OAuth client secret | local or env | yes |
| MCC id (no dashes) | local or env | no |
| OAuth callback | local or env (default | no |
|
| local or env (default | no |
| Enable write tools | local or env (default | no |
| Override token storage | local or env (default | no |
| Enable SQLite cache | local or env (default off) | no |
| Override cache path | local or env | no |
| Disable retry middleware | env (default off) | no |
Privacy modes
Mode | What you get | Customer id |
| id + name + status fields only | partial-redacted ( |
| flat normalized rows with metrics | partial-redacted |
| full upstream Google Ads REST payload | full |
Pass privacy_mode per call to override the default per response.
Redaction matrix:
Field | summary | structured | raw |
developer_token | n/a | n/a | n/a (never returned) |
access_token, refresh_token, client_secret | [REDACTED] in all errors | [REDACTED] | [REDACTED] |
email addresses in error messages | [REDACTED] | [REDACTED] | [REDACTED] |
customer_id |
|
| full |
metrics (clicks, cost, etc.) | dropped | included | included |
⚠️ Mutation gating — read this
Default: mutations are DISABLED. Six tools are gated:
google_ads_pause_keyword/google_ads_resume_keywordgoogle_ads_set_keyword_bid_microsgoogle_ads_set_campaign_budget_microsgoogle_ads_pause_campaign/google_ads_resume_campaign
If an agent calls any of them without GOOGLE_ADS_ALLOW_MUTATIONS enabled, it gets:
Error: Write tools are disabled. To enable: re-run `google-ads-mcp-server setup --allow-mutations`
or enable GOOGLE_ADS_ALLOW_MUTATIONS. ASK THE USER BEFORE TURNING THIS ON — it lets agents
change campaigns, bids, budgets, and pause/resume keywords.Even with the env enabled, every mutation requires explicit_user_intent: true in the per-call arguments. And every mutation is logged to stderr with the resource name:
[google-ads-mcp] MUTATION pause_keyword {"resource_name":"customers/1234567890/adGroupCriteria/999~111222333"}Read SECURITY.md for the threat model.
Agent client examples
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"google-ads": {
"command": "npx",
"args": ["-y", "google-ads-mcp-unofficial"]
}
}
}Then restart Claude Desktop.
Cursor / Windsurf
~/.cursor/mcp.json (or your IDE equivalent):
{
"mcpServers": {
"google-ads": {
"command": "npx",
"args": ["-y", "google-ads-mcp-unofficial@0.1.0"]
}
}
}Hermes
# ~/.hermes/config.yaml
mcp_servers:
google-ads:
command: npx
args:
- -y
- google-ads-mcp-unofficial@0.1.0
timeout: 120
connect_timeout: 60
sampling:
enabled: falseThen /reload-mcp (do NOT restart the gateway for normal data access).
OpenClaw
~/.openclaw/mcp.servers.json:
{
"google-ads": {
"command": "npx",
"args": ["-y", "google-ads-mcp-unofficial@0.1.0"]
}
}Codex / TOML clients
See examples/codex.toml for the equivalent TOML block.
Workflow examples
1. Daily performance pulse
// Agent asks: "How did my Google Ads do yesterday?"
{
"name": "google_ads_daily_report",
"arguments": {
"customer_id": "1234567890",
"cpc_alert_threshold": 0.15
}
}Returns markdown with yesterday + 7d + 30d aggregates. If yesterday's CPC exceeds 0.15, the output gets an ALERT banner.
2. Identify waste (read-only)
{
"name": "google_ads_find_waste",
"arguments": {
"customer_id": "1234567890",
"date_range": "LAST_30_DAYS",
"min_clicks": 5,
"min_cost_micros": 200000,
"zero_conversions_only": true
}
}Returns a ranked list of keywords matching "spent ≥ $0.20 with ≥5 clicks and 0 conversions" — but never pauses them.
3. Pause a single keyword (mutation, gated)
After the user confirms:
{
"name": "google_ads_pause_keyword",
"arguments": {
"customer_id": "1234567890",
"ad_group_id": "999",
"criterion_id": "111222333",
"explicit_user_intent": true
}
}Troubleshooting
Symptom | Action |
| Run |
| Revoke at https://myaccount.google.com/permissions then re-run |
| Confirm |
| Expected. Ask the user before enabling |
Hermes tools missing after config edit |
|
Token file insecure perms warning |
|
Support
GitHub Issues: https://github.com/davidmosiah/google-ads-mcp-unofficial/issues
Email: support@delx.ai
X: @delx369
Disclaimer
Unofficial integration. Not affiliated with Google. This MCP does not include automated financial-account changes beyond what the Google Ads REST API allows. Always review proposed changes before enabling GOOGLE_ADS_ALLOW_MUTATIONS. The author is not responsible for budget overruns, paused campaigns, or any other consequences of automated changes to your Google Ads account.
MIT-licensed.
Skill or MCP
Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:
npx -y google-ads-mcp-unofficial call google_ads_connection_status --json '{}'Copy skill/SKILL.md into your agent skills dir.
Available Tools
30 toolsgoogle_ads_agent_manifestGoogle Ads Agent ManifestARead-onlyIdempotent
Machine-readable install, runtime, and client guidance for AI agents operating the Google Ads MCP. Does not read Google Ads or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| client | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| unofficial | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, destructiveHint. The description adds that the tool does not read Google Ads or expose secrets, which is relevant context beyond annotations. No contradictions.
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 sentence with no wasted words. However, it could include brief parameter guidance without becoming verbose.
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 no parameter documentation and an output schema present, the description provides high-level purpose but leaves parameter usage vague. It is adequate for a simple manifest tool but incomplete for an AI agent that needs to set client or format.
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 0%. The description does not explain the 'client' or 'response_format' parameters. While their enum values are self-explanatory, the description fails to add meaning beyond the schema structure, which is insufficient given zero schema 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?
The description clearly states the tool provides 'install, runtime, and client guidance for AI agents operating the Google Ads MCP'. It explicitly says what it does not do ('does not read Google Ads or expose secrets'), distinguishing it from data-access sibling 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?
The description implies this tool is for obtaining configuration guidance, not for interacting with ads data. However, it does not explicitly state when to use this tool vs. siblings, nor provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_cache_statusGoogle Ads Cache StatusARead-onlyIdempotent
Return the SQLite GAQL-response cache status: enabled flag, on-disk path, entry count, oldest entry age, and default TTL. Read-only — never calls Google Ads and does not require credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| cache_path | Yes | |
| cache_enabled | Yes | |
| entries_count | Yes | |
| newest_age_ms | No | |
| oldest_age_ms | No | |
| default_ttl_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds concrete behavioral details: never calls Google Ads and does not require credentials, plus lists exact return fields. This goes beyond annotations and provides confidence in the tool's 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?
The description is two sentences: first lists return fields, second emphasizes read-only and no credentials. Every sentence is necessary and front-loaded. No 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?
Given the output schema exists to document return values, the description covers all necessary behavioral and usage context: purpose, read-only nature, no credentials, and no external calls. It is complete for a simple status-check 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?
The only parameter (response_format) is not mentioned in the description, resulting in 0% schema coverage. Although the schema is self-explanatory with enum and default, the description does not add any value for parameter semantics, which is required given low coverage.
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 clearly states the tool returns SQLite GAQL-response cache status with specific details (enabled flag, path, entry count, oldest entry age, default TTL). It implicitly distinguishes from siblings by noting it is read-only and never calls Google Ads.
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 provides clear context: read-only and no credentials needed, so it can be used safely without side effects. However, it does not explicitly mention when not to use or list alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_capabilitiesGoogle Ads MCP CapabilitiesARead-onlyIdempotent
Explain supported Google Ads data, mutation gating, privacy modes, and recommended agent workflow. Does not read Google Ads or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | Yes | |
| mcp_name | Yes | |
| unofficial | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, making the tool's behavior clear. The description adds further transparency by stating it does not read or expose secrets, providing extra assurances 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?
The description is only two sentences, front-loaded with the key purpose, and every word adds value. No redundancy or 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 simple informational tool with one parameter and an output schema, the description covers all necessary context: what it explains, what it does not do, and the output format choice. Complete given the tool's simplicity.
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 only parameter, response_format, is well-defined in the input schema with an enum and default. However, the description does not mention it at all, and schema coverage is 0%, so the agent must rely solely on the schema. For a simple enum, this is adequate but not enhanced.
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 clearly states the tool's purpose: to explain supported data, mutation gating, privacy modes, and agent workflow. It also explicitly states what it does NOT do (read ads or expose secrets), which distinguishes it from sibling tools that perform reads or mutations.
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 usage for understanding tool capabilities, and the negative statement 'Does not read Google Ads' serves as a guideline for when not to use it. However, no explicit alternatives are mentioned among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_clear_cacheGoogle Ads Clear CacheAIdempotent
Delete all entries from the local SQLite GAQL-response cache. Does NOT touch Google Ads — only affects local memoization. Not gated by GOOGLE_ADS_ALLOW_MUTATIONS because nothing in your ad account changes. Does not require credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| cache_path | Yes | |
| cache_enabled | Yes | |
| cleared_entries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations: it confirms idempotency (cache clearing is repeatable), non-destructiveness to ad accounts, and lack of credential requirements. This aligns with and supplements the annotations without contradiction.
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 concise sentences deliver all necessary information: purpose, scope, and access control. No redundant words, each sentence adds value.
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 tool's simplicity (one optional parameter, no required inputs, output schema present), the description fully covers the essential context. It does not need to explain the output schema as it is provided separately.
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 single parameter 'response_format' is fully defined in the schema with an enum and default. With 0% schema description coverage, the description does not add meaning beyond the schema, but the parameter is simple and self-explanatory. Baseline score 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?
The description clearly states the tool deletes entries from a local SQLite GAQL-response cache, specifying it's a cache-clearing operation. It distinguishes itself from sibling tools like google_ads_cache_status by focusing on deletion rather than status checking.
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 explains when to use the tool (e.g., clearing local cache) and importantly states it does not affect Google Ads, nor requires mutation gates or credentials. While it doesn't explicitly list alternatives, the context is clear for this simple utility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_connection_statusGoogle Ads Connection StatusARead-onlyIdempotent
Check whether local Google Ads env vars, token file, Node version, privacy mode, mutation gate, and retry settings are ready. Does not call Google Ads or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| ready_for_google_ads_api | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by clarifying that it does not call Google Ads or expose secrets, and lists specific items checked. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded, no wasted words. Efficiently communicates the tool's purpose and safety characteristics.
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 tool's low complexity, no required parameters, and presence of an output schema, the description covers purpose and safety adequately. It does not describe output format, but that is handled by the output 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 0%, but the description does not explain the purpose or effect of the two parameters (client and response_format). While their names and enums are somewhat self-explanatory, the description fails to add meaning beyond 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?
Description clearly states 'Check whether local Google Ads env vars, token file, Node version, privacy mode, mutation gate, and retry settings are ready.' It uses a specific verb and resource, and distinguishes from siblings by stating it does not call Google Ads.
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 it is a pre-flight check, but does not explicitly state when to use this tool versus alternatives. No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_daily_reportDaily Performance ReportARead-onlyIdempotent
Synthetic daily performance snapshot. Pulls YESTERDAY + LAST_7_DAYS + LAST_30_DAYS aggregates for a customer, optionally alerts when CPC exceeds cpc_alert_threshold. Pure-read workflow tool — never mutates.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown | |
| cpc_alert_threshold | No | Optional CPC threshold in account currency. If yesterday's CPC exceeds this, the report adds an ALERT block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context beyond annotations by specifying the exact time ranges and alert behavior, and reiterates the pure-read nature, which aligns with and reinforces the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that cover purpose, key functionality (time periods, alert), and read-only nature. Every sentence adds value with no redundancy or fluff.
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?
Despite having an output schema (not shown), the description adequately covers the tool's core functionality and key parameters. For a report tool that aggregates data, the description is sufficiently complete with no obvious 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% (all four parameters have descriptions). The description does not add significant new meaning beyond what the schema already provides; it only mentions the alert threshold briefly. Baseline score of 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?
The description clearly states it is a synthetic daily performance snapshot pulling YESTERDAY, LAST_7_DAYS, and LAST_30_DAYS aggregates, with optional CPC alert. It explicitly distinguishes itself as a read-only aggregate, differentiating from sibling tools like get_account_performance or get_campaign_performance that focus on specific entities.
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 provides clear context on the tool's output (time-based aggregates, optional alert) but lacks explicit guidance on when to use this tool over alternatives or when not to use it. No 'when-not-to-use' or sibling comparisons are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_data_inventoryGoogle Ads Data InventoryARead-onlyIdempotent
List supported Google Ads data domains, scopes, privacy boundary, and recommended first calls. Does not call Google Ads APIs or expose user data.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| source | Yes | |
| mcp_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds valuable non-obvious context: the tool does not call Google Ads APIs and does not expose user data. This goes beyond what annotations provide, clarifying its safety and scope.
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 primary action. No extraneous information. Every sentence serves a purpose: stating functionality and noting limitations.
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 is simple with one optional parameter and an output schema exists. The description covers the tool's purpose, what it lists, and what it does not do. No additional context is needed for an AI agent to use this tool correctly.
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 has one parameter (response_format) with 0% description coverage. The tool description does not explain the parameter's purpose or default behavior, leaving the agent to infer from the enum values. With no schema descriptions, the description should compensate but fails to do so.
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 clearly states it lists supported Google Ads data domains, scopes, privacy boundary, and recommended first calls. It also explicitly says what it does not do (call APIs or expose user data), distinguishing it from sibling tools that perform data fetching or mutations.
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 it is a starting point ('recommended first calls') but does not explicitly state when to use this tool versus alternatives like list_accounts or cache_status. No exclusion criteria or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_exchange_codeExchange Google OAuth CodeA
Exchange a Google OAuth authorization code for local tokens. Tokens stored at ~/.google-ads-mcp/tokens.json with 0600 perms; never returned in the response.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | OAuth authorization code, or a full redirect URL containing ?code=... | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | Yes | |
| scope | No | |
| expires_at | No | |
| token_path | Yes | |
| has_refresh_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which indicate write operation), the description adds critical behavioral details: file storage location with permissions and that tokens are never returned in response. This enhances transparency.
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 purpose, no unnecessary words. Highly concise and structured well.
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 output schema existence, description need not detail returns. But it misses positioning in OAuth flow (e.g., prerequisite of auth URL). Still adequate for a simple exchange 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 50% (response_format lacks description in schema). The tool description does not elaborate on either parameter, leaving the role of response_format unclear. Description fails to compensate for coverage gap.
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 clearly states the verb 'Exchange' and specific resources 'Google OAuth authorization code' and 'local tokens'. It distinguishes this tool from siblings like google_ads_get_auth_url and google_ads_revoke_access.
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 usage after obtaining an auth code, but lacks explicit guidance on when to use vs alternatives or prerequisites. Context from sibling name get_auth_url suggests a flow, but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_find_wasteFind Waste Keywords (read-only)ARead-onlyIdempotent
Identify keywords matching the 'high cost + zero conversions' waste pattern (inspiration from script #1). Returns a ranked list of candidates — NEVER pauses anything. Pair with google_ads_pause_keyword (gated) after user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Predefined date range supported by Google Ads GAQL. | LAST_30_DAYS |
| min_clicks | No | Minimum clicks to evaluate (skip low-data keywords). | |
| campaign_id | No | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| min_cost_micros | No | Cost floor in micros. Default 200_000 = $0.20 — adjust to taste. | |
| response_format | No | markdown | |
| zero_conversions_only | No | If true (default), only include keywords with 0 conversions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context (NEVER pauses anything, returns ranked list) and explains the waste pattern. No contradictions.
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 purpose and pattern, then usage guidance. No wasted words. Very concise yet complete.
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 output schema exists, return values need not be explained. The description covers purpose, pattern, and pairing. Could mention required parameter (customer_id) but schema covers it. Adequate.
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 75%, so baseline is 3. The description does not add meaning beyond schema; parameters are well-documented in the schema itself.
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 clearly states the tool identifies keywords matching a 'high cost + zero conversions' waste pattern, distinguishing it from sibling list tools. It also specifies it does not pause anything, reinforcing its read-only nature.
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 explicit guidance: pair with google_ads_pause_keyword after user confirmation. Emphasizes it never pauses anything, preventing misuse. Clear when to use (pre-pause diagnostic) and when not to (general listing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_get_account_performanceGet Account PerformanceARead-onlyIdempotent
Aggregate performance metrics (impressions, clicks, cost_micros, ctr, average_cpc, conversions) for the customer over a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Predefined date range supported by Google Ads GAQL. | LAST_30_DAYS |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the annotations by specifying the metrics (impressions, clicks, cost_micros, etc.) and the date range nature. Annotations already indicate read-only and idempotent, so the description complements them well.
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 sentence that is front-loaded, concise, and free of unnecessary words. It efficiently conveys the tool's function.
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, the description does not need to explain return values. However, it could benefit from explicitly stating that it covers the entire account, but the name and context make this clear.
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 75%, so the baseline is 3. The description does not add significant parameter semantics beyond listing the metrics (which are outputs). Parameters are well-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?
The description clearly states 'aggregate performance metrics ... for the customer over a date range,' which directly indicates the tool's purpose and resource scope. It distinguishes it from campaign or keyword level tools via the name and context.
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 does not explicitly state when to use this tool versus alternatives like get_campaign_performance or get_keyword_performance. While the name implies account-level usage, no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_get_auth_urlGet Google OAuth URLARead-onlyIdempotent
Generate a Google OAuth authorization URL for the Google Ads API. Does not read or modify Google Ads data. Use this first when no local token exists.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional OAuth state value generated by the caller. | |
| scopes | No | Optional scope override. Defaults to the Google Ads scope. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| scopes | Yes | |
| auth_url | Yes | |
| next_step | Yes | |
| redirect_uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by specifying that the tool 'does not read or modify Google Ads data,' which aligns with the readOnlyHint and destructiveHint annotations. This reassures the agent of its safe, non-destructive nature.
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 convey the purpose, behavior, and usage instruction with no wasted words. The most critical information 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 simple authentication URL generation tool with annotations covering safety, an output schema, and clear description, this is fully complete. The agent has all necessary context to use it correctly.
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 67%, and the description does not elaborate on parameters. However, the schema itself describes each parameter adequately (state, scopes, response_format). The description adds no extra parameter semantics, so a baseline score of 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?
The description clearly states its purpose: 'Generate a Google OAuth authorization URL for the Google Ads API.' This is a specific verb+resource, and the added note 'Does not read or modify Google Ads data' distinguishes it from sibling tools that perform data operations.
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 explicitly says 'Use this first when no local token exists,' providing clear when-to-use guidance. It could be more explicit about alternatives, but the direction is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_get_campaignGet Google Ads CampaignARead-onlyIdempotent
Get a single campaign with budget, bidding strategy, and status. Returns the linked campaign_budget id (use it with google_ads_set_campaign_budget_micros).
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | Google Ads campaign id (numeric). | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, so safety profile is clear. Description adds return field context but no additional behavioral traits beyond what annotations cover.
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 purpose, no wasted words. Includes both purpose and cross-reference usage guidance efficiently.
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 output schema present and annotations covering safety, description adds the key cross-reference to set_budget tool and lists returned fields. Complete for a simple get 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 high (75% per context, actual 100%), and schema already describes parameters. Description does not add new parameter meaning beyond what schema 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?
Description clearly states it gets a single campaign with specific fields (budget, bidding strategy, status) and returns the campaign_budget id. Distinguishes from sibling list_campaigns and other performance 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?
Explicitly mentions using the returned budget id with google_ads_set_campaign_budget_micros, providing a clear use case. Does not explicitly state when not to use alternatives, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_get_campaign_performanceGet Campaign PerformanceARead-onlyIdempotent
Per-campaign performance metrics over a date range. Filter to a single campaign with campaign_id.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Predefined date range supported by Google Ads GAQL. | LAST_30_DAYS |
| campaign_id | No | Optional single-campaign filter. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive behavior. The description adds date-range and filtering context but no additional behavioral traits (e.g., latency, pagination, or metric details). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose. No unnecessary words.
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 presence of an output schema (not shown but indicated), the description does not need to explain return values. It covers the core functionality (date range, campaign filter) but omits mention of output format options and privacy settings, which are supported by 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 provides descriptions for 4 of 5 parameters (80% coverage). The description adds that campaign_id filters to a single campaign, but other parameters like privacy_mode and response_format are left unaddressed. Marginal value beyond 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?
The description clearly states the tool retrieves per-campaign performance metrics over a date range, with optional single-campaign filtering. This distinguishes it from account-level or keyword-level performance tools among 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 explicit guidance on when to use this tool over alternatives like get_account_performance or get_keyword_performance. The description merely implies campaign-level scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_get_keyword_performanceGet Keyword PerformanceARead-onlyIdempotent
Per-keyword performance metrics over a date range. Returns clicks, cost_micros, ctr, average_cpc, conversions, conversion_rate. Filter with campaign_id, ad_group_id, or min_clicks.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Predefined date range supported by Google Ads GAQL. | LAST_30_DAYS |
| min_clicks | No | Filter out keywords with fewer than this many clicks (defensive baseline filter). | |
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive nature. The description adds value by listing the specific metrics returned and available filters, which are behavioral details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences) and front-loaded with the core purpose. Every sentence adds value without 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?
While the description covers purpose and key return fields, it does not mention that customer_id is required, the default date_range, or the existence of privacy_mode and response_format. Given the moderate complexity (7 params, output schema exists), more details are needed for full completeness.
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 57%, and the description adds some meaning to parameters (e.g., 'Filter with campaign_id, ad_group_id, or min_clicks'), but it does not explain all parameters (e.g., response_format, privacy_mode). The description partially compensates for the schema gaps.
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 clearly states the tool retrieves per-keyword performance metrics over a date range, listing specific metrics (clicks, cost_micros, etc.). This differentiates it from sibling tools like get_account_performance or get_campaign_performance.
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 provides no guidance on when to use this tool versus alternatives, nor does it mention when not to use it. It only lists filter parameters without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_list_accountsList Accessible Customer AccountsARead-onlyIdempotent
List all customer accounts the authenticated user can access. For a manager (MCC) account, this includes every child customer.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| error | No | |
| records | No | |
| has_more | No | |
| privacy_mode | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent. Description adds clarity on manager account behavior (includes child accounts). No contradictions, good addition.
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 with no fluff; front-loaded with main action. Every word adds value.
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?
Simple tool with output schema; description covers core functionality. Missing parameter info, but overall sufficient for selection.
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 parameter (response_format) is not mentioned in description. With 0% schema coverage, description should explain the enum/default, but it doesn't.
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?
Description clearly states verb 'list' and resource 'customer accounts', distinguishing scope (all accessible, including children for MCC). Differentiates from siblings like google_ads_get_account_performance.
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 guidance on when to use this tool vs alternatives like google_ads_get_account_performance or google_ads_list_campaigns. Missing context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_list_ad_groupsList Google Ads Ad GroupsARead-onlyIdempotent
List ad groups under a campaign (or all campaigns) in a customer.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ENABLED | |
| page_size | No | ||
| campaign_id | No | Optional campaign id filter. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| error | No | |
| records | No | |
| has_more | No | |
| privacy_mode | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the `readOnlyHint` and `destructiveHint: false` annotations, indicating a read operation. However, it adds no new behavioral details about auth, rate limits, or response streaming beyond what annotations already 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?
The description is a single, front-loaded sentence that efficiently conveys the core functionality. It is concise without being overly terse, though it could briefly mention key parameters.
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 tool has 6 parameters and an output schema, the description is minimal. It does not explain pagination, field meanings, or result limits, but the output schema partially compensates. Completeness is adequate but not thorough.
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?
With only 50% schema description coverage, the description should compensate by explaining parameter intent, but it only restates the optional campaign filter without adding meaning to `status`, `page_size`, or `privacy_mode` beyond 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?
The description clearly states the action 'List ad groups' and distinguishes the scope: 'under a campaign (or all campaigns) in a customer.' This differentiates it from sibling tools like 'google_ads_list_campaigns' and 'google_ads_list_keywords'.
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 tool is for listing ad groups but lacks explicit guidance on when to use it versus alternatives like 'google_ads_list_keywords' or 'google_ads_list_campaigns'. No 'when-not-to-use' or context cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_list_campaignsList Google Ads CampaignsARead-onlyIdempotent
List campaigns under a Google Ads customer. Returns id, name, status, advertising_channel_type, bidding_strategy_type, and campaign_budget linkage.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by campaign status. Use ALL to include every status. | ENABLED |
| page_size | No | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| error | No | |
| records | No | |
| has_more | No | |
| privacy_mode | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds useful output field details but does not disclose additional behavioral traits (e.g., pagination behavior, authentication requirements, or potential performance implications).
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 sentence that effectively conveys the tool's purpose and output. It is appropriately sized, front-loaded, and contains no extraneous 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?
While the description covers basic intent and output fields, it is missing context on pagination (despite page_size parameter), default behavior, and any assumptions about the customer_id. The output schema exists, so return values are documented, but the description could be more complete for a list operation with multiple parameters.
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 only 60%, with parameters page_size and response_format lacking descriptions. The description does not add meaning to these parameters; it only describes output fields. It fails to compensate for the gaps in schema documentation.
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?
Description clearly states the verb 'List', the resource 'campaigns under a Google Ads customer', and enumerates specific output fields. This distinguishes it from siblings like google_ads_get_campaign (single campaign) and google_ads_list_ad_groups (different resource).
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 does not explicitly state when to use this tool versus alternatives like google_ads_get_campaign or google_ads_list_ad_groups. While it implies listing all campaigns, it lacks direct usage guidance or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_list_keywordsList Google Ads KeywordsBRead-onlyIdempotent
List keyword criteria under a campaign or ad group. Returns criterion_id, keyword text, match type, status, and cpc_bid_micros.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ENABLED | |
| page_size | No | ||
| ad_group_id | No | Optional ad group id filter. | |
| campaign_id | No | Optional campaign id filter. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| error | No | |
| records | No | |
| has_more | No | |
| privacy_mode | No | |
| next_page_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds that it returns specific fields, which is useful but minimal 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?
Single sentence that is efficient and front-loaded. Minimal waste, but could be slightly more structured.
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 and return fields mentioned, the description covers core functionality. However, it omits pagination behavior, error handling, or prerequisites, which a complete description might include.
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 57%; the description does not add any extra meaning beyond the schema. Parameters are adequately documented in the schema itself, so this is a baseline score.
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 clearly states the tool lists keyword criteria under a campaign or ad group, and specifies the return fields, distinguishing it from sibling tools like google_ads_list_ad_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or when not to use it. The description lacks usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_onboardingOnboarding (shared Delx profile)ARead-onlyIdempotent
Return the 11-question Delx onboarding flow plus the current profile state and missing critical fields. Same profile reused across all Delx MCPs.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds context about returning profile state and missing fields, but does not disclose additional behavioral traits beyond what annotations provide. No contradiction.
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 concise sentences that are front-loaded with the primary purpose. No wasted words; every part adds value.
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 no output schema and moderate complexity, the description covers the main return elements (onboarding flow, profile state, missing fields) but lacks detail on the structure of the onboarding flow or the output format beyond the response_format parameter. Adequate but not thorough.
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 0% with no parameter descriptions. The description does not explain the 'locale' or 'response_format' parameters, leaving their meaning and impact implicit. The agent must rely solely on enum names, which may be ambiguous (e.g., locale='pt-BR' likely means Portuguese, but not stated).
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 clearly specifies the verb 'Return' and the resource: '11-question Delx onboarding flow plus the current profile state and missing critical fields'. It also distinguishes from siblings like 'google_ads_profile_get' by including the onboarding flow, and mentions the shared profile context.
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 does not explicitly state when to use this tool vs. alternatives such as 'google_ads_profile_get'. The implied usage is for retrieving the onboarding flow, but no direct guidance on context or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_pause_campaignPause Campaign (gated mutation)BDestructiveIdempotent
Pause an entire campaign by id. GATED.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| response_format | No | markdown | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral trait that this operation is 'gated', meaning it requires explicit user intent (as also seen in the schema with explicit_user_intent parameter). Annotations already indicate it's mutable and destructive. The description does not, however, explain the specific effects of pausing a campaign (e.g., ads stop serving, spend stops). For a mutation with destructiveHint true, more context on what gets affected would be beneficial. Nevertheless, it provides one additional behavioral detail 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?
The description is very short (two sentences) and immediately conveys the core action and the gating requirement. However, it could benefit from a more structured format (e.g., listing required parameters or usage context). It is concise but slightly under-specified.
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 description is brief and does not cover contextual details such as prerequisites (e.g., campaign must be active to pause), effects (campaign status changes, immediate impact on spend), or confirmation steps. While annotations and output schema provide some safety net, the description lacks the context needed for an agent to fully understand the implications of invoking this tool for the first time.
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?
With only 25% schema description coverage, the description has a high burden to clarify parameter semantics. It adds that the campaign is paused 'by id', which maps to campaign_id, but does not elaborate on the other three parameters (customer_id has schema description but not in tool description, response_format and explicit_user_intent lack any description). The description falls short in compensating for the missing schema 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?
The description clearly states the verb 'Pause' and the resource 'entire campaign', distinguishing it from sibling tools like google_ads_pause_keyword. The mention of 'by id' specifies the input mechanism, providing a specific and distinct purpose.
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 does not provide any usage guidelines. It does not state when to choose this tool over alternatives like google_ads_resume_campaign or google_ads_pause_keyword. The word 'GATED' hints at a requirement for explicit user intent, but no explicit when-to-use or when-not-to-use instructions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_pause_keywordPause Keyword (gated mutation)ADestructiveIdempotent
Pause a single keyword by criterion_id. GATED: requires GOOGLE_ADS_ALLOW_MUTATIONS enabled AND explicit_user_intent. Ask the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_group_id | Yes | Ad group that owns the keyword criterion. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| criterion_id | Yes | Keyword criterion id (the keyword's id, NOT the keyword text). | |
| response_format | No | markdown | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false; the description adds that this is gated and requires explicit user consent and acts on a single criterion. This context is useful and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences deliver the core action first and the gating requirement second, with no repetition of schema or annotation details. 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 gated mutation with a true destructive annotation, the description provides the essential permission and consent prerequisites. Required IDs are documented in the schema, and an output schema exists, so no critical 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?
The description highlights the most identity-critical parameter (criterion_id) and clarifies the otherwise opaque explicit_user_intent boolean by tying it to the gate. Customer_id and ad_group_id are covered in the input schema, and response_format has an enum, so the description compensates for moderate schema coverage.
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 verb ('Pause'), a specific resource ('a single keyword') and the identifying field ('criterion_id'), which distinguishes it from siblings like pause_campaign and resume_keyword. The title's 'gated mutation' is reinforced by a clear action statement.
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 clearly states the gating precondition (GOOGLE_ADS_ALLOW_MUTATIONS + explicit_user_intent) and instructs 'Ask the user first.' It doesn't enumerate alternatives or exclusions, but the gate and command make the intended call flow unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_privacy_auditGoogle Ads Privacy AuditARead-onlyIdempotent
Return the local privacy, mutation-gate, cache, token-path, env-presence and redaction posture without revealing secret values.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | Yes | |
| unofficial | Yes | |
| mutations_allowed | Yes | |
| privacy_mode_default | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds critical context that secret values are not revealed, which is a key behavioral trait for an audit tool. No contradictions.
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 sentence that lists all components without unnecessary words. It is front-loaded with the action. Could be slightly improved by structuring the list, but current form is efficient.
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 presence of an output schema, the description does not need to elaborate on return values. It conveys the purpose and the important constraint (no secret values revealed). The tool's complexity (multiple components) is adequately addressed for an audit context.
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 input schema fully defines the only parameter (response_format) with enum and default. The description does not mention this parameter, so it adds no additional meaning beyond the schema. Baseline score of 3 applies as schema coverage is effectively 100% from the schema itself.
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 clearly states the tool returns specific privacy-related posture components (local privacy, mutation-gate, cache, etc.), using the verb 'Return' and specifying the resource. It distinguishes from siblings like google_ads_cache_status and google_ads_agent_manifest which serve different purposes.
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 guidance on when to use this tool versus alternatives. There are many sibling tools with overlapping audit/status functions, but the description provides no contextual cues for choosing this over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_profile_getProfile Get (shared Delx profile)ARead-onlyIdempotent
Read the shared Delx profile (~/.delx-wellness/profile.json). Returns the user's preferred name, language, timezone, etc. Cross-tool — same profile is shared with other Delx MCPs. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds context about file path and cross-tool sharing but does not reveal significant new behavioral traits 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 sentences, front-loaded with purpose, no filler. Every sentence adds value.
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 read-only profile getter with one optional parameter and no output schema, description provides file path, return content, and cross-tool context. Lacks explanation of response_format parameter, but otherwise 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 coverage is 0%. Description does not mention the 'response_format' parameter, which has an enum and default. Fails to add meaning beyond 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?
Description clearly states it reads a shared Delx profile file and returns user preferences. Distinguishes from sibling 'google_ads_profile_update' which writes. Verb 'Read' with specific resource and scope.
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?
Description implies usage when needing user profile data (preferred name, language, timezone) and notes it is cross-tool shared, but does not explicitly state when to use vs alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_profile_updateProfile Update (shared Delx profile)A
Persist a partial patch to the shared Delx profile (~/.delx-wellness/profile.json). REQUIRES explicit_user_intent=true. NEVER stores secrets — writes will be rejected at validation time.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Partial WellnessProfileDocument patch. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (no readOnlyHint, etc.), so the description carries the burden. It discloses that the tool mutates data via persistence, requires explicit_user_intent, and rejects secrets at validation. This adds meaningful behavioral 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?
The description is extremely concise with two sentences, front-loading the action and constraints. Every part adds value with no 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?
Given no output schema, the description does not explain return values or confirmation behavior. It adequately describes input constraints but lacks completeness on what happens after execution (e.g., success/error handling).
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 67% (two of three parameters described). The description does not add additional meaning to the parameters, particularly the 'patch' object, which remains vaguely defined. 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?
The description clearly states the action ('Persist a partial patch') and the target resource ('shared Delx profile' with file path). It is distinct from the sibling tool google_ads_profile_get, which handles reading.
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 specifies the prerequisite 'REQUIRES explicit_user_intent=true' and a constraint 'NEVER stores secrets', but does not explicitly differentiate from alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_quick_winsFind Quick-Win Keywords (read-only)ARead-onlyIdempotent
Identify keywords with LOW CPC + HIGH CTR + at-least-some conversions — candidates to RAISE the bid on. Inverse of google_ads_find_waste. Returns a ranked list with a recommended_bid_micros (current + 25%, capped at 2x). NEVER changes bids; pair with google_ads_set_keyword_bid_micros (gated) after user confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum candidates to return. | |
| min_ctr | No | Minimum CTR in percent (e.g., 5 = 5%). Default 5%. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| privacy_mode | No | Optional per-call payload privacy override. Defaults to GOOGLE_ADS_PRIVACY_MODE or structured. | |
| lookback_days | No | Look-back window in days (1-90). Converted into the GAQL DATE_RANGE/BETWEEN clause. | |
| min_conversions | No | Minimum conversions in the window. Default 0.5 (at least half a conversion). | |
| response_format | No | markdown | |
| max_avg_cpc_micros | No | Maximum average CPC in micros. Default 100_000 ($0.10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | |
| privacy_mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context like the bid recommendation formula (current + 25%, capped at 2x) and clarifies it never changes bids. Does not fully detail return structure but sufficient.
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 purpose. Every sentence adds value: purpose, inverse, and pairing advice. No wasted words.
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 output schema present, the description need not detail return values. It mentions the ranked list and recommended_bid_micros. All parameters are defined in schema. Minor gap: no mention of privacy_mode or response_format, but those are in schema. Overall adequate.
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 88%, and the description does not elaborate on parameter meaning beyond the schema. The description mentions 'recommended_bid_micros' in output, but not parameter details. Baseline score as schema carries the load.
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 exactly what the tool does: 'Identify keywords with LOW CPC + HIGH CTR + at-least-some conversions' and distinguishes it from sibling 'google_ads_find_waste' by calling it the inverse.
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 explicit guidance on when to use (identifying quick-wins to raise bids), when not to use (NEVER changes bids), and alternative tool ('pair with google_ads_set_keyword_bid_micros').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_resume_campaignResume Campaign (gated mutation)BDestructiveIdempotent
Resume (enable) a paused campaign by id. GATED.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| response_format | No | markdown | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=true, but the description adds only 'GATED' without explaining the gating mechanism or other behavioral traits (e.g., required auth, state prerequisites). The term 'GATED' is vague.
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 sentence of 9 words, front-loaded with the action and resource. Every word earns its place with no fluff.
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 destructiveHint=true and an output schema, the description is too brief. It lacks prerequisites (campaign must be paused), explanation of 'GATED', and expected behavior. The output schema exists but description does not complement it.
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 only 25% (only customer_id has a description). The tool description does not elaborate on any parameter, leaving parameter meanings unclear beyond 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?
The description clearly states the action 'Resume (enable)' and the resource 'a paused campaign by id'. It distinguishes from sibling tools like pause_campaign and resume_keyword by specifying the campaign context.
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 mentions 'GATED' implying special access conditions, but does not explicitly state when to use this tool versus alternatives. No comparison with siblings like resume_keyword or pause_campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_resume_keywordResume Keyword (gated mutation)BDestructiveIdempotent
Resume (enable) a single paused keyword by criterion_id. GATED.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_group_id | Yes | Ad group that owns the keyword criterion. | |
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| criterion_id | Yes | Keyword criterion id (the keyword's id, NOT the keyword text). | |
| response_format | No | markdown | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, yet resume is a non-destructive operation; description does not clarify this discrepancy. The term 'GATED' hints at access controls but lacks detail. No further behavioral traits disclosed 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?
Description is a single sentence, which is concise but under-specifies critical details for a gated mutation with 5 parameters. Front-loads core task but omits necessary 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?
As a mutation with output schema present, description should explain gating behavior, idempotency implications, and error handling. It is incomplete for effective usage, lacking details on success states, dependencies, or side effects.
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 60% (3/5 params documented), but description adds no value beyond the schema. Key required parameter 'explicit_user_intent' has no schema description and is unmentioned in the description.
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?
Description clearly states 'Resume (enable) a single paused keyword by criterion_id', using a specific verb-resource pair. Title 'Resume Keyword (gated mutation)' and sibling context distinguish it from related tools like pause_keyword and resume_campaign.
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 mentions 'GATED' but does not explicitly explain when to use this tool over alternatives like pause_keyword or resume_campaign. No context on prerequisites or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_revoke_accessRevoke Google Ads AccessADestructive
Revoke the current Google OAuth grant and delete local tokens. Use only when the user explicitly wants to disconnect Google Ads.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | Yes | |
| token_path | Yes | |
| local_tokens_cleared | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool revokes OAuth grants and deletes local tokens, adding behavioral context beyond annotations (destructiveHint=true). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action. No superfluous words, efficiently communicates purpose and usage guideline.
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 tool's simplicity (no required params, output schema exists), the description is largely complete. It could optionally mention confirmation or irreversibility, but not required.
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 description does not mention the single parameter 'response_format,' which has 0% schema description coverage. Schema defines it as an optional enum, but the description adds no value or guidance for its usage.
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 clearly states the action: revoke Google OAuth grant and delete local tokens. It uses a specific verb and resource, distinguishing it from sibling tools like google_ads_exchange_code or google_ads_get_auth_url.
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 states 'Use only when the user explicitly wants to disconnect Google Ads,' providing clear when-to-use guidance. Does not mention alternatives or when-not-to, but context is sufficient for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_set_campaign_budget_microsSet Campaign Budget (gated mutation)ADestructiveIdempotent
Update a campaign budget's amount_micros. GATED. campaign_budget_id is NOT the campaign id — discover it via google_ads_get_campaign (campaign_budget.id).
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| amount_micros | Yes | Daily budget amount in micros. 10_000 = $0.01 minimum. | |
| response_format | No | markdown | |
| campaign_budget_id | Yes | Campaign budget id (NOT the campaign id). Discover via google_ads_get_campaign — returns campaign_budget.id. | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. Description adds value by flagging the tool as 'GATED' (implying access restrictions) and warning about the ID confusion. No contradictions.
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?
Extremely concise: two sentences cover the core action, gated nature, and critical ID distinction. No wasted words.
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-field mutation tool with an output schema, the description is fairly complete. It explains the purpose, access restriction, and prerequisite discovery step. Could mention that the update takes effect immediately, but not essential.
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 60%, and the description does not add significant meaning beyond what the schema already provides for customer_id, amount_micros, and campaign_budget_id. It mentions campaign_budget_id but doesn't elaborate on other parameters.
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?
Clearly specifies verb "Update" and resource "campaign budget's amount_micros". Explicitly distinguishes from sibling tools by noting the gated nature and the critical distinction between campaign_budget_id and campaign id.
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: states it's gated (restricted access) and instructs how to discover the correct ID via google_ads_get_campaign. Does not explicitly state when not to use or compare to alternative tools, but the context is sufficient for proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_set_keyword_bid_microsSet Keyword Bid (gated mutation)ADestructiveIdempotent
Update the cpc_bid_micros for a keyword criterion. GATED. Bid must be in micros (10_000 = $0.01).
| Name | Required | Description | Default |
|---|---|---|---|
| ad_group_id | Yes | ||
| customer_id | Yes | Google Ads customer id (10 digits). Dashes optional, e.g. '1234567890' or '123-456-7890'. | |
| criterion_id | Yes | ||
| cpc_bid_micros | Yes | Max CPC bid in micros. 10_000 = $0.01 minimum, 1_000_000_000 = $1000 maximum. | |
| response_format | No | markdown | |
| explicit_user_intent | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| note | No | |
| error | No | |
| applied | No | |
| resource | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey mutation (readOnlyHint=false), non-idempotency? Actually idempotentHint=true means safe to retry, destructiveHint=true indicates potential harm. The description adds 'GATED' and the micros unit, but does not elaborate on behavioral traits beyond that. It does not contradict 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?
The description is very concise: two sentences conveying the action and key constraint without any redundant information. It is front-loaded and efficient.
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 tool's complexity (6 parameters, mutation, gated), the description is incomplete. It does not explain the role of explicit_user_intent, the required IDs, or provide guidance on when to use this tool relative to similar sibling tools. The annotations and output schema are helpful but the description should add more context for a safe mutation 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 low (33%). The description only reinforces the micros requirement for cpc_bid_micros, already documented in the schema. It fails to add meaning for other parameters like customer_id, ad_group_id, criterion_id, explicit_user_intent, or response_format, which are critical for tool usage.
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 clearly states the action ('Update the cpc_bid_micros for a keyword criterion'), the specific resource ('cpc_bid_micros'), and adds context about gating and micro conversion. It effectively distinguishes from sibling tools like google_ads_pause_keyword or google_ads_set_campaign_budget_micros.
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 mentions 'GATED' and the micros requirement but does not explain when to use this tool vs alternatives, such as when to set keyword bids versus campaign budgets, or what 'gated' means operationally. No prerequisites or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose with detailed descriptions. The google_ads_ prefix and verb_noun naming make it easy to distinguish between listing, getting, mutating, and meta tools. No two tools appear to do the same thing.
All tools follow the 'google_ads_' prefix with underscore_case and a consistent verb_noun pattern (e.g., list_campaigns, get_campaign, pause_campaign). Minor deviations like find_waste and quick_wins still adhere to the same style.
30 tools is on the high side, but the Google Ads domain is complex. Several meta tools (cache, auth, profile) are included for agent guidance, which inflates the count. The core advertising operations are well-covered, but some consolidation could reduce clutter.
The set covers account, campaign, keyword, and budget management, performance reporting, and optimization suggestions. However, it lacks creation tools for ad groups, keywords, and campaigns, and omits ad-level operations. The mutation tools are gated and limited to pause/resume/set bid, leaving notable gaps for full lifecycle management.
Maintenance
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
Google Ads, Meta Ads & GA4 MCP server - 250+ tools for campaigns, creatives, audiences & reports.
Google Ads analysis and operations — read performance, manage keywords, bids, and campaigns.
Google Ads MCP with 20,000+ account peer context and staged approve-then-execute writes.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Google Ads API — 22 tools for campaigns, keywords, RSAs, assets, audiences, geo/device performance, impression share, auction insights, and budget pacing. Community edition with B2B/agency-focused tooling beyond the official Google MCP.22981MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading and mutating Google Ads campaigns via MCP tools, and includes structured marketer workflows for search term mining, budget optimization, and weekly reviews.835MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Google Ads campaigns through the official Google Ads API, covering accounts, campaigns, budgets, keywords, search terms, and keyword ideas. It provides tools for both reading and mutating live ads data, such as pausing campaigns, updating budgets, and adding keywords.MIT
- AlicenseAqualityCmaintenanceMCP server to read and manage Google Ads accounts via GAQL queries, campaign/ad group/keyword operations, and safe write support with draft-confirm flow.16178MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/davidmosiah/google-ads-mcp-unofficial'
If you have feedback or need assistance with the MCP directory API, please join our Discord server