Google Ads MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_ADS_MCP_BASE_URL | No | The public base URL of the deployed remote server (e.g. the Cloud Run service URL). | |
| GOOGLE_ADS_MCP_READ_ONLY | No | Set to `true` to hide all write tools entirely (monitoring-only deployments). | |
| GOOGLE_ADS_MCP_TRANSPORT | No | Set to `http` to run locally over HTTP without OAuth (trusted networks only). | |
| GOOGLE_ADS_REFRESH_TOKEN | No | OAuth refresh token, used together with the OAuth client ID and secret for local (stdio) mode. | |
| GOOGLE_ADS_DEVELOPER_TOKEN | Yes | Your Google Ads developer token from the manager (MCC) account's API Center. Required. | |
| GOOGLE_ADS_OAUTH_CLIENT_ID | No | Google Cloud OAuth client ID, used together with the refresh token for local (stdio) mode. | |
| GOOGLE_ADS_LOGIN_CUSTOMER_ID | No | The manager (MCC) account ID to run this server against. Set this if you use a manager account. | |
| GOOGLE_ADS_MCP_OAUTH_CLIENT_ID | No | OAuth 2.0 client ID for the remote (claude.ai / Cloud Run) server deployment. | |
| GOOGLE_ADS_OAUTH_CLIENT_SECRET | No | Google Cloud OAuth client secret, used together with the refresh token for local (stdio) mode. | |
| GOOGLE_ADS_MCP_OAUTH_CLIENT_SECRET | No | OAuth 2.0 client secret for the remote (claude.ai / Cloud Run) server deployment. |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accessible_customersA | Returns the ids of Google Ads accounts directly accessible by the authenticated user. Use this tool first to discover available customer IDs if the user hasn't provided one. Most other tools require a valid customer ID. Returns: List[str]: A list of customer IDs (10-digit strings, no dashes). |
| get_account_hierarchyA | Lists all client accounts under a (manager) account, including the account itself. Useful when the authenticated user works through an MCC/manager account: run this against the manager's customer ID to find the child account IDs to use with reporting and management tools. |
| list_conversion_actionsA | Lists the account's conversion actions with category, type, status, and whether each is primary for optimization (primary_for_goal). Use this to check what Smart Bidding is actually optimizing toward — e.g. whether phone calls are primary and page-view style actions are secondary. |
| list_campaign_criteriaA | Lists a campaign's targeting criteria: locations, proximity radii, ad schedules, devices, and negative criteria. |
| suggest_geo_targetsA | Resolves human-readable location names (e.g. 'Phoenix, Arizona', 'Gilbert, Arizona') to Google Ads geo target constant IDs, for use with add_location_targeting. |
| get_resource_metadataA | Retrieves the selectable, filterable, and sortable fields for a specific Google Ads resource, including compatible metrics and segments. Use this tool to find out which fields you can select, filter by, or
sort by when querying a specific resource (e.g., 'campaign',
'ad_group') with the Do not guess fields — use this tool to discover them before constructing a query. Responses can be cached; they rarely change. |
| get_campaign_performanceA | Campaign-level performance report: impressions, clicks, CTR, cost, conversions, conversion value, plus campaign status, bidding strategy and daily budget. Ordered by cost, highest first. Cost and budget fields are in micros: divide by 1,000,000 for the account currency amount. |
| get_ad_group_performanceB | Ad-group-level performance report with the core metrics (impressions, clicks, CTR, cost, conversions). Ordered by cost. |
| get_keyword_performanceA | Keyword-level performance report: keyword text, match type, status, quality score, and the core metrics. Ordered by cost, highest first. |
| get_search_terms_reportA | Search terms report: the actual user queries that triggered ads, with the core metrics. The main input for finding negative keyword candidates and new keyword opportunities. Ordered by cost. |
| get_change_historyA | Recent changes made to the account (by users, tools, or this server): what changed, when, and by whom. Useful for a weekly review of account activity. |
| searchC | Fetches data from the Google Ads API using the search method. |
| create_ad_groupB | Creates a standard search ad group (ENABLED) in a campaign. |
| update_ad_groupC | Updates an ad group's status and/or default max CPC bid. |
| create_responsive_search_adA | Creates a responsive search ad in PAUSED state (enable it with
|
| set_ad_statusB | Pauses, enables, or removes an ad. |
| create_call_assetA | Creates a call asset (clickable phone number shown with ads).
Returns its resource name; attach it to a campaign with
|
| link_asset_to_campaignB | Links an asset (e.g. a call asset) to a campaign so it serves with that campaign's ads. |
| create_campaign_budgetA | Creates a daily campaign budget. Returns its resource name, which is required when creating a campaign. |
| update_campaign_budgetA | Changes the daily amount of an existing campaign budget. Find the budget id via the |
| create_campaignA | Creates a new campaign in PAUSED state (so it never spends money
before a human reviews and enables it). Create a budget first with
|
| set_campaign_target_cpaA | Sets (or updates) the target CPA on a campaign that uses the Maximize Conversions bidding strategy. Only do this once the campaign has ~30+ conversions of history; setting a tCPA too early or too low throttles delivery. |
| set_campaign_statusB | Pauses, enables, or removes a campaign. |
| set_conversion_action_primaryA | Marks a conversion action as primary (optimized toward by Smart Bidding) or secondary (observed/reported only). This is the main lever for making campaigns optimize toward real
outcomes (e.g. phone calls) instead of soft actions (page views,
direction clicks). Find ids with Note: some system-generated conversion actions cannot be edited via the API; the error will say so if this one can't. |
| set_campaign_conversion_goalsA | Overrides, per campaign, which conversion goals Smart Bidding optimizes toward — regardless of the account-level primary/secondary settings. Use this when account-level conversion actions can't be edited (e.g. system-generated "Local actions") but a campaign must optimize only to real outcomes such as phone calls. This switches the campaign to campaign-level goal configuration and sets each listed goal's biddable flag; include every category/origin combination that exists in the account, marking the ones to optimize toward biddable=true and the rest biddable=false. |
| add_keywordsC | Adds keywords to an ad group (ENABLED). |
| set_keyword_statusA | Pauses, enables, or removes a keyword. Find criterion ids with |
| add_negative_keywordsA | Adds campaign-level negative keywords, preventing ads from showing
on those queries. The usual follow-up to reviewing
|
| add_location_targetingA | Adds location targeting criteria to a campaign. Resolve human-readable places to ids first with |
| remove_campaign_criterionA | Removes a single targeting criterion (e.g. a wrong location or an obsolete ad schedule) from a campaign. Find criterion ids with |
| set_ad_scheduleA | Adds ad schedule criteria to a campaign (which days/hours ads run). A campaign with no ad schedule runs 24/7. Once any schedule entries exist, ads run ONLY during the scheduled windows — so include every window you want covered. Hours are in the account's time zone. |
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
Most tools target a distinct resource and action, and the performance reports are clearly differentiated by level. However, the generic `search` tool overlaps conceptually with the prebuilt `get_*_performance` tools, and `list_accessible_customers` vs `get_account_hierarchy` could be confused for account discovery.
Nearly all tools follow a snake_case verb_noun pattern (e.g., create_campaign, set_ad_status, add_keywords). Minor deviations include the single-word `search` and mixed use of `list` vs `get` for retrieval operations.
At 31 tools, the set is well above the typical well-scoped range of 3–15. Several tools could be consolidated, such as the separate status setters (`set_ad_status`, `set_campaign_status`, `set_keyword_status`) and the budget create/update pair.
Core workflows for creating and pausing campaigns, ad groups, ads, and keywords are covered, along with reporting and conversion goal management. However, important update operations are missing, including changing campaign or ad group names, updating keyword bids, and editing ad copy beyond creation.