gtm_create_ versionCreates a Container Version from the entities present in the workspace, deletes the workspace, and sets the base container version to the newly created version.
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
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_ versionCreates 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_ statusFinds conflicting and modified entities in the workspace.
gtm_list_ workspacesLists all Workspaces that belong to a GTM Container.
gtm_publish_ workspacePublish the workspace's changes to the website: creates a version from the workspace and makes it LIVE, in one call.
gtm_quick_ preview_ workspaceQuick previews a workspace by creating a fake container version from all entities in the provided workspace.
gtm_resolve_ workspace_ conflictResolves a merge conflict for a workspace entity by updating it to the resolved entity passed in the request.
gtm_sync_ workspaceSyncs a workspace to the latest container version by updating all unmodified workspace entities and displaying conflicts for modified entities.
gtm_get_ live_ versionGets the live (i.e. published) container version
gtm_get_ versionGets a Container Version.
gtm_list_ versionsLists all Container Versions of a GTM Container.
gtm_publish_ versionPublishes a Container Version.
gtm_create_ folderCreates a GTM Folder.
gtm_list_ foldersLists all GTM Folders of a Container.
gtm_move_ to_ folderMoves entities to a GTM Folder.
gtm_create_ ga4_ event_ tagCreate 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_ tagCreates a GTM Tag.
gtm_delete_ tagDeletes a GTM Tag.
gtm_get_ containerGets a Container.
gtm_get_ container_ snippetGets the tagging snippet for a Container.
gtm_get_ tagGets a GTM Tag.
gtm_import_ template_ from_ galleryImports a GTM Custom Template from Gallery.
gtm_list_ containersLists all Containers that belongs to a GTM Account.
gtm_list_ tagsLists all GTM Tags of a Container.
gtm_list_ templatesLists all GTM Templates of a GTM container workspace.
gtm_revert_ tagReverts changes to a GTM Tag in a GTM Workspace.
gtm_update_ tagUpdates a GTM Tag.
gtm_create_ triggerCreates a GTM Trigger.
gtm_create_ variableCreates a GTM Variable.
gtm_delete_ triggerDeletes a GTM Trigger.
gtm_delete_ variableDeletes a GTM Variable.
gtm_get_ triggerGets a GTM Trigger.
gtm_get_ variableGets a GTM Variable.
gtm_list_ triggersLists all GTM Triggers of a Container.
gtm_list_ variablesLists all GTM Variables of a Container.
gtm_revert_ triggerReverts changes to a GTM Trigger in a GTM Workspace.
gtm_revert_ variableReverts changes to a GTM Variable in a GTM Workspace.
gtm_update_ triggerUpdates a GTM Trigger.
gtm_update_ variableUpdates a GTM Variable.
gtm_audit_ containerAudit 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_ versionsCompare two container versions: every tag, trigger, variable and other object added, removed or changed between them, with the changed settings by key.
gtm_diff_ workspaceWhat 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_ variablesDeletes one or more GTM Built-In Variables.
gtm_enable_ built_ in_ variablesCreates one or more GTM Built-In Variables.
gtm_find_ referencesWhat 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_ variablesLists all the enabled Built-In Variables of a GTM Container.
gtm_bulk_ update_ workspaceApplies multiple entity changes to a workspace in one call.
gtm_create_ workspaceCreates a Workspace.
gtm_delete_ workspaceDeletes a Workspace.
gtm_get_ workspaceGets a Workspace.
gtm_update_ workspaceUpdates a Workspace.
gtm_delete_ versionDeletes a Container Version.
gtm_get_ latest_ version_ headerGets the latest container version header
gtm_set_ latest_ versionSets the latest version used for synchronization of workspaces when detecting conflicts and errors.
gtm_undelete_ versionUndeletes a Container Version.
gtm_update_ versionUpdates a Container Version.
gtm_delete_ folderDeletes a GTM Folder.
gtm_get_ folderGets a GTM Folder.
gtm_list_ folder_ contentsList all entities in a GTM Folder.
gtm_revert_ folderReverts changes to a GTM Folder in a GTM Workspace.
gtm_update_ folderUpdates a GTM Folder.
gtm_create_ containerCreates a Container.
gtm_create_ templateCreates a GTM Custom Template.
gtm_delete_ containerDeletes a Container.
gtm_delete_ templateDeletes a GTM Template.
gtm_get_ templateGets a GTM Template.
gtm_lookup_ containerLooks up a Container by destination ID or tag ID.
gtm_revert_ templateReverts changes to a GTM Template in a GTM Workspace.
gtm_update_ containerUpdates a Container.
gtm_update_ templateUpdates a GTM Template.
gtm_create_ clientCreates a GTM Client.
gtm_create_ environmentCreates a GTM Environment.
gtm_create_ transformationCreates a GTM Transformation.
gtm_create_ zoneCreates a GTM Zone.
gtm_delete_ clientDeletes a GTM Client.
gtm_delete_ environmentDeletes a GTM Environment.
gtm_delete_ transformationDeletes a GTM Transformation.
gtm_delete_ zoneDeletes a GTM Zone.
gtm_get_ clientGets a GTM Client.
gtm_get_ environmentGets a GTM Environment.
gtm_get_ transformationGets a GTM Transformation.
gtm_get_ zoneGets a GTM Zone.
gtm_list_ clientsLists all GTM Clients of a GTM container workspace.
gtm_list_ environmentsLists all GTM Environments of a GTM Container.
gtm_list_ transformationsLists all GTM Transformations of a GTM container workspace.
gtm_list_ zonesLists all GTM Zones of a GTM container workspace.
gtm_reauthorize_ environmentRe-generates the authorization code for a GTM Environment.
gtm_revert_ clientReverts changes to a GTM Client in a GTM Workspace.
gtm_revert_ transformationReverts changes to a GTM Transformation in a GTM Workspace.
gtm_revert_ zoneReverts changes to a GTM Zone in a GTM Workspace.
gtm_update_ clientUpdates a GTM Client.
gtm_update_ environmentUpdates a GTM Environment.
gtm_update_ transformationUpdates a GTM Transformation.
gtm_update_ zoneUpdates a GTM Zone.
gtm_create_ google_ tag_ configCreates a Google tag config.
gtm_create_ user_ permissionCreates an user's Account & Container access.
gtm_delete_ google_ tag_ configDeletes a Google tag config.
gtm_delete_ user_ permissionRemoves an user from the account, revoking access to it and all of its containers.
gtm_get_ google_ tag_ configGets a Google tag config.
gtm_get_ user_ permissionGets an user's Account & Container access.
gtm_list_ google_ tag_ configsLists all Google tag configs in a Container.
gtm_list_ user_ permissionsList all users that have access to the account along with Account and Container user access granted to each of them.
gtm_update_ google_ tag_ configUpdates a Google tag config.
gtm_update_ user_ permissionUpdates an user's Account & Container access.
gtm_revert_ built_ in_ variableReverts changes to a GTM Built-In Variables in a GTM Workspace.
gtm_get_ accountGets a GTM Account.
gtm_list_ accountsLists all GTM Accounts that an user has access to.
gtm_update_ accountUpdates a GTM Account.
gtm_list_ destinationsLists all Destinations linked to a GTM Container.
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.
1234567890-abc.apps.googleusercontent.com••••••••••••3f7a25Connections start read-only. Once an owner allows writes, update_tag, delete_trigger and publish_workspace run as soon as the AI calls them, and a publish changes the live site. Tick Tag Manager on the PopMCP consent screen only for clients that should edit.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Google Tag Manager credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Audit our main container and list tags that never fire or still send to Universal Analytics
gtm_list_containersok
Then just ask for the work
“Audit our main container and list tags that never fire or still send to Universal Analytics”
“Add a GA4 event tag for the sign_up dataLayer event with the method parameter”
“Show me what publishing the workspace would change, then publish it as Checkout fixes”
“What changed between the live version and the one before it? Roll back if the checkout tag broke”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Google Tag Manager behind an AI client.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Launch a hosted MCP endpoint for Google Tag Manager, keep tool access under control, and start testing real workflow prompts right away.