list_accounts
List Tag Manager accounts
Lists the Google Tag Manager accounts the signed-in Google account can read, with their numeric IDs. Start here.
Takes no parameters.
io.github.tagpilotPublished by GitHub account tagpilotv0.1.0Updated Nov 14, 2026
Free, read-only Google Tag Manager: containers, tags, diffs vs live, audits. No GCP setup.
The publisher's own server: QuickBooks Connector by Meridian
Read-only Google Tag Manager access for an assistant: browse containers, tags, triggers and variables, diff workspaces against live, and audit a container.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
A free, read-only Model Context Protocol server for Google Tag Manager. Ask Claude, Cursor or any MCP client about your GTM containers: which tags fire on which triggers, how a variable is set up and what uses it, what publishing a workspace would change, the version history, and a Tag Pilot audit of the container.
No Google Cloud setup, no API key to copy. You don't need a GCP project, OAuth client,
service account or gcloud. Add the server, ask a question, and approve once in your browser.
ABCD-1234):
Already use the Tag Pilot GA4 MCP or Search Console MCP? This is a separate server with its own connection (and its own Google consent), so you can install any of them.
[Add to Cursor] [Install in VS Code]
Everything except the Claude Desktop extension runs the npm package with npx, so it needs
Node.js 18 or newer. In the MCP Registry it's
io.github.tagpilot/gtm-mcp.
Claude Desktop config file (claude_desktop_config.json), Cursor (~/.cursor/mcp.json) and
similar clients:
Headless and CI: where nobody can approve in a browser, create a gtm:mcp key on the
GTM MCP page and set TAGPILOT_API_KEY=tpk_… in the server's
environment. The device connect is then skipped and only the Google sign-in link is shown.
The same flow as the GA4 MCP (RFC 8628-style device connect, like gh auth login): it works from
any browser on any device, also over SSH, in containers or WSL, because nothing listens on your
machine.
tagmanager.googleapis.com). It never passes through Tag Pilot.tagmanager.readonly. None of the tools can
create, change, publish or delete anything, and the server only sends GET requests.~/.config/tagpilot/gtm-mcp/device.json
(readable only by you).npx -y @tagpilot/gtm-mcp logout, and remove the app's access at
myaccount.google.com/permissions.All tools are read-only. container_id is the numeric container ID from list_containers; the
public ID (GTM-XXXXXXX) works too. Tools that read container contents read the live
(published) version by default; pass workspace_id (from list_workspaces) for a workspace
with its unpublished changes, or version_id (from list_versions) for an older version.
audit_containerOffline checks over one read of the container. They are rules of thumb, not GTM errors:
The Tag Manager API allows only a few requests per second per user and has a daily quota, so the server is frugal:
get_tag, get_trigger, get_variable, find_references and audit_container reuse the same
read, which is cached for a minute (numbered versions for 30 minutes);Workspace reads skip zones (Tag Manager 360); version reads include them.
"Not connected yet" (a link and a code like ABCD-1234): your AI shows them. Open the link in any browser (it doesn't
have to be on this machine), sign in to Tag Pilot, check that the code matches, approve, and allow Tag Manager
access, then tell your AI you're done: it retries your question (or calls connection_status). The server keeps
checking in the background, so nothing needs restarting. The code is valid for 10 minutes; after that, ask again (or
say "connect GTM") for a new one. To connect from a terminal instead (e.g. over SSH), run
npx -y @tagpilot/gtm-mcp login: it shows the link, the code in a box and a countdown, and waits until you approve.
"The signed-in Google account has no access to …": use list_accounts and list_containers
to see what it can read. To use another Google account, run npx -y @tagpilot/gtm-mcp logout
and connect again.
"… has no live (published) version": the container was never published; pass workspace_id.
"This computer was disconnected from Tag Pilot": the device was revoked; ask again to reconnect. "Your Google sign-in expired or was revoked": ask again and approve again.
Rate limit or quota errors: wait a minute and ask again.
Check the setup: npx -y @tagpilot/gtm-mcp status. Logs go to stderr.
Nothing is required. All variables are optional:
Commands: npx -y @tagpilot/gtm-mcp [serve|login|logout|status|--help|--version].
See the repo README. GTM_MCP_TAGMANAGER_API_URL points the Google calls at a
mock (used by npm run e2e).
Apache License 2.0. Copyright 2026 Tag Concierge sp. z o.o. The license does not cover the Tag Pilot name or logo (see NOTICE).
Source: packages/gtm-mcp/README.md at commit 34078fa
List Tag Manager accounts
Lists the Google Tag Manager accounts the signed-in Google account can read, with their numeric IDs. Start here.
Takes no parameters.
List containers
Containers in a Tag Manager account: numeric container ID, public ID (GTM-XXXXXXX), name, usage context (web, server, amp, ios, android) and domains.
account_idrequiredList workspaces
Workspaces of a container (where unpublished changes are made), with IDs and descriptions. Pass workspace_id to the other tools to read a workspace instead of the live version.
account_idrequiredcontainer_idrequiredGet container contents
Everything in a container: tags (with their firing and blocking triggers by name, paused state), triggers, variables, custom templates, folders and enabled built-in variables; clients and transformations for server containers. Reads the live (published) version by default, or a workspace (workspace_id) or an older version (version_id). Compact by default; use get_tag / get_trigger / get_variable for one entity in full.
detailaccount_idrequiredversion_idcontainer_idrequiredworkspace_idList container versions
Container versions, newest first: version ID, name, entity counts, and which one is live (published). Pass a version_id to get_container, diff or the get_* tools to read an older version.
limitaccount_idrequiredcontainer_idrequiredinclude_deletedGet the live (published) version
The container version that is live on the site: version ID, name, description, and its contents (compact by default, like get_container).
detailaccount_idrequiredcontainer_idrequiredGet one tag
One tag in full (by id or name): type, parameters, firing and blocking triggers (with names), consent settings, tag sequencing, firing option, schedule, notes, and the variables it uses. Reads the live version unless workspace_id or version_id is given.
idnameaccount_idrequiredversion_idcontainer_idrequiredworkspace_idGet one trigger
One trigger in full (by id or name): type, conditions (filter, customEventFilter, autoEventFilter), parameters, the variables it uses, and the tags, trigger groups and variables that use it. Reads the live version unless workspace_id or version_id is given.
idnameaccount_idrequiredversion_idcontainer_idrequiredworkspace_idGet one variable
One variable in full (by id or name; built-in variables such as "Page URL" by name): type, parameters, format settings, the variables it uses, and the tags, triggers and variables that use it. Reads the live version unless workspace_id or version_id is given.
idnameaccount_idrequiredversion_idcontainer_idrequiredworkspace_idFind references
What uses an entity: for a variable (or built-in variable), every tag, trigger, variable or client containing {{Name}}; for a trigger, the tags that fire on or are blocked by it, trigger groups and variables; for a tag, tags that sequence it; for a custom template, the tags, variables and clients built from it; for a folder, its contents. Check this before suggesting to change, rename or delete something.
idkindrequirednameaccount_idrequiredversion_idcontainer_idrequiredworkspace_idDiff a workspace against the live version
What publishing a workspace would change: entities added, changed (with the changed fields, and renames) and deleted compared with the live version (or another version_id). Compares the actual contents, so it also shows changes that reached the live version after the workspace was created (the workspace then needs updating in GTM). Set include_values for the before/after values of changed fields.
account_idrequiredversion_idcontainer_idrequiredworkspace_idrequiredinclude_valuesTag Pilot check: container audit
Tag Pilot tracking-health check for a GTM container. Flags tags that can never fire (no triggers, missing triggers, expired schedules), paused tags, unused triggers and variables, non-Google tags without consent settings (web containers), Google tag / GA4 configuration IDs loaded by more than one tag (double counting), and, for a workspace, changes that are not published yet. Reads the live version by default; pass workspace_id to audit a workspace (one extra call for the live version). Findings are sorted high → info.
account_idrequiredversion_idcontainer_idrequiredworkspace_idConnect GTM MCP
Connects this computer to Tag Pilot GTM MCP (free Tag Pilot account + read-only Google Tag Manager access). Call it when the user asks to connect, or when another tool says the computer is not connected. It returns a link and a code: show both to the user as given (a clickable link), ask them to open it, approve and allow Google access, and tell you when done; then call connection_status. Never ask the user to run terminal commands. If already connected, it says so.
Takes no parameters.
GTM MCP connection status
Whether this computer is connected to Tag Pilot GTM MCP: "connected" (with the device name), "waiting" (a sign-in link is open; shows the link and code again), "not_connected" (call connect) or "error" (with the next step). While a sign-in is open it waits up to 25 seconds for the approval before answering, so call it after the user says they approved, not in a fast loop.
wait90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
com.pilot.meridianOfficial publisher
Lets an assistant read from and write to QuickBooks Online company data through a hosted remote connector.
com.pilot.meridianOfficial publisher
Lets an AI assistant connect to Xero with authorised read or write access across multiple organisations.

Published by GitHub account allyburns
Lets an AI agent fly Trazo, a browser game over the Nazca lines, turn by turn, and post its run to the game's AI board.

Published by GitHub account ORENQIS-LABS
RemotePilot is a local MCP server that gives an assistant terminal commands, file operations, and process management on the user's machine.

Published by GitHub account dahuam
Turns the Windows desktop into a numbered element table so an AI agent can scan the screen and click or type by element id.
claude mcp add gtm -- npx -y @tagpilot/gtm-mcp{ "mcpServers": { "gtm": { "command": "npx", "args": ["-y", "@tagpilot/gtm-mcp"] } }}