google-ads-mcp
This server lets you connect Claude (or any MCP client) to Google Ads to query accounts, analyze performance, and research keywords in natural language.
Account management: list all accessible accounts, including nested MCC sub-accounts, and run custom GAQL queries against any account
Campaign & ad analytics: get performance metrics for campaigns, ad groups, and individual ads
Keyword insights: view keyword performance, quality scores, and impression share
Search terms report: see actual searches that triggered ads to find negatives and opportunities
Budget reporting: review campaign budgets and month-to-date spend
Geographic & device breakdowns: analyze performance by country/location type and by mobile, desktop, tablet
Conversion tracking: list configured conversion actions
Asset performance: compare responsive search ad headlines and descriptions by impressions and clicks
Keyword research: generate keyword ideas with search volume, competition, and bid estimates
Provides tools for querying and managing Google Ads accounts, including campaign and ad performance, keyword analysis and ideas, search terms, budgets, conversions, and custom GAQL queries.
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_TOKENis set, it is still sent as theDeveloper-Tokenheader.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:
Claude discovers our metadata at
/.well-known/oauth-protected-resourceand/.well-known/oauth-authorization-server.Claude registers itself via Dynamic Client Registration (
POST /oauth/register).Claude redirects the user to
/oauth/authorize. We delegate identification to Google OAuth.After Google login, we issue our own opaque bearer token to Claude — Google credentials never leave the server.
On each
/mcprequest 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_performanceno longer returns Google's BEST/GOOD/LOW label, because the Ads API removedad_group_ad_asset_view.performance_labelin 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.
Sign in to Google Ads.
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).
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_idwhen querying sub-accounts.
Legacy setups: if you still have a developer token and want to keep sending it, set
GOOGLE_ADS_DEVELOPER_TOKENand it will be added as theDeveloper-Tokenheader. 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
Go to the Google Cloud Console.
Create or select a project and note the Project ID.
APIs & Services → Library, search for Google Ads API, click Enable.
2b. Create OAuth 2.0 credentials
APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID.
Application type: Web application.
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)
Click Create, then Download JSON → save as
client_secret.jsonin the project root (gitignored). You can also copy the Client ID / Client Secret straight into env vars.
2c. OAuth consent screen
APIs & Services → OAuth consent screen.
Choose Internal for a Google Workspace org (recommended for teams), or External for personal/individual use.
Add the scope:
https://www.googleapis.com/auth/adwords.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.
In Cloud Console, Firestore → Create database → Native mode, pick a region.
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 valuesStep 4 — Mode A: Local STDIO
python setup_local_auth.pyA 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_SECRETas 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/callbackConnect from Claude
Claude Teams (org owner adds it once for everyone):
Settings → Connectors → Add custom connector
URL:
https://YOUR-SERVICE-URL.run.app/mcpEach 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 |
| No | Deprecated. Leave unset — access level now comes from the Cloud project owning the OAuth client. If set, it is sent as the |
| Mode B | Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to. |
| Mode B | GCP project hosting Firestore. |
| Mode B†| Google OAuth client ID. |
| Mode B†| Google OAuth client secret. |
| Mode B†| Alternative to the two above: path to |
| No | Override the Google callback URL. Defaults to |
| No | Comma-separated email domain allowlist (e.g. |
| Mode A | Your email — set in Claude Desktop config. |
| No | HTTP port (default |
| No | Python log level (default |
†Set either GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET or OAUTH_CONFIG_PATH.
Available Tools
Tool | Description |
| List all accessible Google Ads accounts including nested MCC sub-accounts |
| Execute a raw GAQL query against any account |
| Generate keyword ideas with search volume, competition, and bid estimates |
| Impressions, clicks, cost, CTR, CPC, and conversions by campaign |
| Performance metrics broken down by ad group |
| Performance metrics for individual ads/creatives |
| Keyword metrics including quality score and search impression share |
| Actual searches that triggered your ads — find negatives and opportunities |
| Campaign budgets and month-to-date spend |
| Performance breakdown by country and location type |
| Performance split by device: mobile, desktop, tablet |
| List all conversion actions configured on the account |
| 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 |
| RFC 9728 | Advertises the canonical resource URI and authorization server. |
| RFC 8414 | Authorization server metadata. |
| RFC 7591 | Dynamic Client Registration. |
| OAuth 2.1 | Starts the auth code flow with PKCE; redirects to Google. |
| — | Google redirects here; we mint our authorization code and bounce back to the MCP client. |
| 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.jsonsetup_local_auth.py— one-shot local auth scriptGoogle 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 toolsget_ad_group_performanceGet Ad Group PerformanceB
Get performance metrics broken down by ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date range for metrics (default: LAST_30_DAYS). See get_campaign_performance for valid values. | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| campaign_id | No | Optional — filter results to a specific campaign ID | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| campaign_id | No | Optional — filter results to a specific campaign ID | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| manager_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date 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_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| manager_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of keywords to return (default: 500, max: 1000) | |
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| campaign_id | No | Optional — filter results to a specific campaign ID | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of search terms to return (default: 100, max: 500) | |
| date_range | No | Date range for metrics (default: LAST_30_DAYS) | LAST_30_DAYS |
| manager_id | No | Manager ID if access type is 'managed' | |
| campaign_id | No | Optional — filter to a specific campaign ID | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| manager_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_year | No | Optional end year for historical data (defaults to current year) | |
| keywords | Yes | A list of seed keywords to generate ideas from | |
| page_url | No | Optional page URL related to your business to generate ideas from | |
| end_month | No | Optional end month for historical data (defaults to current month) | |
| manager_id | No | Manager ID if access type is 'managed' | |
| start_year | No | Optional start year for historical data (defaults to previous year) | |
| customer_id | Yes | The Google Ads customer ID (10 digits, no dashes) | |
| start_month | No | Optional start month for historical data (defaults to JANUARY) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
13 tool updates
v0.1.0- First observed
get_ad_group_performance - First observed
get_ad_performance - First observed
get_asset_performance - First observed
get_budget_report - First observed
get_campaign_performance - First observed
get_conversion_actions - First observed
get_device_performance - First observed
get_geographic_performance - First observed
get_keyword_performance - First observed
get_search_terms_report - First observed
list_accounts - First observed
run_gaql - First observed
run_keyword_planner
TDQS
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Google Ads MCP server: 16 tools for reporting, campaigns, keywords, assets. Writes preview first.
Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
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.2279 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Ads campaign reporting and management via Claude, enabling GAQL queries, performance metrics, and campaign modifications.18 npmMIT
- AlicenseBqualityCmaintenanceMulti-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.10MIT
- -licenseNot gradedqualityNot gradedmaintenanceA 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.-