Skip to main content
Glama
samihalawa

Google Ads MCP Server

by samihalawa

Google Ads MCP Server (Node.js)

A Model Context Protocol (MCP) server for managing Google Ads campaigns programmatically, built with Node.js.

Features

Campaign Management

  • ✅ Fetch campaign performance data

  • ✅ Get detailed campaign information

  • ✅ Pause/enable campaigns

  • ✅ Update campaign budgets

Analytics & Reporting

  • ✅ Performance summaries

  • ✅ Top performer analysis

  • ✅ Export to CSV/JSON

  • ✅ Custom date ranges

Real-time Data

  • ✅ Live API integration

  • ✅ Up-to-date metrics

  • ✅ Conversion tracking

  • ✅ Budget monitoring

Related MCP server: Google Ads MCP Server

Installation

npm install -g @samihalawa/google-ads-mcp-server

Local Installation (For project integration)

npm install @samihalawa/google-ads-mcp-server

Or with pnpm:

pnpm add @samihalawa/google-ads-mcp-server

Configuration

Simple .env Configuration (No YAML file needed!)

Create a .env file with your Google Ads API credentials as inline JSON:

# Google Ads API Configuration (JSON format - all in one line)
GOOGLE_ADS_CONFIG='{"client_id":"YOUR_CLIENT_ID.apps.googleusercontent.com","client_secret":"YOUR_CLIENT_SECRET","developer_token":"YOUR_DEVELOPER_TOKEN","refresh_token":"YOUR_REFRESH_TOKEN","login_customer_id":"YOUR_MANAGER_CUSTOMER_ID"}'

# Customer ID to query (without dashes)
GOOGLE_ADS_CUSTOMER_ID=1234567890

That's it! No separate YAML files needed. Everything is in your .env file.

Example Configuration

GOOGLE_ADS_CONFIG='{"client_id":"963208150325-mmhibhl91g39ma9jsvrgacpleraq4nfu.apps.googleusercontent.com","client_secret":"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","developer_token":"i525AeFTAacFOtQtWBjY6g","refresh_token":"1//04OmKZJ58yhQaCgYIARAAGAQSNwF-L9IrfyrhE7W2zk00iStBE8dCRazdeUgXiMVxH-WIr9PEh6W3_RvjRKSZx-FH3l3Dun5vWOc","login_customer_id":"4850172260"}'
GOOGLE_ADS_CUSTOMER_ID=1248495560

Usage

Running the Server

# Load .env and run
node server.js

Or with npx (no installation):

npx @samihalawa/google-ads-mcp-server

Using with MCP Clients

Add to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "google-ads": {
      "command": "npx",
      "args": ["@samihalawa/google-ads-mcp-server"],
      "env": {
        "GOOGLE_ADS_CONFIG": "{\"client_id\":\"YOUR_CLIENT_ID\",\"client_secret\":\"YOUR_SECRET\",\"developer_token\":\"YOUR_TOKEN\",\"refresh_token\":\"YOUR_REFRESH\",\"login_customer_id\":\"YOUR_MANAGER_ID\"}",
        "GOOGLE_ADS_CUSTOMER_ID": "1234567890"
      }
    }
  }
}

Using with manus-mcp-cli

# Set environment variables
export GOOGLE_ADS_CONFIG='{"client_id":"...","client_secret":"...","developer_token":"...","refresh_token":"...","login_customer_id":"..."}'
export GOOGLE_ADS_CUSTOMER_ID="1234567890"

# List available tools
manus-mcp-cli tool list --server google-ads

# Get campaigns
manus-mcp-cli tool call get_campaigns --server google-ads --input '{"days": 30}'

# Get performance summary
manus-mcp-cli tool call get_performance_summary --server google-ads --input '{"days": 7}'

# Pause a campaign
manus-mcp-cli tool call pause_campaign --server google-ads --input '{"campaign_id": "23207843655"}'

Available Tools

1. get_campaigns

Fetch all campaigns with performance metrics.

Parameters:

  • days (number, optional): Number of days to look back (default: 30)

  • status (string, optional): Filter by status - ENABLED, PAUSED, REMOVED, or ALL (default: ENABLED)

Example:

{
  "days": 30,
  "status": "ENABLED"
}

2. get_campaign_details

Get detailed information about a specific campaign.

Parameters:

  • campaign_id (string, required): The campaign ID

  • days (number, optional): Number of days to look back (default: 30)

Example:

{
  "campaign_id": "23207843655",
  "days": 30
}

3. get_performance_summary

Get overall account performance summary.

Parameters:

  • days (number, optional): Number of days to look back (default: 30)

Example:

{
  "days": 7
}

4. get_top_performers

Get top performing campaigns by specified metric.

Parameters:

  • metric (string, optional): Metric to rank by - ctr, conversions, cost, clicks, impressions (default: ctr)

  • limit (number, optional): Number of top campaigns to return (default: 5)

  • days (number, optional): Number of days to look back (default: 30)

Example:

{
  "metric": "ctr",
  "limit": 5,
  "days": 30
}

5. pause_campaign

Pause a specific campaign.

Parameters:

  • campaign_id (string, required): The campaign ID to pause

Example:

{
  "campaign_id": "23207843655"
}

6. enable_campaign

Enable/resume a paused campaign.

Parameters:

  • campaign_id (string, required): The campaign ID to enable

Example:

{
  "campaign_id": "23207843655"
}

7. update_campaign_budget

Update the daily budget for a campaign.

Parameters:

  • campaign_id (string, required): The campaign ID

  • budget_euros (number, required): New daily budget in euros

Example:

{
  "campaign_id": "23207843655",
  "budget_euros": 20.00
}

8. export_report

Export campaign data to CSV or JSON format.

Parameters:

  • format (string, required): Export format - csv or json

  • days (number, optional): Number of days to look back (default: 30)

Example:

{
  "format": "csv",
  "days": 30
}

Example Workflows

Daily Campaign Monitoring

# Get performance summary
manus-mcp-cli tool call get_performance_summary --server google-ads --input '{"days": 1}'

# Check top performers
manus-mcp-cli tool call get_top_performers --server google-ads --input '{"metric": "conversions", "limit": 3, "days": 7}'

Campaign Optimization

# Get campaign details
manus-mcp-cli tool call get_campaign_details --server google-ads --input '{"campaign_id": "23207843655", "days": 30}'

# Update budget if performing well
manus-mcp-cli tool call update_campaign_budget --server google-ads --input '{"campaign_id": "23207843655", "budget_euros": 25.00}'

# Pause if underperforming
manus-mcp-cli tool call pause_campaign --server google-ads --input '{"campaign_id": "23207843655"}'

Reporting

# Export to CSV
manus-mcp-cli tool call export_report --server google-ads --input '{"format": "csv", "days": 30}'

# Export to JSON
manus-mcp-cli tool call export_report --server google-ads --input '{"format": "json", "days": 7}'

Troubleshooting

"GOOGLE_ADS_CONFIG environment variable is required"

  • Make sure you've set the GOOGLE_ADS_CONFIG environment variable

  • Check that the JSON is valid and properly escaped

  • Ensure all required fields are present

"Failed to initialize Google Ads client"

  • Verify all credentials are correct

  • Ensure refresh token is still valid

  • Check that the JSON format is correct

"Campaign not found"

  • Verify the campaign ID is correct

  • Check that you have access to the campaign

  • Ensure the campaign hasn't been removed

"Unauthorized" errors

  • Refresh token may have expired - generate a new one

  • Check that the developer token is approved

  • Verify OAuth credentials are correct

API Rate Limits

Google Ads API has rate limits:

  • Basic access: 15,000 operations per day

  • Standard access: 40,000 operations per day

The MCP server automatically handles rate limiting and retries.

Security

  • Never commit .env to version control

  • Store credentials securely

  • Use environment variables for sensitive data

  • Rotate refresh tokens regularly

  • The .gitignore file already excludes .env files

Support

For issues or questions:

  1. Check the Google Ads API documentation

  2. Review the MCP specification

  3. Check server logs for error messages

  4. Open an issue on GitHub

License

MIT License - See LICENSE file for details

Version History

1.1.0 (2025-11-24)

  • Breaking Change: Switched from YAML to inline JSON configuration in .env

  • Removed js-yaml dependency

  • Simplified configuration - no separate files needed

  • Updated documentation

1.0.0 (2025-11-24)

  • Initial Node.js release

  • 8 core tools for campaign management

  • Real-time API integration

  • CSV/JSON export support

  • Complete documentation

Available Tools

11 tools
create_conversion_actionC

Create a new Conversion Action (e.g., for website, phone calls)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the new conversion action
typeYesThe type of conversion action (e.g., UPLOAD_CLICKS, WEBSITE, CLICK_TO_CALL)
categoryYesThe category of the conversion (e.g., PURCHASE, LEAD, PAGE_VIEW)
valueNoDefault value in Euros for the conversion (default: 0)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Create' which implies a write/mutation operation, but doesn't disclose any behavioral traits like required permissions, whether the action is reversible, rate limits, or what happens on success/failure. This is a significant gap for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Create a new Conversion Action') and includes a brief, relevant example. There's no wasted text, and it's appropriately sized for the tool's complexity.

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

Completeness2/5

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

Given the tool's complexity as a mutation operation with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions or side effects, provide usage context, or explain return values, leaving significant gaps for an AI agent to understand how to invoke it correctly.

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

Parameters3/5

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

The description adds no parameter-specific information beyond what's already in the input schema, which has 100% coverage with detailed descriptions and enums for all parameters. Since schema_description_coverage is high (>80%), the baseline score is 3, as the description doesn't compensate with additional meaning or context for the parameters.

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 ('Create a new Conversion Action') and provides examples of what might be created ('e.g., for website, phone calls'), which gives a specific verb+resource. However, it doesn't explicitly differentiate from sibling tools like 'get_conversion_actions' or 'update_campaign_budget', which would be needed for a score of 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_conversion_actions' for reading existing actions or other creation tools like 'create_responsive_display_ad'. It lacks context about prerequisites, such as needing a campaign or account setup, and doesn't mention exclusions or typical use cases.

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

create_responsive_display_adC

Create a Responsive Display Ad with Ad Controls (e.g., enable video creation)

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_group_idYesThe Ad Group ID where the ad will be created
headlinesYesArray of headlines (max 5)
descriptionsYesArray of descriptions (max 5)
enable_video_creationNoSet to true to enable video creation for the ad (default: false)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'Ad Controls (e.g., enable video creation)' which hints at some configuration options, but doesn't describe what happens when the ad is created, whether it's immediately active, what permissions are required, or what the expected response format is. For a creation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

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

Conciseness4/5

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

The description is a single, efficient sentence that gets straight to the point. It's appropriately sized for a tool with 4 parameters and no complex behavioral nuances to explain. There's no wasted verbiage, though it could potentially benefit from slightly more context about when to use this tool.

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 creation tool with no annotations and no output schema, the description provides basic purpose but lacks important context. It doesn't explain what happens after creation, what the response contains, or any error conditions. The 100% schema coverage helps with parameter understanding, but behavioral aspects remain underspecified given this is a write operation in an advertising context.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all 4 parameters. The description mentions 'Ad Controls (e.g., enable video creation)' which loosely maps to the 'enable_video_creation' parameter, but doesn't add meaningful semantic context beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.

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 ('Create') and resource ('Responsive Display Ad'), and specifies the type of ad being created. It distinguishes from siblings by focusing on responsive display ads rather than campaigns, conversions, or reports. However, it doesn't explicitly differentiate from other potential ad creation tools that might exist.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing ad group), when responsive display ads are appropriate, or what alternatives might exist among the sibling tools. The agent must infer usage from the tool name alone.

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

enable_campaignC

Enable/resume a paused campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesThe campaign ID to enable

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'enable/resume' implies a state change, it doesn't specify required permissions, whether the action is reversible, potential side effects (e.g., budget resumption), or what happens upon success/failure. This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is extremely concise with just four words, front-loading the essential action and target. Every word earns its place with zero waste, making it efficient for quick comprehension.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, reversibility, or response format. While concise, it fails to provide sufficient context for safe and effective use given the tool's complexity.

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

Parameters3/5

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

The input schema has 100% description coverage, with the single parameter 'campaign_id' clearly documented in the schema. The description adds no additional parameter information beyond what the schema provides, so the baseline score of 3 is appropriate when the schema does the heavy lifting.

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

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/resume') and target resource ('a paused campaign'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'pause_campaign' beyond the obvious opposite action, missing an opportunity to clarify their relationship.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the campaign must be paused), when not to use it (e.g., for active campaigns), or how it relates to sibling tools like 'pause_campaign' or 'update_campaign_budget'.

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

export_reportC

Export campaign data to CSV or JSON format

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesExport formatcsv
daysNoNumber of days to look back (default: 30)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Export') but lacks details on permissions needed, whether it's a read-only operation, rate limits, or what the output looks like (e.g., file download vs. inline data). This leaves significant gaps for an agent to understand the tool's behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to scan and understand quickly.

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

Completeness2/5

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

Given the complexity of an export tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication needs, output handling, or error conditions, which are crucial for an agent to use the tool effectively in context with sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters ('format' and 'days') with descriptions and defaults. The description adds no additional meaning beyond what the schema provides, such as explaining the context of 'days' (e.g., historical data range) or format implications.

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 ('Export') and resource ('campaign data'), specifying the output formats (CSV or JSON). However, it doesn't differentiate from sibling tools like 'get_campaigns' or 'get_performance_summary' that might also retrieve campaign data but in different formats or contexts.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't specify if this is for bulk data export compared to real-time queries from siblings like 'get_campaign_details', or mention prerequisites such as campaign availability.

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

get_campaign_detailsC

Get detailed information about a specific campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesThe campaign ID
daysNoNumber of days to look back (default: 30)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a 'Get' operation, implying read-only behavior, but doesn't clarify if it requires authentication, has rate limits, returns structured data, or handles errors. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It front-loads the core purpose ('Get detailed information') and specifies the target ('about a specific campaign'), making it easy to parse quickly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool with 2 parameters. It doesn't explain what 'detailed information' entails, the return format, or error handling. While the schema covers parameters well, the overall context for agent usage lacks necessary behavioral and output details.

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

Parameters3/5

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

The input schema has 100% description coverage, clearly documenting both parameters ('campaign_id' and 'days' with a default). The description adds no additional semantic context beyond what the schema provides, such as explaining what 'detailed information' includes or how 'days' affects the output. Baseline 3 is appropriate as the schema does the heavy lifting.

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 ('Get') and resource ('detailed information about a specific campaign'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_campaigns' (which likely lists campaigns) or 'get_performance_summary' (which might provide aggregated metrics), leaving some ambiguity about 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a campaign ID), exclusions, or comparisons to siblings like 'get_campaigns' for listing or 'get_performance_summary' for aggregated data, leaving the agent to infer usage context.

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

get_campaignsC

Fetch Google Ads campaign performance data

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to look back (default: 30)
statusNoFilter by campaign status (ENABLED, PAUSED, REMOVED, or ALL)ENABLED

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Fetch' (implying read-only) but doesn't address permissions, rate limits, data freshness, or response format. For a data retrieval tool with zero annotation coverage, this leaves significant behavioral 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 a single, efficient sentence with zero wasted words. It's appropriately sized for a simple data-fetching tool and front-loads the core purpose immediately.

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

Completeness2/5

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

Given no annotations, no output schema, and multiple sibling tools with overlapping purposes, the description is inadequate. It doesn't explain what 'performance data' includes, how results are structured, or how this differs from similar tools, leaving the agent with insufficient context for proper tool selection.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds no parameter-specific information beyond what's in the schema, meeting the baseline expectation but not providing additional value.

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 ('Fetch') and resource ('Google Ads campaign performance data'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'get_campaign_details' or 'get_performance_summary', which appear to serve related but potentially different functions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_campaign_details' or 'get_performance_summary'. It mentions 'performance data' but doesn't clarify scope, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.

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

get_conversion_actionsB

List all Conversion Actions for the account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states 'List all' but doesn't reveal any traits like pagination, rate limits, permissions needed, or what 'all' entails (e.g., active only, includes archived). This leaves significant gaps for a tool that likely interacts with account data.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly without unnecessary elaboration.

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

Completeness2/5

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

Given the complexity of listing account-level data, no annotations, and no output schema, the description is incomplete. It lacks details on behavior, output format, or error handling, which are crucial for an AI agent to use this tool effectively in context with siblings like 'create_conversion_action'.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, but it also doesn't compensate for any gaps since there are none. A baseline of 4 is given as it meets the requirement without extra information.

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 ('List all') and resource ('Conversion Actions for the account'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'get_campaigns' or 'get_campaign_details' beyond the resource type, which prevents a perfect score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context, or exclusions, such as whether it's for initial setup, monitoring, or comparison with other listing tools like 'get_campaigns'.

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

get_performance_summaryC

Get overall account performance summary

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to look back (default: 30)

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get overall account performance summary', which implies a read-only operation, but doesn't specify aspects like authentication requirements, rate limits, data freshness, or whether it aggregates data across campaigns. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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 'Get overall account performance summary' is a single, efficient sentence that front-loads the core purpose without unnecessary words. It's appropriately sized for a simple tool, though it could be slightly more specific (e.g., 'Get high-level account metrics') to improve clarity without losing conciseness.

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

Completeness2/5

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

Given the complexity of performance metrics and the lack of annotations and output schema, the description is incomplete. It doesn't explain what the summary includes (e.g., key performance indicators, time-series data), how results are formatted, or any prerequisites. For a tool that likely returns detailed data, this leaves the agent with insufficient context to use it effectively.

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

Parameters3/5

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

The input schema has 1 parameter with 100% description coverage, providing details on 'days' (number of days to look back, default 30). The description adds no additional parameter semantics beyond what the schema already covers, such as clarifying the time range's impact on the summary. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract either.

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

Purpose3/5

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

The description 'Get overall account performance summary' states a clear verb ('Get') and resource ('account performance summary'), but it's somewhat vague about what constitutes 'performance summary' (e.g., metrics like clicks, conversions, revenue). It doesn't distinguish this tool from siblings like 'get_campaign_details' or 'get_top_performers', which might also provide performance-related data, leaving ambiguity in 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?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_campaigns', 'get_campaign_details', and 'get_top_performers' that might offer overlapping or more specific performance insights, there's no indication of context (e.g., use this for high-level overviews, use others for campaign-specific details). This lack of differentiation hinders effective tool selection.

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

get_top_performersC

Get top performing campaigns by specified metric

ParametersJSON Schema
NameRequiredDescriptionDefault
metricNoMetric to rank byctr
limitNoNumber of top campaigns to return (default: 5)
daysNoNumber of days to look back (default: 30)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves data ('Get'), implying a read-only operation, but doesn't specify whether it requires authentication, has rate limits, returns paginated results, or what the output format looks like. For a tool with no annotation coverage, this leaves significant behavioral 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 a single, efficient sentence with zero waste. It front-loads the core purpose ('Get top performing campaigns') and includes the key constraint ('by specified metric'). Every word earns its place, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool's complexity (ranking campaigns by metrics with three parameters) and the absence of both annotations and an output schema, the description is incomplete. It doesn't explain what 'top performing' means (e.g., highest values of the metric), how ties are handled, or what the return structure includes (e.g., campaign IDs, metric values). This leaves the agent with insufficient context for reliable use.

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

Parameters3/5

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

Schema description coverage is 100%, with clear descriptions for all parameters (metric, limit, days), including an enum for 'metric' and defaults. The description adds minimal value beyond the schema, only implying that 'metric' is used for ranking. Since the schema does the heavy lifting, 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.

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('top performing campaigns'), specifying the ranking criterion ('by specified metric'). It distinguishes from siblings like 'get_campaigns' (general listing) and 'get_performance_summary' (aggregate metrics) by focusing on ranking. However, it doesn't explicitly differentiate from 'get_campaign_details' (individual campaign data) in the description text.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention when this tool is appropriate compared to siblings like 'get_campaigns' (for unfiltered lists) or 'get_performance_summary' (for overall metrics), nor does it specify prerequisites or exclusions. Usage is implied by the name but not explicitly stated.

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

pause_campaignC

Pause a specific campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesThe campaign ID to pause

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('pause') but doesn't explain effects (e.g., if pausing is reversible, impacts on performance, or permissions required). This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action, making it easy to parse quickly, though it could benefit from additional context.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral effects, error conditions, or return values, leaving the agent with insufficient information to use the tool effectively beyond the basic action.

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

Parameters3/5

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

Schema description coverage is 100%, with the single parameter 'campaign_id' documented in the schema. The description doesn't add any meaning beyond the schema, such as format examples or constraints, but the baseline is 3 since the schema handles the parameter documentation adequately.

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 ('pause') and resource ('a specific campaign'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'enable_campaign' or 'update_campaign_budget' beyond the basic action, missing explicit distinction.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'enable_campaign' or other campaign management tools. The description lacks context about prerequisites, timing, or exclusions, offering only a basic statement of action.

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

update_campaign_budgetC

Update the daily budget for a campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesThe campaign ID
budget_eurosYesNew daily budget in euros

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'update' implies a mutation operation, it fails to mention critical aspects like permission requirements, whether budget changes are immediate or scheduled, rate limits, or what happens if the budget exceeds account limits. For a mutation tool with zero annotation coverage, this represents a significant gap in 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 perfectly concise at just 7 words, front-loading the essential action and resource without any wasted language. Every word earns its place, making it immediately scannable and understandable while avoiding unnecessary elaboration.

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

Completeness2/5

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

For a budget mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address what the tool returns (success confirmation? error messages?), doesn't mention side effects or constraints, and provides minimal guidance for proper usage. Given the complexity of financial operations and lack of structured safety signals, more context would be valuable.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters clearly documented in the schema itself. The description adds minimal value beyond what's already in the structured data - it mentions 'daily budget' which aligns with 'budget_euros' but doesn't provide additional context about format, constraints, or business rules. This meets the baseline expectation when schema does the heavy lifting.

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 ('update') and resource ('daily budget for a campaign'), making the tool's function immediately understandable. However, it doesn't differentiate from potential sibling tools like 'enable_campaign' or 'pause_campaign' that also modify campaign states, leaving some ambiguity about when to choose this specific budget update tool.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There are no mentions of prerequisites (e.g., campaign must be active), exclusions (e.g., cannot update paused campaigns), or comparisons to sibling tools like 'get_campaign_details' for checking current budget first. This leaves the agent with minimal context for appropriate tool selection.

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. 11 tool updatesv1.4.1
    • First observedcreate_conversion_action
    • First observedcreate_responsive_display_ad
    • First observedenable_campaign
    • First observedexport_report
    • First observedget_campaign_details
    • First observedget_campaigns
    • First observedget_conversion_actions
    • First observedget_performance_summary
    • First observedget_top_performers
    • First observedpause_campaign
    • First observedupdate_campaign_budget

TDQS

B3.3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific resources like campaigns, conversion actions, ads, and reports, with clear separation between actions like enable_campaign and pause_campaign. However, get_campaigns and get_campaign_details could potentially be confused as both retrieve campaign data, though their descriptions differentiate them as performance data vs. detailed information.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as create_conversion_action, get_campaigns, and update_campaign_budget. This uniformity makes the tool set predictable and easy to understand at a glance.

Tool Count5/5

With 11 tools, the server is well-scoped for Google Ads management, covering key operations like campaign control, reporting, and ad creation. This count is reasonable and aligns with the domain's complexity without being overwhelming or insufficient.

Completeness4/5

The tool set provides strong coverage for core Google Ads workflows, including campaign lifecycle (create, enable, pause, update budget), reporting (export, performance summary), and ad management. A minor gap is the lack of tools for deleting resources or managing ad groups, but agents can likely work around this with the available operations.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables comprehensive Google Ads campaign management and analytics through the Google Ads API. Supports querying campaigns, ad groups, keywords, performance metrics, and executing custom GAQL queries with token-efficient implementation.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.
    100
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables comprehensive management of Google Ads campaigns through natural language, including campaign creation, ad group management, keyword operations, Performance Max campaigns, conversion tracking, and performance insights with support for multiple accounts.
    4
    -