Skip to main content
Glama
dhawalshah

google-ads-mcp

Google Ads MCP

🔔 UPDATE — September 2026: no developer token needed

Google is sunsetting Google Ads API developer tokens. API access levels now attach to the Google Cloud project that owns your OAuth client instead of to a token. This server has been updated to match: it no longer requires or sends a developer token.

  • Already connected to a hosted server? Nothing to do. Your Google sign-in is unchanged and your connection keeps working.

  • Setting this up fresh? Skip the API Center token application entirely — just make sure your OAuth client lives in the Cloud project that holds your Google Ads API access level. See Step 1.

  • Running an older copy of this repo? It still works. Developer tokens remain optional until Google stops accepting them, expected H1 2027. If GOOGLE_ADS_DEVELOPER_TOKEN is set, it is still sent as the Developer-Token header.

Google's announcement: Ads API access levels are moving to Google Cloud projects.

A Model Context Protocol (MCP) server for Google Ads. Connect Claude (or any MCP-compatible AI client) directly to your Google Ads accounts to query campaign performance, analyse keywords, inspect budgets, review search terms, and more — all in natural language.

The server speaks the MCP authorization spec (2025-06-18), so it works as a remote connector anywhere Claude supports custom MCP servers — claude.ai (personal), Claude Desktop, and Claude Teams. Add one URL, click "Connect", sign in with Google, done. For a Teams plan, the org owner adds the URL once and each member individually authenticates on first use.

Related MCP server: google-ads-mcp

What you can do

Account Management

  • List all accessible accounts including nested MCC sub-accounts

  • Run custom GAQL queries against any account

Campaign & Ad Analytics

  • Get campaign, ad group, and individual ad performance metrics

  • Keyword performance including quality scores and impression share

  • Search terms report — see what searches triggered your ads

  • Asset performance for responsive search ads (headlines, descriptions)

Reporting

  • Budget report with daily spend and month-to-date cost

  • Geographic performance breakdown by country and location type

  • Device performance split (mobile, desktop, tablet)

  • Conversion actions — list all configured conversion tracking

Keyword Research

  • Generate keyword ideas with search volume, competition, and bid estimates


How auth works

There are two modes. Pick one.

Mode A — Local STDIO (one user, no server)

Use this if you only want it on your own machine. setup_local_auth.py runs the Google OAuth flow once and stores your token in ~/.config/google-ads-mcp/token.json. Claude Desktop launches server.py as a subprocess. No Firestore, no Cloud Run, no public URL.

Mode B — Remote HTTP server (Claude Teams, claude.ai, multi-user)

The MCP server is also an OAuth 2.1 authorization server. When Claude connects:

  1. Claude discovers our metadata at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server.

  2. Claude registers itself via Dynamic Client Registration (POST /oauth/register).

  3. Claude redirects the user to /oauth/authorize. We delegate identification to Google OAuth.

  4. After Google login, we issue our own opaque bearer token to Claude — Google credentials never leave the server.

  5. On each /mcp request Claude sends our bearer; we map it server-side to the right user's stored Google credentials and call the Google Ads APIs.

The ?user=email query string from older versions is gone — there are no per-user URLs to copy around.


Google Ads API version

This server targets Google Ads API v24. It was upgraded from v21, which Google sunset on 5 August 2026 — v21 stopped accepting requests on that date, so any older checkout of this repo will fail against the live API and must be updated.

Two user-visible changes came with the upgrade:

  • Asset performance labels are gone. get_asset_performance no longer returns Google's BEST/GOOD/LOW label, because the Ads API removed ad_group_ad_asset_view.performance_label in v23. The tool still reports each headline and description with its impressions and clicks.

  • Everything else is unchanged. All other tools return the same fields as before.

Google now ships four major API versions a year, each supported for roughly twelve months, so expect this to need revisiting around May 2027. The version is a single constant — API_VERSION in oauth/google_auth.py.


Prerequisites

  • Python 3.10+

  • A Google Ads account with at least one accessible customer

  • A Google Cloud project


Step 1 — Get Google Ads API access

Google has sunset developer tokens. API access levels now attach to the Google Cloud project that owns your OAuth client, so there is no token to apply for or paste anywhere.

  1. Sign in to Google Ads.

  2. Open your Cloud project's Google Ads API Overview page in the Google Cloud Console to view or request your access level (Test → Basic → Standard).

  3. Make sure the OAuth client you configure in Step 2 lives in that same Cloud project — that is what the access level is tied to.

If you use a Manager (MCC) account, note the 10-digit Manager Account ID too. You'll use it as manager_id when querying sub-accounts.

Legacy setups: if you still have a developer token and want to keep sending it, set GOOGLE_ADS_DEVELOPER_TOKEN and it will be added as the Developer-Token header. Google expects to stop accepting it in H1 2027.


Step 2 — Set up Google Cloud

2a. Create a project and enable the Google Ads API

  1. Go to the Google Cloud Console.

  2. Create or select a project and note the Project ID.

  3. APIs & Services → Library, search for Google Ads API, click Enable.

2b. Create OAuth 2.0 credentials

  1. APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID.

  2. Application type: Web application.

  3. Add Authorized redirect URIs:

    • http://localhost:8080/auth/callback (local dev / setup_local_auth.py)

    • https://YOUR-CLOUD-RUN-URL/auth/callback (remote deployment — add after deploy)

  4. Click Create, then Download JSON → save as client_secret.json in the project root (gitignored). You can also copy the Client ID / Client Secret straight into env vars.

  1. APIs & Services → OAuth consent screen.

  2. Choose Internal for a Google Workspace org (recommended for teams), or External for personal/individual use.

  3. Add the scope: https://www.googleapis.com/auth/adwords.

  4. If using External in Testing mode, add each user's email under Test users.

2d. Enable Firestore (Mode B only)

The server stores OAuth bearer tokens and per-user Google credentials in Firestore.

  1. In Cloud Console, Firestore → Create database → Native mode, pick a region.

  2. Grant the Cloud Run service account Cloud Datastore User role under IAM & Admin → IAM.


Step 3 — Install

git clone https://github.com/dhawalshah/google-ads-mcp
cd google-ads-mcp
pip install -r requirements.txt
cp .env.example .env       # fill in values

Step 4 — Mode A: Local STDIO

python setup_local_auth.py

A browser opens, you sign in with Google, the script writes ~/.config/google-ads-mcp/token.json.

Then add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "google-ads": {
      "command": "python",
      "args": ["/absolute/path/to/google-ads-mcp/server.py"],
      "env": {
        "OAUTH_CONFIG_PATH": "/absolute/path/to/client_secret.json",
        "MCP_USER_EMAIL": "you@yourcompany.com"
      }
    }
  }
}

Restart Claude Desktop. You're done — skip the rest.


Step 4 — Mode B: Remote HTTP server (Claude Teams / claude.ai)

Deploy to Cloud Run

gcloud run deploy google-ads-mcp \
  --source . \
  --region YOUR_REGION \
  --project YOUR_PROJECT_ID \
  --platform managed \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "GCP_PROJECT_ID=your-project-id,BASE_URL=https://YOUR-SERVICE-URL.run.app,GOOGLE_CLIENT_ID=...,GOOGLE_CLIENT_SECRET=...,ALLOWED_DOMAINS=yourcompany.com"

Recommended: store GOOGLE_CLIENT_SECRET as a Cloud Run secret rather than a plain env var.

After it's up, go back to APIs & Services → Credentials → your OAuth client and add the live callback URL:

https://YOUR-SERVICE-URL.run.app/auth/callback

Connect from Claude

Claude Teams (org owner adds it once for everyone):

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

  • Each member clicks Connect, signs in with Google, done.

claude.ai personal:

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

Claude Desktop with a remote server:

{
  "mcpServers": {
    "google-ads": {
      "url": "https://YOUR-SERVICE-URL.run.app/mcp"
    }
  }
}

Claude Desktop will run the OAuth dance the first time you use it.


Environment Variables

Variable

Required

Description

GOOGLE_ADS_DEVELOPER_TOKEN

No

Deprecated. Leave unset — access level now comes from the Cloud project owning the OAuth client. If set, it is sent as the Developer-Token header (legacy setups only).

BASE_URL

Mode B

Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to.

GCP_PROJECT_ID

Mode B

GCP project hosting Firestore.

GOOGLE_CLIENT_ID

Mode B†

Google OAuth client ID.

GOOGLE_CLIENT_SECRET

Mode B†

Google OAuth client secret.

OAUTH_CONFIG_PATH

Mode B†

Alternative to the two above: path to client_secret.json.

GOOGLE_REDIRECT_URI

No

Override the Google callback URL. Defaults to ${BASE_URL}/auth/callback.

ALLOWED_DOMAINS

No

Comma-separated email domain allowlist (e.g. acme.com,beta.com). Empty = no restriction.

MCP_USER_EMAIL

Mode A

Your email — set in Claude Desktop config.

PORT

No

HTTP port (default 8080).

LOG_LEVEL

No

Python log level (default INFO).

† Set either GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET or OAUTH_CONFIG_PATH.


Available Tools

Tool

Description

list_accounts

List all accessible Google Ads accounts including nested MCC sub-accounts

run_gaql

Execute a raw GAQL query against any account

run_keyword_planner

Generate keyword ideas with search volume, competition, and bid estimates

get_campaign_performance

Impressions, clicks, cost, CTR, CPC, and conversions by campaign

get_ad_group_performance

Performance metrics broken down by ad group

get_ad_performance

Performance metrics for individual ads/creatives

get_keyword_performance

Keyword metrics including quality score and search impression share

get_search_terms_report

Actual searches that triggered your ads — find negatives and opportunities

get_budget_report

Campaign budgets and month-to-date spend

get_geographic_performance

Performance breakdown by country and location type

get_device_performance

Performance split by device: mobile, desktop, tablet

get_conversion_actions

List all conversion actions configured on the account

get_asset_performance

Responsive search ad headline/description impressions and clicks


Example Prompts

Show me campaign performance for the last 30 days

Which keywords have the lowest quality scores?

What search terms triggered the most spend last month?

Show me the budget vs spend for all active campaigns

Which device gets the best conversion rate?

Generate keyword ideas for "project management software"

What countries are driving the most clicks?

Which ad headlines are performing best?

OAuth endpoint reference (Mode B)

For developers who want to verify the implementation or write their own MCP client.

Endpoint

Spec

Purpose

GET /.well-known/oauth-protected-resource

RFC 9728

Advertises the canonical resource URI and authorization server.

GET /.well-known/oauth-authorization-server

RFC 8414

Authorization server metadata.

POST /oauth/register

RFC 7591

Dynamic Client Registration.

GET /oauth/authorize

OAuth 2.1

Starts the auth code flow with PKCE; redirects to Google.

GET /auth/callback

—

Google redirects here; we mint our authorization code and bounce back to the MCP client.

POST /oauth/token

OAuth 2.1

Authorization code + refresh token grants.

A GET /mcp without a valid bearer returns 401 with a WWW-Authenticate: Bearer resource_metadata="…" header pointing at the protected-resource metadata document, which is how a standards-compliant MCP client discovers the rest.


Attribution

Forked from gomarble-ai/google-ads-mcp-server, with additions:

  • Multi-user HTTP server mode acting as an OAuth 2.1 authorization server (DCR + PKCE + RFC 8707 resource indicators)

  • Per-user OAuth token storage in Firestore

  • Local STDIO mode with token stored in ~/.config/google-ads-mcp/token.json

  • setup_local_auth.py — one-shot local auth script

  • Google Cloud Run deployment support

  • Expanded read-only toolset (10 additional tools)


About Dhawal Shah

I run a 40-plus person digital marketing agency out of Singapore, and I build the automation my own teams use. This server is one of those tools rather than a weekend project: it runs against live Google Ads accounts every week, which is why the read-only surface is wide and the write surface is deliberately narrow.

Fourteen years building companies across Asia behind it. 5,000+ campaigns, 400+ brands, 30+ startups advised, and 300+ training sessions for teams including Sony, Toyota, DHL and Interpol. I am also an Accredited Director with the Singapore Institute of Directors, which in practice means I get asked what breaks, who is accountable and what it costs before anyone asks what it can do.

I write up the routines and agents I actually run at dhawalshah.net.

Worth reading alongside this repo: Google Ads, Meta, LinkedIn & TikTok MCPs for Claude: Agency Setup Guide.


License

MIT

Available Tools

13 tools
get_ad_group_performanceGet Ad Group PerformanceB

Get performance metrics broken down by ad group.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics (default: LAST_30_DAYS). See get_campaign_performance for valid values.LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
campaign_idNoOptional — filter results to a specific campaign ID
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It only says 'Get' and 'broken down by ad group', implying a read operation and grouping, but it doesn't disclose details like whether results are limited, whether filtering by campaign affects the grouping, or any side effects or access requirements. The value added beyond the tool name is minimal.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler. It is concise, though somewhat thin because it omits behavioral or contextual guidance that could have been added without much bloat.

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

Completeness3/5

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

With 100% parameter schema coverage and an output schema present, the core callable details are covered. Still, the description lacks context about when to select this over similar sibling toolsable and provides no behavioral caveats, making it minimally viable rather than fully self-sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well documented. The description doesn't add parameter-level detail, but it does clarify that the result is organized by ad group rather than by campaign or ad. This is adequate but not a strong compensation for what the schema already provides.

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

Purpose4/5

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

The description states a clear verb ('Get') and a specific resource (ad group performance) with a grouping dimension ('broken down by ad group'). This is enough to distinguish it from sibling tools like get_campaign_performance or get_ad_performance, though it doesn't explicitly name those alternatives.

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

Usage Guidelines3/5

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

Usage is implied by the tool's purpose: an agent can infer to use this when it needs performance metrics at the ad-group level. However, the description provides no explicit guidance about when not to use it or which sibling tool should be preferred for different granularities.

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

get_ad_performanceGet Ad PerformanceA

Get performance metrics for individual ads/creatives.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
campaign_idNoOptional — filter results to a specific campaign ID
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that metrics are returned; it does not mention aggregation level, date-range handling, managed-account requirements, pagination, or response shape. This is minimal for a reporting tool with no annotation safety signals.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler words. It states the action and the exact resource scope, making it appropriately concise for its purpose.

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

Completeness3/5

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

The presence of an output schema and 100% parameter schema coverage means an agent can invoke the tool with the required customer_id. However, sibling ambiguity and lack of usage guidance make the description only minimally complete; it does not help an agent decide between this and closely related performance-report tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters and their formats/defaults. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('performance metrics for individual ads/creatives'), which clearly identifies the tool's scope. This granularity distinguishes it from sibling tools like get_campaign_performance, get_ad_group_performance, and get_keyword_performance.

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

Usage Guidelines3/5

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

The phrase 'individual ads/creatives' implies the tool is for ad-level or creative-level reporting, which helps separate it from campaign/ad group/keyword reports. However, it never explicitly states when to use this tool instead of a sibling such as get_asset_performance or get_ad_group_performance.

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

get_asset_performanceGet Asset PerformanceA

Get performance of responsive search ad assets (headlines and descriptions).

Shows which headlines and descriptions are performing best, ranked by impressions. Google's performance label (BEST/GOOD/LOW) is no longer available — the Ads API removed it in v23.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses a key behavioral fact: the Google performance label (BEST/GOOD/LOW) is no longer available, and results are ranked by impressions. However, it does not mention whether the operation is read-only, any authorization requirements, pagination, or limits. For a simple 'get' tool this is adequate but not rich.

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

Conciseness5/5

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

Two concise sentences, the first front-loads the core purpose and the second adds a critical behavioral note about the removed performance label. No wasted words or redundancy.

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

Completeness4/5

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

An output schema exists, so return format is covered. The description provides the key limitation (label removal) and the ranking criterion, which is essential context. It lacks explicit usage guidance, but the tool is straightforward and the schema covers parameter details. Overall, it is fairly complete for a get-asset-performance tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (date_range, manager_id, customer_id) with descriptions. The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb ('Get') and resource ('performance of responsive search ad assets (headlines and descriptions)'), clearly distinguishing it from sibling tools that target campaigns, ad groups, ads, or keywords. It also adds the ranking-by-impressions detail, leaving no ambiguity about what data is returned.

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

Usage Guidelines3/5

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

The description implies the tool is for asset-level performance (headlines/descriptions) but does not explicitly say when to use it versus alternatives like get_ad_performance or get_campaign_performance. There is no explicit 'when not to use' or reference to sibling tools.

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

get_budget_reportGet Budget ReportA

Get campaign budgets and current spend for all active campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It implies a read-only operation (via 'Get') and scopes results to active campaigns, but it doesn't mention permissions, data freshness, pagination, or any side effects. For a simple read report, this is minimal but not misleading.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. It conveys the action, resource, and scope efficiently, making it easy for an agent to parse quickly.

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

Completeness4/5

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

Given the presence of an output schema and only two simple parameters, the description provides sufficient context for an agent to invoke the tool correctly. It clearly states the scope (all active campaigns) and the resource (budgets/spend). It lacks detail on optional filters or prerequisites, but these are not essential for a basic report tool.

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

Parameters3/5

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

The input schema already describes both parameters (customer_id as a 10-digit ID, manager_id as optional with a default). The description adds no additional meaning about how these parameters affect the report, so it adds no value beyond the schema, warranting the baseline score of 3.

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

Purpose5/5

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

The description states a specific verb ('Get'), a clear resource ('campaign budgets and current spend'), and an explicit scope ('all active campaigns'). This distinguishes it from sibling performance-focused tools like get_campaign_performance, which target metrics rather than budgets/spend. An agent can immediately understand the tool's function.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It doesn't mention that performance metrics are handled by other siblings, nor does it note any conditions or exclusions. An agent is left to infer usage solely from the tool name and description.

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

get_campaign_performanceGet Campaign PerformanceB

Get performance metrics for all campaigns in an account.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics. One of: TODAY, YESTERDAY, LAST_7_DAYS, LAST_BUSINESS_WEEK, THIS_MONTH, LAST_MONTH, LAST_14_DAYS, LAST_30_DAYS, THIS_QUARTER, LAST_QUARTER, THIS_YEAR, LAST_YEAR (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. 'Get' makes clear this is a read operation and 'all campaigns in an account' defines scope, but it says nothing about row granularity, date-range filtering behavior, pagination, or managed-account requirements. It is not misleading, but it is thin.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler or repetition. It is appropriately concise, though a second sentence providing sibling differentiation or usage context would have made it more useful without hurting structure.

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

Completeness3/5

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

Given the 100% schema coverage and presence of an output schema, the basic call can be constructed reliably. However, with no annotations and twelve sibling tools, the absence of routing guidance and behavioral caveats leaves the description only minimally complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline of 3 applies. The description itself adds no parameter-level meaning beyond the idea of account-wide campaign metrics, but the schema already documents customer_id, date_range, and manager_id clearly.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('performance metrics for all campaigns in an account'), which is specific enough to separate it from sibling tools like get_ad_group_performance or get_keyword_performance. It does not explicitly compare itself to those alternatives, so it stops just short of a 5.

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

Usage Guidelines3/5

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

The campaign-level scope is implied by the wording, so an agent can infer this is for campaign metrics rather than ad group or keyword metrics. However, there is no explicit guidance about when to prefer this over run_gaql or the other reporting siblings, and no exclusions are mentioned.

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

get_conversion_actionsGet Conversion ActionsC

List all conversion actions configured on the account.

ParametersJSON Schema
NameRequiredDescriptionDefault
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It says 'List' which implies a read-only operation, but it doesn't disclose what the output includes, whether it's paginated, if it requires manager_id under managed access, or any rate or size constraints. The schema hints at optional manager_id but the description adds nothing beyond 'list'.

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

Conciseness4/5

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

The description is a single short sentence, front-loading the key verb and resource. No waste, though it could add one clause about scope or usage without losing concision.

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

Completeness2/5

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

Given the tool has an output schema (presumably listing available conversion actions), the return format isn't needed. However, with no annotations and no usage context among many siblings, the description lacks complete context about when to fetch conversion actions, e.g., for referencing conversion actions in other reports or for setup. It's minimal but not wholly inadequate.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no further meaning about how customer_id or manager_id interplay or what happens if manager_id is omitted. Baseline 3 is appropriate since schema handles semantics.

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

Purpose4/5

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

The description states the verb 'List' and the resource 'conversion actions' with scope 'on the account'. This is clear and distinguishes it from performance-focused siblings, though it doesn't explicitly name a difference from a hypothetical other conversion-action tool.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus the many siblings. It only says 'on the account', which implies account-level scope but offers no exclusion or comparison, such as when to use run_gaql for custom queries.

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

get_device_performanceGet Device PerformanceB

Get performance metrics broken down by device type (mobile, desktop, tablet).

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and breakdown, with no mention of read-only nature, authentication requirements, rate limits, or any side effects. For a data retrieval tool, this is a minimal disclosure that leaves the agent without safety context.

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

Conciseness4/5

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

The description is a single sentence with no redundant words. It is appropriately concise and immediately communicates the core purpose. However, it lacks any additional structure or context that could be useful, but the length is acceptable.

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

Completeness3/5

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

Given the tool has three parameters (one required) and an output schema exists, the description covers the basic purpose. It does not explain any prerequisites, limitations, or return format details, but the output schema likely handles that. The main gap is the lack of usage context relative to sibling tools, making the description slightly incomplete for optimal agent decision-making.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds no extra meaning about how parameters relate to the device breakdown. It does not explain that date_range and manager_id affect the metrics. Since the schema handles parameter definitions, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (get), the resource (performance metrics), and the specific breakdown (by device type: mobile, desktop, tablet). This distinguishes it from sibling tools like get_geographic_performance or get_campaign_performance, which focus on different dimensions. The verb and resource are precise and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for device-specific performance analysis but does not explicitly state when to choose this tool over alternatives. There is no mention of when not to use it or reference to sibling tools. The context is clear enough to infer, but explicit guidance is missing.

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

get_geographic_performanceGet Geographic PerformanceC

Get performance metrics broken down by geographic location.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must carry behavioral disclosure. It says 'get' implying a read operation, but it does not explicitly state it is read-only, does not mention any auth requirements, rate limits, or side effects. For a simple data retrieval tool this is minimal but acceptable; however, it adds no behavioral context beyond the obvious.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero fluff. It states the action and the grouping dimension directly, making it efficient and easy to parse. No unnecessary words or details are present.

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

Completeness2/5

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

Despite having a full schema and an output schema (as indicated by context), the description is incomplete for guiding an agent on when to use it. It lacks usage context (e.g., when to prefer this over other performance tools), behavioral caveats, and any details about what 'geographic location' means (country, city, etc.). The minimal description does not fully equip an agent to make an informed selection among many siblings.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (date_range, manager_id, customer_id) having its own description. The tool description adds no additional meaning to the parameters, so the schema does the heavy lifting. Baseline 3 is appropriate because the description provides no extra parameter context.

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

Purpose4/5

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

The description clearly states the tool retrieves performance metrics broken down by geographic location, using a specific verb ('get') and resource ('performance metrics') with a clear modifier ('geographic location'). It distinguishes from siblings like get_device_performance and get_campaign_performance by the geographic dimension, though it does not explicitly name an alternative.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the many sibling performance tools. The description only states what it does, without mentioning when to choose it (e.g., 'use this when you need a location breakdown') or when not to use it. No alternatives are referenced.

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

get_keyword_performanceGet Keyword PerformanceB

Get performance metrics for keywords including quality scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of keywords to return (default: 500, max: 1000)
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
campaign_idNoOptional — filter results to a specific campaign ID
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, but it only says 'Get performance metrics'—a read-only behavior already obvious from the name. It omits pagination behavior, default limits, date-range semantics, data freshness, or any managed-account access nuances.

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

Conciseness4/5

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

The description is a single nine-word sentence with zero waste, front-loading the verb and resource. It earns its place but lacks the scoping structure that would make it a 5.

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

Completeness3/5

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

The presence of a full output schema and 100% parameter coverage reduces the description's burden, but it still offers no guidance on defaults, when to choose this over siblings, or access requirements. It is viable for invocation after reading the schema, but not comprehensive for confident tool selection.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3; all parameter descriptions are already in the schema. The description adds nothing about the parameters themselves, and its mention of 'quality scores' refers to output metrics, not input semantics.

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

Purpose5/5

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

The description states a specific verb ('Get'), a clearly defined resource ('performance metrics for keywords'), and a distinguishing detail ('including quality scores'). This makes it easy to separate from sibling tools like get_campaign_performance or get_ad_performance.

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

Usage Guidelines2/5

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

No explicit guidance is given on when to use this tool versus alternatives like run_gaql or other performance reports. The only usage signal is the resource name 'keywords,' which is implicit rather than stated.

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

get_search_terms_reportGet Search Terms ReportA

Get the search terms report — actual searches that triggered your ads.

Useful for finding new keyword opportunities and negative keyword candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of search terms to return (default: 100, max: 500)
date_rangeNoDate range for metrics (default: LAST_30_DAYS)LAST_30_DAYS
manager_idNoManager ID if access type is 'managed'
campaign_idNoOptional — filter to a specific campaign ID
customer_idYesThe Google Ads customer ID (10 digits, no dashes)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It only says 'Get' and 'actual searches that triggered your ads,' which implies a read operation but never states that it is read-only, what permissions are needed, or any limitations or rate-limit behavior. Therefore, the safety profile remains underspecified.

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

Conciseness5/5

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

Two short sentences with no filler; the first states the action and object, and the second adds purpose. Every phrase earns its place.

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

Completeness4/5

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

Given a fully described input schema and an output schema, the description is largely sufficient for selecting and invoking the tool. The only notable gap is behavioral transparency, already scored separately; no additional invocation context appears missing.

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

Parameters3/5

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

All five parameters are documented in the input schema with 100% coverage, so the description does not need to re-explain them. It adds no parameter-level detail of its own, which matches the baseline for high schema coverage.

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

Purpose5/5

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

The description opens with the imperative 'Get the search terms report' and clarifies the resource with 'actual searches that triggered your ads,' which is specific enough to distinguish it from sibling performance and keyword-planner tools. This is not a tautology and names a concrete report type.

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

Usage Guidelines4/5

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

The second sentence states two concrete use cases: 'finding new keyword opportunities and negative keyword candidates.' This gives clear context for when the report is valuable, but it does not explicitly name alternatives or say when not to use it, so it stops short of a 5.

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

list_accountsList AccountsA

List all accessible accounts including nested sub-accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds the detail that nested sub-accounts are included, which is helpful, but it does not mention pagination, account limits, or permission requirements. These omissions leave critical operational context unknown to the agent.

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

Conciseness5/5

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

The description is a single, direct sentence that front-loads the primary action ('List all accessible accounts') and then adds a clarifying detail about nested sub-accounts. There is no wasted wording, and the structure is efficient and easy to scan.

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

Completeness4/5

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

With no parameters and an output schema available, the description covers the essential information: it enumerates accessible accounts and notes nested sub-accounts. It does not address any limitations or edge cases, but for a simple listing tool, the description is largely sufficient. Minor gaps exist regarding potential auth or filtering, but these are not critical for a zero-parameter call.

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

Parameters4/5

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

The tool has no parameters, so the schema fully covers the input structure. The description adds no parameter-specific information, which is appropriate given there are none. The baseline of 4 applies because there is nothing for the description to clarify.

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

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'all accessible accounts', adding specificity by including nested sub-accounts. This distinguishes it from the sibling performance and report tools, which focus on metrics rather than account enumeration. An agent can immediately grasp the tool's core function.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like run_gaql, which could also retrieve accounts via queries. The description does not mention when this simple listing is preferred or when a custom query would be more appropriate. The agent is left to infer the intended use case.

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

run_gaqlRun GaqlC

Execute GAQL using the non-streaming search endpoint for consistent JSON parsing.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
manager_idNo
customer_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

The description adds a useful behavioral detail: it uses the non-streaming search endpoint for consistent JSON parsing. However, with no annotations, it doesn't disclose safety, permissions, errors, pagination, or limits, though the output schema covers return shape.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no redundant wording. It is efficient, though slightly too terse to compensate for the missing parameter and usage context.

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

Completeness2/5

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

For a 3-parameter tool with no annotations and no schema descriptions, one sentence is not enough. The output schema helps with return values, but the agent is left guessing about parameter semantics and when to choose this tool over siblings.

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

Parameters1/5

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

Schema description coverage is 0%, so the description needed to explain the roles of query, customer_id, and manager_id. It mentions none of them; 'GAQL' only faintly implies that query holds a GAQL string.

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

Purpose4/5

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

The description clearly states the action and resource: 'Execute GAQL' via a specific endpoint. It is easy to tell this is a raw GAQL query executor, though it doesn't explicitly differentiate itself from the sibling reporting tools.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus the 12 sibling report tools. The agent isn't told that this is for ad-hoc GAQL queries or that specific tools should be preferred for standard reports.

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

run_keyword_plannerRun Keyword PlannerB

Generate keyword ideas using Google Ads KeywordPlanIdeaService.

This tool allows you to generate keyword ideas based on seed keywords or a page URL. You can specify targeting parameters such as language, location, and network to refine your keyword suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_yearNoOptional end year for historical data (defaults to current year)
keywordsYesA list of seed keywords to generate ideas from
page_urlNoOptional page URL related to your business to generate ideas from
end_monthNoOptional end month for historical data (defaults to current month)
manager_idNoManager ID if access type is 'managed'
start_yearNoOptional start year for historical data (defaults to previous year)
customer_idYesThe Google Ads customer ID (10 digits, no dashes)
start_monthNoOptional start month for historical data (defaults to JANUARY)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavioral context. It only states the core function and does not mention authentication, manager/access requirements, external service dependencies, latency, or any caveats. It also references 'language, location, and network' parameters that do not exist in the schema, which is misleading.

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

Conciseness3/5

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

The description is short and front-loaded with the main action, but the final sentence about targeting parameters does not earn its place because those parameters are not present in the input schema. This inaccuracy makes the overall structure less reliable.

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

Completeness2/5

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

With 8 parameters, no annotations, and only a generic description, important context is missing: prerequisites like customer ID format or manager access, relationship between keywords and page_url, date-range semantics, and any authentication notes. The output schema helps, but the description is not complete enough for an agent to invoke this tool confidently in unusual cases.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds only high-level context about seed keywords and page URL, which the schema already documents. No additional parameter meaning is provided beyond what the schema states.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Generate keyword ideas using Google Ads KeywordPlanIdeaService.' It also names the two input modes (seed keywords or page URL), which distinguishes it clearly from the sibling reporting and GAQL tools.

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

Usage Guidelines4/5

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

The description makes the use case clear: generate keyword ideas, optionally refined by targeting settings. It does not explicitly name alternatives or exclusions, but among the siblings this is the only keyword-idea-generation tool, so an agent can infer when to use it. The misleading mention of language/location/network parameters slightly weakens the guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedget_ad_group_performance
    • First observedget_ad_performance
    • First observedget_asset_performance
    • First observedget_budget_report
    • First observedget_campaign_performance
    • First observedget_conversion_actions
    • First observedget_device_performance
    • First observedget_geographic_performance
    • First observedget_keyword_performance
    • First observedget_search_terms_report
    • First observedlist_accounts
    • First observedrun_gaql
    • First observedrun_keyword_planner

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a clearly distinct resource or dimension: GAQL queries, account listing, conversion actions, keyword planning, and separate performance reports for geography, device, campaign, ad group, ad, keyword, asset, search terms, and budget. Overlap between performance tools is minimal and easily distinguished by their target entity.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: run_gaql, list_accounts, get_geographic_performance, get_budget_report, etc. The naming style is uniform and predictable across the entire set.

Tool Count5/5

With 13 tools, the server is well-scoped for a Google Ads analytics and keyword research surface. Every tool covers a meaningful function, and the count is within the ideal range for a domain-specific MCP server.

Completeness3/5

The server provides thorough read-only coverage: reporting across all key entities, account listing, conversion actions, and keyword planning. However, it lacks any mutation tools for campaign management (create, update, pause, delete), which is a notable gap for a server named 'google-ads-mcp' if full lifecycle control is expected.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    22
    79 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Google Ads campaign reporting and management via Claude, enabling GAQL queries, performance metrics, and campaign modifications.
    18 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Multi-account Google Ads MCP server that allows connecting any number of Google Ads accounts and querying campaign performance, keywords, search terms, and account analytics by name in the same session.
    10
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A private, read-only MCP server that enables retrieval and analysis of Google Ads reporting data (campaigns, ad groups, keywords, search terms, cost, conversions) from authorized accounts through a locally operated server.
    -