Skip to main content

Google Tag Manager MCP Server (Alpha)

🚀 Empower your AI agents to handle the whole Google Tag Manager workflow!

This repo contains the source code for running a local MCP server that interacts with APIs for Google Tag Manager.

Features

  • No frequent authentication. Standard Google ADC with your own OAuth client is all you need. Everything runs on your machine, straight against the GTM API.
  • No service account required. The server runs as you, with the GTM permissions your account already has.
  • Built for LLM context windows. A single GTM tag can be hundreds of lines of JSON; list_* tools return slim skeletons and get_* fetches full detail only when asked.

Tools

The server uses the Google Tag Manager API to provide Tools for use with LLMs. The most frequently used tools are:

Tool Purpose
list_containers Containers in an account — where every session starts
list_tags Tags in the workspace as slim skeletons
get_tag One tag's full configuration, on demand
get_workspace_status Unpublished changes and merge conflicts
create_tag Add a tag to the workspace draft
update_tag Merge partial changes into a tag (fingerprint-checked)
delete_tag Remove a tag (requires confirm=true)

Triggers and variables have the same four tools as tags, and versioning and publishing have their own. See Appendix I for the full list.

The write safety model:

  • Editing and going live are separate. Create/update/delete only touch the workspace draft; only publish_version changes the live site.
  • Updates are merge patches. The model sends just the fields it changes, and the server submits the entity's fingerprint, so a concurrent edit fails cleanly instead of being clobbered.
  • Deletes and publishing need confirm=true, and every destructive tool is declared with destructiveHint.
  • No blind retries on writes. Rate-limit rejections are retried, ambiguous 5xx errors are not, so a create is never silently duplicated.

Prerequisites

  • Python >= 3.10
  • pipx
  • The gcloud CLI
  • A Google account with access to your GTM containers
  • A GCP project (used only for quota attribution)

Setup instructions

1. Install

pipx install tagmanager-mcp

2. Enable the Tag Manager API on your quota project

gcloud services enable tagmanager.googleapis.com --project=YOUR_PROJECT

3. Create a Desktop OAuth client

Check out Manage OAuth Clients for how to create an OAuth client. Two choices matter here: pick application type Desktop app, and publish the app to Production, because an app left in Testing issues refresh tokens that expire after 7 days. Download the client JSON at the end — step 4 needs it.

Why your own client? Google may block gcloud's built-in one for Tag Manager scopes ("This app is blocked"), and that block is not something you can work around from your side.

4. Log in

gcloud auth application-default login \
  --client-id-file=path/to/your-client.json \
  --scopes=\
https://www.googleapis.com/auth/tagmanager.readonly,\
https://www.googleapis.com/auth/tagmanager.edit.containers,\
https://www.googleapis.com/auth/tagmanager.edit.containerversions,\
https://www.googleapis.com/auth/tagmanager.publish,\
https://www.googleapis.com/auth/cloud-platform

gcloud auth application-default set-quota-project YOUR_PROJECT

The browser will warn "Google hasn't verified this app" — it is your own app; choose Advanced → Continue.

Those scopes unlock everything. Drop the lines you do not want:

Scope Unlocks
tagmanager.readonly Every read tool
tagmanager.edit.containers Create / update / delete in a workspace
tagmanager.edit.containerversions create_version
tagmanager.publish publish_version
cloud-platform Nothing in GTM — needed by set-quota-project

Tools outside your granted scopes fail with a clear re-login hint, and everything else keeps working.

Connect an MCP client

Configure Claude Code

claude mcp add --scope user tagmanager-mcp -- tagmanager-mcp

--scope user registers the server for every project instead of just the current directory. Verify with claude mcp list, or run /mcp inside a session.

Configure Claude Desktop

Claude Desktop needs the absolute path to the executable. Print it:

which tagmanager-mcp

Open Settings → Developer → Edit Config, which reveals claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows), and add the server with the path you just printed:

{
  "mcpServers": {
    "tagmanager-mcp": {
      "command": "/Users/you/.local/bin/tagmanager-mcp"
    }
  }
}

Save the file and restart Claude Desktop — it reads the config only at startup. The tools then appear under the tools icon in the chat box.

Example prompts

  • "Which GTM accounts and containers do I have?"
  • "How many tags are in container GTM-XXXXXXX, grouped by type?"
  • "Show me the purchase tag's config and which triggers fire it."
  • "Does the current workspace have unpublished changes?"
  • "Pause every tag that fires on the checkout trigger."
  • "Create a custom-event trigger for sign_up and a GA4 event tag that fires on it."

Note on quota

The GTM API allows 10,000 requests/day and 25 requests per 100 seconds per GCP project; per-user overrides do not raise it. Ordinary audit conversations fit comfortably — just avoid sweeping every tag across many containers at once.

Appendix I: A Full List of Tools

Read

Tool Purpose
list_accounts GTM accounts you can access (optionally Google Tag accounts)
list_containers Containers in an account
list_workspaces Workspaces in a container
get_workspace_status Unpublished changes and merge conflicts
list_tags / get_tag Tags — skeleton list / full configuration
list_triggers / get_trigger Triggers — skeleton list / full configuration
list_variables / get_variable Variables — skeleton list / full configuration
list_versions Container version headers — skeleton list
get_version / get_live_version One version / the currently live version, with slimmed contents

Write

Tool Purpose
create_tag / create_trigger / create_variable Create an entity in the workspace draft
update_tag / update_trigger / update_variable Merge partial changes into an entity
delete_tag / delete_trigger / delete_variable Delete an entity (requires confirm=true)
create_version Snapshot the workspace into a version (consumes the workspace; returns newWorkspacePath)
publish_version Publish a version live (requires confirm=true)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tagmanager_mcp-0.3.1.tar.gz (22.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tagmanager_mcp-0.3.1-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file tagmanager_mcp-0.3.1.tar.gz.

File metadata

  • Download URL: tagmanager_mcp-0.3.1.tar.gz
  • Upload date:
  • Size: 22.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tagmanager_mcp-0.3.1.tar.gz
Algorithm Hash digest
SHA256 7e14901eeced5348375ec18e131eca7ebffe91c8d2b18126432ffc830b7f849e
MD5 fdee88cb3e22044ac30c069142c68f27
BLAKE2b-256 9b1c82eff362ba6dd7b7a1e253c2e9618aae36458318f5e8d5a6e691bab37b51

See more details on using hashes here.

Provenance

The following attestation bundles were made for tagmanager_mcp-0.3.1.tar.gz:

Publisher: release.yml on jinchliu/tagmanager-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tagmanager_mcp-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: tagmanager_mcp-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 25.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tagmanager_mcp-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a334ecc7acb2ee7c21142950ae30da9e71f50a623e411384e9d19aa352607959
MD5 a28138d25aaf1460fbb10a6ae970bbdf
BLAKE2b-256 455077bd3ed63390fdb31375f86f5518e75bb6df43bd3cf5d21100775d06d1a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tagmanager_mcp-0.3.1-py3-none-any.whl:

Publisher: release.yml on jinchliu/tagmanager-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.2

2 files

This release

0.3.1 This release

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page