Google Ads MCP Server
Provides tools to programmatically manage Google Ads campaigns, including fetching performance data, toggling campaign status, updating budgets, and exporting performance reports.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Ads MCP ServerShow my performance summary for the last 7 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Global Installation (Recommended for CLI use)
npm install -g @samihalawa/google-ads-mcp-serverLocal Installation (For project integration)
npm install @samihalawa/google-ads-mcp-serverOr with pnpm:
pnpm add @samihalawa/google-ads-mcp-serverConfiguration
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=1234567890That'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=1248495560Usage
Running the Server
# Load .env and run
node server.jsOr with npx (no installation):
npx @samihalawa/google-ads-mcp-serverUsing 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 IDdays(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 IDbudget_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 jsondays(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_CONFIGenvironment variableCheck 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
.envto version controlStore credentials securely
Use environment variables for sensitive data
Rotate refresh tokens regularly
The
.gitignorefile already excludes.envfiles
Support
For issues or questions:
Check the Google Ads API documentation
Review the MCP specification
Check server logs for error messages
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 toolscreate_conversion_actionC
Create a new Conversion Action (e.g., for website, phone calls)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the new conversion action | |
| type | Yes | The type of conversion action (e.g., UPLOAD_CLICKS, WEBSITE, CLICK_TO_CALL) | |
| category | Yes | The category of the conversion (e.g., PURCHASE, LEAD, PAGE_VIEW) | |
| value | No | Default value in Euros for the conversion (default: 0) |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| ad_group_id | Yes | The Ad Group ID where the ad will be created | |
| headlines | Yes | Array of headlines (max 5) | |
| descriptions | Yes | Array of descriptions (max 5) | |
| enable_video_creation | No | Set to true to enable video creation for the ad (default: false) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign ID to enable |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | Export format | csv |
| days | No | Number of days to look back (default: 30) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign ID | |
| days | No | Number of days to look back (default: 30) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default: 30) | |
| status | No | Filter by campaign status (ENABLED, PAUSED, REMOVED, or ALL) | ENABLED |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | Metric to rank by | ctr |
| limit | No | Number of top campaigns to return (default: 5) | |
| days | No | Number of days to look back (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign ID to pause |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign ID | |
| budget_euros | Yes | New daily budget in euros |
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v1.4.1- First observed
create_conversion_action - First observed
create_responsive_display_ad - First observed
enable_campaign - First observed
export_report - First observed
get_campaign_details - First observed
get_campaigns - First observed
get_conversion_actions - First observed
get_performance_summary - First observed
get_top_performers - First observed
pause_campaign - First observed
update_campaign_budget
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
Google Ads analysis and operations — read performance, manage keywords, bids, and campaigns.
Google Ads automation with AI: analyze performance, manage campaigns, optimize bids.
Full Google Ads management: read (campaigns, performance, ROAS, keywords, search terms) and write (p
Google & Meta Ads management with 100+ tools. Audit, create, and optimize campaigns.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables 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.-
- AlicenseBqualityBmaintenanceEnables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.10013MIT
- FlicenseNot gradedqualityCmaintenanceEnables 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-
- AlicenseBqualityDmaintenanceEnables AI-powered marketing campaign management across Google Ads, Facebook Ads, and Google Analytics with automated budget optimization, AI-generated ad copy, audience segmentation, and real-time performance analytics.43MIT