Skip to main content
Glama
MaxGhenis

Google Ads MCP Server

by MaxGhenis

Google Ads MCP Server

A Model Context Protocol (MCP) server for Google Ads with read AND write capabilities. Unlike Google's official read-only MCP server, this one lets you actually manage your campaigns.

Features

Read operations

  • list_accounts - List all accessible Google Ads accounts

  • execute_query - Run GAQL queries for campaigns, ad groups, keywords, metrics, etc.

Write operations

  • create_campaign - Create new campaigns (paused by default for safety)

  • create_ad_group - Create ad groups in a campaign

  • add_keywords - Add keywords to an ad group

  • add_negative_keywords - Add negative keywords (campaign or ad group level)

  • create_responsive_search_ad - Create RSAs with headlines/descriptions

  • pause_campaign / enable_campaign - Toggle campaign status

  • pause_ad_group / enable_ad_group - Toggle ad group status

  • update_ad_group_bid - Update CPC bids

Safety features

  • Dry run mode - All write operations support dry_run=True to validate without executing

  • Safe defaults - New campaigns are created PAUSED

  • Clear feedback - All operations return success status and error messages

Related MCP server: Google Ads MCP Server

Installation

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install the package
uv pip install google-ads-mcp

# Or install from source
git clone https://github.com/maxghenis/google-ads-mcp-rw
cd google-ads-mcp
uv pip install -e .

Using pip

pip install google-ads-mcp

Configuration

1. Create Google Ads API credentials

  1. Go to the Google Ads API Center

  2. Create a developer token (or use an existing one)

  3. Set up OAuth2 credentials in Google Cloud Console

  4. Generate a refresh token

2. Create google-ads.yaml

Create a google-ads.yaml file with your credentials:

developer_token: YOUR_DEVELOPER_TOKEN
client_id: YOUR_CLIENT_ID.apps.googleusercontent.com
client_secret: YOUR_CLIENT_SECRET
refresh_token: YOUR_REFRESH_TOKEN
# MCC account ID if using multiple accounts (digits only, no dashes)
login_customer_id: "1234567890"
use_proto_plus: true

See google-ads.yaml.example for a template.

3. Set the config path (optional)

By default, the server looks for google-ads.yaml in the current directory. You can specify a custom location:

export GOOGLE_ADS_CONFIG_PATH=/path/to/your/google-ads.yaml

Usage with Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "google-ads": {
      "command": "uv",
      "args": ["run", "--with", "google-ads-mcp", "google-ads-mcp"],
      "env": {
        "GOOGLE_ADS_CONFIG_PATH": "/path/to/your/google-ads.yaml"
      }
    }
  }
}

Or if installed globally:

{
  "mcpServers": {
    "google-ads": {
      "command": "google-ads-mcp",
      "env": {
        "GOOGLE_ADS_CONFIG_PATH": "/path/to/your/google-ads.yaml"
      }
    }
  }
}

Example workflows

List your accounts

Use list_accounts to show me all my Google Ads accounts

Query campaign performance

Run this GAQL query for customer ID 1234567890:
SELECT campaign.name, metrics.clicks, metrics.impressions, metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
ORDER BY metrics.clicks DESC

Create a new campaign with ad group, keywords, and ad

Create a new search campaign called "Q1 Promo" with a $20/day budget,
then add an ad group "Product Keywords" with keywords like "buy widgets",
"widget sale", "best widgets", and create a responsive search ad with
these headlines: "Buy Widgets Now", "50% Off Widgets", "Free Shipping"
and descriptions: "Shop our huge selection of widgets. Free shipping on orders over $50.",
"Premium quality widgets at the best prices. Order today!"
Final URL: https://example.com/widgets

Add negative keywords

Add these negative keywords to campaign 19638300165:
- "free"
- "cheap"
- "diy"
- "tutorial"

Pause underperforming ad groups

First, show me all ad groups in campaign 19638300165 with their metrics.
Then pause any ad groups with CTR below 1%.

API reference

Budget and bid values

All monetary values use micros (1/1,000,000 of the currency unit):

  • 1,000,000 micros = $1.00

  • 2,500,000 micros = $2.50

  • 10,000,000 micros = $10.00

Match types

Keywords support three match types:

  • BROAD - Shows for related searches (default)

  • PHRASE - Shows when query contains the phrase

  • EXACT - Shows only for exact query match

Customer IDs

Customer IDs should be digits only, no dashes:

  • Correct: 1234567890

  • Incorrect: 123-456-7890

Development

# Clone the repo
git clone https://github.com/maxghenis/google-ads-mcp-rw
cd google-ads-mcp

# Install dev dependencies
uv pip install -e ".[dev]"

# Run tests
pytest

# Format code
black src tests
ruff check --fix src tests

License

MIT License - see LICENSE for details.

Contributing

Contributions welcome! Please open an issue or PR.

Available Tools

12 tools
add_keywordsA

Add keywords to an ad group.

Args: ad_group_id: Ad group ID to add keywords to keywords: List of keyword texts to add customer_id: Target customer ID (optional if set in config) match_type: Keyword match type - BROAD, PHRASE, or EXACT. BROAD matches related searches, PHRASE matches the phrase with words before/after, EXACT matches the exact query only. dry_run: If True, validate but don't execute

Returns: Result with success status and count of keywords added

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes
keywordsYes
customer_idNo
match_typeNoBROAD
dry_runNo

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?

No annotations are provided, so the description must fully disclose behavior. It mentions the dry_run parameter for validation but does not discuss side effects, authorization requirements, rate limits, or what happens on success/failure beyond the return value.

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 uses a clear Args/Returns structure but includes parameter descriptions that could be redundant given the schema. It could be slightly more concise without losing clarity.

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

Completeness4/5

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

For a tool with 5 parameters and an output schema, the description covers all parameters and hints at the return value. However, the output schema is not detailed in the description, but the return mentions success status and count. Overall sufficient for the tool's complexity.

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?

Schema description coverage is 0%, so the description compensates by explaining each parameter's purpose, including match_type values and dry_run behavior. However, it could be more detailed about the format of keywords (e.g., case sensitivity) and customer_id optionality.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Add keywords to an ad group.' The parameters further clarify the action, and the sibling tools include 'add_negative_keywords', which distinguishes this tool as adding positive keywords.

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 context (adding keywords to an ad group) but does not explicitly state when to use this tool versus alternatives like 'add_negative_keywords' or other ad group operations. No guidance on prerequisites or exclusions.

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

add_negative_keywordsA

Add negative keywords to block irrelevant searches.

Negative keywords prevent your ads from showing for certain searches. Add them at campaign level to affect all ad groups, or at ad group level for more targeted exclusions.

Args: keywords: List of negative keyword texts customer_id: Target customer ID (optional if set in config) campaign_id: Campaign ID for campaign-level negatives ad_group_id: Ad group ID for ad group-level negatives match_type: Match type - BROAD, PHRASE, or EXACT dry_run: If True, validate but don't execute

Note: Provide EITHER campaign_id OR ad_group_id, not both.

Returns: Result with success status and count of negatives added

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYes
customer_idNo
campaign_idNo
ad_group_idNo
match_typeNoBROAD
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses key behavioral traits: level specificity (campaign vs ad group), mutual exclusivity of IDs, and the dry_run validation feature. It also mentions return values. Missing details like destructive potential or permissions, but adequate for a low-risk mutation tool.

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

Conciseness5/5

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

The description is concisely front-loaded with purpose, followed by structured Args, Note, and Returns sections. Every sentence adds value without redundancy. Efficiently communicates all necessary information.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, mutual exclusivity constraint) and the presence of an output schema, the description is complete. It explains parameters, constraints, behavior, and expected return, leaving no significant gaps for the agent to operate correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must explain parameters. It does so comprehensively: keywords (list), customer_id (optional), campaign_id and ad_group_id with mutual exclusivity note, match_type with options, and dry_run behavior. Adds significant meaning beyond the schema's titles and defaults.

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

Purpose5/5

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

The description clearly states 'Add negative keywords to block irrelevant searches,' providing a specific verb and resource. It distinguishes itself from sibling tool 'add_keywords' by specifying 'negative' keywords, making the purpose unambiguous.

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 explains when to use the tool (to block irrelevant searches) and provides clear context on choosing between campaign-level and ad group-level exclusions. However, it does not explicitly mention when not to use it or compare with alternatives like 'add_keywords', but the context is sufficient for correct usage.

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

create_ad_groupA

Create an ad group in a campaign.

Args: campaign_id: Campaign ID to add the ad group to name: Ad group name customer_id: Target customer ID (optional if set in config) cpc_bid_micros: Default CPC bid in micros (1,000,000 = $1.00). Default is $2.00. dry_run: If True, validate but don't execute

Returns: Result with success status, resource_name, and ad_group_id

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYes
nameYes
customer_idNo
cpc_bid_microsNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description bears full responsibility for behavior. It explains parameters, defaults, and the dry_run option for validation. However, it does not mention side effects, permissions, or error handling, which would improve transparency.

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

Conciseness5/5

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

The description is concise and well-structured, with a one-line summary, a bulleted Args list, and a Returns section. Every sentence provides necessary information without 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?

The description covers all 5 parameters and states the return value. It could mention prerequisites like campaign existence, but for a create operation with 2 required fields, it is sufficiently complete.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description compensates fully. It explains each parameter, including units for cpc_bid_micros (e.g., '1,000,000 = $1.00') and default values, adding significant meaning beyond the schema's bare types and titles.

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 'Create an ad group in a campaign', specifying the action (create) and the resource (ad group). This distinguishes it from sibling tools like create_campaign or create_responsive_search_ad, which target different entities.

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 explains what the tool does but does not provide explicit guidance on when to use it versus alternatives or when not to use it. The context of ad group creation is implied but not elaborated.

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

create_campaignA

Create a new Google Ads campaign.

Creates a new campaign with the specified settings. For safety, campaigns are created in PAUSED status by default - use enable_campaign to start them.

Args: name: Campaign name customer_id: Target customer ID (optional if set in config) budget_amount_micros: Daily budget in micros (1,000,000 = $1.00). Default is $10/day. advertising_channel_type: Channel type - SEARCH, DISPLAY, SHOPPING, etc. dry_run: If True, validate but don't execute the operation

Returns: Result with success status, resource_name, and campaign_id

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
customer_idNo
budget_amount_microsNo
advertising_channel_typeNoSEARCH
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Without annotations, the description fully discloses default paused status, dry_run behavior, default budget, and return structure. No contradictory or hidden destructive traits are mentioned.

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?

Well-organized with a succinct intro, bulleted args, and return section. Efficient but could be slightly more compact without losing clarity.

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

Completeness5/5

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

Fully covers 5 parameters, safety behavior, dry_run, and return values given no annotations and no enum constraints. Output schema handles return details, but description adds sufficient context.

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

Parameters5/5

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

With 0% schema coverage, description compensates by explaining each parameter in detail, including examples for budget_amount_micros and advertising_channel_type, and defaults beyond the schema.

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

Purpose5/5

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

The description clearly states 'Create a new Google Ads campaign' and elaborates on creating campaigns with specific settings. It distinguishes from sibling tools like enable_campaign by noting campaigns start in PAUSED status.

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?

Explicitly advises using enable_campaign after creation, providing a clear workflow. Mentions dry_run for validation but lacks explicit when-not-to-use guidance for other scenarios.

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

create_responsive_search_adA

Create a responsive search ad (RSA).

RSAs dynamically combine headlines and descriptions to show the best performing combinations. Google recommends providing many variations for optimal performance.

Args: ad_group_id: Ad group ID to add the ad to headlines: List of headline variations (3-15 required). Each headline max 30 characters. descriptions: List of description variations (2-4 required). Each description max 90 characters. final_url: Landing page URL where users go after clicking customer_id: Target customer ID (optional if set in config) path1: Display URL path 1 (max 15 chars, e.g., "products") path2: Display URL path 2 (max 15 chars, e.g., "shoes") dry_run: If True, validate but don't execute

Returns: Result with success status, resource_name, and ad_id

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes
headlinesYes
descriptionsYes
final_urlYes
customer_idNo
path1No
path2No
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Explains RSA dynamic combination behavior and dry_run validation. No annotations exist, so description covers key behavioral traits like non-execution on dry run. Lacks notes on idempotency or error conditions, but adequate.

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?

Well-structured with Args/Returns sections, front-loaded purpose. Slightly long but every sentence adds value. Could be more terse without losing clarity.

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?

Covers all parameters, return value, and dry_run behavior. Lacks mention of prerequisites (e.g., ad group existence) or error handling, but given output schema and no annotations, it is largely complete.

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

Parameters5/5

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

Schema coverage is 0%, so description provides all parameter semantics: ad_group_id, headlines with count/char limit, descriptions with count/char limit, final_url, optional customer_id, path1/path2 max chars, and dry_run meaning. Adds significant value beyond schema.

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

Purpose5/5

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

Clearly states 'Create a responsive search ad (RSA)' and explains what RSA is. Verb+resource is specific and distinct from siblings, which lack other ad creation 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?

Provides required counts and character limits for headlines and descriptions, plus Google's recommendation for variations. Implicitly guides usage but does not explicitly state when to use vs other ad types (not needed given siblings).

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

enable_ad_groupB

Enable an ad group.

Args: ad_group_id: Ad group ID to enable customer_id: Target customer ID (optional if set in config) dry_run: If True, validate but don't execute

Returns: Result with success status

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes
customer_idNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description briefly mentions the function and the dry_run parameter behavior, but does not disclose side effects (e.g., impact on other entities), permissions needed, or behavior when already enabled.

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 concise and well-structured with a clear header and docstring-style parameter list. No unnecessary information, though it could be slightly more compact.

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 an output schema exists, the description includes a return note, but lacks context on permissions, idempotency, or behavior in edge cases. Adequate but not comprehensive.

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?

Although schema has 0% coverage, the description explains each parameter's purpose concisely (e.g., ad_group_id as ID to enable, customer_id as optional, dry_run for validation). This adds value beyond the type-only schema.

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

Purpose4/5

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

The description clearly states the action (enable) and resource (ad group). It distinguishes from siblings like pause_ad_group by the action verb, but does not explicitly differentiate from create_ad_group or others.

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 on when to use this tool versus alternatives like pause_ad_group or create_ad_group. No mention of prerequisites or context.

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

enable_campaignA

Enable a campaign.

Enabling starts ad serving. Make sure budget, targeting, and ads are properly configured before enabling.

Args: campaign_id: Campaign ID to enable customer_id: Target customer ID (optional if set in config) dry_run: If True, validate but don't execute

Returns: Result with success status

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYes
customer_idNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It mentions that enabling starts ad serving and explains the dry_run parameter's validation behavior. However, it does not disclose whether the tool is idempotent (e.g., enabling already enabled campaign) or any authorization requirements, leaving some gaps.

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

Conciseness5/5

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

The description is concise: a clear purpose statement, a brief usage note, and structured Args/Returns sections. Every sentence adds value with no redundancy or fluff.

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

Completeness4/5

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

The description covers the tool's purpose, prerequisites, and parameter behaviors. Since an output schema exists, it's acceptable not to detail the return structure. However, it lacks mention of edge cases like enabling an already enabled campaign, which would be beneficial.

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

Parameters4/5

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

With 0% schema description coverage, the description adds crucial meaning: explains campaign_id as the ID to enable, customer_id as optional if set in config, and dry_run as a validation-only mode. This goes beyond the bare schema types and defaults.

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

Purpose5/5

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

The description explicitly states 'Enable a campaign' and clarifies that enabling starts ad serving. This clearly identifies the tool's action and resource, distinguishing it from siblings like pause_campaign or create_campaign.

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

Usage Guidelines4/5

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

The description provides essential context by advising that budget, targeting, and ads should be configured before enabling. It does not explicitly mention when not to use the tool or list alternatives, but the context is sufficient for correct usage.

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

execute_queryA

Execute a Google Ads Query Language (GAQL) query.

Use this for any read operation - campaigns, ad groups, keywords, ads, metrics, etc.

Common queries:

  • Campaigns: SELECT campaign.id, campaign.name FROM campaign

  • Ad groups: SELECT ad_group.id, ad_group.name FROM ad_group

  • Keywords: SELECT ad_group_criterion.keyword.text FROM ad_group_criterion

  • Metrics: SELECT campaign.name, metrics.clicks FROM campaign

Args: query: The GAQL query to execute customer_id: Target customer ID (optional if set in config). Use digits only, no dashes.

Returns: List of result rows as dictionaries

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
customer_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, description carries burden. It correctly labels as read operation, but does not cover potential errors, rate limits, or pagination behavior. Returns format is briefly explained.

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?

Description is concise with useful examples. Could omit some redundancy, but overall well-structured and front-loaded with purpose.

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 no annotations and presence of output schema, description adequately covers basic usage. Lacks detail on error handling and result limits, but sufficient for typical agent invocation.

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?

Schema coverage is 0%, so description compensates by explaining query as GAQL string with examples, and customer_id as optional digits-only. Provides meaningful context beyond schema.

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

Purpose5/5

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

The description clearly states the tool executes GAQL queries for read operations, provides common query examples, and distinguishes from sibling tools which are all write-oriented.

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?

Explicitly says 'use for any read operation' and implies not for mutations via sibling tool list. Provides examples and optional parameter explanation, but lacks explicit when-not-to-use guidance.

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

list_accountsA

List all Google Ads accounts accessible by this credential.

Returns a list of accounts with their customer IDs that you can use for subsequent operations.

Returns: List of account dictionaries with customer_id and resource_name

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, but description fully explains behavior: lists accounts, returns specific fields, no side effects. Sufficient for a read-only list operation.

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

Conciseness5/5

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

Three sentences, front-loaded purpose, no extraneous words. Efficient and clear.

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

Completeness5/5

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

Zero parameters, simple list operation. Description covers purpose, output fields, and return type. Output schema exists, so return value details are not required.

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?

No parameters exist, so baseline 4 applies. Description does not need to add parameter info.

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?

Clearly states it lists Google Ads accounts accessible by the credential, and specifies output fields (customer_id, resource_name). Distinguishes from siblings which are mutating or query tools for campaigns/ads.

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?

No explicit guidance on when to use vs alternatives. Implicitly suggests usage before other operations to obtain customer IDs, but lacks when-not-to-use or alternative references.

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

pause_ad_groupB

Pause an ad group.

Args: ad_group_id: Ad group ID to pause customer_id: Target customer ID (optional if set in config) dry_run: If True, validate but don't execute

Returns: Result with success status

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes
customer_idNo
dry_runNo

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 must disclose behavioral traits. It mentions 'dry_run' for validation without execution and returns a success status. However, it does not describe side effects, required permissions, or what happens to the ad group if paused (e.g., active campaigns, lapsing).

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?

Extremely concise and well-structured. The purpose is stated in one line, followed by clear parameter descriptions in Args format, and a Returns line. No unnecessary words.

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

Completeness3/5

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

For a simple mutation tool with 3 parameters and an output schema, the description covers purpose, parameters, and return value. However, it lacks usage guidelines and behavioral context. With no annotations, it is minimally viable but not fully complete.

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?

Schema description coverage is 0%, so the description must compensate. It explains each parameter: ad_group_id (required), customer_id (optional with config hint), and dry_run (validation mode). This adds meaningful context beyond the schema definition.

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 verb and resource ('Pause an ad group'). It distinguishes from sibling tools like 'enable_ad_group' and 'create_ad_group'. However, it does not differentiate from 'pause_campaign' or clarify any special scope.

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 on when to use this tool versus alternatives like 'enable_ad_group' or 'pause_campaign'. No prerequisites or context for when pausing is appropriate.

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

pause_campaignA

Pause a campaign.

Pausing stops ad serving but preserves all settings and history.

Args: campaign_id: Campaign ID to pause customer_id: Target customer ID (optional if set in config) dry_run: If True, validate but don't execute

Returns: Result with success status

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYes
customer_idNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It discloses that pausing stops ad serving but preserves settings and history, and explains the dry_run parameter's validation-only behavior. However, it does not mention reversibility or error states.

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

Conciseness5/5

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

The description is concise: a single sentence explaining the action, followed by a structured Args list. No unnecessary words, and the key information is front-loaded.

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

Completeness4/5

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

Given the simplicity of the tool (3 parameters, no nested objects), the description covers the main effect, parameter meanings, and return value. It could mention idempotency or behavior when already paused, but overall it is sufficiently complete.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description must compensate. The Args section adds clear semantics for all three parameters: campaign_id (what to pause), customer_id (optional, from config), and dry_run (validate vs execute). This fully compensates for the missing schema descriptions.

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 'Pause a campaign' and explains that it stops ad serving while preserving settings and history. It distinguishes from sibling tools like 'pause_ad_group' and 'enable_campaign' by specifying the resource (campaign) and action (pause).

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: use this tool to pause a campaign. However, it does not explicitly state when to use it versus alternatives like 'enable_campaign' or 'pause_ad_group', nor does it provide exclusions or prerequisites.

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

update_ad_group_bidA

Update the CPC bid for an ad group.

Args: ad_group_id: Ad group ID to update cpc_bid_micros: New CPC bid in micros (1,000,000 = $1.00) customer_id: Target customer ID (optional if set in config) dry_run: If True, validate but don't execute

Returns: Result with success status

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYes
cpc_bid_microsYes
customer_idNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/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 for behavioral context. It reveals that `dry_run` validates without executing, which is a key behavioral trait. However, it does not mention that updates are destructive, require permissions, or have rate limits. The return type is only vaguely described as 'Result with success status'.

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 efficient with a docstring format that front-loads the purpose. Every sentence adds value, though the 'Args' and 'Returns' sections could be slightly more compact. No extraneous information.

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

Completeness4/5

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

Given the existence of an output schema (which complements the return description) and the thorough parameter explanations, the tool is adequately documented for a simple update operation. It covers the essential context without missing critical information.

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

Parameters5/5

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

Schema coverage is 0%, so the description must explain each parameter. It does so thoroughly: `ad_group_id` is the target ID, `cpc_bid_micros` includes units (micros with an example), `customer_id` notes optionality, and `dry_run` explains its validation behavior.

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 'Update the CPC bid for an ad group.' with a specific verb and resource. This distinguishes it from sibling tools that deal with keywords, campaigns, or other entities, as no other tool updates ad group bids.

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 purpose is clear and implies when to use this tool (when updating a bid). However, it does not explicitly exclude alternative approaches or provide guidance on when not to use it. The sibling list lacks any bid-related alternatives, so no confusion exists.

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. 12 tool updatesv0.1.0
    • First observedadd_keywords
    • First observedadd_negative_keywords
    • First observedcreate_ad_group
    • First observedcreate_campaign
    • First observedcreate_responsive_search_ad
    • First observedenable_ad_group
    • First observedenable_campaign
    • First observedexecute_query
    • First observedlist_accounts
    • First observedpause_ad_group
    • First observedpause_campaign
    • First observedupdate_ad_group_bid

TDQS

A3.9/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a distinct purpose (adding keywords vs adding negatives, creating vs enabling vs pausing, etc.) with no overlapping functionality, so an agent can easily differentiate them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., add_keywords, create_ad_group, pause_campaign), making the set predictable.

Tool Count5/5

12 tools is a well-scoped number for managing Google Ads campaigns, covering creation, state changes, and querying without being excessive or too sparse.

Completeness2/5

Missing crucial operations like updating campaign settings, deleting keywords or ads, and managing budgets beyond creation. The surface leaves agents with dead ends (e.g., no way to remove a mistakenly added keyword).

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server that provides tools and resources for interacting with Google Ads API, enabling search, metadata retrieval, and account management through natural language.
    3
    929
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    A read-only MCP server for the Google Ads API, exposing reporting tools for account summaries, campaigns, performance, search terms, and conversion actions. Enables natural-language queries to Google Ads data without write access.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for managing Google Ads campaigns through the official Google Ads API, covering accounts, campaigns, budgets, keywords, search terms, and keyword ideas. It provides tools for both reading and mutating live ads data, such as pausing campaigns, updating budgets, and adding keywords.
    MIT