Skip to main content
Glama
rgellis

Google Tag Manager MCP Server

by rgellis

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GOOGLE_CLIENT_IDNoYour Google OAuth client ID
GOOGLE_CLIENT_SECRETNoYour Google OAuth client secret
TAG_MANAGER_READ_ONLYNoSet to 'true' to enable read-only mode and use only the readonly scopefalse
GOOGLE_APPLICATION_CREDENTIALSNoPath to a service account JSON file (Application Default Credentials)
GOOGLE_TAG_MANAGER_REFRESH_TOKENNoRefresh token minted for the Tag Manager API

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
check_client_statusA

Check that the Tag Manager client is configured and can authenticate.

Returns: Whether credentials resolve, whether the server is in read-only mode, and the OAuth scopes in use.

list_accountsA

List the Google Tag Manager accounts this user can access.

Start here: every other tool needs an account ID, and the numbers shown in the Tag Manager web UI's URL are not always the API's account IDs.

get_accountB

Get one Tag Manager account.

update_accountB

Update a Tag Manager account's settings.

list_user_permissionsB

List who has access to a Tag Manager account, and at what level.

get_user_permissionA

Get one user's access to a Tag Manager account.

create_user_permissionB

Grant a user access to a Tag Manager account.

update_user_permissionA

Change a user's access to a Tag Manager account.

The request replaces the stored access levels rather than merging into them, so send the complete accountAccess and containerAccess you want.

delete_user_permissionA

Revoke a user's access to a Tag Manager account.

list_containersB

List the containers in a Tag Manager account.

get_containerB

Get one Tag Manager container.

lookup_containerA

Find a container from its public GTM-XXXXXXX tag ID.

Use this when you have a tag ID from a website's source but no account ID. Pass exactly one of the two arguments.

get_container_snippetA

Get the HTML install snippet for a container.

create_containerC

Create a container in a Tag Manager account.

update_containerC

Update a container's settings.

delete_containerA

Delete a container, and with it every workspace, tag and version.

This cannot be undone through the API, and any site still loading the container's snippet stops receiving tags.

combine_containersC

Merge one container into another.

move_tag_idA

Move a tag ID out of a container into a newly created one.

The inverse of combine_containers: it splits a tag ID off a container that holds several.

list_destinationsB

List the Google tag destinations linked to a container.

get_destinationA

Get one destination linked to a container.

link_destinationA

Link a Google tag destination to a container.

The destination is taken from whichever container currently holds it, so this moves rather than copies.

list_environmentsA

List a container's environments.

Every container has a Live and a Latest environment; the rest are user-created preview targets.

get_environmentA

Get one container environment.

create_environmentC

Create an environment in a container.

update_environmentB

Update a container environment.

delete_environmentA

Delete a container environment.

The built-in Live and Latest environments cannot be deleted.

reauthorize_environmentA

Regenerate an environment's authorization code.

Use this when a preview link has leaked: the old code stops working immediately, so anything embedding it must be updated.

list_version_headersA

List a container's version history as lightweight headers.

Prefer this over fetching versions when you want the history: a header carries the ID, name and entity counts without the full snapshot of every tag in the version.

get_latest_version_headerA

Get the header of a container's most recently created version.

This is the newest version, which is not necessarily the published one -- use get_live_version for what production is serving.

get_versionB

Get one container version, including every entity it contains.

get_live_versionA

Get the container version currently published to production.

This is what visitors to the site are actually running, which is the right starting point for "what is live right now".

update_versionA

Update a container version's name or notes.

Only the metadata is editable. A version's entities are a frozen snapshot; to change them, edit a workspace and create a new version.

delete_versionA

Delete a container version.

Deletion is reversible with undelete_version. The live version cannot be deleted.

undelete_versionC

Restore a deleted container version.

publish_versionA

Publish a container version to production.

This takes effect on the live site immediately, for every visitor, with no staged rollout. The only way back is to publish an earlier version over the top. Confirm the version is the intended one before calling.

set_latest_versionA

Set the version that workspaces sync against.

This is the baseline used to detect conflicts when a workspace syncs. It does not change what is published.

list_workspacesB

List a container's workspaces.

A workspace is the draft layer: tags, triggers and variables are edited in one, and nothing reaches production until it becomes a version and that version is published. Every container has a "Default Workspace".

get_workspaceC

Get one workspace.

get_workspace_statusA

List what a workspace has changed, and what conflicts with the base.

Run this before creating a version: it is the diff between the workspace and the container version it was branched from.

create_workspaceC

Create a workspace in a container.

update_workspaceC

Update a workspace's name or description.

delete_workspaceA

Delete a workspace, discarding every change in it.

Changes that were never turned into a version are lost. Check get_workspace_status first.

sync_workspaceA

Bring a workspace up to date with the latest container version.

Unmodified entities are updated in place; anything the workspace also changed comes back as a merge conflict to resolve with resolve_workspace_conflict.

resolve_workspace_conflictB

Resolve one merge conflict raised by sync_workspace.

quick_preview_workspaceA

Compile a workspace into a throwaway version to check it is valid.

Nothing is saved and nothing is published; this is the cheap way to find compiler errors before create_version.

create_versionA

Turn a workspace into a container version.

The workspace is consumed by this call -- the API deletes it and makes the new version the container's latest. Creating a version does not publish it; use publish_version for that.

bulk_update_workspaceA

Apply many entity changes to a workspace in a single call.

Use this when creating entities that reference each other -- a tag and the trigger that fires it, say -- since one call keeps them consistent.

list_tagsA

List the tags in a workspace.

get_tagC

Get one tag from a workspace.

create_tagC

Create a tag in a workspace.

update_tagA

Update a tag in a workspace.

The tag you send replaces the stored one, so read it with get_tag first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_tagA

Delete a tag from a workspace.

This affects the workspace only. The tag keeps running in production until a version without it is published.

revert_tagA

Undo a workspace's changes to one tag.

Restores the tag to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_triggersA

List the triggers in a workspace.

Triggers are referenced by tags through firingTriggerId and blockingTriggerId, so list these before creating a tag.

get_triggerA

Get one trigger from a workspace.

create_triggerA

Create a trigger in a workspace.

Trigger types are Tag Manager's internal codes: "pageview", "domReady", "windowLoaded", "click", "linkClick", "formSubmission", "customEvent", "timer" and so on. Copy the shape from an existing trigger via get_trigger when unsure.

update_triggerA

Update a trigger in a workspace.

The trigger you send replaces the stored one, so read it with get_trigger first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_triggerA

Delete a trigger from a workspace.

This affects the workspace only. The trigger stays in production until a version without it is published.

revert_triggerA

Undo a workspace's changes to one trigger.

Restores the trigger to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_variablesB

List the variables in a workspace.

Other entities reference these by name in {{double braces}}, so the names here are what tag and trigger parameters point at.

get_variableA

Get one variable from a workspace.

create_variableA

Create a variable in a workspace.

Variable types are Tag Manager's internal codes: "v" is a data layer variable, "c" a constant, "jsm" custom JavaScript, "k" a first-party cookie, "u" a URL variable. Copy the shape from an existing variable via get_variable when unsure.

update_variableA

Update a variable in a workspace.

The variable you send replaces the stored one, so read it with get_variable first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_variableA

Delete a variable from a workspace.

This affects the workspace only. The variable stays in production until a version without it is published.

revert_variableA

Undo a workspace's changes to one variable.

Restores the variable to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_built_in_variablesA

List the built-in variables enabled in a workspace.

Built-in variables (Page URL, Click Text, and so on) are supplied by Tag Manager and only need enabling. They are separate from the user-defined variables in list_variables.

create_built_in_variableB

Enable built-in variables in a workspace.

delete_built_in_variableB

Disable built-in variables in a workspace.

Anything referencing a disabled variable stops resolving, so check for uses first.

revert_built_in_variableB

Undo a workspace's change to one built-in variable.

list_foldersB

List the folders in a workspace.

get_folderB

Get one folder from a workspace.

get_folder_entitiesA

List the tags, triggers and variables inside a folder.

create_folderC

Create a folder in a workspace.

update_folderB

Update a folder's name or notes.

delete_folderA

Delete a folder from a workspace.

The entities inside it are not deleted; they are left unfiled.

revert_folderC

Undo a workspace's changes to one folder.

move_entities_to_folderA

Move tags, triggers and variables into a folder.

Pass folder_id "0" to take the entities out of their current folder instead of putting them into one.

list_templatesB

List the custom templates in a workspace.

get_templateA

Get one custom template, including its sandboxed JavaScript source.

create_templateC

Create a custom template in a workspace.

update_templateA

Update a custom template in a workspace.

The template you send replaces the stored one, so read it with get_template first and send the whole thing back with your edits applied.

delete_templateA

Delete a custom template from a workspace.

Tags and variables using the template stop working, so check for uses before deleting.

revert_templateC

Undo a workspace's changes to one custom template.

import_template_from_galleryA

Import a template from the Community Template Gallery.

Gallery templates are third-party code that runs on the site, and the import declares the permissions the template asks for -- acknowledge_permissions must be true or the call fails. Review what it requests before importing.

list_clientsA

List the clients in a workspace.

A web container returns an empty list; clients exist only in server containers.

get_clientC

Get one client from a workspace.

create_clientA

Create a client in a workspace.

Only server containers accept clients. Creating one in a web container fails.

update_clientA

Update a client in a workspace.

The client you send replaces the stored one, so read it with get_client first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_clientA

Delete a client from a workspace.

This affects the workspace only. The client stays in production until a version without it is published.

revert_clientA

Undo a workspace's changes to one client.

Restores the client to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_transformationsA

List the transformations in a workspace.

A web container returns an empty list; transformations exist only in server containers.

get_transformationB

Get one transformation from a workspace.

create_transformationA

Create a transformation in a workspace.

Only server containers accept transformations. Creating one in a web container fails.

update_transformationA

Update a transformation in a workspace.

The transformation you send replaces the stored one, so read it with get_transformation first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_transformationA

Delete a transformation from a workspace.

This affects the workspace only. The transformation stays in production until a version without it is published.

revert_transformationA

Undo a workspace's changes to one transformation.

Restores the transformation to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_zonesA

List the zones in a workspace.

A standard (non-360) container returns an empty list.

get_zoneB

Get one zone from a workspace.

create_zoneA

Create a zone in a workspace.

Zones require Tag Manager 360. Creating one in a standard container fails.

update_zoneA

Update a zone in a workspace.

The zone you send replaces the stored one, so read it with get_zone first and send the whole thing back with your edits applied. Omitted fields are cleared, not preserved.

delete_zoneA

Delete a zone from a workspace.

This affects the workspace only. The zone stays in production until a version without it is published.

revert_zoneA

Undo a workspace's changes to one zone.

Restores the zone to the state of the container version the workspace was branched from, leaving the workspace's other changes alone.

list_gtag_configsA

List the Google tag configurations in a workspace.

These are the gtag.js settings a Google tag applies to its destinations -- the API equivalent of the "Configuration settings" panel on a Google tag.

get_gtag_configA

Get one Google tag configuration from a workspace.

create_gtag_configB

Create a Google tag configuration in a workspace.

update_gtag_configA

Update a Google tag configuration.

The config you send replaces the stored one, so read it with get_gtag_config first and send the whole thing back with your edits applied.

delete_gtag_configA

Delete a Google tag configuration from a workspace.

Unlike every other workspace entity, Google tag configs have no revert method, so this cannot be undone short of discarding the workspace.

list_workspace_entitiesA

Read everything configured in a workspace in one call.

Fetches tags, triggers, variables and folders, following pagination on each. Prefer this over four separate list calls when you want to understand or audit a container's setup.

find_entities_by_nameA

Find tags, triggers and variables by name.

The API has no search, so this reads each collection and filters. Use it to turn a name a human used ("the purchase tag") into the ID the other tools need.

summarize_containerA

Summarise a container: settings, workspaces and what is live.

The quickest answer to "what is this container and what is it running".

list_all_containersA

List every container this user can reach, across every account.

Answers "what do I have access to" in one call instead of one list_containers per account. An account that cannot be read is reported with its error rather than failing the whole call.

publish_workspaceA

Create a container version from a workspace, optionally publishing it.

This is the Tag Manager release flow: a workspace becomes a version, and a version is published. Creating the version consumes the workspace either way.

publish defaults to false. Passing true releases to the live site immediately, for every visitor -- confirm that is intended before setting it. A version that fails to compile is never published.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 112 tools

Disambiguation4/5

The consistent list/get/create/update/delete/revert pattern makes most tools clearly distinct by entity. However, version-related tools (get_version, get_live_version, get_latest_version_header, set_latest_version) and publish-related tools (publish_version, publish_workspace, create_version) could be confused at a glance, though their descriptions disambiguate them well.

Naming Consistency5/5

Tool names follow a strict verb_noun convention throughout, with consistent CRUD verbs (list/get/create/update/delete/revert) applied per entity. Exceptions like lookup_container, quick_preview_workspace, and summarize_container are also verb-first and clear, so the pattern remains predictable.

Tool Count1/5

112 tools is an extreme count, far beyond the 50+ threshold for a score of 1. While the Google Tag Manager API is broad, exposing full CRUD for a dozen entity types plus many convenience helpers results in an overwhelming surface that would be difficult for an agent to navigate efficiently.

Completeness5/5

The surface covers the full lifecycle across accounts, permissions, containers, environments, versions, workspaces, and every workspace entity type (tags, triggers, variables, folders, templates, clients, transformations, zones, gtag configs). Convenience tools for searching, summarizing, and bulk operations close most practical gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues