Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.AINative-Studio/ainative-gtm-mcp

NPM · @AINATIVE/GTM-MCP · SCANNED SEP 20

Full Google Ads, Analytics & Tag Manager lifecycle MCP for AI agents — 57 tools.

Available components

0 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security89
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects uuid 9.0.1, reached via googleapis > googleapis-common > uuid. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 71 of 222 dependencies flagged as unhealthy (3 deprecated). View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability73
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 6433 tokens (~112/item across 57 items; 57 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
  • Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 75% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "gtm_delete_tag" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 57 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.AINative-Studio/ainative-gtm-mcp server?

io.github.AINative-Studio/ainative-gtm-mcp runs locally as an npm package, launched with npx -y @ainative/gtm-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @ainative/gtm-mcp

# add to Claude Code
claude mcp add ainative-studio-ainative-gtm-mcp -- npx -y @ainative/gtm-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "ainative-studio-ainative-gtm-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ainative/gtm-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ainative-studio-ainative-gtm-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ainative/gtm-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ainative-studio-ainative-gtm-mcp -- npx -y @ainative/gtm-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ainative-studio-ainative-gtm-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ainative/gtm-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ainative-studio-ainative-gtm-mcp --command npx --arg -y --arg @ainative/gtm-mcp
# ~/.hermes/config.yaml
mcp_servers:
  ainative-studio-ainative-gtm-mcp:
    command: "npx"
    args: ["-y", "@ainative/gtm-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ainative-studio-ainative-gtm-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@ainative/gtm-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ainative-studio-ainative-gtm-mcp -t stdio -c npx -a -y @ainative/gtm-mcp
// mcp.json
{
  "mcpServers": {
    "ainative-studio-ainative-gtm-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ainative/gtm-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 19 Sept 26 +1
    • Stability: 0.97 → pass security
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 −4
    • Stability: pass → 0.77 functional
  • 11 Sept 26 +1
    • Stability: 0.97 → pass security
  • 9 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/@ainative/gtm-mcp@0.4.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 2 findings
ID CVE Severity Vector Fix available
GHSA-528h-pc64-c93x CVE-2026-71429 medium CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-w5hq-g745-h8pq CVE-2026-41907 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 222 packages
Packages resolved 222
Deprecated 3
Stale 68
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 57 exposed · ~6,433 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
gads_add_audience_to_ad_group ~136

Attach an audience segment (user_list resource) to an ad group. mode=OBSERVATION measures the audience without restricting reach; mode=TARGETING restricts serving to it. Refs #5764.

NameTypeReqDescription
adGroupIdstringyesAd group ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
modestringOBSERVATION = measure only (recommended); TARGETING = restrict serving.
userListResourcestringyesuser_list resource name (e.g. customers/123/userLists/456).

No output schema declared.

No examples provided.

gads_add_call_extension ~117

Create a call asset (phone number) and attach it to a campaign so ads can show a call button. Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign to attach the call extension to.
countryCodestring2-letter country code. Default US.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
phoneNumberstringyesPhone number in national format, e.g. "415-555-0100".

No output schema declared.

No examples provided.

gads_add_callout ~96

Create a callout asset (short promotional phrase, e.g. "Free 7-Day Trial") and attach it to a campaign. Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign to attach the callout to.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
textstringyesCallout text (≤25 chars).

No output schema declared.

No examples provided.

gads_add_geo_target ~179

Add a geographic target (or exclusion) to a campaign, using PRESENCE-only targeting by default (people IN the location, not merely interested) — this is the India-fraud-safe setting. Pass negative:true to exclude a geo. Common geo IDs: 2840=US, 2826=UK, 2124=CA, 2036=AU, 2276=DE, 2356=India. Refs #5742.

NameTypeReqDescription
campaignIdstringyesCampaign ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
geoTargetConstantIdstringyesgeo_target_constant id, e.g. "2840" for US.
negativebooleantrue = exclude this geo. Default false (positive target).

No output schema declared.

No examples provided.

gads_add_language_target ~116

Add a language target to a campaign so ads serve to users with that language setting. Common language constant ids: 1000=English, 1003=Spanish, 1001=German, 1002=French. Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
languageConstantIdstringlanguage_constant id. 1000=English (default).

No output schema declared.

No examples provided.

gads_add_negative_keyword ~98

Add a negative keyword at the CAMPAIGN level (blocks the term across the campaign). Refs #5743.

NameTypeReqDescription
campaignIdstringyesCampaign ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
keywordstringyesNegative keyword text (e.g. "free").
matchTypestringMatch type. Default BROAD.

No output schema declared.

No examples provided.

gads_add_negative_placement ~130

Add a negative PLACEMENT (website URL or mobile app) exclusion to a campaign so ads never serve there. Use to block click-fraud / low-quality placements (e.g. qureka.com, omegleweb.io, junk Google Play apps).

NameTypeReqDescription
campaignIdstringyesCampaign ID to add the exclusion to
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
placementUrlstringyesPlacement to exclude — a website URL (e.g. "qureka.com") or app id.

No output schema declared.

No examples provided.

gads_add_sitelink ~143

Create a sitelink asset (link text + final URL, optional 2 description lines) and attach it to a campaign. Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign to attach the sitelink to.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
description1stringOptional description line 1 (≤35 chars).
description2stringOptional description line 2 (≤35 chars).
finalUrlstringyesDestination URL.
linkTextstringyesSitelink text (≤25 chars).

No output schema declared.

No examples provided.

gads_add_structured_snippet ~131

Create a structured snippet asset (a header like "Services" or "Types" + up to 10 values) and attach it to a campaign. Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign to attach the snippet to.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
headerstringyesSnippet header (must be a valid Google header, e.g. "Types", "Services", "Brands", "Features").
valuesarrayyes3–10 snippet values.

No output schema declared.

No examples provided.

gads_audit_conversion_goals ~65

Audit all Google Ads conversion goals — find misconfigured counting types, inactive conversions, and conversions with no recent activity. Returns a prioritized fix list.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_create_ad_group ~116

Create an ad group inside a campaign. Refs #5740.

NameTypeReqDescription
campaignIdstringyesCampaign ID to add the ad group to.
channelstringSEARCH_STANDARD or DISPLAY_STANDARD ad group type.
cpcBidUsdnumberOptional default max CPC bid in USD.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
namestringyesAd group name.
statusstringDefault ENABLED.

No output schema declared.

No examples provided.

gads_create_campaign ~199

Create a NEW Google Ads campaign with its own dedicated budget. Handles the full create correctly: makes a non-shared CampaignBudget first, then the campaign referencing it, with network settings (Search Partners OFF, Display Expansion OFF) and MAXIMIZE_CONVERSIONS bidding. Defaults to PAUSED so you review before it serves. Refs #5739.

NameTypeReqDescription
biddingStrategystringBidding strategy. Default MAXIMIZE_CONVERSIONS.
channelstringyesSEARCH or DISPLAY campaign.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
dailyBudgetUsdnumberyesDaily budget in USD (e.g. 14 for $14/day).
namestringyesCampaign name (also used for the budget name).
statusstringENABLED to serve immediately (after ad review), PAUSED to review first. Default PAUSED.

No output schema declared.

No examples provided.

gads_create_conversion_action ~162

Create an offline conversion action (type UPLOAD_CLICKS) for importing real outcomes — e.g. "Signup (offline)" or "Paid Subscription (offline)" — keyed by gclid. Returns the conversion action id + resource name to use with gads_upload_click_conversion. Refs #5764.

NameTypeReqDescription
categorystringConversion category.
countingTypestringONE_PER_CLICK for signups/subscriptions. Default ONE_PER_CLICK.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
defaultValueUsdnumberOptional default conversion value in USD.
namestringyesConversion action name, e.g. "Signup (offline gclid)".

No output schema declared.

No examples provided.

gads_create_html5_ad ~193

Create an HTML5 display upload ad (DisplayUploadAd, HTML5_UPLOAD_AD) in a DISPLAY ad group from a previously-uploaded MEDIA_BUNDLE asset. This is the real animated HTML5 creative served via API — no manual UI upload. Note: the account must be eligible for HTML5 upload ads (enforced at create time; a policy error means it is not yet allowlisted). Refs #5744.

NameTypeReqDescription
adGroupIdstringyesDISPLAY ad group ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
finalUrlstringyesLanding page URL (must match the clickTag domain).
mediaBundleAssetstringyesresource_name of the uploaded MEDIA_BUNDLE asset (from gads_upload_media_bundle).
namestringOptional ad name.
statusstring

No output schema declared.

No examples provided.

gads_create_keyword ~89

Add a keyword to an ad group. Use this to move high-performing keywords between campaigns.

NameTypeReqDescription
adGroupIdstringyesAd group ID to add the keyword to
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
keywordstringyesThe keyword text
matchTypestringyesKeyword match type

No output schema declared.

No examples provided.

gads_create_pmax_campaign ~328

ONE-CALL Performance Max "campaign builder": creates a PERFORMANCE_MAX campaign + dedicated budget + an asset group with the required assets (3-15 headlines ≤30, 1 long headline ≤90, 2-5 descriptions ≤90, business name, and marketing/square/logo images by URL), then Google's AI auto-optimizes across Search/Display/YouTube/Gmail. Defaults PAUSED so you review first. This is the closest programmatic equivalent to Google's AI Campaign Builder. Refs #5764.

NameTypeReqDescription
businessNamestringyesBusiness name (≤25 chars), e.g. "AINative Studio".
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
dailyBudgetUsdnumberyesDaily budget in USD.
descriptionsarrayyes2–5 descriptions, each ≤90 chars.
finalUrlstringyesLanding page URL.
headlinesarrayyes3–15 headlines, each ≤30 chars.
logoImageUrlstringyesSquare logo URL (≥128x128, 1:1).
longHeadlinestringyesOne long headline ≤90 chars.
marketingImageUrlstringyesLandscape 1.91:1 marketing image URL (≥600x314).
namestringyesCampaign name (also names the budget + asset group).
squareImageUrlstringyesSquare 1:1 marketing image URL (≥300x300).
statusstringDefault PAUSED.

No output schema declared.

No examples provided.

gads_create_responsive_display_ad ~252

Create a Responsive Display Ad in a DISPLAY ad group from uploaded image assets + text. Provide marketing image asset resource_names (landscape 1.91:1) and square (1:1), plus headlines, descriptions, business name, and final URL. Refs #5744.

NameTypeReqDescription
adGroupIdstringyesDISPLAY ad group ID.
businessNamestringyesBusiness name (≤25 chars), e.g. "AINative".
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
descriptionsarrayyes1–5 descriptions (≤90 chars).
finalUrlstringyesLanding page URL.
headlinesarrayyes1–5 short headlines (≤30 chars).
logoImageAssetsarrayOptional square logo image asset resource names.
longHeadlinestringyesOne long headline (≤90 chars).
marketingImageAssetsarrayyesResource names of landscape (1.91:1) image assets.
squareImageAssetsarrayyesResource names of square (1:1) image assets.
statusstring

No output schema declared.

No examples provided.

gads_create_responsive_search_ad ~201

Create a Responsive Search Ad in an ad group. 3–15 headlines (≤30 chars), 2–4 descriptions (≤90 chars), and final URL(s). Validates lengths before sending. Refs #5741.

NameTypeReqDescription
adGroupIdstringyesAd group ID to add the ad to.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
descriptionsarrayyes2–4 descriptions, each ≤90 chars.
finalUrlstringyesLanding page URL (e.g. https://ainative.studio/opencode).
headlinesarrayyes3–15 headlines, each ≤30 chars.
path1stringOptional display path 1 (≤15 chars).
path2stringOptional display path 2 (≤15 chars).
statusstringDefault ENABLED.

No output schema declared.

No examples provided.

gads_get_account_performance ~71

Get top-level Google Ads account performance — impressions, clicks, cost, conversions for a date range. Quick health check for ad spend efficiency.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
dateRangestring

No output schema declared.

No examples provided.

gads_list_conversion_actions ~75

List all Google Ads conversion actions for the account — name, ID, counting type, status, and category. Use this to audit which conversions are set up and how they are counted.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID (dashes optional). Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_list_recommendation_subscriptions ~80

List Google Ads auto-apply recommendation subscriptions (type + status). ENABLED means that recommendation type auto-applies without review — the mechanism that can silently raise budgets/bids. Use to audit what auto-applies.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_pause_campaign ~57

Pause a Google Ads campaign. Stops all ad serving immediately.

NameTypeReqDescription
campaignIdstringyesCampaign ID to pause
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_remove_campaign_criterion ~156

Remove a campaign-level criterion (targeted location/geo, placement, or keyword) by its criterion ID. Use to stop targeting a geo that is bringing invalid traffic — e.g. remove a positively-targeted country. Note: you cannot add a NEGATIVE location for a geo that is positively targeted; remove the positive criterion instead.

NameTypeReqDescription
campaignIdstringyesCampaign ID that owns the criterion
criterionIdstringyesCriterion ID to remove (campaign_criterion.criterion_id). For a geo target this is the geo_target_constant id, e.g. 2356 for India.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_remove_keyword ~69

Remove (pause) a keyword from an ad group.

NameTypeReqDescription
adGroupIdstringyesAd group ID
criterionIdstringyesKeyword criterion ID to remove
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_request_ad_review ~153

Request re-review (appeal) of a disapproved or approved-limited ad via the API. Uses the AdGroupAd appeal (promote to review) mechanism. NOTE: only a subset of policy topics are API-appealable; MISLEADING_AD_DESIGN and some others must still be appealed in the UI — this tool returns a clear notAppealable result in that case rather than pretending it worked. Refs #5764.

NameTypeReqDescription
adGroupIdstringyesAd group ID that owns the ad.
adIdstringyesAd ID to request review for.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_search ~97

Run a read-only GAQL query and return rows — for looking up campaign/budget/ad_group/criterion IDs without the google-ads MCP. SELECT queries only. Refs #5745.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
gaqlstringyesA GAQL SELECT query, e.g. "SELECT campaign.id, campaign.name FROM campaign".

No output schema declared.

No examples provided.

gads_set_ad_group_bid ~105

Set the default max CPC bid (USD) on an existing ad group. Use to raise/lower delivery on a specific ad group under Manual CPC / Maximize Clicks. Refs #5764.

NameTypeReqDescription
adGroupIdstringyesAd group ID.
cpcBidUsdnumberyesNew default max CPC bid in USD.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_set_ad_status ~124

Set an individual ad's status to ENABLED, PAUSED, or REMOVED (ad_group_ad). Use to pause a throttled/underperforming ad or remove a rejected one without touching the ad group. Refs #5764.

NameTypeReqDescription
adGroupIdstringyesAd group ID that owns the ad.
adIdstringyesAd ID (ad_group_ad.ad.id).
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
statusstringyesTarget status.

No output schema declared.

No examples provided.

gads_set_bidding_strategy ~286

Change an existing campaign's bidding strategy (MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, TARGET_CPA, TARGET_ROAS, MANUAL_CPC). CRITICAL: switching a standard strategy with an empty payload is a silent no-op in the client — this tool forces a non-empty sub-field and READS BACK bidding_strategy_type to confirm the swap actually landed. Use MAXIMIZE_CLICKS with a cpcBidCeilingUsd to break a new-campaign cold-start (no conversion history). Refs #5764.

NameTypeReqDescription
campaignIdstringyesCampaign ID to update.
cpcBidCeilingUsdnumberFor MAXIMIZE_CLICKS: max CPC ceiling in USD (strongly recommended to avoid runaway CPC). Required for MAXIMIZE_CLICKS.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
enhancedCpcbooleanFor MANUAL_CPC: enable Enhanced CPC. Default false.
strategystringyesTarget bidding strategy.
targetCpaUsdnumberFor TARGET_CPA: target cost per acquisition in USD.
targetRoasnumberFor TARGET_ROAS: target return on ad spend as a fraction (e.g. 3.0 = 300%).

No output schema declared.

No examples provided.

gads_set_campaign_status ~123

Set a Google Ads campaign status to ENABLED or PAUSED. Use ENABLED to (re)enable a paused campaign — this is the enable capability the server previously lacked (only pause existed), so agents no longer need the UI to resume a campaign. Refs #5444.

NameTypeReqDescription
campaignIdstringyesCampaign ID to update
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
statusstringyesTarget status: ENABLED (serve) or PAUSED (stop).

No output schema declared.

No examples provided.

gads_set_conversion_goal_inclusion ~144

Control whether a conversion action counts toward the primary "Conversions" metric (and thus Smart Bidding). Set biddable=false to keep an action TRACKED but stop it optimizing bids — the fix for a PAGE_VIEW action inflating conversions. Operates on the customer-level conversion goal for the action category.

NameTypeReqDescription
biddablebooleanyestrue = include in Conversions metric / bidding; false = tracked only, excluded from bidding.
conversionActionIdstringyesNumeric conversion action ID (from gads_list_conversion_actions)
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_set_keyword_bid ~111

Set the max CPC bid (USD) on a specific keyword (ad group criterion). Refs #5764.

NameTypeReqDescription
adGroupIdstringyesAd group ID that owns the keyword.
cpcBidUsdnumberyesNew max CPC bid in USD for this keyword.
criterionIdstringyesKeyword criterion ID (ad_group_criterion.criterion_id).
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_set_presence_only ~86

Set a campaign to PRESENCE-only geo targeting (target users physically IN the targeted locations, not those merely interested). This is the setting that prevents the India interest-traffic fraud. Refs #5742.

NameTypeReqDescription
campaignIdstringyesCampaign ID.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_set_recommendation_subscription ~193

Turn Google Ads auto-apply recommendations ON or OFF. Set enabled=false to PAUSE (stop auto-applying — recommendations are still suggested, just not applied automatically). Pass all=true to apply to every resolvable subscription (the fix for runaway auto-applied budget/bid changes). Subscriptions with an UNKNOWN type/resource name cannot be mutated by the API and are skipped and reported.

NameTypeReqDescription
allbooleanIf true, apply to every resolvable subscription. Ignores resourceName.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
enabledbooleanyestrue = ENABLED (auto-apply on); false = PAUSED (auto-apply off).
resourceNamestringSpecific subscription resource_name to set (from gads_list_recommendation_subscriptions). Required when all is not true.

No output schema declared.

No examples provided.

gads_update_campaign_budget ~116

Update the daily budget of a Google Ads campaign. Provide the campaign budget ID (from the campaign) and the new daily amount in dollars. Use to scale spend up or down.

NameTypeReqDescription
campaignBudgetIdstringyesNumeric campaign budget ID (campaign_budget.id, from a campaign query).
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
dailyAmountUsdnumberyesNew daily budget in USD (e.g. 50 for $50/day).

No output schema declared.

No examples provided.

gads_update_conversion_counting ~117

Update the counting type of a Google Ads conversion action. Common fix: change counting_type from MANY_PER_CLICK to ONE_PER_CLICK for purchase conversions to avoid inflated counts.

NameTypeReqDescription
conversionActionIdstringyesNumeric conversion action ID (from gads_list_conversion_actions)
countingTypestringyesONE_PER_CLICK = count once per ad click (recommended for purchases). MANY_PER_CLICK = count every conversion.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.

No output schema declared.

No examples provided.

gads_upload_click_conversion ~288

Upload an OFFLINE click conversion keyed by gclid — the attribution backbone that ties a real signup/subscription back to the Google Ads click that drove it. Feeds Smart Bidding with real outcomes instead of pageviews. gclid is captured at signup. conversionDateTime must be after the click and in "yyyy-mm-dd hh:mm:ss+|-hh:mm" format. NOTE (2026): Google now routes NEW integrations to the Data Manager API — the legacy ConversionUploadService this calls is limited to existing users and returns a clear "use the Data Manager API" error for new accounts. If you get that error, the account needs the Data Manager path (see #5765). The tool surfaces the real error rather than silently failing. Refs #5764.

NameTypeReqDescription
conversionActionIdstringyesConversion action ID (from gads_create_conversion_action / gads_list_conversion_actions).
conversionDateTimestringyesConversion time, format "yyyy-mm-dd hh:mm:ss+hh:mm" (must be AFTER the click).
currencyCodestringCurrency code. Default USD.
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
gclidstringyesGoogle click ID captured at signup (users.gclid).
valueUsdnumberOptional conversion value in USD.

No output schema declared.

No examples provided.

gads_upload_image_asset ~116

Upload an image file from local disk as a Google Ads image Asset (for Display banners / Responsive Display Ads). Returns the asset resource_name to reference in an ad. Refs #5744.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
filePathstringyesAbsolute path to a PNG/JPG image file on disk (<150KB, standard IAB size).
namestringyesAsset name (must be unique in the account).

No output schema declared.

No examples provided.

gads_upload_media_bundle ~130

Upload an HTML5 ad ZIP file from disk as a Google Ads MEDIA_BUNDLE asset (for HTML5 display upload ads). The zip must be self-contained (no external refs), define ad.size, include a clickTag, and be <150KB. Returns the asset resource_name. Refs #5744.

NameTypeReqDescription
customerIdstringGoogle Ads customer ID. Defaults to GOOGLE_ADS_CUSTOMER_ID env var.
filePathstringyesAbsolute path to a self-contained HTML5 ad .zip.
namestringyesAsset name (unique in the account).

No output schema declared.

No examples provided.

gtm_audit_container ~71

Comprehensive container audit — finds broken tags, duplicate tags, misfiring conversion tags, tags missing triggers, and tags firing too broadly. Returns a health score 0–100.

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_create_trigger ~56

Create a new trigger in a GTM workspace

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
triggerobjectyesFull GTM trigger body
workspaceIdstring

No output schema declared.

No examples provided.

gtm_create_version ~64

Create a container version from current workspace changes

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
namestringyesVersion name
notesstringVersion notes / changelog
workspaceIdstring

No output schema declared.

No examples provided.

gtm_delete_tag ~51

Delete a GTM tag from a workspace

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
tagIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_find_misfiring_conversion_tags ~74

Find conversion/purchase tags that are firing too broadly (e.g. on All Pages instead of a specific event). This is the most common GTM billing/analytics issue.

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_fix_conversion_tag_trigger ~121

Fix a misfiring conversion tag by replacing its broad trigger (e.g. All Pages) with a specific Custom Event trigger. Creates the new trigger if needed.

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
eventNamestringyesCustom event name to fire on (e.g. "purchase_confirmed")
removeBroadTriggersbooleanRemove All Pages / broad triggers from this tag
tagIdstringyesTag ID to fix
workspaceIdstring

No output schema declared.

No examples provided.

gtm_get_container ~35

Get details of a specific GTM container

NameTypeReqDescription
accountIdstringyes
containerIdstringyes

No output schema declared.

No examples provided.

gtm_get_tag ~52

Get full configuration of a specific GTM tag

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
tagIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_get_trigger ~52

Get full configuration of a specific GTM trigger

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
triggerIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_get_workspace_status ~48

Get pending (unsaved) changes in a workspace before publishing

NameTypeReqDescription
accountIdstringyes
containerIdstringyes
workspaceIdstring

No output schema declared.

No examples provided.

gtm_list_accounts ~21

List all GTM accounts accessible to the service account

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

Common questions

What is the io.github.AINative-Studio/ainative-gtm-mcp server?

io.github.AINative-Studio/ainative-gtm-mcp is listed in the public MCP registry as io.github.AINative-Studio/ainative-gtm-mcp. Full Google Ads, Analytics & Tag Manager lifecycle MCP for AI agents, 57 tools. This page covers its npm package (@ainative/gtm-mcp).

Is the io.github.AINative-Studio/ainative-gtm-mcp server safe to use?

io.github.AINative-Studio/ainative-gtm-mcp scores 76 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.AINative-Studio/ainative-gtm-mcp server expose?

io.github.AINative-Studio/ainative-gtm-mcp exposes 57 tools: gtm_list_accounts, gtm_list_containers, gtm_get_container, gtm_list_tags, gtm_get_tag, and 52 more. Their descriptions and schemas cost roughly 6,433 tokens of context every time the server is loaded.

Is the io.github.AINative-Studio/ainative-gtm-mcp server still maintained?

io.github.AINative-Studio/ainative-gtm-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.AINative-Studio/ainative-gtm-mcp server under?

io.github.AINative-Studio/ainative-gtm-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.