100+ integrations are ready to connect to your AI.Connect your first MCP

Google Tag Manager MCP server for your AI

Audit a container for tags that never fire, add a GA4 event tag for a dataLayer event, see exactly what publishing would change, then publish or roll back a version, from the AI client you already use.

PopMCPGoogle Tag Manager

Audit our main container and list tags that never fire or still send to Universal Analytics

Supported Google Tag Manager tools

Every Tag Manager API v2 operation the connection exposes, from tags and triggers to server-side clients, environments and user permissions, plus the changes PopMCP can watch.

108 tools in the full catalog: 42 read and 66 write. 45 load by default, and the rest are found with tool search.

gtm_create_version

Creates a Container Version from the entities present in the workspace, deletes the workspace, and sets the base container version to the newly created version.

gtm_get_workspace_status

Finds conflicting and modified entities in the workspace.

gtm_list_workspaces

Lists all Workspaces that belong to a GTM Container.

gtm_publish_workspace

Publish the workspace's changes to the website: creates a version from the workspace and makes it LIVE, in one call.

gtm_quick_preview_workspace

Quick previews a workspace by creating a fake container version from all entities in the provided workspace.

gtm_resolve_workspace_conflict

Resolves a merge conflict for a workspace entity by updating it to the resolved entity passed in the request.

gtm_sync_workspace

Syncs a workspace to the latest container version by updating all unmodified workspace entities and displaying conflicts for modified entities.

gtm_get_live_version

Gets the live (i.e. published) container version

gtm_get_version

Gets a Container Version.

gtm_list_versions

Lists all Container Versions of a GTM Container.

gtm_publish_version

Publishes a Container Version.

gtm_create_folder

Creates a GTM Folder.

gtm_list_folders

Lists all GTM Folders of a Container.

gtm_move_to_folder

Moves entities to a GTM Folder.

gtm_create_ga4_event_tag

Create a GA4 event tag in one call: the GA4 Event tag with its event parameters, sent to the container's Google tag measurement id (or the one given), firing on an existing trigger, on a dataLayer event (customEvent: an existing Custom Event trigger for it is reused, otherwise one is created) or on a new trigger.

gtm_create_tag

Creates a GTM Tag.

gtm_delete_tag

Deletes a GTM Tag.

gtm_get_container

Gets a Container.

gtm_get_container_snippet

Gets the tagging snippet for a Container.

gtm_get_tag

Gets a GTM Tag.

gtm_import_template_from_gallery

Imports a GTM Custom Template from Gallery.

gtm_list_containers

Lists all Containers that belongs to a GTM Account.

gtm_list_tags

Lists all GTM Tags of a Container.

gtm_list_templates

Lists all GTM Templates of a GTM container workspace.

gtm_revert_tag

Reverts changes to a GTM Tag in a GTM Workspace.

gtm_update_tag

Updates a GTM Tag.

gtm_create_trigger

Creates a GTM Trigger.

gtm_create_variable

Creates a GTM Variable.

gtm_delete_trigger

Deletes a GTM Trigger.

gtm_delete_variable

Deletes a GTM Variable.

gtm_get_trigger

Gets a GTM Trigger.

gtm_get_variable

Gets a GTM Variable.

gtm_list_triggers

Lists all GTM Triggers of a Container.

gtm_list_variables

Lists all GTM Variables of a Container.

gtm_revert_trigger

Reverts changes to a GTM Trigger in a GTM Workspace.

gtm_revert_variable

Reverts changes to a GTM Variable in a GTM Workspace.

gtm_update_trigger

Updates a GTM Trigger.

gtm_update_variable

Updates a GTM Variable.

gtm_audit_container

Audit a container in one call: paused tags, tags with no trigger (they never fire), triggers that no longer exist, triggers and variables nothing uses, duplicate Google tags and GA4 events, leftover Universal Analytics tags, every Custom HTML tag and Custom JavaScript variable with the hosts it loads from, and tags with no consent setting.

gtm_compare_versions

Compare two container versions: every tag, trigger, variable and other object added, removed or changed between them, with the changed settings by key.

gtm_diff_workspace

What publishing the workspace would change on the website: every tag, trigger and variable added, changed or deleted, with each changed setting by key compared with the live version, Custom HTML and JavaScript changes flagged (customCode), and any merge conflicts.

gtm_disable_built_in_variables

Deletes one or more GTM Built-In Variables.

gtm_enable_built_in_variables

Creates one or more GTM Built-In Variables.

gtm_find_references

What uses a variable or a trigger, before renaming or deleting it: every tag, trigger and variable that refers to the variable as {{name}} (with where: parameter.html, filter[0].parameter.arg0, …), or that fires on, blocks on, groups or switches on the trigger.

gtm_list_built_in_variables

Lists all the enabled Built-In Variables of a GTM Container.

gtm_bulk_update_workspace

Applies multiple entity changes to a workspace in one call.

gtm_create_workspace

Creates a Workspace.

gtm_delete_workspace

Deletes a Workspace.

gtm_get_workspace

Gets a Workspace.

gtm_update_workspace

Updates a Workspace.

gtm_delete_version

Deletes a Container Version.

gtm_get_latest_version_header

Gets the latest container version header

gtm_set_latest_version

Sets the latest version used for synchronization of workspaces when detecting conflicts and errors.

gtm_undelete_version

Undeletes a Container Version.

gtm_update_version

Updates a Container Version.

gtm_delete_folder

Deletes a GTM Folder.

gtm_get_folder

Gets a GTM Folder.

gtm_list_folder_contents

List all entities in a GTM Folder.

gtm_revert_folder

Reverts changes to a GTM Folder in a GTM Workspace.

gtm_update_folder

Updates a GTM Folder.

gtm_create_container

Creates a Container.

gtm_create_template

Creates a GTM Custom Template.

gtm_delete_container

Deletes a Container.

gtm_delete_template

Deletes a GTM Template.

gtm_get_template

Gets a GTM Template.

gtm_lookup_container

Looks up a Container by destination ID or tag ID.

gtm_revert_template

Reverts changes to a GTM Template in a GTM Workspace.

gtm_update_container

Updates a Container.

gtm_update_template

Updates a GTM Template.

gtm_create_client

Creates a GTM Client.

gtm_create_environment

Creates a GTM Environment.

gtm_create_transformation

Creates a GTM Transformation.

gtm_create_zone

Creates a GTM Zone.

gtm_delete_client

Deletes a GTM Client.

gtm_delete_environment

Deletes a GTM Environment.

gtm_delete_transformation

Deletes a GTM Transformation.

gtm_delete_zone

Deletes a GTM Zone.

gtm_get_client

Gets a GTM Client.

gtm_get_environment

Gets a GTM Environment.

gtm_get_transformation

Gets a GTM Transformation.

gtm_get_zone

Gets a GTM Zone.

gtm_list_clients

Lists all GTM Clients of a GTM container workspace.

gtm_list_environments

Lists all GTM Environments of a GTM Container.

gtm_list_transformations

Lists all GTM Transformations of a GTM container workspace.

gtm_list_zones

Lists all GTM Zones of a GTM container workspace.

gtm_reauthorize_environment

Re-generates the authorization code for a GTM Environment.

gtm_revert_client

Reverts changes to a GTM Client in a GTM Workspace.

gtm_revert_transformation

Reverts changes to a GTM Transformation in a GTM Workspace.

gtm_revert_zone

Reverts changes to a GTM Zone in a GTM Workspace.

gtm_update_client

Updates a GTM Client.

gtm_update_environment

Updates a GTM Environment.

gtm_update_transformation

Updates a GTM Transformation.

gtm_update_zone

Updates a GTM Zone.

gtm_create_google_tag_config

Creates a Google tag config.

gtm_create_user_permission

Creates an user's Account & Container access.

gtm_delete_google_tag_config

Deletes a Google tag config.

gtm_delete_user_permission

Removes an user from the account, revoking access to it and all of its containers.

gtm_get_google_tag_config

Gets a Google tag config.

gtm_get_user_permission

Gets an user's Account & Container access.

gtm_list_google_tag_configs

Lists all Google tag configs in a Container.

gtm_list_user_permissions

List all users that have access to the account along with Account and Container user access granted to each of them.

gtm_update_google_tag_config

Updates a Google tag config.

gtm_update_user_permission

Updates an user's Account & Container access.

gtm_revert_built_in_variable

Reverts changes to a GTM Built-In Variables in a GTM Workspace.

gtm_get_account

Gets a GTM Account.

gtm_list_accounts

Lists all GTM Accounts that an user has access to.

gtm_update_account

Updates a GTM Account.

gtm_list_destinations

Lists all Destinations linked to a GTM Container.

Connect Google Tag Manager to Claude, ChatGPT and Claude Code

Authorize once, then an endpoint your client signs into. Nothing to deploy, and nothing to install on the Google Tag Manager side.

Bring your own Google Cloud OAuth client with the Tag Manager API enabled: paste the OAuth Client ID and OAuth Client Secret, leave every Tag Manager permission ticked on Google's consent screen, then pick the Tag Manager account.

OAuth Client ID1234567890-abc.apps.googleusercontent.com
OAuth Client Secret••••••••••••3f7a
Tag Manager API requests per 100 seconds25
Authorize PopMCP on Google Tag ManagerAuthorize

Then just ask for the work

  • “Audit our main container and list tags that never fire or still send to Universal Analytics”

    • list_containers
    • audit_container
  • “Add a GA4 event tag for the sign_up dataLayer event with the method parameter”

    • create_ga4_event_tag
    • diff_workspace
  • “Show me what publishing the workspace would change, then publish it as Checkout fixes”

    • get_workspace_status
    • diff_workspace
    • publish_workspace
  • “What changed between the live version and the one before it? Roll back if the checkout tag broke”

    • list_versions
    • compare_versions
    • publish_version

Use Google Tag Manager from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Google Tag Manager MCP server questions

What teams ask before putting Google Tag Manager behind an AI client.

Why do some Tag Manager calls wait or get refused?

Google allows only 25 Tag Manager API requests per 100 seconds and 10,000 a day per Google Cloud project, shared by everything that uses that project. PopMCP spaces calls to stay inside it: a call that would go over waits a few seconds, or is refused with the time to retry and nothing sent. Bulk reads such as get_live_version return a whole container in one call. If Google raises your quota, enter the new number in the optional field.

Which permissions does Google's consent screen ask for?

Six Tag Manager permissions, each with its own checkbox: edit containers, edit container versions, publish, delete containers, manage users and manage accounts. Leave them all ticked. A permission left off does not break the connection, but the tools that need it refuse with a message naming it, before anything is sent. Your own role in Tag Manager still applies on top: Read, Edit, Approve or Publish on each container, and Administrator for managing users.

Does an edit go straight to my website?

No. Changes to tags, triggers and variables land in a workspace, which is a draft. Nothing reaches the site until it is published. diff_workspace shows every tag, trigger and variable that would change against the live version, with Custom HTML and JavaScript changes flagged, and quick_preview_workspace builds a preview. publish_workspace then creates the version and makes it live in one call. To roll back, publish_version publishes an earlier version.

Can I connect more than one Tag Manager account or container?

One Tag Manager account per connection, chosen in the picker after you authorize. Every container in that account is reachable, named by its GTM- id or its name, and when the account has only one container it is filled in for you. A container in a different account is refused without being read. For a second account, add another connection, for example in the workspace for that client.

Can the AI audit a container for broken or unused tags?

Yes. audit_container checks a container in one call: paused tags, tags with no trigger, triggers that no longer exist, triggers and variables nothing uses, duplicate Google tags and GA4 events, leftover Universal Analytics tags, every Custom HTML tag and Custom JavaScript variable with the hosts it loads from, and tags with no consent setting. find_references shows what uses a variable or trigger before you rename or delete it.

Which Tag Manager events can PopMCP watch?

11, all by change detection. Versions: a version published, rollbacks included, and a version created. In the workspace you watch: unpublished edits, a tag added, removed, or paused and resumed, and a trigger or variable added, edited or removed. Across the account: a workspace created, and a container added or removed. A typical use is a message to the analytics channel whenever someone publishes.

Do I have to run or host the Google Tag Manager MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

How do I connect Google Tag Manager to Claude Code?

Connect Google Tag Manager in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Google Tag Manager on the consent screen. The Google Tag Manager tools are then available in that session, and no Google Tag Manager credential is stored on your machine.

Why do only 45 of the 108 tools load by default?

Loading 108 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 45-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 108 here. A trigger is something PopMCP watches for you: 11 Google Tag Manager events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Google Tag Manager.

Connect Google Tag Manager to your AI in minutes

Launch a hosted MCP endpoint for Google Tag Manager, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP