google-ads-mcp-write
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GOOGLE_CLOUD_PROJECT | No | Quota project, if your credentials do not carry one. | |
| GOOGLE_ADS_API_VERSION | No | Google Ads REST API version. | v25 |
| GOOGLE_ADS_MCP_AUDIT_LOG | No | Where the audit log is written. | ~/.local/share/google-ads-mcp-write/audit.jsonl |
| GOOGLE_ADS_DEVELOPER_TOKEN | Yes | Your Google Ads developer token with Basic or Standard access. | |
| GOOGLE_ADS_LOGIN_CUSTOMER_ID | No | Manager (MCC) id to act through, when using a manager account. | |
| GOOGLE_ADS_MCP_WRITE_ENABLED | No | Set to 0 to block every write without uninstalling anything. | 1 |
| GOOGLE_ADS_MCP_WRITE_CUSTOMERS | Yes | Comma-separated Google Ads customer ids the server is allowed to change, e.g. 1234567890,9876543210. With this empty, every write is refused. | |
| GOOGLE_ADS_MCP_DEFAULT_LANGUAGES | No | Default language ids for new campaigns, e.g. 1000 (English), 1014 (Portuguese). | |
| GOOGLE_ADS_MCP_MAX_BUDGET_MICROS | No | Highest daily budget allowed, in micros. 200000000 = 200.00. | 200000000 |
| GOOGLE_ADS_MCP_DEFAULT_GEO_TARGETS | No | Default location ids for new campaigns, e.g. 2840 (United States), 2076 (Brazil). | |
| GOOGLE_ADS_MCP_MAX_BUDGET_INCREASE_PCT | No | Largest increase allowed in one budget change, in percent. | 50 |
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": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| write_statusA | Show the active guardrails: allowed accounts, budget limits and kill switch. |
| list_campaignsB | List campaigns with id, status and budget. Read-only, to build plans. |
| set_campaign_statusA | Pause or resume a campaign. Without confirm_token returns the plan; with it, executes. |
| set_ad_group_statusC | Pause or resume an ad group. |
| set_keyword_statusC | Pause or resume several keywords of the same ad group in one operation. |
| set_campaign_budgetC | Change a campaign's daily budget (account currency), within the cap and max increase. |
| set_campaign_manual_cpcC | Switch campaigns to manual CPC (no enhanced CPC); ad group bids apply again. |
| pause_auto_apply_recommendationsC | Turn off auto-applied recommendations (every active subscription). |
| create_search_campaignA | Create a PAUSED Search campaign with a budget, location/language targeting and one ad group. Amounts are in the account currency. It is created paused on purpose: nothing spends until you resume it explicitly. geo_target_ids and language_ids are Google criterion ids (e.g. 2076 = Brazil, 1014 = Portuguese); when omitted they come from GOOGLE_ADS_MCP_DEFAULT_GEO_TARGETS / GOOGLE_ADS_MCP_DEFAULT_LANGUAGES. budget_id reuses an existing budget instead of creating one, which helps to resume a sequence that failed after the budget was already created. |
| create_ad_groupC | Create an ad group in an existing campaign (CPC in the account currency). |
| create_keywordC | Create several keywords in an ad group. match_type: EXACT, PHRASE or BROAD. |
| add_negative_keywordC | Add several campaign-level negative keywords, blocking unwanted searches. |
| create_responsive_search_adC | Create a responsive search ad. Needs 3-15 headlines (30 chars) and 2-4 descriptions (90). |
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 13 tools
Tools cleanly partition by resource+action: campaign vs ad group vs keyword status setters, plus distinct budget, CPC, and creation tools. Minor friction comes from set_campaign_status having a plan/confirm_token execute mode while other mutators don't state one, and write_status sounding like a write operation when it is a read-only guardrail view.
Nearly all names follow verb_noun (set_campaign_status, create_ad_group, add_negative_keyword, list_campaigns). Deviations are small: write_status is a noun-ish outlier for a read tool, and set_campaign_manual_cpc swaps the noun slot compared to the set_X_status pattern.
13 tools is well within the sweet spot and every tool maps to a concrete write operation or safety check. Nothing looks redundant or padded for the stated write-focused scope.
Creation (campaign, ad group, keyword, RSA, negative keyword), pausing, budgets, and guardrails are covered, but there are notable gaps: only list_campaigns exists (no list_ad_groups/keywords/ads), no delete/remove operations, and no tool to set ad group or keyword bids even though manual CPC defers to 'ad group bids'.