google-ads-mcp-plus
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_ADS_DEVELOPER_TOKEN | Yes | Your Google Ads developer token. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| server_statusA | Report this server's mode, allowlisted accounts, and safety limits. Call this first if you are unsure what the server is permitted to do. |
| list_accountsA | List Google Ads accounts these credentials can reach. Returns every accessible customer ID, marking which are allowlisted for this server. |
| run_auditA | Audit an account and report what is costing money or hiding data. Runs 12 read-only checks: conversion tracking, campaigns spending with no conversions, budget- and rank-lost impression share, wasteful search terms, low Quality Score keywords, weak RSAs, disapproved ads, missing negatives and sitelinks. Never modifies anything. Args: customer_id: Account to audit (digits, dashes are stripped). days: Lookback window; the window ends yesterday. Default 30. min_spend: Ignore entities below this spend, in account currency. |
| gaql_queryA | Run a read-only GAQL query against an account. Use this for anything the packaged tools do not cover. Only SELECT queries are accepted — this cannot modify data. Args: customer_id: Account to query. query: A GAQL SELECT statement. limit: Maximum rows to return (default 100, hard cap 1000). |
| list_campaignsA | List campaigns with their budget, status, spend and conversions. Args: customer_id: Account to inspect. days: Metrics lookback window, ending yesterday. status: ENABLED, PAUSED, REMOVED, or ALL. |
| update_campaign_budgetA | Change a campaign's daily budget. Two-phase: preview, then confirm. Call without confirm_token to see the current value, the proposed value, and the percentage change. If it is within limits you receive a token; call again with that token to apply it. Args: customer_id: Account holding the campaign. campaign_id: Campaign whose budget changes. new_daily_budget: New daily amount in account currency. confirm_token: Token from the preview call. Omit for a preview. |
| set_campaign_statusA | Pause or enable a campaign. Two-phase: preview, then confirm. Args: customer_id: Account holding the campaign. campaign_id: Campaign to change. status: PAUSED or ENABLED. confirm_token: Token from the preview call. Omit for a preview. |
| add_negative_keywordsA | Add campaign-level negative keywords. Two-phase: preview, then confirm. This is the safest write operation: negatives only ever reduce spend. Args: customer_id: Account holding the campaign. campaign_id: Campaign to add negatives to. keywords: Terms to exclude. match_type: EXACT, PHRASE, or BROAD. Default EXACT. confirm_token: Token from the preview call. Omit for a preview. |
| create_performance_max_campaignA | Create a Performance Max campaign, PAUSED. Two-phase: preview, confirm. Without a token, this validates the whole request against the API (validate_only) and returns a preview plus a confirmation token — nothing is created. Call again with the token to create it for real. Everything goes in one atomic mutate: budget, campaign, geo/language criteria, negatives, asset group, text assets, and reused image and extension assets. If anything fails, nothing is created. Image and extension assets are REUSED by ID — this tool never uploads
images. Find existing asset IDs with gaql_query on the Args: customer_id: Account to create in. Must be allowlisted. campaign_name: Name of the new campaign. daily_budget: Daily budget in account currency. final_url: Landing page for the asset group. business_name: Advertiser name, max 25 characters. headlines: At least 3, each max 30 characters. long_headlines: At least 1, each max 90 characters. descriptions: At least 2, each max 90 characters. geo_target_ids: Geo target constant IDs. language_ids: Language constant IDs (1002 = French, 1000 = English). negative_keywords: Phrase-match exclusions, e.g. brand terms. marketing_image_asset_ids: Existing 1.91:1 image asset IDs. square_marketing_image_asset_ids: Existing 1:1 image asset IDs. logo_asset_ids: Existing logo asset IDs. sitelink_asset_ids: Existing sitelink asset IDs to link. callout_asset_ids: Existing callout asset IDs (max 20). bidding: maximize_conversions or maximize_conversion_value. target_cpa: Optional target CPA, account currency. target_roas: Optional target ROAS, e.g. 3.5. confirm_token: Token from the preview call. Omit for a preview. |
| validate_pmax_assetsA | Check Performance Max TEXT assets against Google's limits — offline. No account, no credentials needed. Use this while drafting copy, before creating anything: at least 3 headlines (30 chars), 1 long headline (90 chars), 2 descriptions (90 chars), and a business name (25 chars). This checks text only. Creating a campaign additionally requires at least one marketing image (1.91:1), one square marketing image (1:1), and one logo — those are validated by create_performance_max_campaign, not here. |
| create_shopping_campaignA | Create a Standard Shopping campaign, PAUSED. Two-phase. Builds budget, campaign, ad group, an empty product ad, and an exhaustive listing group tree: one biddable node per included value, plus a mandatory excluded catch-all for everything else. Without a token you get a preview validated by the API; call again with the token to create it. Args: customer_id: Account to create in. Must be allowlisted. campaign_name: Name of the new campaign. daily_budget: Daily budget in account currency. merchant_id: Merchant Center account holding the product feed. feed_label: Feed label, exactly as it appears in Merchant Center. This replaced sales_country. include_values: Values to bid on, e.g. the exact product_type strings from Merchant Center. Everything else is excluded. dimension: product_type_level1/2/3, brand, condition, or item_id. ad_group_name: Defaults to the campaign name. campaign_priority: 0 low, 1 medium, 2 high. Decides which campaign bids when several cover the same product. geo_target_ids: Geo target constant IDs. language_ids: Language constant IDs (1002 French, 1000 English). confirm_token: Token from the preview call. Omit for a preview. |
| apply_negative_keyword_listA | Create or extend a SHARED negative keyword list. Two-phase. Prefer this over add_negative_keywords whenever the same exclusions apply to several campaigns: one shared list means one edit updates them all, instead of duplicating negatives campaign by campaign. Idempotent — an existing list of the same name is reused, and only missing keywords and links are added. Running it twice does nothing. Args: customer_id: Account holding the campaigns. list_name: Name of the shared list, e.g. "Brand exclusions". keywords: Terms to exclude. campaign_ids: Campaigns the list applies to. match_type: EXACT, PHRASE, or BROAD. PHRASE is the usual choice. confirm_token: Token from the preview call. Omit for a preview. |
| validate_ad_copyA | Check ad copy against Google's character limits — offline, no account. Use this while drafting, before creating anything. Headlines must be <=30 characters, descriptions <=90, paths <=15. Counts CJK and full-width characters as two, matching the Google UI. |
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/monsieurgoodmood/google-ads-mcp-plus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server