google-ads-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_ADS_API_VERSION | No | Default v24. Bump when Google releases a new version; versions sunset roughly yearly | v24 |
| GOOGLE_ADS_CUSTOMER_ID | No | Default client account when a tool call omits customer_id | |
| GOOGLE_ADS_REFRESH_TOKEN | Yes | Refresh token with the adwords scope | |
| GOOGLE_ADS_DEVELOPER_TOKEN | Yes | From API Center in a manager account | |
| GOOGLE_ADS_OAUTH_CLIENT_ID | Yes | OAuth 2.0 client ID | |
| GOOGLE_ADS_LOGIN_CUSTOMER_ID | No | Manager (MCC) account to authenticate through; needed when the account is accessed via a manager | |
| GOOGLE_ADS_OAUTH_CLIENT_SECRET | Yes | OAuth 2.0 client secret |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accessible_customersA | List the Google Ads accounts reachable with the configured credentials: the accounts the OAuth user can access directly, plus the full client tree under GOOGLE_ADS_LOGIN_CUSTOMER_ID when it is a manager (MCC). Use this to find a customer_id. |
| account_overviewA | Account details (name, currency, time zone, auto-tagging, status) plus account-wide totals for the date range: impressions, clicks, cost, conversions. |
| list_campaignsA | List campaigns with status, channel type, bidding strategy, daily budget (currency units), schedule and serving status. No metrics; use campaign_performance for those. |
| list_ad_groupsA | List ad groups (id, name, status, type, default CPC bid) with their campaign. Optionally filter to one campaign. |
| list_adsA | List ads with type, status, policy approval, ad strength, final URLs and — for responsive search ads — all headlines and descriptions with pinning. Filter by campaign or ad group. |
| campaign_performanceA | Per-campaign metrics for a date range: impressions, clicks, CTR, avg CPC, cost, conversions, conversion value, cost/conv, plus search impression share. Optionally segment by date/week/month/device/network. Money is in account currency units. |
| ad_group_performanceA | Per-ad-group metrics for a date range, optionally filtered to a campaign and segmented. |
| keyword_performanceA | Per-keyword metrics for a date range with match type, status, quality score and effective CPC bid. Filter by campaign or ad group. Sorted by cost. |
| search_terms_reportA | Actual search queries that triggered your ads, with the matching keyword, status (ADDED/EXCLUDED/NONE) and metrics. The main source for finding negative keywords to add. Sorted by impressions. |
| geo_performanceA | Metrics by user location for a date range (country/region/city geo target constants). Resolve the constant names with gaql_search on geo_target_constant if needed. |
| gaql_searchA | Run any Google Ads Query Language (GAQL) query against a customer. Use for anything the specific report tools do not cover (assets, conversion actions, change history, bidding strategies, audiences, geo targets, budgets, recommendations…). Pagination is handled; rows are capped by limit. Money fields are converted from micros unless convert_micros is false. Use gaql_fields to discover selectable fields. |
| gaql_fieldsA | Look up GAQL fields, resources, segments and metrics: data type, whether selectable/filterable/sortable, enum values, and which resources they can be selected with. Use name_like with SQL wildcards (e.g. 'campaign.%' for every campaign field, 'metrics.%conversion%'). |
| set_campaign_statusA | Set a campaign to ENABLED or PAUSED. |
| set_campaign_budgetA | Change a campaign's daily budget, given in account currency units (e.g. 5.50). Looks up the campaign's budget resource first. Refuses to change a shared budget unless allow_shared is true, since that affects every campaign using it. |
| set_ad_group_statusA | Set an ad group to ENABLED or PAUSED. |
| set_ad_statusA | Set an ad (within its ad group) to ENABLED or PAUSED. |
| update_keywordA | Change a keyword's status (ENABLED/PAUSED) and/or its max CPC bid (currency units). Identify the keyword by ad_group_id and criterion_id from keyword_performance. |
| add_keywordsA | Add keywords to an ad group. Each keyword has text, match type and an optional max CPC bid (currency units). Set validate_only to check for policy/duplicate errors without saving. |
| add_negative_keywordsA | Add negative keywords at campaign level (default) or ad group level. Typical follow-up to search_terms_report. Negatives at campaign level block the term for every ad group in the campaign. |
| remove_resourceA | Remove (soft-delete) a keyword, negative keyword, ad, ad group or campaign by its resource name (e.g. customers/123/adGroupCriteria/456~789). Removal is permanent in Google Ads; removed entities stay visible in reports with status REMOVED. |
| mutateA | Advanced: send raw GoogleAdsService.mutate operations using REST field names (camelCase), e.g. [{ campaignOperation: { update: { resourceName, status }, updateMask: 'status' } }]. Supports every resource the API can create/update/remove (campaigns, ads, assets, conversion actions, extensions…). Use validate_only: true first to dry-run. Operations are atomic unless partial_failure is true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kiarashedraki/google-ads-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server