Skip to main content
Glama
A1-x-Tech

Google Tag Manager MCP

Google Tag Manager MCP

English | Русский

npm CI Glama License: MIT

A1 Google Tag Manager MCP lets an AI app inspect and manage Google Tag Manager containers in plain language. See what fires on a page, work with tags, triggers and variables in a draft workspace, then deliberately compile and publish a version when you are ready.

It connects to the Google Tag Manager API v2 through your Google account. The difference from asking an AI to guess a GTM setup is that it works with the actual container, workspace and version you choose.

  • 19 tools. 10 operations only read GTM data; 4 create drafts or change built-in variables; 5 can alter, delete, compile or publish live configuration.

  • Draft first. Tags, triggers and variables are created in a workspace. Publishing is a separate, explicitly destructive operation.

  • Quota-aware. GTM permits 0.25 requests per second per project; the server spaces requests by at least 4.2 seconds instead of overwhelming the API.

  • Your Google access. The server uses your OAuth credentials and requests only the Tag Manager scopes needed for reading, editing, versioning and publishing.

Start with a read-only question:

Which tags in my containers fire on the page-view trigger?

Connect the server · Explore use cases · Open technical documentation


See it work in a minute

You: List my GTM containers and show which tags fire on page view.

Assistant: Lists the containers, their workspaces, relevant triggers and the tags attached to them. Nothing changes.

You: In the Default Workspace of GTM-ABC123, prepare a GA4 configuration tag for measurement ID G-XXXXXXX on all pages.

Assistant: Shows the workspace, proposed tag and trigger configuration, then asks for confirmation before creating the draft.

You: Confirm the draft.

Assistant: Creates the tag in the workspace. It does not publish the container; compiling and publishing a version remains a separate step.

Related MCP server: unboundai-gtm-mcp-server

Contents

Quick start

You need Node.js 20+, a Google account with access to a GTM container and OAuth credentials from a Google Cloud project where the Tag Manager API is enabled.

  1. Prepare Google OAuth access.

  2. Add the server to your AI app.

  3. Start with the read-only question above.

In the app:

  1. Open Settings → MCP servers.

  2. Select Add server.

  3. Choose STDIO, then enter npx -y mcp-google-tagmanager@latest and the three environment variables below.

Variable

Value

GOOGLE_TAGMANAGER_CLIENT_ID

Your Google OAuth client ID

GOOGLE_TAGMANAGER_CLIENT_SECRET

Your Google OAuth client secret

GOOGLE_TAGMANAGER_REFRESH_TOKEN

Your Google OAuth refresh token

  1. Select Save, then Restart.

From the command line:

codex mcp add google-tagmanager \
  --env GOOGLE_TAGMANAGER_CLIENT_ID=your_client_id \
  --env GOOGLE_TAGMANAGER_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_TAGMANAGER_REFRESH_TOKEN=your_refresh_token \
  -- npx -y mcp-google-tagmanager@latest
codex mcp list

Codex MCP documentation

claude mcp add \
  --env GOOGLE_TAGMANAGER_CLIENT_ID=your_client_id \
  --env GOOGLE_TAGMANAGER_CLIENT_SECRET=your_client_secret \
  --env GOOGLE_TAGMANAGER_REFRESH_TOKEN=your_refresh_token \
  --transport stdio \
  --scope user \
  google-tagmanager \
  -- npx -y mcp-google-tagmanager@latest
claude mcp list

Claude Code MCP documentation

The current official path is Settings → Extensions. For a custom desktop extension, open Advanced settings → Extension Developer → Install Extension…, select a .mcpb file and follow the prompts.

This repository currently publishes an npm stdio package and does not contain a .mcpb bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:

{
  "mcpServers": {
    "google-tagmanager": {
      "command": "npx",
      "args": ["-y", "mcp-google-tagmanager@latest"],
      "env": {
        "GOOGLE_TAGMANAGER_CLIENT_ID": "your_client_id",
        "GOOGLE_TAGMANAGER_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_TAGMANAGER_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

In those builds, save it to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.

Claude Desktop MCP documentation

Add a user-level server to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:

{
  "mcpServers": {
    "google-tagmanager": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-tagmanager@latest"],
      "env": {
        "GOOGLE_TAGMANAGER_CLIENT_ID": "your_client_id",
        "GOOGLE_TAGMANAGER_CLIENT_SECRET": "your_client_secret",
        "GOOGLE_TAGMANAGER_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

Cursor MCP documentation

Run MCP: Open User Configuration from the Command Palette and add:

{
  "servers": {
    "google-tagmanager": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-google-tagmanager@latest"],
      "env": {
        "GOOGLE_TAGMANAGER_CLIENT_ID": "${input:gtm_client_id}",
        "GOOGLE_TAGMANAGER_CLIENT_SECRET": "${input:gtm_client_secret}",
        "GOOGLE_TAGMANAGER_REFRESH_TOKEN": "${input:gtm_refresh_token}"
      }
    }
  },
  "inputs": [
    { "type": "promptString", "id": "gtm_client_id", "description": "Google OAuth client ID" },
    { "type": "promptString", "id": "gtm_client_secret", "description": "Google OAuth client secret", "password": true },
    { "type": "promptString", "id": "gtm_refresh_token", "description": "Google OAuth refresh token", "password": true }
  ]
}

Check it with MCP: List Servers.

VS Code MCP documentation

What you can ask it to do

Understand the current setup

  • List the GTM accounts and containers I can access.

  • Which tags fire on page view in this workspace?

  • Show the trigger and variable configuration for this tag.

  • Which built-in variables are enabled?

Prepare tracking changes in a draft

  • Create a workspace for the checkout tracking change.

  • Prepare a GA4 tag and a trigger for a specific event.

  • Enable the click variables needed for this trigger.

  • Update this tag after showing me the complete replacement configuration.

Release a version deliberately

  • Compile this workspace into a version named April release.

  • Show the compiler errors, if any.

  • Publish version 42 after I confirm the version and its changes.

How GTM changes are connected

GTM has a clear release path:

  1. An account contains one or more containers.

  2. A container has workspaces for draft changes.

  3. Tags, triggers and variables belong to a workspace.

  4. Compiling a workspace creates a container version and removes the source workspace. GTM provides a replacement workspace.

  5. Publishing makes a selected container version live.

This server can inspect each step. It does not treat a draft as a release: version creation and publishing are separate operations.

What can change

Operation

What happens

Confirmation boundary

List accounts, containers, workspaces, tags, triggers, variables and versions

Reads GTM configuration

No change

Create a container or workspace

Adds a new GTM object

Changes GTM

Create a tag, trigger or variable

Adds a draft object to a workspace

Changes a draft workspace

Enable or disable built-in variables

Changes the workspace configuration

Changes a draft workspace

Update a tag, trigger or variable

Replaces the complete resource, protected by its fingerprint

Potentially destructive

Delete a tag, trigger or variable

Removes the selected object

Destructive

Compile a workspace

Creates a version and deletes the source workspace

Destructive

Publish a version

Makes a selected version live

Destructive

Raw API request

Can call API methods without a dedicated tool

Potentially destructive

The AI client decides how it asks for confirmation. The server marks read-only, write and destructive operations so the client can distinguish inspection from a real change.

Getting access

The server uses Google OAuth 2.0. Google Tag Manager does not provide API keys for this user data.

  1. Create or select a Google Cloud project and enable the Tag Manager API. A project without that API enabled receives no quota.

  2. Configure the OAuth consent screen and create an OAuth client. A Desktop app client is suitable for local use.

  3. Authorize your Google account and obtain a refresh token. The OAuth 2.0 Playground can do this if you enable Use your own OAuth credentials.

  4. Request these scopes together:

    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

The scopes are separate: reading, editing, compiling versions and publishing each need their corresponding permission. Treat the client secret and refresh token as passwords.

Configuration

Variable

Required

Description

GOOGLE_TAGMANAGER_CLIENT_ID

Yes*

OAuth client ID.

GOOGLE_TAGMANAGER_CLIENT_SECRET

Yes*

OAuth client secret.

GOOGLE_TAGMANAGER_REFRESH_TOKEN

Yes*

OAuth refresh token.

GOOGLE_TAGMANAGER_ACCESS_TOKEN

Yes*

Short-lived alternative to the OAuth trio.

GOOGLE_TAGMANAGER_API_BASE

No

Tag Manager API base URL override.

GOOGLE_TAGMANAGER_TIMEOUT_MS

No

Per-request timeout; default 60000 ms.

GOOGLE_TAGMANAGER_MAX_RETRIES

No

Maximum retries on temporary failures; default 3.

GOOGLE_TAGMANAGER_MIN_INTERVAL_MS

No

Minimum request spacing; default 4200 ms.

* Provide either the OAuth trio or an access token. Access tokens expire in about an hour and are not refreshed automatically.

Data and telemetry

The server runs locally and sends GTM API requests and OAuth refresh requests to Google. Its anonymous telemetry contains a random installation ID, package version, AI client and Node.js/operating-system versions, and tool names. It does not send OAuth tokens, GTM data, tool arguments or prompts.

Disable telemetry for A1 MCP servers with:

ASKADS_TELEMETRY=0

Limits and background work

  • GTM is rate-limited. The API allows 0.25 requests per second per project, so the server serializes calls at least 4.2 seconds apart. Broad audits can therefore take time.

  • Temporary limits are retried carefully. 429 and Google quota 403 responses use exponential backoff and Retry-After. Reads retry after network and 5xx failures; writes are not replayed after an uncertain failure.

  • There is no background monitoring. The server runs only when your AI app calls it. If the app supports scheduled tasks, it can periodically inspect a container or its live version.

  • A workspace disappears when compiled. Before calling create_version, save anything you need from the workspace and inspect the returned replacement workspace path.

Technical documentation

Support

Found a bug or need a scenario? Create an issue or write in Telegram.

Available Tools

19 tools
create_containerCreate a containerA

Creates a new container in a GTM account. usage_context declares the platform, e.g. ["web"]; other values include androidSdk5, iosSdk5, server. Returns the created Container with its server-assigned containerId and publicId. Requires the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the new container.
account_idYesGTM account id (string).
usage_contextYesUsage contexts, e.g. ["web"]. Other documented values: androidSdk5, iosSdk5, server.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavioral context beyond annotations: discloses that containerId and publicId are server-assigned, and states the required OAuth scope. Annotations already indicate a non-read-only, non-idempotent operation, and the description is consistent with that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with the purpose front-loaded. No filler; each sentence earns its place (purpose, usage_context clarification, return value/scope).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple three-parameter schema and no output schema, the description adequately covers what the tool does, return format, and authentication requirement. It could mention if account_id must reference an existing account, but that is implicit. Overall sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters with descriptions (100% coverage), so baseline is 3. The description adds a brief clarification that usage_context declares the platform, but the schema already lists the same documented values. No extra semantics are provided for name or account_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Creates a new container in a GTM account' with a specific verb and resource. It distinguishes itself from sibling tools like create_workspace or get_container by naming the resource type and including relevant context about usage_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides contextual usage guidance by explaining the usage_context parameter values and specifying the required permission scope (tagmanager.edit.containers). It does not explicitly name alternatives, but the context is clear and no exclusionary guidance is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_entityCreate a tag, trigger or variableA

Creates a tag, trigger or variable in a workspace. body is the resource JSON: minimally { name, type } plus type-specific parameter entries; tags also take firingTriggerId (array of trigger id strings). Example tag body: { "name": "GA4 event", "type": "gaawe", "parameter": [...], "firingTriggerId": ["12"] }. Returns the created resource with its server-assigned id and fingerprint. Requires the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe resource JSON to create (name, type, parameter, and for tags firingTriggerId).
account_idYesGTM account id (string).
entity_typeYesWhich collection to create in.
container_idYesContainer id (string).
workspace_idYesWorkspace id (string).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it discloses that the tool returns the created resource with server-assigned id and fingerprint, and requires the tagmanager.edit.containers scope. Annotations already indicate non-read-only and non-destructive, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with purpose, then systematically explains the body parameter with an example, and ends with return value and auth scope. Every sentence carries needed information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers return value, required scope, and complex nested body structure. It adequately addresses the tool's complexity and pairs well with annotations and sibling context, making it fully complete for the agent to use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for basic params, but the description significantly augments the 'body' parameter by explaining the minimum structure ({ name, type }), type-specific entries, and the firingTriggerId array, with an example. This adds substantial meaning beyond the schema's generic object description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a tag, trigger, or variable in a workspace, using a specific verb and resource. It distinguishes from siblings like update_entity and delete_entity by focusing on creation of these entity types, and the title reinforces this.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to create tags/triggers/variables) and provides a concrete example of the body structure. It does not explicitly name alternatives or exclusions, but the context of sibling tools makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_versionCreate a container version from a workspaceA
Destructive

Compiles a workspace into an immutable Container Version (the unit that gets published). SIDE EFFECT: the source workspace is DELETED and replaced by a fresh one — the response's newWorkspacePath points to the replacement; use it for any further edits, or old workspace paths will 404. Returns { containerVersion (with containerVersionId and full tag/trigger/variable snapshots), syncStatus, newWorkspacePath }. A compile failure comes back as compilerError=true with HTTP 200 and is reported as an error. Requires the tagmanager.edit.containerversions scope (edit.containers is NOT sufficient).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoVersion display name.
notesNoVersion notes (changelog entry).
account_idYesGTM account id (string).
container_idYesContainer id (string).
workspace_idYesWorkspace id (string) to compile. This workspace is deleted afterwards.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses specific side effects: the source workspace is deleted and replaced, and the response includes a newWorkspacePath. It also reveals the error pattern (compilerError=true with HTTP 200), which is significant behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused paragraph that front-loads the primary purpose, then covers side effects, return value, error handling, and scope in order. Every sentence adds unique value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description thoroughly explains the return object and error behavior. It also covers side effects and auth scope, making it a complete reference for a complex mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, including the workspace_id deletion note. The description does not add further parameter meaning, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compiles a workspace into an immutable Container Version, which is the unit that gets published. It distinguishes from siblings like publish_version and delete_entity by specifying the action on the workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides critical usage guidance: the workspace is deleted and replaced, so the new workspace path must be used for further edits, and old paths will 404. It also states the required OAuth scope. However, it does not explicitly contrast with alternatives like publish_version.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_workspaceCreate a workspaceA

Creates a new workspace in a container — an isolated draft where tags, triggers and variables are edited before being compiled into a version. Returns the created Workspace with its server-assigned workspaceId. Requires the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the new workspace.
account_idYesGTM account id (string).
descriptionNoOptional description of what this workspace changes.
container_idYesContainer id (string).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations by specifying the required OAuth scope (tagmanager.edit.containers) and the return value (the created workspace with its server-assigned workspaceId). It also frames the operation as non-destructive by describing the workspace as an isolated draft. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with three sentences that front-load the main action and provide essential context without unnecessary verbosity. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description covers the key aspects: purpose, workspace definition, return value, and auth requirement. While the openWorldHint is not elaborated, the description is still complete enough for a straightforward creation operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides descriptions for all 4 parameters, achieving 100% coverage. The description does not add parameter-level details beyond what the schema states, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool creates a new workspace in a container, and further explains that a workspace is an isolated draft where edits occur before compilation into a version. This specific verb+resource combination distinguishes it from sibling tools like create_version or get_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining that workspaces are used for editing tags, triggers, and variables before compiling into a version, implying when to use this tool. However, it does not explicitly name alternatives or specify conditions where this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_entityDelete a tag, trigger or variableA
DestructiveIdempotent

Deletes a tag, trigger or variable by its API path. The response is empty on success. Requires the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAPI-relative resource path as returned in the resource's own "path" field, e.g. "accounts/1/containers/2/workspaces/3/variables/7".

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral details beyond annotations: the response is empty on success and the operation requires the tagmanager.edit.containers scope. This complements the annotations' destructiveHint and idempotentHint without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two sentences, front-loaded with the action, then result and scope. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, one-parameter delete tool with full schema coverage and annotations, the description adequately covers action, success behavior, and auth requirement. It is complete for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a detailed description of the 'path' parameter including format and example. The description's phrase 'by its API path' reinforces but does not add semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes a tag, trigger, or variable by its API path, specifying the action (delete), resource types, and method. This distinguishes it from sibling tools like create_entity and update_entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: delete via API path, empty response on success, and required scope. While it doesn't explicitly mention alternatives or exclusions, the purpose is unambiguous and sufficient for basic usage decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountGet a GTM accountA
Read-onlyIdempotent

Gets one Google Tag Manager account by id. Returns the Account resource: { accountId, name, path, fingerprint, shareData }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string), e.g. from list_accounts.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, covering the safety profile. The description adds the return shape, which is useful, but it does not disclose other behavioral traits like error handling, permissions, or rate limits. With strong annotations, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, with the main action front-loaded and no redundant filler. It includes the return type and its fields efficiently, earning a perfect score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool, the description is complete: it states the resource, the ID parameter, and the return resource fields. The annotations cover safety, and there is no output schema to complicate things. The context is fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single parameter account_id with a clear description and example. The tool description only repeats 'by id', adding no extra semantic value beyond the schema. With 100% schema coverage, the baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Gets' plus the specific resource 'one Google Tag Manager account by id', which directly distinguishes it from list_accounts and other sibling tools. It also mentions the returned Account resource fields, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you have a specific account id to fetch a single account, versus listing all accounts. However, it does not explicitly mention alternatives or exclusion criteria, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_containerGet a containerA
Read-onlyIdempotent

Gets one container by account id + container id. Returns the Container resource including publicId (the GTM-XXXXXX snippet id), usageContext and fingerprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
container_idYesContainer id (string), e.g. from list_containers.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context by specifying the returned Container resource includes publicId, usageContext, and fingerprint. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence directly stating the operation and key return fields. Every word earns its place with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter, the description adequately covers what it does and what it returns. The lack of an output schema is mitigated by the mention of publicId, usageContext, and fingerprint. It does not discuss error handling, but that is not critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are described in the schema. The description adds minimal value beyond the schema, merely restating that lookup is by account id and container id. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Gets one container by account id + container id' with a specific verb and resource. It also lists key return fields, distinguishing it from sibling tools like list_containers and get_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this tool when you have both account_id and container_id and need a specific container. It does not explicitly state alternatives or exclusions, but the implied use case is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_resourceGet any resource by pathA
Read-onlyIdempotent

Generic getter for any GTM resource by its API-relative path — tags, triggers, variables, versions, containers, workspaces. Prefer echoing the path field from a previous response over assembling the string yourself. Returns the full resource JSON including its current fingerprint (needed for update_entity).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAPI-relative resource path as returned in the resource's own "path" field, e.g. "accounts/1/containers/2/workspaces/3/tags/4".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds that the response includes the full resource JSON and the current fingerprint, explicitly linking it to update_entity. This is valuable behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the purpose and immediately follow with actionable usage and output details. No filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's single parameter, strong annotations, and lack of output schema, the description covers the tool's use cases, return value, and connection to update_entity. It is complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the path parameter with format and example. The description adds practical advice to echo the path from a previous response, offering semantic guidance beyond the schema's static description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: a generic getter for any GTM resource by API-relative path, listing example resource types. It distinguishes itself from sibling-specific getters by emphasizing the path-based generic nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage guidance: prefer echoing the path field over manual construction. Implicitly advises using this when a path is already known, contrasting with list operations, but does not explicitly exclude using specific getters where available.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspaceGet a workspaceA
Read-onlyIdempotent

Gets one workspace by account id + container id + workspace id. Returns the Workspace resource with its fingerprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
container_idYesContainer id (string).
workspace_idYesWorkspace id (string), e.g. from list_workspaces.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey the safe, read-only, idempotent nature. The description adds that the Workspace resource is returned with its fingerprint, which is useful, but it does not disclose error conditions, permissions, or other behavioral traits beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys both the operation and the key return detail. No redundant information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with complete schema coverage and safety annotations, the description adequately covers purpose and a key return aspect (fingerprint). It could be improved by referencing list_workspaces for alternative use, but it is generally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter clearly described (account_id, container_id, workspace_id). The description merely restates these identifiers without adding new semantic detail, so it does not exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Gets one workspace' by three specific identifiers. It distinguishes from list_workspaces by explicitly indicating it retrieves a single resource, and the verb-resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching a single workspace, but it does not explicitly contrast with alternatives like list_workspaces or get_resource, nor does it state when not to use the tool. Some context is present but lacks direct guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsList GTM accountsA
Read-onlyIdempotent

Lists all Google Tag Manager accounts the authorized user can access. Returns { account: [{ accountId, name, path, fingerprint }], nextPageToken }. All ids are strings. This is the entry point: every other tool needs an accountId (or a path) from here.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description goes beyond by specifying the exact return object structure, field types (all ids are strings), and pagination token. This adds meaningful behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, and every clause earns its place: it states the purpose, return shape, type detail, and entry-point role. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with one optional parameter and no output schema, the description sufficiently covers the return structure and usage context. Minor details like sorting or error states are not critical for this tool, so the description is complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter page_token is fully described in the schema (100% coverage), so the baseline is 3. The description adds value by mentioning the response's nextPageToken, which reinforces the pagination cycle, though it doesn't explicitly state to pass nextPageToken as page_token, so it isn't a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Lists' and names the exact resource 'Google Tag Manager accounts', with a scope qualifier ('the authorized user can access'). It clearly distinguishes itself from sibling tools like list_containers by focusing on accounts, and the 'entry point' remark reinforces its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that this is the entry point and that every other tool needs an accountId/path from here, providing clear usage context. However, it doesn't explicitly mention when not to use it (e.g., if you already have an accountId) or name alternative tools like get_account, so it misses the full 'exclusions/alternatives' bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_containersList containersA
Read-onlyIdempotent

Lists the containers of a GTM account. Returns { container: [{ containerId, name, publicId (e.g. GTM-XXXXXX), usageContext, path, fingerprint, tagManagerUrl }], nextPageToken }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds behavioral detail by specifying the exact response shape, including container fields and nextPageToken, which helps the agent anticipate the returned data structure. It does not mention edge cases or rate limits, but the annotation coverage reduces the need for those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the purpose, and efficiently lists the return fields. Every sentence provides value without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read/list operation, the description is complete. It states the action, scope, and return shape. Annotations cover safety, schema covers parameters, and the description covers the response structure. Pagination is implicit via nextPageToken, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; it only mentions nextPageToken in the response, which correlates with the page_token parameter but does not elaborate on parameter semantics. No extra value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Lists' with resource 'containers of a GTM account', clearly distinguishing it from sibling tools like list_accounts (accounts), get_container (single container), and list_workspaces (workspaces). It is unambiguous and action-oriented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the operation scope (list containers for a GTM account). Pagination is implied by mentioning nextPageToken in the return value, but it does not explicitly contrast with get_container or provide alternative selection guidance. This is 'clear context without exclusions' rather than full when/why instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsList tagsA
Read-onlyIdempotent

Lists the tags of a workspace. Returns { tag: [{ tagId, name, type (e.g. html, gaawe), parameter: [{ type, key, value, list, map }], firingTriggerId, blockingTriggerId, paused, path, fingerprint, tagManagerUrl }], nextPageToken }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.
container_idYesContainer id (string).
workspace_idYesWorkspace id (string), e.g. from list_workspaces.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the response shape and nextPageToken, which is useful, but it does not disclose deeper behaviors like ordering, filtering, or error conditions beyond what annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise parts: a clear action statement and a compact response structure. It is front-loaded with the main purpose and includes no redundant text. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description faithfully provides the full return format including the nested tag object and nextPageToken. It covers the essential information an agent needs to invoke the tool and interpret results. Combined with schema and annotations, this is complete for a list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (account_id, page_token, container_id, workspace_id) documented. The description adds no extra parameter semantics; it only repeats the return shape. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Lists') with a clear resource and scope ('tags of a workspace'), distinguishing it from sibling list tools like list_variables or list_triggers. It also previews the response structure, which reinforces its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use when you need tags in a workspace. However, it does not explicitly state when not to use it or name alternatives (e.g., list_variables for variables). Given sibling tools, this is a missed opportunity but not completely absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_triggersList triggersA
Read-onlyIdempotent

Lists the triggers of a workspace. Returns { trigger: [{ triggerId, name, type (e.g. pageview, click, customEvent), filter/customEventFilter (conditions of { type, parameter }), path, fingerprint }], nextPageToken }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.
container_idYesContainer id (string).
workspace_idYesWorkspace id (string), e.g. from list_workspaces.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate these. It adds the return structure, which is helpful given no output schema, but does not disclose additional behavioral traits like rate limits or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: a clear one-line purpose and a compact specification of the return shape. Both sentences earn their place, providing essential information without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The return structure is fully described, compensating for the lack of an output schema. However, it does not mention pagination behavior or empty-list cases, though the page_token parameter is documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all 4 parameters, so the descriptions already explain their meanings. The tool description does not add parameter-level detail beyond this, matching the baseline for good schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists triggers of a workspace, which distinguishes it from sibling list tools like list_tags and list_variables. It uses a specific verb ('Lists') and resource ('triggers').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over alternatives such as list_tags or list_workspaces. It simply states what it does without any comparative context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_variablesList variablesA
Read-onlyIdempotent

Lists the user-defined variables of a workspace (built-in variables live in manage_built_in_variables). Returns { variable: [{ variableId, name, type (e.g. v = data layer, jsm = custom JS, c = constant), parameter, path, fingerprint }], nextPageToken }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.
container_idYesContainer id (string).
workspace_idYesWorkspace id (string), e.g. from list_workspaces.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable behavioral context by specifying the exact return payload structure, including variable fields and the nextPageToken for pagination, which annotations do not provide. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states purpose and differentiates from an alternative, the second specifies the return format. No unnecessary words, front-loaded with the most important information, and appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description explicitly states the return structure and pagination token, making the response format predictable. It also references manage_built_in_variables for built-in variables, covering the main use-case distinction. All parameters are well-documented in the schema, and the tool is otherwise straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptive text for all four parameters, including examples like workspace_id from list_workspaces. The description adds no additional parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Lists' with a specific resource ('user-defined variables of a workspace') and explicitly contrasts with 'manage_built_in_variables', distinguishing it from a sibling tool. This makes the tool's purpose unambiguous and well-scoped.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states that built-in variables live in manage_built_in_variables, providing a clear alternative for a different scenario. This effectively tells the agent when to use this tool (user-defined variables) versus when not to (built-in variables).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspacesList workspacesA
Read-onlyIdempotent

Lists the workspaces of a container. Returns { workspace: [{ workspaceId, name, description, path, fingerprint }], nextPageToken }. Workspaces are mandatory in GTM v2: every tag/trigger/variable operation needs a workspaceId, and a "Default Workspace" always exists — call this first.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesGTM account id (string).
page_tokenNoPagination token from a previous response's nextPageToken. Omit for the first page.
container_idYesContainer id (string).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent, and the description adds valuable behavioral details: pagination via nextPageToken, the return shape, and the fact that a Default Workspace always exists. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states action and return format, the second explains importance and usage order. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with strong annotations and full schema coverage, the description is complete. It includes purpose, usage timing, return format, and pagination—everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage of all three parameters, so the baseline is 3. The description does not add parameter-specific details beyond what the schema already provides, though it reinforces pagination via the return value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Lists the workspaces of a container' and includes the exact return structure, distinguishing it from single-workspace retrieval tools like get_workspace. It also provides GTM-specific context that makes the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'call this first' because workspaces are mandatory for all tag/trigger/variable operations, giving clear when-to-use guidance. It doesn't name alternatives or exclusions but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_built_in_variablesList/enable/disable built-in variablesA
Idempotent

Manages a workspace's built-in variables (pageUrl, clickText, event, ...). These are toggles, not records: action "list" returns the currently enabled ones ({ builtInVariable: [...] }), "enable" and "disable" take types (BuiltInVariableType enum values) and switch them on/off. Enable/disable require the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNoBuilt-in variable types to enable/disable (required for those actions), e.g. ["pageUrl", "clickText"]. Ignored for "list".
actionYesWhat to do.
account_idYesGTM account id (string).
container_idYesContainer id (string).
workspace_idYesWorkspace id (string).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) already signal mutating but non-destructive, idempotent behavior. The description adds important context: these are toggles not records, the 'list' action returns a `{ builtInVariable: [...] }` structure, and enable/disable require the tagmanager.edit.containers scope. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences pack all essential information: what the tool does, the toggle nature, action semantics, parameter roles, and scope requirements. No redundancy, front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description covers the main return shape for 'list' and the behavioral role of each action. It omits details about the response for enable/disable and potential error conditions, but these are less critical for a toggle-oriented tool with strong annotations and schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description enriches parameter understanding significantly: it clarifies that `types` is only relevant for enable/disable and is ignored for 'list', gives an example, and explains that action values map to distinct behaviors. This adds functional meaning beyond the raw schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'manages a workspace's built-in variables' and enumerates the three concrete actions (list, enable, disable) with examples. It distinguishes itself from sibling tools like list_variables and create_entity by framing these as toggles rather than records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each action: 'list' returns currently enabled variables, while 'enable'/'disable' require the `types` parameter and switch toggles on/off. It also notes the required OAuth scope for mutating actions, providing clear context though it does not explicitly contrast with related tools like update_entity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_versionPublish, inspect or fetch the live container versionA
Destructive

Container-version operations. action "publish" pushes a version live (replacing the currently published one; requires the tagmanager.publish scope; version_id required, fingerprint recommended). action "get" fetches one version by version_id. action "live" fetches the currently published version of the container (no version_id needed). Publish responses can carry compilerError=true with HTTP 200 — reported as an error. Returns the ContainerVersion (publish wraps it as { containerVersion, compilerError }).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhat to do.
account_idYesGTM account id (string).
version_idNoContainer version id (string). Required for "publish" and "get"; ignored for "live".
fingerprintNoThe version's last-seen fingerprint ("publish" only), for optimistic-concurrency safety.
container_idYesContainer id (string).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses destructive behavior ('replacing the currently published one'), auth requirements ('requires the tagmanager.publish scope'), error semantics ('compilerError=true with HTTP 200 — reported as an error'), and response wrapping. These details go beyond the annotations, which only mark the tool as destructive and non-readonly, and add significant context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and densely informative, covering all three actions, parameter roles, auth, and response details in about 100 words. It is well-organized by action and then response nuances, with every sentence contributing meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (three modes, variable parameters), the description is remarkably complete. It states prerequisites, exact parameter requirements per action, return type, and special error handling. The rich schema and annotations complement this, making the description sufficient for correct and safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all five parameters with 100% coverage, so the baseline is 3. The description adds value by clarifying action-specific requirements: version_id is required for publish/get and ignored for live, and fingerprint is only for publish. It also explains fingerprint as optimistic-concurrency safety, which enriches the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as handling container-version operations with three specific actions: publish, get, and live. It uses strong verbs and differentiates these actions from sibling tools like create_version and get_resource by focusing on publishing and inspecting live container versions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use each action: publish requires version_id and the tagmanager.publish scope, get requires version_id, and live needs no version_id. The fingerprint parameter is also explained as recommended for publish. It does not explicitly mention alternatives to the tool itself, but the internal action guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

raw_requestRaw Tag Manager API callA
Destructive

Escape hatch to call any Google Tag Manager API v2 path directly, for endpoints without a dedicated tool (environments, folders, templates, zones, workspace :sync / :quick_preview, version_headers, ...). path is relative to /tagmanager/v2/, e.g. "accounts/1/containers/2/environments". query values may be arrays for repeated params. Requests go through the same OAuth, rate limiter and retries as every other tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body (POST/PUT).
pathYesAPI path relative to /tagmanager/v2/, e.g. "accounts/1/containers/2/version_headers".
queryNoQuery parameters; use an array for repeated keys, e.g. { "type": ["pageUrl", "event"] }.
methodNoHTTP method. Defaults to GET.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and non-readOnly behavior. The description adds useful context: requests go through the same OAuth, rate limiter, and retries as other tools. It doesn't explicitly warn about destructive potential, but the annotation covers this, so the added detail earns a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, and every sentence adds value: purpose, path format, query arrays, and shared infrastructure. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic raw API tool, the description covers purpose, usage boundaries, path/query handling, and infrastructure behavior. With no output schema, it doesn't need to specify return values as they vary by endpoint. The examples and openWorldHint provide sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description provides examples for path and query, but these largely echo the schema. Baseline 3 is appropriate as the description adds no substantial new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this is an escape hatch for calling any GTM API v2 path directly, with explicit examples of endpoints lacking dedicated tools. It differentiates from siblings by explicitly targeting endpoints without a dedicated tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'for endpoints without a dedicated tool', which implies not to use when a dedicated tool exists. It also lists example endpoints, providing clear context for when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_entityUpdate a tag, trigger or variableA
DestructiveIdempotent

Updates a tag, trigger or variable by its API path. PUT semantics: this is a FULL REPLACE, not a patch — fetch the current resource with get_resource, modify it, and send the whole object back. Pass the resource's last-seen fingerprint for optimistic-concurrency safety; a mismatch fails the request. Requires the tagmanager.edit.containers scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe complete replacement resource JSON.
pathYesAPI-relative resource path as returned in the resource's own "path" field, e.g. "accounts/1/containers/2/workspaces/3/triggers/5".
fingerprintNoThe fingerprint from the last read of this resource; the update fails if it is stale.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint, idempotentHint), the description discloses full-replace semantics, the need to fetch first, fingerprint-based optimistic concurrency with failure on mismatch, and required OAuth scope. This is rich behavioral context that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then essential semantics, then security/concurrency details. No filler; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the full workflow (fetch-modify-send), the full-replace semantics, concurrency safety via fingerprint, and the required scope. Despite no output schema, the description provides everything an agent needs to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions, but the description adds context beyond the schema: it explains that the body must be the complete replacement object, and clarifies the fingerprint's role in concurrency (last-seen, mismatch fails). This lifts it above the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a tag, trigger, or variable by its API path, and specifies PUT semantics as a full replace. This distinguishes it from create_entity, delete_entity, and get_resource, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance: fetch the current resource with get_resource, modify it, and send the whole object back. It also explicitly states this is NOT a patch, providing a clear when-not-to-use condition for partial updates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 19 tool updatesv0.1.0
    • First observedcreate_container
    • First observedcreate_entity
    • First observedcreate_version
    • First observedcreate_workspace
    • First observeddelete_entity
    • First observedget_account
    • First observedget_container
    • First observedget_resource
    • First observedget_workspace
    • First observedlist_accounts
    • First observedlist_containers
    • First observedlist_tags
    • First observedlist_triggers
    • First observedlist_variables
    • First observedlist_workspaces
    • First observedmanage_built_in_variables
    • First observedpublish_version
    • First observedraw_request
    • First observedupdate_entity

TDQS

A4/5.0
Disambiguation4/5

Most tools target distinct resources or actions clearly. The generic get_resource and create_entity/update_entity/delete_entity are broad but their descriptions clarify which resource types they apply to. publish_version with multiple actions (publish, get, live) overlaps slightly with get_resource, but this is manageable.

Naming Consistency4/5

The dominant pattern is verb_noun (list_accounts, get_container, create_workspace, update_entity, delete_entity). Deviations include manage_built_in_variables, publish_version, and raw_request, which break the clean pattern but remain understandable. The generic entity suffix is less specific than named resources but consistent across create/update/delete.

Tool Count4/5

With 19 tools covering accounts, containers, workspaces, entities, versions, and a raw escape hatch, the count is higher than average but justified by GTM's broad API surface. The set feels comprehensive without being bloated, and the raw_request tool reduces the need for many specialized tools.

Completeness4/5

Core workflows are covered: accounts, containers, workspaces, entity CRUD, version creation, and publishing. Some operations lack dedicated tools (update/delete container, workspace update/delete, version listing), but raw_request fills these gaps. The main tag management lifecycle is fully supported, with minor workarounds needed for edge cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Google Tag Manager API, enabling users to manage containers, tags, and triggers through natural language using Google Application Default Credentials.
    18
    33
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Google Tag Manager API v2, enabling programmatic management of accounts, containers, workspaces, tags, triggers, variables, and version workflows.
    32
    14
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A remote MCP server for Google Tag Manager that enables AI assistants to manage GTM accounts, containers, tags, triggers, variables, and more via OAuth or service account authentication.
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/A1-x-Tech/mcp-google-tagmanager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server