Skip to main content
Glama
dhawalshah

google-tag-manager-mcp

Google Tag Manager MCP

A Python Model Context Protocol (MCP) server for the Google Tag Manager API v2. Connect Claude (or any MCP-compatible AI client) directly to your GTM accounts to manage tags, triggers, variables, workspaces, versions, environments, and more — all in natural language.

The server is also an OAuth 2.1 authorization server, so it works as a remote connector anywhere Claude supports custom MCP servers — claude.ai (personal), Claude Desktop, and Claude Teams. For Teams, the org owner adds the URL once and each member authenticates individually on first use.

Tools (18 consolidated per-resource tools)

Each tool takes an action parameter that selects the operation, plus resource addressing (parent / path) and optional config, params, and confirm fields. Destructive actions require confirm=True.

Tool

Actions

gtm_account

get, list, update

gtm_container

create, get, list, update, remove + combine, lookup, move_tag_id, snippet

gtm_workspace

create, get, list, update, remove + create_version, get_status, sync, quick_preview, resolve_conflict

gtm_tag

create, get, list, update, remove, revert

gtm_trigger

create, get, list, update, remove, revert

gtm_variable

create, get, list, update, remove, revert

gtm_built_in_variable

create, list, remove, revert

gtm_folder

create, get, list, update, remove + revert, entities, move_entities_to_folder

gtm_client

create, get, list, update, remove, revert

gtm_zone

create, get, list, update, remove, revert

gtm_template

create, get, list, update, remove + revert, import_from_gallery

gtm_transformation

create, get, list, update, remove, revert

gtm_gtag_config

create, get, list, update, remove

gtm_destination

get, list, link

gtm_environment

create, get, list, update, remove + reauthorize

gtm_version

get, live, publish, set_latest, undelete, update, remove

gtm_version_header

list, latest

gtm_user_permission

create, get, list, update, remove

Consolidated tool design

Each tool takes a uniform set of parameters:

  • action — the operation to perform (e.g. "list", "create", "publish")

  • parent — resource path of the parent (e.g. "accounts/123/containers/456/workspaces/7") — used for create and list

  • path — full resource path of the entity — used for get, update, remove, and other single-resource operations

  • config — dict of fields for create / update body

  • params — dict of extra query parameters

  • confirm — boolean, required True for destructive actions

Example — list tags in a workspace:

gtm_tag(action="list", parent="accounts/123/containers/456/workspaces/7")

Example — publish a version (destructive, requires confirmation):

gtm_version(action="publish", path="accounts/123/containers/456/versions/9", confirm=True)

Confirmation guardrail

The following actions are considered destructive and require confirm=True. Without it, the tool immediately returns a structured message asking you to re-call with confirm=True:

publish, remove, revert, undelete, combine, move_tag_id, move_entities_to_folder, sync, create_version, resolve_conflict, reauthorize, link

This prevents accidental mutations from ambiguous prompts.


Related MCP server: unboundai-gtm-mcp-server

How auth works

There are two modes. Pick one.

Mode A — Local STDIO (one user, no server)

Use this if you only want it on your own machine. setup_local_auth.py runs the Google OAuth flow once and stores your token in ~/.config/gtm-mcp/token.json. Claude Desktop launches server.py as a subprocess. No Firestore, no Cloud Run, no public URL.

Mode B — Remote HTTP server (Claude Teams, claude.ai, multi-user)

The MCP server is also an OAuth 2.1 authorization server. When Claude connects:

  1. Claude discovers our metadata at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server.

  2. Claude registers itself via Dynamic Client Registration (POST /oauth/register).

  3. Claude redirects the user to /oauth/authorize. We delegate identification to Google OAuth.

  4. After Google login, we issue our own opaque bearer token to Claude — Google credentials never leave the server.

  5. On each /mcp request Claude sends our bearer; we map it server-side to the right user's stored Google credentials and call the GTM APIs.


Prerequisites

  • Python 3.10+

  • A Google Tag Manager account you have access to

  • A Google Cloud project


Step 1 — Set up Google Cloud

1a. Create a project and enable the Tag Manager API

  1. Go to the Google Cloud Console.

  2. Create or select a project.

  3. APIs & Services → Library, enable Tag Manager API.

1b. Create OAuth 2.0 credentials

  1. APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID.

  2. Application type: Web application.

  3. Add Authorized redirect URIs:

    • http://localhost:8080/auth/callback (local dev / setup_local_auth.py)

    • https://YOUR-CLOUD-RUN-URL/auth/callback (remote deployment — add after deploy)

  4. Click Create, then Download JSON → save as client_secret.json in the project root (gitignored). You can also copy the Client ID / Client Secret straight into env vars.

  1. APIs & Services → OAuth consent screen.

  2. Choose Internal for a Google Workspace org (recommended for teams), or External for personal/individual use.

  3. Add scopes:

    • https://www.googleapis.com/auth/tagmanager.readonly

    • https://www.googleapis.com/auth/tagmanager.edit.containers

    • https://www.googleapis.com/auth/tagmanager.delete.containers

    • https://www.googleapis.com/auth/tagmanager.edit.containerversions

    • https://www.googleapis.com/auth/tagmanager.publish

    • https://www.googleapis.com/auth/tagmanager.manage.users

  4. If using External in Testing mode, add each user's email under Test users.

1d. Enable Firestore (Mode B only)

The server stores OAuth bearer tokens and per-user Google credentials in Firestore (collection user_tokens_gtm).

  1. In Cloud Console, Firestore → Create database → Native mode, pick a region.

  2. Grant the Cloud Run service account Cloud Datastore User role under IAM & Admin → IAM.


Step 2 — Install

git clone https://github.com/dhawalshah/gtm-mcp
cd gtm-mcp
pip install -r requirements.txt
cp .env.example .env       # fill in values

Step 3 — Mode A: Local STDIO

python setup_local_auth.py

A browser opens, you sign in with Google, the script writes ~/.config/gtm-mcp/token.json.

Then add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "google-tag-manager": {
      "command": "python",
      "args": ["/absolute/path/to/gtm-mcp/server.py"],
      "env": {
        "OAUTH_CONFIG_PATH": "/absolute/path/to/client_secret.json",
        "MCP_USER_EMAIL": "you@yourcompany.com"
      }
    }
  }
}

Restart Claude Desktop. You're done — skip the rest.


Step 3 — Mode B: Remote HTTP server (Claude Teams / claude.ai)

Deploy to Cloud Run

gcloud run deploy gtm-mcp \
  --source . \
  --region YOUR_REGION \
  --project YOUR_PROJECT_ID \
  --platform managed \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "GCP_PROJECT_ID=your-project-id,BASE_URL=https://YOUR-SERVICE-URL.run.app,OAUTHLIB_RELAX_TOKEN_SCOPE=1,ALLOWED_DOMAINS=yourcompany.com" \
  --set-secrets "OAUTH_CONFIG_PATH=gtm-mcp-client-secret:latest"

Required: OAUTHLIB_RELAX_TOKEN_SCOPE=1 — Google's OAuth response often returns a superset of the requested scopes; without this env var, google-auth-oauthlib raises "Scope has changed" in /auth/callback and the entire auth flow fails.

Recommended: load client_secret.json from Secret Manager rather than baking it into the image or passing the raw secret as a plain env var. Store the file as a secret, then mount it at runtime via --set-secrets.

After it's up, go back to APIs & Services → Credentials → your OAuth client and add the live callback URL:

https://YOUR-SERVICE-URL.run.app/auth/callback

Connect from Claude

Claude Teams (org owner adds it once for everyone):

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

  • Each member clicks Connect, signs in with Google, done.

claude.ai personal:

  • Settings → Connectors → Add custom connector

  • URL: https://YOUR-SERVICE-URL.run.app/mcp

Claude Desktop with a remote server:

{
  "mcpServers": {
    "google-tag-manager": {
      "url": "https://YOUR-SERVICE-URL.run.app/mcp"
    }
  }
}

Environment Variables

Variable

Required

Description

BASE_URL

Mode B

Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to.

GCP_PROJECT_ID

Mode B

GCP project hosting Firestore.

OAUTH_CONFIG_PATH

Both†

Path to client_secret.json downloaded from Google Cloud Console.

GOOGLE_CLIENT_ID

Mode B†

Google OAuth client ID (alternative to OAUTH_CONFIG_PATH).

GOOGLE_CLIENT_SECRET

Mode B†

Google OAuth client secret (alternative to OAUTH_CONFIG_PATH).

OAUTHLIB_RELAX_TOKEN_SCOPE

Mode B

Set to 1. Required — Google returns a superset scope and without this the OAuth callback fails.

MCP_USER_EMAIL

Mode A

Your email — set in Claude Desktop config so the server finds your stored token.

ALLOWED_DOMAINS

No

Comma-separated email domain allowlist (e.g. acme.com,beta.com). Empty = no restriction.

PORT

No

HTTP port (default 8080).

LOG_LEVEL

No

Python log level (default INFO).

† Set either OAUTH_CONFIG_PATH or GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET.


Quota

The GTM API v2 has a low default quota: approximately 0.25 QPS, 15 requests/minute, and 10,000 requests/day per GCP project. Unlike Google Ads or Analytics, the quota does not auto-upgrade with billing.

If you hit quota errors, raise limits via Cloud Console → APIs & Services → Tag Manager API → Quotas & System Limits.

The client has built-in rate throttling and exponential backoff to stay within default limits during normal use.


OAuth endpoint reference (Mode B)

Endpoint

Spec

Purpose

GET /.well-known/oauth-protected-resource

RFC 9728

Advertises the canonical resource URI and authorization server.

GET /.well-known/oauth-authorization-server

RFC 8414

Authorization server metadata.

POST /oauth/register

RFC 7591

Dynamic Client Registration.

GET /oauth/authorize

OAuth 2.1

Starts the auth code flow with PKCE; redirects to Google.

GET /auth/callback

Google redirects here; we mint our authorization code and bounce back to the MCP client.

POST /oauth/token

OAuth 2.1

Authorization code + refresh token grants.

A GET /mcp without a valid bearer returns 401 with a WWW-Authenticate: Bearer resource_metadata="…" header pointing at the protected-resource metadata document, which is how a standards-compliant MCP client discovers the rest.


Reference

The reference/ folder holds the upstream stape-io/gtm-mcp TypeScript server, cloned as an API-shape reference during development. It is listed in .gitignore and excluded from Docker/Cloud Run builds — it is not part of the deployable app.


Tech Stack

  • FastMCP — MCP server framework

  • FastAPI + uvicorn — HTTP wrapper

  • Google Auth / google-api-python-client — Google OAuth and API access

  • Firestore — Per-user token storage and OAuth-server state (Mode B)

  • Google Cloud Run — Serverless hosting


About Dhawal Shah

I run a 40-plus person digital marketing agency out of Singapore, and I build the automation my own teams use. This server is one of those tools rather than a weekend project: it runs against live Tag Manager accounts every week, which is why the read-only surface is wide and the write surface is deliberately narrow.

Fourteen years building companies across Asia behind it. 5,000+ campaigns, 400+ brands, 30+ startups advised, and 300+ training sessions for teams including Sony, Toyota, DHL and Interpol. I am also an Accredited Director with the Singapore Institute of Directors, which in practice means I get asked what breaks, who is accountable and what it costs before anyone asks what it can do.

I write up the routines and agents I actually run at dhawalshah.net.

Worth reading alongside this repo: Claude Code for Marketing: Every Channel from One Terminal.


License

MIT

Available Tools

18 tools
gtm_accountGtm AccountB

Manage GTM accounts.

Actions:

  • list: list all accessible accounts (no parent needed).

  • get: get one account. path="accounts/{accountId}".

  • update: update an account. path="accounts/{accountId}", config={...}.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral disclosure burden. It indicates that 'update' is a mutation but does not disclose permissions required, whether changes are reversible, response formats, or error conditions. For a tool that modifies resources, this is a significant transparency gap.

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

Conciseness4/5

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

The description is concise and well-structured with bullet points. The purpose statement is front-loaded, and each action is listed with its path pattern. There is no redundant filler; every sentence adds value. However, it could be slightly more organized by grouping parameters under each action.

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

Completeness3/5

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

Given that an output schema exists, return values are handled. The description covers the three main operations and their path patterns, which is essential for invocation. However, it lacks explanation of the 'params' parameter, authentication requirements, and error handling. For a tool with five parameters and three actions, the description is adequate but leaves notable gaps.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate by explaining all parameters. It partially explains 'path' (as 'accounts/{accountId}') and 'config' (as a configuration object) but completely ignores 'params' and 'parent'. The 'params' parameter is entirely undocumented in both the schema and description, leaving agents uncertain about its purpose.

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

Purpose4/5

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

The description clearly states 'Manage GTM accounts' and enumerates three specific actions (list, get, update) with path patterns. It distinguishes from sibling tools by focusing on accounts, though it does not explicitly contrast with container/tag tools. The verb and resource are specific, but sibling differentiation is only implicit via the resource name.

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 provides some usage hints, such as 'list: no parent needed' and path patterns for get/update. However, it does not explicitly state when to prefer this tool over sibling tools (e.g., gtm_container) or when not to use it. The usage context is implied rather than explicit, with no exclusions or alternatives mentioned.

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

gtm_built_in_variableGtm Built In VariableB

Manage GTM built-in variables.

Actions:

  • list: parent=.

  • create: parent=, params={"type": ""}.

  • remove: path="/built_in_variables", params={"type": "..."}, confirm=true.

  • revert: path="/built_in_variables", params={"type": "..."}, confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It hints at destructive actions via 'confirm=true' for remove and revert, but does not explicitly state that these are irreversible or describe side effects, permissions, or idempotency.

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 compact, front-loaded bullet list with no fluff. Each action line directly states the required parameters, making it highly scannable and efficient.

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

Completeness3/5

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

The description covers the main operations and required parameters, but leaves gaps: 'config' is undocumented, the meaning of 'confirm' is not elaborated, and there is no context about errors, permissions, or when not to use the tool. An output schema exists, so return values are covered, but the description is only minimally complete for an agent to use it safely.

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 has zero descriptions, so the description adds critical meaning for parameters: parent for list/create, params for create/remove/revert, path for remove/revert, and confirm. However, the 'config' parameter is not explained at all, and 'action' values are only implied by the bullet headers.

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

Purpose4/5

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

The description states a clear purpose: 'Manage GTM built-in variables.' and enumerates four specific actions (list, create, remove, revert). This is a specific verb+resource, but it does not explicitly distinguish itself from the sibling gtm_variable tool, relying on the 'built-in' qualifier.

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 action lines give syntax but no guidance on when to use this tool versus alternatives like gtm_variable. There is no mention of exclusions, prerequisites, or context that would help an agent choose this tool over a sibling.

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

gtm_clientGtm ClientB

Manage GTM clients within a workspace. Same action set as gtm_tag (create, get, list, update, remove, revert; remove/revert require confirm=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses a key behavioral detail: 'remove/revert require confirm=true'. However, it does not mention other potential side effects, permissions, or error behaviors. The confirmation requirement is useful but limited; other destructive actions (e.g., update) are not clarified.

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 with no filler. It front-loads the resource and action set, then adds a critical behavioral note. Every element is purposeful and the length is appropriate.

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

Completeness2/5

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

Given the complexity (6 params, no schema descriptions) and reliance on gtm_tag for action definitions, the description is incomplete. It omits parameter semantics, return value details, and does not fully explain invocation patterns. The reference to gtm_tag is indirect and may not be available to the agent without further lookup.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions the 'confirm' parameter and its requirement for remove/revert, but does not explain 'path', 'config', 'params', or 'parent'. The action list hints at usage but does not map parameters to actions. This is inadequate for a tool with six parameters.

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

Purpose4/5

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

The description states 'Manage GTM clients within a workspace' which is a clear verb and resource. It distinguishes from siblings by resource type (clients), but does not explicitly contrast with gtm_tag beyond referencing it. The action set is listed, giving a concrete idea of what operations are available.

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 client resources in a workspace, but does not explicitly state when to use this tool versus alternatives. It references gtm_tag as having the same action set, but does not provide conditions for choosing clients over tags or other resource types. No when-not-to-use guidance is given.

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

gtm_containerGtm ContainerA

Manage GTM containers.

Standard CRUD (list/create: parent='accounts/{a}'; get/update/remove: path='accounts/{a}/containers/{c}') plus:

  • combine: path=, params={containerId,...}, confirm=true. (destructive)

  • lookup: params={destinationId} -> find container by destination. (read-only; no parent/path needed)

  • move_tag_id: path=, params={...}, confirm=true. (destructive)

  • snippet: path= -> GTM install snippet. (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It explicitly marks combine and move_tag_id as destructive, notes that they require confirm=true, and marks lookup and snippet as read-only. This is critical transparency. It does not cover permissions, error conditions, or rate limits, but the most important safety-relevant behaviors are disclosed.

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 tightly written with a clear summary line and a bulleted list that separates actions. It front-loads the purpose and uses formatting to make each operation's requirements visually distinct. Every sentence contributes information, with no filler or repetition.

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 tool's complexity (7 actions, 6 parameters), the description covers all actions and their parameter requirements thoroughly. It explains destructive vs. read-only nature and the confirm flag. Output schema covers return values, so the description doesn't need to. It omits potential authentication or rate-limit details, but for a management tool this is a reasonable gap given the richness of the action-specific guidance.

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 description coverage is 0%, so the description must compensate, and it does. It explains the meaning and usage of path, parent, params, and confirm in the context of specific actions, adding significant semantic value beyond the bare schema fields. For example, it clarifies that parent is for list/create, path for get/update/remove, and params for lookup with destinationId. This goes well beyond the generic 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 explicitly states 'Manage GTM containers' and enumerates specific operations (CRUD, combine, lookup, move_tag_id, snippet). It clearly identifies the resource and the actions, distinguishing it from sibling tools that manage other GTM entities like tags or accounts.

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 detailed guidance per action: which parameters are required (parent vs. path), when confirm=true is needed (destructive actions), and that lookup uses params with destinationId while requiring no parent/path. It implicitly routes the agent to the correct action based on intent, though it does not explicitly name alternative tools. This is strong usage guidance for a multi-action tool.

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

gtm_destinationGtm DestinationA

Manage GTM destinations.

Actions:

  • list: parent=''.

  • get: path='/destinations/{id}'.

  • link: parent='', params={destinationId}, confirm=true. (Note: Google has deprecated destination linking via API.) (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It explicitly marks the 'link' action as '(destructive)' and notes that Google deprecated destination linking via API, which is valuable. However, it does not disclose read-only nature of list/get, error behavior, rate limits, or prerequisites beyond the parent container. The deprecation warning is a positive, but coverage is incomplete for a multi-action tool.

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

Conciseness4/5

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

The description is concise, structured as an action list with inline examples, and avoids redundancy. The deprecation note is included without fluff. The front-loaded 'Manage GTM destinations' quickly establishes scope, and the action breakdown is easy to scan. Minor issue: the '(destructive)' note is placed oddly at the end of the link line, but overall it's efficient.

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

Completeness3/5

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

For a multi-action tool with 6 parameters and no annotations, the description provides the action semantics but leaves gaps. It does not explain the 'config' parameter, nor does it cover potential actions beyond the three listed. While an output schema exists (per context signals), the description does not mention what the tool returns or how to interpret results. The deprecation note is helpful but incomplete for full autonomous usage.

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 0% description coverage, so the description must compensate. It explains parameter usage for actions: parent for list, path for get, and parent, params, confirm for link. However, the 'config' parameter is entirely unexplained, and the description does not define the exact structure or required fields for 'params' beyond an example. It adds meaningful context for some parameters but fails to cover all.

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 states a clear purpose: 'Manage GTM destinations' and enumerates three specific actions (list, get, link) with resource scope. The sibling tools are for other GTM resources (container, tag, etc.), so the tool's domain is unambiguous. Each action is a specific verb+resource combination, and the syntax examples clarify what it does.

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 concrete usage instructions for each action, e.g., 'list: parent='<container>'' and 'get: path='<container>/destinations/{id}''. It implicitly communicates that this tool is for destination management, but it does not explicitly contrast with sibling tools or state when not to use it. The action-level guidance is strong, but high-level selection context is absent.

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

gtm_environmentGtm EnvironmentB

Manage GTM environments. Standard CRUD (list/create: parent=''; get/update/remove: path='/environments/{id}') plus:

  • reauthorize: path='/environments/{id}', confirm=true. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden, and it does flag reauthorize as destructive and confirm-gated. However, it does not disclose side effects of remove/update, permission needs, or what reauthorize actually changes, so coverage is only partial.

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: two sentences with a bullet, front-loading the resource and action list, with no filler. The dense shorthand is still readable and every part contributes useful information.

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

Completeness2/5

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

Action values and path conventions are covered, and an output schema exists so return-value documentation is not needed. However, config and params semantics are absent, and for a mutation-capable tool with no annotations this leaves the agent guessing about payloads and side effects.

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

Parameters2/5

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

The description adds meaningful mappings for action, parent, path, and confirm, which the bare schema does not explain. But config and params are completely undocumented, and with 0% schema description coverage this leaves a substantial semantic gap.

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

Purpose4/5

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

The description clearly identifies the resource as GTM environments and enumerates specific CRUD actions plus reauthorize, with path patterns. It does not explicitly contrast with sibling GTM tools, but the resource name and action list make 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 Guidelines2/5

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

No guidance is given on when to use this tool over sibling tools or when to prefer specific actions. The path and confirm details are parameter guidance rather than usage context, and there are no exclusions or alternatives mentioned.

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

gtm_folderGtm FolderB

Manage GTM folders.

Standard CRUD+revert like gtm_tag, plus:

  • entities: path="/folders/{id}" → list entities in folder. (read-only)

  • move_entities_to_folder: path="/folders/{id}", params={tagId/triggerId/variableId}, confirm=true. Moves entities into the folder. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It explicitly notes that 'entities' is read-only and 'move_entities_to_folder' is destructive and requires confirm=true. However, it does not disclose the safety profile of the standard CRUD operations (e.g., delete, revert) or mention any side effects, permissions, or irreversible changes beyond the one noted. The description provides some transparency but not enough for a tool with multiple destructive operations.

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

Conciseness4/5

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

The description is concise, with a one-line summary and a clear bullet list for the special actions. It is front-loaded and avoids unnecessary verbosity. The structure is scannable and helps the agent quickly identify key operations.

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

Completeness2/5

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

Given the tool's complexity (6 parameters, multiple actions, no annotations, 0% schema coverage), the description is incomplete. It fails to specify the full set of action names, explain the general CRUD behavior, or define the 'config' and 'parent' parameters. While an output schema exists, it doesn't cover input semantics. The description is not sufficient for an agent to correctly call this tool without additional context.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It provides path and params hints for the two special actions (entities and move_entities_to_folder), but it does not explain the 'action' parameter values (e.g., create, read, update, delete, revert), nor the meaning of 'config' and 'parent'. The description adds minimal value for the general CRUD flow, leaving the agent to guess parameter usage.

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

Purpose4/5

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

The description clearly states the tool manages GTM folders and enumerates the operations (standard CRUD+revert plus two specific actions). It references gtm_tag as a baseline, which distinguishes it from other sibling tools. However, it relies on the agent knowing what 'standard CRUD+revert' entails, so it's not fully self-contained.

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 by comparing to gtm_tag and adding folder-specific actions, but it does not explicitly state when to use this tool over alternatives or when not to use it. It also doesn't mention exclusions or specific scenarios that would route to a different tool. The 'like gtm_tag' hint gives some context, but it's not explicit.

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

gtm_gtag_configGtm Gtag ConfigC

Manage GTM Google tag (gtag) config. Standard CRUD (no revert).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior. It notes 'standard CRUD' and 'no revert', which are useful, but it fails to mention side effects, permission requirements, or that the confirm parameter likely gates destructive operations. Significant behavioral aspects are left implicit.

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

Conciseness4/5

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

The description is a single concise sentence that front-loads the purpose and key limitation (no revert). It wastes no words and is easy to scan.

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

Completeness2/5

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

Despite having an output schema, the tool has six parameters, no annotations, and a 0% schema description coverage. The description does not specify possible actions, parameter meanings, or the role of confirm. An agent would lack essential information to call it correctly.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate. It provides no explanation of any parameter (action, path, config, params, parent, confirm). The only implicit hint is that 'config' likely holds the configuration object, but even that is vague. The description adds essentially no value over the schema.

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

Purpose4/5

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

The description states it manages GTM Google tag (gtag) config and mentions standard CRUD operations, clearly identifying the resource and general behavior. It distinguishes from sibling tools by specifying gtag config, though it doesn't enumerate exact actions or scope.

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?

No guidance on when to use this tool versus other GTM resource tools. It does not mention any alternatives, conditions, or exclusions. The description only states what the tool does, not how to choose it.

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

gtm_tagGtm TagB

Manage GTM tags within a workspace.

Actions:

  • list: parent="accounts/{a}/containers/{c}/workspaces/{w}".

  • get: path="/tags/{tagId}".

  • create: parent=, config={tag definition}.

  • update: path="/tags/{tagId}", config={...}.

  • remove: path="/tags/{tagId}", confirm=true. (destructive)

  • revert: path="/tags/{tagId}", confirm=true. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does mark remove and revert as '(destructive)' and requires confirm=true for them, which is valuable safety disclosure. However, it does not describe return values, error behavior, authentication needs, or what happens to related entities on removal — gaps for a mutation-focused tool with zero annotation coverage.

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

Conciseness4/5

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

The description is well structured: a one-line purpose statement followed by a compact bullet list of actions with their parameters. It is front-loaded and each line is minimal. Minor redundancy exists in repeating '<workspace>/tags/{tagId}' across get/update/remove/revert, but overall it is efficient and scannable.

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

Completeness3/5

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

Given 6 parameters, 0% schema coverage, and no annotations, the description is moderately complete. It covers action-to-parameter mapping and marks destructive operations. However, the unexplained 'params' parameter, undefined 'config' structure, unspecified 'action' values, and absence of error/return behavior (the output schema partially mitigates the return gap) leave meaningful holes for an agent needing 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 description coverage is 0%, so the description must compensate. It does map which parameters each action uses (list→parent, get→path, create→parent+config, update→path+config, remove/revert→path+confirm), which adds real meaning beyond the bare schema. However, the 'params' parameter is never explained, the 'action' enum values are not enumerated, and the expected structure of 'config' is left undefined, so compensation is only partial.

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

Purpose4/5

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

The description states the resource (GTM tags) and scope (within a workspace) and enumerates six specific actions (list, get, create, update, remove, revert). The verb 'Manage' is generic, but the explicit action list with resource paths gives clear specificity and distinguishes it from siblings like gtm_trigger and gtm_variable, which target different resources.

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 action list implies usage context (e.g., list operates on a parent workspace, get/update/remove operate on a specific tag by path). However, there is no explicit when-to-use versus alternative guidance, no exclusions, and no mention of sibling tools like gtm_trigger for related workflows. The hierarchical path pattern (accounts/containers/workspaces) gives some implied context but leaves routing decisions to inference.

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

gtm_templateGtm TemplateC

Manage GTM custom templates. Standard CRUD+revert plus:

  • import_from_gallery: parent= (or path="/templates"), confirm=true. Imports a Community Template Gallery template.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'revert' and 'import_from_gallery' but does not explain destructive semantics, permission requirements, side effects, or how confirmation works beyond the bare 'confirm=true' parameter. This is insufficient for a mutation-heavy tool.

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

Conciseness4/5

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

The description is short and front-loaded, with a useful special-case bullet for import_from_gallery. It is appropriately compact, but the brevity comes at the cost of missing behavioral and parameter details.

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

Completeness2/5

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

The tool has six parameters, no annotation safety net, and zero schema descriptions; the description only partially documents one mode. An agent would not know what 'standard CRUD' maps to, what revert does, or how the main parameters should be populated.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the six parameters. It gives partial semantics for 'parent', 'path', and 'confirm' in the import_from_gallery case, but leaves 'action', 'config', and 'params' unexplained for the main CRUD+revert operations.

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

Purpose4/5

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

The description states the resource ('GTM custom templates') and a clear scope of operations ('Standard CRUD+revert' plus import). It is more specific than a pure tautology, and the resource-name distinguishes it from sibling GTM tools, though 'Manage' is somewhat generic and 'CRUD' is implied rather than spelled out.

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?

No explicit guidance is given about when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or when a sibling tool would be more appropriate. The resource context implies template-related usage, but the description leaves selection to inference.

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

gtm_transformationGtm TransformationB

Manage GTM transformations within a workspace. Same action set as gtm_tag (create, get, list, update, remove, revert; remove/revert require confirm=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the confirm=true requirement for remove/revert, which is a meaningful safety-relevant behavior, and lists destructive-sounding actions. It does not explain side effects, required permissions, or response characteristics, so it is only partially transparent.

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

Conciseness4/5

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

The description is a single compact sentence that front-loads the resource and action set; there is no filler or repetition. The reference to gtm_tag is efficient but slightly cryptic for an agent that has not already read that tool's definition.

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

Completeness2/5

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

Despite an output schema, the input side is underspecified: six parameters, a required action, no parameter descriptions, and no behavioral context. An agent would struggle to know how to construct an object for the various actions. The description covers surface-level operations but not enough to invoke complex actions confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters, but it only implies that confirm gates remove/revert. It leaves path, action, config, params, and parent effectively undefined except by name, so an agent cannot determine what values to pass without additional context.

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

Purpose4/5

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

The description names a specific resource (GTM transformations), scopes it to a workspace, and enumerates the supported operation set (create, get, list, update, remove, revert). It is not a tautology and gives an agent enough to distinguish this from the sibling tools by resource type, though it does not define what a transformation is.

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 establishes the tool covers GTM transformations and that its action set mirrors gtm_tag, which gives some sense of appropriate context. However, it never states when to choose transformation over another sibling, nor any conditions or exclusions beyond the confirm requirement.

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

gtm_triggerGtm TriggerB

Manage GTM triggers within a workspace. Same action set as gtm_tag (create, get, list, update, remove, revert; remove/revert require confirm=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It does disclose that remove/revert are guarded by confirm=true, which hints at destructive behavior. However, it does not explain side effects, reversibility, permissions, or what happens on update/revert, leaving significant behavioral ambiguity for a mutation-capable tool.

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

Conciseness4/5

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

The description is compact and front-loads the core purpose and action set. The reference to gtm_tag is efficient, though slightly cryptic, and every sentence contributes useful information without padding.

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

Completeness2/5

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

The presence of an output schema reduces the need to document return values, but the description still omits crucial invocation details for a generic action dispatcher. The agent knows which actions exist but not how to specify targets or configure them through path, parent, config, or params, making the definition incomplete for reliable use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for explaining all six parameters. It partially does by enumerating valid action values and clarifying confirm, but path, config, params, and parent remain entirely unexplained. This is inadequate for an agent to construct valid calls confidently.

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

Purpose4/5

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

The description names the specific resource (GTM triggers) and scope (within a workspace), and provides an explicit action set: create, get, list, update, remove, revert. This makes the tool's role clear and distinguishes it from sibling tools targeting other GTM resources, though 'Manage' is somewhat generic and the action semantics are borrowed from gtm_tag.

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 gives practical usage context by naming the workspace scope and stating that remove/revert require confirm=true. It does not explicitly tell the agent when to choose this tool over alternatives such as gtm_tag or gtm_variable, so usage guidance is implied rather than explicit.

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

gtm_user_permissionGtm User PermissionB

Manage GTM account user permissions.

Actions:

  • list: parent='accounts/{id}'.

  • get: path='accounts/{id}/user_permissions/{permId}'.

  • create: parent='accounts/{id}', config={emailAddress, accountAccess, containerAccess}.

  • update: path='accounts/{id}/user_permissions/{permId}', config={...}.

  • remove: path='accounts/{id}/user_permissions/{permId}', confirm=true. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It notes that remove is destructive and requires confirm=true, but it does not describe side effects of create/update (e.g., overwrites, merges), authentication requirements, rate limits, or any other behavioral nuances. This is a significant gap for a mutation-heavy tool with zero annotation coverage.

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement followed by bullet-point actions, each on one line with minimal verbosity. It is front-loaded with the core purpose and avoids redundant phrasing, making it easy to scan and parse.

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

Completeness3/5

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

For a multi-action tool with no annotations, the description covers the main actions and their parameter mappings, but it omits the 'params' parameter and lacks behavioral context. While an output schema exists (so return values are covered), the missing parameter semantics and behavioral details make it incomplete for an agent to use confidently in all scenarios.

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 description adds meaning to the schema's generic parameters by mapping each action to the required fields (e.g., parent for list, path for get, config for create). However, it leaves 'params' completely unexplained and the update config is only shown as '{...}', providing incomplete semantics. With schema description coverage at 0%, the description must compensate, and it does so only partially.

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

Purpose4/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 as 'Manage GTM account user permissions' and enumerates specific actions (list, get, create, update, remove) with API paths, making it distinct from sibling tools that handle other GTM entities. While 'manage' is somewhat broad, the action list adds precision.

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 this tool is for user permission operations, and its uniqueness among siblings is evident from the resource focus. However, it provides no explicit guidance on when to choose this tool over others, nor does it mention any exclusions or prerequisites. The guidance is implicit rather than explicit.

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

gtm_variableGtm VariableA

Manage GTM variables within a workspace. Same action set as gtm_tag (create, get, list, update, remove, revert; remove/revert require confirm=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose that remove/revert require confirm=true, which is a meaningful behavioral constraint. However, it does not mention permissions, side effects, or other operational details. The description is minimal and does not provide rich behavioral context beyond the confirm requirement, so 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 a single sentence that gets straight to the point: purpose, scope, and a critical behavioral requirement. It is concise, front-loaded with the primary purpose, and contains no filler. Every element earns its place.

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

Completeness2/5

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

Given there is an output schema, return format is not necessary, but the tool has 6 parameters and 1 required. The description provides only the action set and confirm requirement, leaving the roles of path, config, params, and parent undocumented. For a tool with this complexity, the description is too thin to allow an agent to call it correctly without external knowledge. It is not complete enough.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only addresses the confirm parameter (implicitly via the confirm=true requirement) and implies the action parameter takes the listed actions. But it does not explain path, config, params, or parent. With six parameters and minimal compensation, this is a significant gap. The description adds limited value beyond the schema, which has no descriptions, so a score of 2 reflects insufficient elaboration.

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 GTM variables within a workspace, and enumerates the exact action set (create, get, list, update, remove, revert). It explicitly distinguishes itself from gtm_tag by naming the sibling and indicating it applies to variables. This is a specific verb+resource with clear differentiation from siblings.

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 usage by naming the resource (variables) and referencing the sibling gtm_tag as having the same actions. An agent can infer to use this for variables and gtm_tag for tags. However, it does not explicitly state when not to use this tool or mention any alternatives beyond the tag reference, so it is clear but lacks explicit when/when-not guidance.

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

gtm_versionGtm VersionA

Manage GTM container versions.

Actions:

  • get: path='/versions/{id}'.

  • live: path='' (or parent='') -> currently-published version. (read-only)

  • publish: path='/versions/{id}', confirm=true. PUSHES LIVE. (destructive)

  • set_latest: path='/versions/{id}', confirm=true. (destructive)

  • undelete: path='/versions/{id}', confirm=true. (destructive)

  • update: path='/versions/{id}', config={...}.

  • remove: path='/versions/{id}', confirm=true. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations at all, the description carries the full burden of behavioral disclosure, and it does meaningful work: it labels live as read-only, marks publish/set_latest/undelete/remove as destructive, explicitly warns 'PUSHES LIVE', and requires confirm=true for destructive actions. It falls short of fully explaining the consequences of each destructive action (e.g., whether versions are permanently lost, what set_latest actually does), but the safety profile is clearly conveyed.

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 compact, scannable action list with zero filler; the one-line purpose is followed by dense, self-contained entries. Repetition of the path pattern is justified because it makes each action readable without cross-referencing, and every line earns its place.

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

Completeness3/5

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

For a 7-action, 6-parameter tool with no annotations and 0% schema coverage, the description handles action routing well, and an output schema exists so return values need not be explained. Still, params is completely unexplained, config lacks any structure, and action semantics like set_latest and undelete are not elaborated—gaps an agent must resolve elsewhere.

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 description coverage is 0%, so the description must compensate—and it does substantially: it maps path='<container>/versions/{id}' to each action, clarifies parent as an alternative for the live action, ties confirm=true to destructive actions, and shows config={...} for update. However, the params parameter is never mentioned, and the structure of config is left entirely open.

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 states a clear resource ('GTM container versions') and verb ('Manage'), then enumerates seven distinct actions (get, live, publish, set_latest, undelete, update, remove), each with an explicit path and behavior. This fully disambiguates it from siblings like gtm_version_header (headers only) and gtm_container, which cover a different resource.

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 action list implies usage scenarios—get for retrieval, live for the published version, publish for going live—and the destructive flags imply caution. However, there is no explicit when-to-use/when-not-to-use guidance, no mention of prerequisites (e.g., permissions or workspace context), and no routing to alternatives among the 17 sibling tools.

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

gtm_version_headerGtm Version HeaderB

List GTM container version headers.

Actions:

  • list: parent=''.

  • latest: parent='' -> latest version header. (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
paramsNo
parentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden here. It explicitly marks 'latest' as read-only, and 'List' implies a non-mutating operation. Still, it does not disclose permissions, rate limits, or any side-effect caveats, leaving only minimal behavioral transparency.

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 short, front-loaded with the core purpose, and uses a clear action-by-action bullet structure. Every sentence contributes useful information with no filler or repetition.

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

Completeness2/5

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

For a tool with four parameters and zero schema description coverage, the description leaves significant gaps: 'path' and 'params' are undocumented, no behavior beyond 'read-only' is covered, and no guidance is given for choosing this over sibling tools. The presence of an output schema mitigates return-value documentation but not these other gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explains 'action' values and the 'parent' parameter, but says nothing about 'path' or 'params', which remain entirely opaque in both schema and description. This is partial compensation at best.

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

Purpose4/5

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

The description opens with 'List GTM container version headers,' which names a specific verb and resource. It also enumerates 'list' and 'latest' actions, making the operation clear. It does not explicitly contrast with the sibling tool gtm_version, so it falls short of a 5.

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 action list provides call syntax for 'list' and 'latest' with parent='<container>', giving some operational guidance. However, it never states when to prefer this tool over gtm_version or other siblings, and it lacks any explicit when-not-to-use guidance.

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

gtm_workspaceGtm WorkspaceA

Manage GTM workspaces.

Standard CRUD (list/create: parent=; get/update/remove: path=) plus:

  • create_version: path=, config={name,notes}, confirm=true. (destructive)

  • get_status: path= -> uncommitted changes. (read-only)

  • sync: path=, confirm=true. (destructive)

  • quick_preview: path= -> preview of unsubmitted changes. (read-only)

  • resolve_conflict: path=, config={...}, confirm=true. (destructive)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly labels destructive actions with '(destructive)' and read-only actions with '(read-only)', and notes that destructive actions require confirm=true. This is a strong signal for an agent about safety. However, it does not elaborate on side effects beyond destruction (e.g., what happens on remove, whether sync overwrites changes) or any authentication or rate-limit requirements. The transparency is decent but not exhaustive.

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

Conciseness4/5

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

The description is structured with a short purpose sentence followed by a bulleted list of operations, which is easy to scan. It front-loads the main purpose and then enumerates operations with their specific parameter patterns. While somewhat dense, it avoids fluff and each line conveys a distinct behavior. The use of symbols like '->' for read-only outputs is concise. It earns a 4 for efficiency and organization, though it could be slightly more compact.

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

Completeness3/5

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

The tool has six parameters, multiple actions, and some are destructive, so a complete description is important. The description covers the main operations and their safety, but leaves gaps: it does not explain what 'sync' and 'resolve_conflict' actually do in behavioral terms, only that they are destructive. It also omits the 'params' parameter entirely. The output schema exists, so return values are covered elsewhere, but the action-specific requirements are incomplete (e.g., resolve_conflict's config is unspecified). For an agent to correctly invoke all actions, more detail is needed.

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 0%, so the description must compensate for missing parameter meaning. It does explain key parameters in context: path is the workspace identifier, parent is the container, config carries action-specific data (e.g., {name,notes} for create_version), and confirm is required for destructive actions. However, it never mentions the 'params' parameter, and config for resolve_conflict is left as '{...}' without details. The action parameter is implied by the listed actions but not formally described. Thus, the description adds meaning for most but not all parameters, leaving gaps.

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: 'Manage GTM workspaces.' It then enumerates standard CRUD operations and additional workspace-specific actions (create_version, get_status, sync, quick_preview, resolve_conflict), making it distinct from sibling tools that handle other GTM entities like containers, tags, or triggers. The verb 'manage' plus the resource 'GTM workspaces' and the action list leave no ambiguity about scope.

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 for each action, including required parameters and whether an action is destructive or read-only. However, it does not explicitly state when to prefer this tool over a sibling (e.g., 'use gtm_container for containers'). The implicit distinction via the resource name and the action list is clear enough, but no direct alternative routing is given. The per-action usage details (e.g., 'create_version requires path and config') effectively guide invocation.

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

gtm_zoneGtm ZoneB

Manage GTM zones within a workspace. Same action set as gtm_tag (create, get, list, update, remove, revert; remove/revert require confirm=true).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
actionYes
configNo
paramsNo
parentNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose one meaningful behavioral rule: remove/revert require confirm=true. It does not describe side effects, permissions, reversibility, or how the actions differ beyond that confirm requirement, leaving the behavioral profile incomplete.

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

Conciseness4/5

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

The description is compact, with two sentences and no filler. The action list and confirm requirement are front-loaded and useful, though slightly more specifics about zones would improve it.

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

Completeness2/5

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

Despite having an output schema, the description does not provide enough context for correct invocation: parameter semantics are largely missing, action-specific behavior is underspecified, and there are no annotations to fill in safety or side effects. The agent is left to infer too much about how to use this tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only explains the action set and confirm requirement. The path, config, params, and parent parameters remain generic and undocumented, which is a significant gap for a six-parameter tool.

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

Purpose4/5

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

The description identifies the resource ('GTM zones') and enumerates the supported actions (create, get, list, update, remove, revert), which makes the tool's job reasonably clear. The verb 'Manage' is generichol, and the description does not explain what a zone is beyond the resource name, so it stops short of fully specific.

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 reference to gtm_tag with 'Same action set as gtm_tag' gives the agent a direct comparator among siblings, and 'within a workspace' provides the containment context. It does not explicitly state when not to use this tool or list exclusions, but the usage context is fairly clear.

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.

  1. 18 tool updatesv0.1.0
    • First observedgtm_account
    • First observedgtm_built_in_variable
    • First observedgtm_client
    • First observedgtm_container
    • First observedgtm_destination
    • First observedgtm_environment
    • First observedgtm_folder
    • First observedgtm_gtag_config
    • First observedgtm_tag
    • First observedgtm_template
    • First observedgtm_transformation
    • First observedgtm_trigger
    • First observedgtm_user_permission
    • First observedgtm_variable
    • First observedgtm_version
    • First observedgtm_version_header
    • First observedgtm_workspace
    • First observedgtm_zone

TDQS

A3.5/5.0

Scored across 18 tools

Disambiguation5/5

Each tool is explicitly scoped to a distinct GTM entity (account, container, workspace, tag, trigger, etc.), with names like gtm_tag and gtm_trigger making the target resource clear. Despite shared CRUD actions, the entity distinction eliminates any ambiguity.

Naming Consistency5/5

All tools follow the consistent pattern gtm_<entity> in snake_case, and actions within each tool use standard verbs (list, get, create, update, remove, revert). This uniform naming convention makes the tool set predictable and easy to navigate.

Tool Count4/5

At 18 tools, the count is on the higher end of the typical range, but it is justified by the breadth of GTM's API which includes many distinct entity types. Each tool earns its place by covering a unique resource, so the count feels appropriate for the domain's complexity.

Completeness5/5

The server covers all major GTM entities including accounts, containers, workspaces, tags, triggers, variables, folders, clients, zones, templates, transformations, destinations, environments, versions, and user permissions. It also includes built-in variables and version headers, providing comprehensive lifecycle management with no obvious gaps.

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
    78 npm
    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.
    13 npm
    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
    -