Google Ads MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_ADS_AUDIT_LOG | No | Audit log path | audit-log.jsonl |
| GOOGLE_ADS_CLIENT_ID | Yes | OAuth 2.0 Desktop App client ID | |
| GOOGLE_ADS_MAX_RETRIES | No | Quota retry attempts | 3 |
| GOOGLE_ADS_CLIENT_SECRET | Yes | OAuth 2.0 Desktop App client secret | |
| GOOGLE_ADS_REFRESH_TOKEN | Yes | Long-lived OAuth refresh token | |
| GOOGLE_ADS_DEVELOPER_TOKEN | Yes | Your Google Ads developer token | |
| GOOGLE_ADS_MUTATE_ALLOWLIST | No | Comma-separated customer IDs that may receive writes | |
| GOOGLE_ADS_LOGIN_CUSTOMER_ID | Yes | MCC account ID (digits only, no hyphens) | |
| GOOGLE_ADS_MAX_BID_CHANGE_PCT | No | Max bid change fraction | 0.25 |
| GOOGLE_ADS_MAX_BUDGET_CHANGE_PCT | No | Max budget change fraction | 0.20 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accessible_customersA | List the Google Ads customer accounts the credentials can access. Returns digit-only customer ids to use as |
| get_ad_groupsB | Get ad groups for a customer, with optional filtering by campaign and status. |
| get_campaignsB | Get campaigns for a customer, optionally filtered by status. |
| get_campaign_performanceA | Get campaign performance metrics for a date range, ordered by cost descending. |
| get_change_eventsA | Retrieve change events for a customer account within a date range. The change_event resource requires a date filter, an ORDER BY clause, and a LIMIT (hard-capped at 10,000 rows by the API). The Google Ads API typically supports a ~30-day lookback window for change events; queries beyond that range may return empty results. |
| create_campaignA | Create a new campaign (paused by default). |
| create_ad_groupA | Create a new ad group (paused by default). |
| create_keywordC | Create a new keyword (enabled by default). |
| create_adA | Create a new responsive search ad (paused by default). |
| get_keywordsC | Retrieve keywords from an ad group, optionally filtered by match type. |
| get_search_termsA | Retrieve search terms that matched keywords, filtered by date and optional criteria. Search terms are ordered by clicks (descending) to prioritize high-engagement terms. |
| get_segments_metadataA | List all available GAQL segments with metadata. Returns a list of segment field objects with name, category, data_type, selectable, filterable, and sortable attributes. |
| get_metrics_metadataA | List all available GAQL metrics with metadata. Returns a list of metric field objects with name, category, data_type, selectable, filterable, and sortable attributes. |
| get_resource_metadataA | Get all available fields for a specific resource. |
| get_recommendationsA | Fetch active recommendations for an account or campaign. |
| apply_recommendationA | Apply a recommendation (e.g. add a keyword, raise a bid). |
| generate_keyword_ideasB | Generate keyword ideas using Google's Keyword Planner. |
| get_forecast_metricsC | Fetch forecast metrics and bid simulations for a campaign. |
| dismiss_recommendationA | Dismiss a recommendation (mark as not applicable). Note: The Google Ads API does not support validate_only for dismiss, so preview returns the intent without calling the API. |
| run_gaql_queryA | Run a read-only GAQL query against a customer account. This is the explicit raw-query escape hatch: the |
| pause_campaignA | Pause a campaign. Previews unless confirm=true; customer must be allowlisted. |
| enable_campaignA | Enable (resume) a campaign. Previews unless confirm=true. |
| pause_ad_groupC | Pause an ad group. Previews unless confirm=true. |
| enable_ad_groupC | Enable an ad group. Previews unless confirm=true. |
| pause_keywordB | Pause a keyword (ad group criterion). Previews unless confirm=true. |
| enable_keywordA | Enable a keyword (ad group criterion). Previews unless confirm=true. |
| pause_adA | Pause an ad (ad group ad). Previews unless confirm=true. |
| enable_adB | Enable an ad (ad group ad). Previews unless confirm=true. |
| update_keyword_bidA | Set a keyword's max CPC bid (micros). Previews unless confirm=true; change is capped. |
| update_ad_group_bidA | Set an ad group's default max CPC bid (micros). Previews unless confirm=true; capped. |
| update_campaign_budgetA | Set a campaign's daily budget (micros). Previews unless confirm=true; change is capped. Resolves the campaign's shared budget resource first, then mutates it. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Every tool targets a distinct resource or action (e.g., create_ad vs. create_campaign, get_keywords vs. get_recommendations). No two tools have overlapping purposes, and even similar verbs like 'enable' and 'pause' are clearly separated by entity.
All tool names follow a consistent verb_noun pattern (e.g., create_campaign, get_keywords, pause_ad). Verbs like 'apply', 'dismiss', 'generate', 'list', 'run' are distinct and appropriately used. No mixing of casing or other conventions.
With 31 tools, the server covers a broad range of Google Ads operations without becoming unwieldy. Each tool serves a specific purpose, and the count is reasonable given the complexity of the domain.
The toolset lacks update operations for most entities (e.g., no update_ad, update_campaign, update_ad_group) and no removal tools. While raw GAQL queries can fill some gaps, the surface is incomplete for standard lifecycle management.