Full Google Ads, Analytics & Tag Manager lifecycle MCP for AI agents β 57 tools.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Google Tag Manager and Google Ads MCP server β audit, fix, and manage GTM containers and Google Ads campaigns, budgets, conversions, placements, geo targeting, and auto-apply recommendations from AI agents (Claude, Cursor, and any MCP client).
Part of the AINative open-source tools.
57 tools across 7 categories: accounts, tags, triggers, audit, versions/publishing, and a complete Google Ads lifecycle (39 tools) β build, publish, track, and adjust campaigns end-to-end: create campaigns/ad groups/RSAs/RDAs/HTML5 ads, Performance Max, bidding strategy & bid control, ad extensions (sitelinks/callouts/snippets/call), audiences, offline gclid conversion import, geo/language targeting, budgets, placements, and auto-apply recommendations β fully programmatic, no UI required.
Keywords: google tag manager mcp, google ads mcp, gtm mcp server, google ads api mcp, conversion tracking mcp, campaign budget management, negative placement / click-fraud exclusion, geo targeting, auto-apply recommendations, recommendation subscriptions, conversion goals, Smart Bidding, PPC automation, ad spend control, Claude MCP, model context protocol, AI agent advertising tools.
The server authenticates via a Google Cloud service account with Tag Manager API access. There is no browser OAuth flow β it's designed for headless/agent use.
tagmanager.googleapis.com) and click Enablegtm-mcp-agent)This is the step most people miss. The GCP service account needs to be added as a user inside Google Tag Manager separately:
gtm-mcp-agent@your-project.iam.gserviceaccount.com)Note: If you only need read access (auditing), Read permission is sufficient.
Or add a .mcp.json to your project root:
Security: Add
.mcp.jsonto.gitignoreif it contains key paths. Use.mcp.example.jsonas a template for teammates.
Ask Claude:
Expected: your GTM account name and ID. If you get an empty array [], the service account hasn't been added to GTM yet (Step 3 above).
This MCP server manages Google Tag Manager containers β tags, triggers, variables, and publishing.
If you see events like ads_conversion_PURCHASE_1 in GA4, those may be coming from Google Ads auto-imported conversions (via GA4 β Google Ads account linking), not GTM tags. In that case:
gtm_find_misfiring_conversion_tags to fix itTo tell the difference: if your GTM container has no tags (gtm_list_tags returns []), the conversion event is coming from outside GTM.
The most common GTM billing issue β a Google Ads conversion tag fires on every page view instead of only on purchase confirmation.
| Tool | Description |
|---|---|
gtm_list_accounts | List all accessible GTM accounts |
gtm_list_containers | List containers in an account |
gtm_get_container | Get container details |
| Tool | Description |
|---|---|
gtm_list_tags | List all tags in a workspace |
gtm_get_tag | Get full tag configuration |
gtm_update_tag | Update a tag (trigger, params, name) |
gtm_delete_tag | Delete a tag |
| Tool | Description |
|---|---|
gtm_list_triggers | List all triggers |
gtm_get_trigger | Get trigger configuration |
gtm_create_trigger | Create a new trigger |
gtm_update_trigger | Update an existing trigger |
| Tool | Description |
|---|---|
gtm_audit_container | Full container audit β health score 0β100, issues list |
gtm_find_misfiring_conversion_tags | Find conversion tags firing on All Pages instead of specific events |
gtm_fix_conversion_tag_trigger | Fix a misfiring tag β creates scoped Custom Event trigger, rewires tag |
| Tool | Description |
|---|---|
gtm_list_workspaces | List workspaces |
gtm_get_workspace_status | View pending changes before publishing |
gtm_create_version | Create a named version from workspace changes |
gtm_publish | Publish workspace to live |
Full programmatic campaign lifecycle β an agent can build, launch, measure, and optimize a campaign end-to-end with no UI.
Build (campaigns, ad groups, ads, assets)
| Tool | Description |
|---|---|
gads_create_campaign | Create a Search/Display campaign with a dedicated budget + correct network settings |
gads_create_pmax_campaign | One-call Performance Max builder β campaign + budget + asset group (headlines, descriptions, images, logo) in a single call; Google's AI optimizes across Search/Display/YouTube/Gmail |
gads_create_ad_group | Create an ad group inside a campaign |
gads_create_responsive_search_ad | Create an RSA (3β15 headlines, 2β4 descriptions, length-validated) |
gads_create_responsive_display_ad | Create a responsive display ad |
gads_create_html5_ad | Create an HTML5 upload (animated) display ad from a media bundle |
gads_upload_image_asset | Upload an image asset by URL |
gads_upload_media_bundle | Upload an HTML5 media-bundle (zip) asset |
Bidding & bids
| Tool | Description |
|---|---|
gads_set_bidding_strategy | Swap bidding strategy (Maximize Clicks / Maximize Conversions / Target CPA / Target ROAS / Manual CPC) β reads back the change to confirm it landed (empty-payload swaps silently no-op) |
gads_set_ad_group_bid | Set an ad group's default max CPC bid |
gads_set_keyword_bid | Set a specific keyword's max CPC bid |
Ad control
| Tool | Description |
|---|---|
gads_set_ad_status | Pause / enable / remove an individual ad |
gads_request_ad_review | Request re-review (appeal) of a disapproved/limited ad where API-appealable; honest result for UI-only policy topics |
Ad extensions (assets)
| Tool | Description |
|---|---|
gads_add_sitelink | Create + attach a sitelink |
gads_add_callout | Create + attach a callout (e.g. "7-Day Free Trial") |
gads_add_structured_snippet | Create + attach a structured snippet |
gads_add_call_extension | Create + attach a call (phone) extension |
Audiences & conversions (attribution)
| Tool | Description |
|---|---|
gads_add_audience_to_ad_group | Attach a user-list audience (observation or targeting) |
gads_create_conversion_action | Create an offline (UPLOAD_CLICKS) conversion action for gclid import |
gads_upload_click_conversion | Upload an offline conversion keyed by gclid β ties a real signup back to the ad click that drove it |
Conversions & reporting
| Tool | Description |
|---|---|
gads_list_conversion_actions | List all conversion actions β name, ID, counting type, status, category |
gads_update_conversion_counting | Fix counting type (ONE_PER_CLICK vs MANY_PER_CLICK) for a conversion action |
gads_audit_conversion_goals | Audit all conversion goals β find misconfigured counting, inactive conversions |
gads_set_conversion_goal_inclusion | Include/exclude a conversion action from the primary Conversions metric & Smart Bidding (e.g. stop a PAGE_VIEW action inflating conversions) |
gads_get_account_performance | Account-level performance β impressions, clicks, cost, conversions by date range |
Campaigns & budgets
| Tool | Description |
|---|---|
gads_update_campaign_budget | Set a campaign's daily budget (scale spend up or down) |
gads_pause_campaign | Pause a campaign β stop ad serving immediately |
gads_create_keyword | Add a keyword to an ad group |
gads_remove_keyword | Remove (pause) a keyword from an ad group |
Targeting & fraud protection
| Tool | Description |
|---|---|
gads_remove_campaign_criterion | Remove a campaign criterion (targeted geo/placement/keyword) by ID β e.g. stop targeting a country sending invalid traffic |
gads_add_negative_placement | Exclude a website/app placement (block click-fraud sites like quiz farms and junk apps) |
gads_add_geo_target | Add a geo target (presence-only by default β the India-fraud-safe setting) |
gads_set_presence_only | Force presence-only geo targeting on a campaign |
gads_add_negative_keyword | Add a campaign-level negative keyword |
gads_add_language_target | Add a language target to a campaign |
Auto-apply recommendations
| Tool | Description |
|---|---|
gads_list_recommendation_subscriptions | List auto-apply recommendation subscriptions and their status (audit what auto-applies) |
gads_set_recommendation_subscription | Turn auto-apply recommendations ON/OFF (pause budget/bid recommendations that can silently raise spend) |
The Google Ads tools use OAuth2 credentials. Provide them via environment variables or your ADC file:
Developer token: Get yours at Google Ads API Center. A test token works for sandbox accounts; a standard token is required for production.
Note on GA4-imported conversions: If you see events like
ads_conversion_PURCHASE_1in GA4 butgads_list_conversion_actionsreturns an empty list, those conversions are GA4-imported into Google Ads (configured under Google Ads β Tools β Conversions). They are not standalone conversion actions and must be managed through the Google Ads UI.
| Symptom | Cause | Fix |
|---|---|---|
gtm_list_accounts returns [] | Service account not added to GTM | Add service account email in GTM β Admin β User Management |
Tag Manager API has not been used error | API not enabled | Enable at console.cloud.google.com β APIs & Services β Tag Manager API |
Permission denied on tag update | Service account has Read-only | Upgrade to Publish permission in GTM User Management |
gtm_list_tags returns [] | Workspace is empty (no tags published) | Check a different workspaceId, or confirm tags exist in GTM dashboard |
| Conversion event in GA4 but no matching GTM tag | Event comes from Google Ads auto-import | Fix in Google Ads β Tools β Conversions, not in GTM |
MIT β AINative Studio
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/ainative-gtm-mcp)<a href="https://allmcps.com/mcp/ainative-gtm-mcp"><img src="https://allmcps.com/api/badge/ainative-gtm-mcp?style=directory" alt="Ainative Gtm Mcp on AllMCPs" /></a>