gtm-mcp-server
Provides tools for managing Google Tag Manager workspaces, including creating, updating, deleting, and listing tags, triggers, and variables at the draft level.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gtm-mcp-serverCreate a GA4 event tag named 'page_view' in container GTM-ABC123 and fire it on all pages."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gtm-mcp-server
An MCP (Model Context Protocol) server for safely managing Google Tag Manager workspace drafts from Claude, Codex, or another MCP client.
The server never publishes a container. All changes remain in a GTM workspace for human review. Mutating tools require an explicit workspace, use GTM fingerprints when updating or reverting entities, and are annotated so MCP clients can distinguish reads from risky changes.
Features
Discover accounts, containers, and workspaces by name or ID.
Create dedicated automation workspaces.
List, get, create, update, delete, and revert tags, triggers, and variables.
Inspect workspace changes/conflicts, sync with the latest version, and run a quick preview.
Follow every Google API result page instead of silently returning only the first page.
Reject ambiguous names and require IDs when more than one resource has the same name.
Return both readable JSON text and MCP structured output.
Protect partial updates by fetching the current entity, merging selected fields, and sending its latest fingerprint.
Writes always require workspace. Reads may omit it only when the container has a uniquely
identifiable Default Workspace.
Related MCP server: GTM MCP Server
Architecture

The MCP client launches the local server over stdio. The server reads OAuth credentials and tokens
from ~/.gtm-mcp, calls the Google Tag Manager API, and limits automated changes to workspace
drafts. A human reviews and publishes the container separately in GTM.
What's new in v0.2
Safe partial updates with GTM fingerprint conflict protection.
Explicit workspace selection for every create, update, delete, revert, sync, and preview call.
Default Workspace fallback for read-only calls.
Complete pagination for account, container, workspace, tag, trigger, and variable listings.
Workspace status, sync, conflict inspection, and quick preview tools.
Secure local OAuth callback with state validation, a five-minute timeout, and restrictive token file permissions.
Structured MCP responses, mutation annotations, tests, and CI.
Requirements
Node.js 22 or newer (required by the current Google API libraries)
A Google Cloud project with the Tag Manager API enabled
A Google account with access to the target GTM account/container
1. Create a Google OAuth client
Open Google Cloud Console and create or select a project.
Enable the Tag Manager API under APIs & Services → Library.
Go to APIs & Services → Credentials → Create Credentials → OAuth client ID.
Select Desktop app.
Download the JSON file and save it as
~/.gtm-mcp/credentials.json.
You can use a different location with GTM_MCP_CREDENTIALS_PATH.
2. Install
git clone https://github.com/dienhokhanh/gtm-mcp-server.git
cd gtm-mcp-server
npm ci
npm run checknpm run check builds dist/ and runs the test suite. Run it again after pulling updates.
3. Sign in to Google
npm run authOpen the printed Google URL and grant access. Authentication uses a temporary callback bound
only to 127.0.0.1, validates OAuth state, and stops waiting after five minutes. The resulting
token is written to ~/.gtm-mcp/token.json with user-only file permissions.
Version 0.2 adds the tagmanager.edit.containerversions scope for workspace quick preview. If
you authenticated with an older release, run npm run auth again to grant the new scope.
4. Connect an MCP client
Codex CLI or the Codex IDE extension:
codex mcp add gtm -- node "/absolute/path/to/gtm-mcp-server/dist/index.js"
codex mcp listClaude Code:
claude mcp add gtm -- node "/absolute/path/to/gtm-mcp-server/dist/index.js"
claude mcp listClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"gtm": {
"command": "node",
"args": ["/absolute/path/to/gtm-mcp-server/dist/index.js"]
}
}
}Restart the MCP client after changing its configuration. The server communicates over stdio, so
you do not need to run npm start separately when the client launches dist/index.js.
Workspace behavior
Read-only tools may omit
workspace; the server then resolves the container's Default Workspace.Mutating tools always require a workspace name or ID. You may explicitly pass
Default Workspace, but a dedicated workspace is safer for automation.Duplicate account, container, or workspace names are rejected as ambiguous. Use the numeric ID returned by the corresponding list tool.
The server can create and edit workspace drafts, but it cannot publish a container.
Example workflows
Create a dedicated workspace and a GA4 event tag:
“List my GTM accounts and containers.”
“Create a workspace named
MCP - purchase trackingin containerGTM-ABC123.”“Create the purchase trigger and GA4 event tag in that workspace.”
“Show workspace status and run a quick preview.”
Review and publish manually in the GTM UI.
Create a demo Meta/Facebook Pixel tag without publishing:
In container
GTM-ABC123, create a Custom HTML tag namedDemo - Meta Pixelin workspaceMCP - demo. Use a clearly fake pixel ID, attach the existing All Pages trigger, then show the workspace status. Do not publish.
Always replace demo IDs with your own values only after reviewing the generated workspace draft.
Tools
Area | Read-only tools | Mutating tools |
Discovery |
|
|
Workspace |
|
|
Tags |
|
|
Triggers |
|
|
Variables |
|
|
gtm_quick_preview_workspace creates only a temporary preview. It does not publish the container.
Environment variables
Variable | Default | Meaning |
|
| Directory holding credentials and token |
|
| OAuth client credentials |
|
| Cached OAuth token |
Development
npm run build
npm test
npm run checkUnit tests cover mutation workspace requirements, GTM enum wire values, partial-update inputs, and trigger condition validation. Live integration testing requires your own Google OAuth and GTM test container.
Troubleshooting
I can see only some accounts or containers
The token belongs to the Google account selected during npm run auth. GTM returns only resources
that account can access. To sign in with a different Google account while keeping a recoverable
copy of the old token:
mv ~/.gtm-mcp/token.json ~/.gtm-mcp/token.backup.json
npm run authFor multiple identities, give each one a separate GTM_MCP_CONFIG_DIR and configure that variable
for the corresponding MCP server entry.
OAuth sign-in fails
Confirm the downloaded credential is a Desktop app OAuth client, not a Web application.
Confirm the Tag Manager API is enabled in the same Google Cloud project.
If the OAuth consent screen is in testing mode, confirm the Google account is allowed to test it.
If an existing token predates v0.2, run
npm run authagain to grant the preview scope.
A name is ambiguous
Run the relevant list tool and retry with the returned numeric account, container, or workspace ID. The server intentionally refuses to guess when multiple resources have the same name.
Security notes
Never commit OAuth credentials or tokens. Common credential, token, and environment filenames are covered by
.gitignore; keep custom secret paths outside the repository too.Use a dedicated GTM workspace for automated changes.
Inspect
gtm_workspace_statusand rungtm_quick_preview_workspacebefore publishing.Publishing remains a manual action in the GTM UI.
Tokens are still local bearer credentials: only run this server on a trusted machine.
About PPC Blog Pro
gtm-mcp-server is an open-source project from PPC Blog Pro, an
independent resource for PPC professionals covering Google Ads, Meta Ads, AI-assisted campaign
management, analytics, and conversion tracking.
License
MIT
Available Tools
25 toolsgtm_create_tagB
Create a tag in an explicitly selected workspace. The container is not published.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the tag in GTM. | |
| type | Yes | GTM tag type id, e.g. 'gaawe' (GA4 event), 'googtag' (Google tag), 'html' (Custom HTML), or 'awct' (Google Ads Conversion Tracking). | |
| notes | No | ||
| paused | No | Whether the tag is inactive. | |
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| liveOnly | No | ||
| priority | No | ||
| setupTag | No | ||
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| parameter | No | Parameters in the GTM API format matching the tag type. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| teardownTag | No | ||
| scheduleEndMs | No | ||
| parentFolderId | No | ||
| consentSettings | No | ||
| firingTriggerId | No | Trigger IDs that fire this tag. | |
| scheduleStartMs | No | ||
| tagFiringOption | No | ||
| blockingTriggerId | No | Trigger IDs that block this tag. | |
| monitoringMetadata | No | ||
| monitoringMetadataTagNameKey | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false and non-idempotent, so safety is covered. The description adds genuinely useful, non-obvious context: the change lands only in the workspace and 'the container is not published', telling the agent nothing goes live until a later publish step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, and the workspace-scoping constraint is front-loaded ahead of the publish note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values and annotations cover safety, but for a 21-parameter, deeply nested creation tool with low schema description coverage, the description does not do enough to help an agent populate the parameter array correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43% across 21 parameters, including nested parameter/setupTag/teardownTag/consentSettings structures, yet the description explains none of them. It only gestures at the workspace requirement, leaving the heavy tag-configuration parameters undocumented in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Create a tag') scoped to a workspace, which cleanly separates it from gtm_create_trigger, gtm_create_variable, and gtm_update_tag. It does not, however, explicitly name those siblings the way a 5 would.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies a workspace must already exist ('explicitly selected workspace'), but there is no when/when-not guidance or routing to alternatives such as gtm_update_tag for modifying an existing tag or gtm_create_workspace as a prerequisite. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_triggerB
Create a trigger in an explicitly selected workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the trigger. | |
| type | Yes | GTM trigger type, e.g. 'pageview', 'domReady', 'click', 'linkClick', 'customEvent', or 'timer'. | |
| limit | No | ||
| notes | No | ||
| filter | No | Filter conditions in GTM API format. | |
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| interval | No | ||
| selector | No | ||
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| eventName | No | ||
| parameter | No | ||
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| waitForTags | No | ||
| parentFolderId | No | ||
| autoEventFilter | No | ||
| checkValidation | No | ||
| intervalSeconds | No | ||
| uniqueTriggerId | No | ||
| customEventFilter | No | ||
| visibilitySelector | No | ||
| waitForTagsTimeout | No | ||
| visiblePercentageMax | No | ||
| visiblePercentageMin | No | ||
| maxTimerLengthSeconds | No | ||
| totalTimeMinMilliseconds | No | ||
| verticalScrollPercentageList | No | ||
| continuousTimeMinMilliseconds | No | ||
| horizontalScrollPercentageList | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description adds one genuinely useful behavioral fact: the write lands in a draft workspace rather than live configuration. It says nothing about permissions, validation behavior, or what a failed create does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler words. It is efficient, though the brevity borders on under-specification for a 28-parameter mutation tool rather than being a model of tight structuring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 28-parameter creation tool with 21% schema coverage, the description is drastically incomplete — no guidance on trigger-type-dependent fields, filter formats, or draft/workspace lifecycle. An output schema exists so return values needn't be covered, but that does not excuse the missing parameter and workflow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 21% across 28 parameters, so the description must compensate and it contributes zero parameter meaning. Even limit, filter, parameter, customEventFilter and the trigger-type-specific fields described only by unhelpful $refs are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a trigger') plus a scoping constraint ('in an explicitly selected workspace draft'), which lets an agent tell it apart from gtm_create_tag or gtm_create_variable. It stops short of any differentiation from the closely related trigger siblings (update/delete/revert).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'explicitly selected workspace draft' implies a prerequisite — a workspace must already be chosen before calling — but the description never states when to use this versus gtm_create_trigger alternatives or what happens if no workspace is set. Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_variableB
Create a user-defined variable in an explicitly selected workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the variable. | |
| type | Yes | GTM variable type, e.g. 'v' (Data Layer), 'c' (Constant), or 'jsm' (Custom JavaScript). | |
| notes | No | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| parameter | No | ||
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| formatValue | No | ||
| parentFolderId | No | ||
| enablingTriggerId | No | ||
| disablingTriggerId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-idempotent, open-world mutation that is not destructive. The description adds the meaningful fact that the write targets a workspace draft rather than a live container. It says nothing about duplicate-name behavior (not idempotent), required permissions, or what happens if the workspace does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and the scope constraint stated immediately. It is arguably too sparse for an 11-parameter mutation, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, but for an 11-parameter nested mutation the description supplies no parameter guidance, no prerequisite details (account/container/workspace resolution), and no note on draft-vs-live semantics beyond the word 'draft'. It is materially under-specified for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 11 parameters, nested objects, and only 45% schema description coverage, the description must compensate for the undocumented fields (notes, parameter, formatValue, parentFolderId, enablingTriggerId, disablingTriggerId). It mentions none of them, adding zero semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('user-defined variable'), and scopes it to a workspace draft, which separates it from gtm_create_tag/gtm_create_trigger and from gtm_update_variable. It does not name a sibling directly, so an agent must infer the boundary, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'explicitly selected workspace draft' implies the prerequisite context (a workspace must be chosen, and changes land in a draft rather than production), which is useful. However, it never states when to create a variable versus updating an existing one, nor any exclusion or alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_workspaceB
Create a dedicated GTM workspace. Prefer this before making automated changes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower, but the description adds no behavioral context beyond that: no auth/permission requirements, no note on whether the new workspace is isolated from the default one, and no rate-limit or reversibility detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core action front-loaded and the workflow hint second. Nothing is wasted, though the second sentence is terse enough to be slightly ambiguous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover safety. Still, for a 4-param creation tool with half the parameters undocumented, the description omits where the workspace is created and any prerequisite listing of accounts/containers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (account and container are documented, name and description are not). The description mentions no parameters at all, so it does not compensate for the undocumented fields or clarify the account/container/name relationship needed to place the workspace correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a dedicated GTM workspace'), which is easy to distinguish from sibling read tools like gtm_list_workspaces. It does not, however, explicitly contrast itself with other mutating siblings such as gtm_sync_workspace or gtm_create_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Prefer this before making automated changes' is a genuine when-to-use hint, giving the agent a workflow ordering rule. It stops short of naming alternatives, prerequisites, or when not to create a workspace, so 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_delete_tagBDestructive
Delete a tag from an explicitly selected workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | Yes | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful fact that removal applies to a draft rather than the live container, but does not say whether the change is permanent, whether a sync is needed to propagate it, or whether it can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the action and scope front-loaded and no filler. The 'explicitly selected' wording is slightly ambiguous but does not waste space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema and rich annotations exist, so return values and safety are covered. However, for a 4-required-param destructive mutation in a draft/sync workflow, the description never mentions the draft-to-live propagation step, which an agent needs to sequence correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and account/container/workspace already carry descriptions; tagId is undocumented but self-evident. The description reinforces that the workspace must be explicitly supplied and that all operations target a draft, but adds no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a tag') plus a scoping qualifier ('from an explicitly selected workspace draft'). It is clearly distinguishable from gtm_revert_tag and gtm_update_tag. It stops short of naming the sibling alternative, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus gtm_revert_tag (which also removes a tag's effect) or when deletion is inappropriate. Usage context is only implied by the phrase 'workspace draft'. No prerequisites or follow-up steps are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_delete_triggerADestructive
Delete a trigger from an explicitly selected workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| triggerId | Yes | ||
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds the useful nuance that the deletion is confined to the draft workspace rather than the live container, but it says nothing about irreversibility or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope qualifier (workspace draft) is placed where it matters most.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a destructive mutation, though, the description remains thin on side effects and downstream implications (e.g., whether the trigger still exists live), which is the kind of context an agent needs before deleting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (account, container, workspace documented; triggerId self-evident), so the schema does most of the work. The description's phrase "workspace draft" reinforces the workspace parameter's own note that it is required for every mutating operation but adds no new syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete), resource (trigger), and scope (workspace draft), so the operation is unambiguous. It does not, however, distinguish itself from the sibling revert_trigger, which is the closest alternative an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Explicitly selected workspace draft" implies that a workspace must be chosen first, giving some context. But there is no explicit when-to-use vs revert_trigger guidance, no stated prerequisites, and no exclusions, leaving the selection logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_delete_variableADestructive
Delete a user-defined variable from an explicitly selected workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| variableId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, lowering the bar. The description adds real context beyond them: that only user-defined variables are eligible, and that the deletion targets a workspace draft rather than the live container.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifier earns its place by narrowing which variables are affected.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and an output schema covers return values, so the description needn't explain those. It supplies the key scoping context, though it omits whether the deletion is reversible via revert_variable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% and three of four parameters are documented in the schema, so the baseline is 3. The description adds no syntax or format detail for variableId, the one undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a user-defined variable') and narrows scope with 'from an explicitly selected workspace draft.' It doesn't name a sibling alternative (e.g. revert_variable), so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as gtm_revert_variable (which restores a variable) or gtm_update_variable. The only hint is the scoping phrase 'explicitly selected workspace draft,' which is implied rather than stated as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_get_tagARead-onlyIdempotent
Get one tag by ID from a workspace draft.
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | Yes | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds one useful behavioral detail - that the read targets draft workspace state rather than a published container - but says nothing about rate limits, auth, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the verb, resource, and scoping qualifier all appear immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return values and annotations covering the safety profile, the description only needs to disambiguate from list/other getter tools, which it does. It could be more complete by clarifying the default-workspace fallback for reads, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so account, container, and workspace are already documented in the schema, and the output schema handles returns. 'By ID' loosely maps to tagId (which lacks a schema description) and 'workspace draft' hints at the optional workspace parameter, but no additional format or syntax detail is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one tag by ID') plus scope ('from a workspace draft'), which clearly separates it from gtm_list_tags. It does not name the sibling tools explicitly, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch a single tag when its ID is known, as opposed to gtm_list_tags for enumeration. There is no explicit when-to-use/when-not-to-use statement or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_get_triggerBRead-onlyIdempotent
Get one trigger by ID from a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| triggerId | Yes | ||
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered structurally. The description adds only the workspace-scoping context, which the schema already explains ('Omit only for reads to use Default Workspace'); it says nothing extra about error behavior or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eleven-word sentence with zero padding and the resource front-loaded. It is appropriately sized, though borderline under-specified rather than maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations cover the safety profile. What is missing is usage context and any differentiation from the dozen sibling get/create/list tools, leaving the definition merely adequate for a single-resource read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (account, container, workspace documented; triggerId bare), and the description's 'by ID' implicitly maps to triggerId, adding a small amount of meaning. With high-but-not-complete coverage the schema carries most of the load, so baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one trigger') plus a scope qualifier ('by ID from a workspace'), which clearly separates it from the sibling gtm_list_triggers. It does not explicitly name siblings or contrast with gtm_get_tag/gtm_get_variable, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus gtm_list_triggers or the other get_* tools, and no prerequisites (e.g. that the trigger must already exist, or how to obtain a triggerId). The only implied guidance is 'by ID', which is naming, not usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_get_variableBRead-onlyIdempotent
Get one user-defined variable by ID from a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. | |
| variableId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds one useful qualifier ('user-defined', distinguishing from built-in variables) and the workspace scope, but says nothing about not-found behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the operation, resource, and locator scope in order. No filler words; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return values and annotations covering the safety profile, the core is present. Still, for a getter it omits what identifies a valid user-defined variable versus a built-in one and what happens when the ID is unknown, leaving clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (account, container, workspace documented; variableId is not). The phrase 'by ID' lightly reinforces that variableId is an identifier, and 'from a workspace' hints at the optional workspace parameter, but no format or syntax is added beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('user-defined variable'), and scope ('by ID from a workspace'), which cleanly separates it from the sibling gtm_list_variables. However, it does not explicitly name any alternative tool, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. needing an existing variableId), and no pointer to alternatives like gtm_list_variables for discovery. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_accountsARead-onlyIdempotent
List every GTM account accessible to the authenticated Google user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and idempotency profile is covered by structured data. The description adds only the auth-scoping detail that results are limited to the authenticated user; it says nothing about pagination or result size, which matters for a potentially long list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word earns its place and the scope qualifier is included without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the annotations carry the safety profile. For a zero-parameter listing tool the description is essentially complete; only the absence of any routing hint toward the account/container/workspace hierarchy keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter semantics are needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) plus the resource (GTM accounts) and the scope of the result set (accessible to the authenticated Google user). Distinguishable from siblings like gtm_list_containers and gtm_list_workspaces, though it does not explicitly note that accounts are the top-level resource containing those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, no mention of prerequisites, and no reference to any sibling. An agent must infer that this is the discovery entry point for obtaining account IDs. Nothing is misleading, but nothing routes the agent either.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_containersBRead-onlyIdempotent
List every container in a GTM account.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond restating the list operation—no mention of pagination, result size, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence with no wasted words, front-loading the operation and scope. It is appropriately sized for a simple list tool, though extremely terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover the safety profile, the description need not explain return values or permissions. It is complete enough for a simple list operation, though it could mention ordering or result handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the required account parameter. The description adds no additional meaning beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (list) and resource (containers) with clear scope (every container in an account). It distinguishes from siblings like gtm_list_accounts and gtm_list_workspaces by targeting containers specifically, but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 versus alternatives such as gtm_list_workspaces or gtm_list_accounts. The description simply states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_tagsARead-onlyIdempotent
List every tag in a workspace draft, following all result pages.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing that it auto-follows 'all result pages', i.e. pagination is handled internally — useful information not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the scope ('every tag in a workspace draft') and then the key behavioral detail (pagination). No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the pagination caveat is included. The main remaining gap is the absence of any routing guidance toward gtm_get_tag or the other list_* siblings, but for a simple read tool this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so account, container and workspace are already fully documented in the schema (including the 'omit to use Default Workspace' note). The description adds no syntax or format detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List every tag') and scopes it to 'a workspace draft', which distinguishes it from the sibling gtm_get_tag and the other list_* tools. It does not, however, explicitly name an alternative or contrast with get_tag, so it stays just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'in a workspace draft', which signals the context in which this listing applies, but there is no explicit when-to-use guidance and no when-not/exclusion. The agent must infer that gtm_get_tag is the single-tag counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_triggersBRead-onlyIdempotent
List every trigger in a workspace, following all result pages.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds one genuinely useful behavioral detail beyond the annotations – that it auto-follows all result pages – but says nothing about result volume, ordering, or failure behavior during pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; every word carries meaning and the scope constraint is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and annotations cover safety. The description is therefore adequate but thin – it omits any usage routing and behavioral notes that would help the agent choose this over gtm_get_trigger.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (account, container, workspace) are already documented in the schema with examples. The description adds no additional parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List every trigger in a workspace'), which is clear and immediately distinguishable from gtm_get_tag/gtm_list_tags. However it doesn't explicitly distinguish itself from the sibling gtm_get_trigger, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like gtm_get_trigger (single fetch) or other list tools. There are no prerequisites or exclusions stated; the agent must infer that this is the bulk-listing path from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_variablesARead-onlyIdempotent
List every user-defined variable in a workspace, following all result pages.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond them: it automatically follows all result pages, so the agent knows it will not need to paginate manually. It says nothing about result volume or error behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler that front-loads the action, the scope and the pagination behavior. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, rich annotations and fully documented parameters, the description only needs to add what structured fields cannot. It supplies the auto-pagination behavior and scope, though it leaves usage routing to the sibling tools unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter (account, container, workspace) is already documented in the schema, including the note that workspace may be omitted for reads. The description adds no format or default detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every user-defined variable') plus its scope ('in a workspace'), which cleanly separates it from the singular gtm_get_variable sibling. It does not, however, explicitly contrast itself with the other list_* tools in the family, so sibling routing relies on the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to prefer this tool over gtm_get_variable or how it relates to the other list_* tools, nor does it state prerequisites such as needing a container first. Usage is only inferable from the verb 'List every', which is minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_workspacesARead-onlyIdempotent
List every workspace in a GTM container.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds no further behavioral context such as auth requirements, pagination, or return format, so it does not go beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It states the scope and action efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple list operation, rich schema, annotations, and an output schema, the description is sufficient. It does not need to explain return values, and the schema covers parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required parameters (account, container) are fully documented in the schema. The description adds no extra parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the verb 'List' with the specific resource 'workspace' and scopes it to a GTM container. This distinguishes it from siblings like gtm_create_workspace and gtm_list_containers without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. The agent must infer that it is for enumerating workspaces when needed; no exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_quick_preview_workspaceA
Compile a workspace into a temporary preview and report compiler/sync errors. It never publishes the container.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, non-destructive, non-idempotent, open-world), and the description adds genuinely useful context: it creates a temporary preview, surfaces compiler/sync errors, and explicitly does not publish. This complements rather than repeats 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the core action front-loaded and the non-publishing constraint appended as a useful qualifier. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, three-parameter tool with an output schema (so return values need no prose) and full annotation coverage, the description supplies the essential behavior. Slight gap: it doesn't say whether compiling mutates workspace state or what the temporary preview resource is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all three required parameters (account, container, workspace) are fully documented in the schema, so the description adds nothing beyond the structured fields. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compile a workspace into a temporary preview') plus the output ('report compiler/sync errors'), so the agent knows exactly what the call produces. It doesn't name sibling tools like gtm_sync_workspace or gtm_workspace_status, so differentiation relies on the reader inferring from the semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'temporary preview' and 'never publishes' imply this is a dry-run validation step before publishing, but no explicit when-to-use or when-not-to-use guidance is given, and no alternative sibling is named (e.g. sync vs preview).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_revert_tagBDestructive
Revert workspace changes to a tag using optimistic fingerprint protection.
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | Yes | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds the 'optimistic fingerprint protection' concept, hinting that stale fingerprints cause conflicts, but never explains what the fingerprint is or what happens on a conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the scope and behavioral qualifier arrive immediately. It is efficient, though arguably too terse for a destructive mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists (so return values need not be explained) and annotations cover safety, which lowers the burden. Still, for a destructive, non-idempotent mutation the description omits conflict/failure behavior and any note that it targets uncommitted workspace state rather than published tags.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the baseline-3 concession does not apply and the description must compensate. It mentions no parameters at all, and tagId in particular is undocumented in both schema and description, leaving the gap unfilled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (revert) and resource (workspace changes to a tag), clearly distinguishing it from gtm_update_tag and gtm_delete_tag. It does not, however, contrast itself with the parallel gtm_revert_trigger/gtm_revert_variable/gtm_sync_workspace siblings or clarify what 'revert' restores to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says when a revert is preferable to gtm_update_tag, gtm_delete_tag, or gtm_sync_workspace, nor any prerequisite about having pending workspace changes. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_revert_triggerBDestructive
Revert workspace changes to a trigger with fingerprint protection.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| triggerId | Yes | ||
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful trait beyond that – fingerprint protection – but leaves its behavior (what happens on mismatch, recoverability) unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource come first. It is arguably too terse to be fully useful, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the destructive/idempotency profile. However, for a mutation tool the description omits the central mechanic it alludes to (fingerprint protection) and gives no usage routing, leaving gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with triggerId undocumented in both schema and description; the description adds no parameter meaning at all. With most parameters already documented by the schema, this sits at the expected baseline but does not compensate for the triggerId gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (revert), resource (trigger), and scope (workspace changes), which cleanly distinguishes it from gtm_revert_tag and gtm_revert_variable. It stops short of naming an alternative or clarifying how it differs from gtm_update_trigger / gtm_delete_trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no alternatives named, despite many close siblings (gtm_update_trigger, gtm_delete_trigger, gtm_revert_tag). The trailing 'with fingerprint protection' hints at a precondition but never explains what it means or when it matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_revert_variableBDestructive
Revert workspace changes to a user-defined variable with fingerprint protection.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| variableId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so safety is covered structurally. The description adds genuine context with 'fingerprint protection', signaling a concurrency safeguard, though it does not explain what the fingerprint is or whether the caller must supply one.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and scope come first. It is efficient, though the trailing clause about fingerprint protection sits at the end where it is easy to miss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. However, for a destructive, non-idempotent mutation on 4 required params, the description omits prerequisites and the mechanism that 'fingerprint protection' implies, leaving a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (variableId is undocumented), just under the 80% baseline. The description adds nothing about parameters, so it neither compensates for the variableId gap nor clarifies the workspace scoping already shown in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Revert') and resource ('workspace changes to a user-defined variable'), which cleanly separates it from gtm_update_variable and from gtm_revert_tag/gtm_revert_trigger. It never explicitly names those siblings, but the resource noun makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what reverting does but gives no when-to-use guidance, no condition that selects revert over update_variable, and no exclusions. The agent must infer usage from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_sync_workspaceADestructive
Sync a workspace with the latest container version. This can modify workspace entities and reveal conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description goes beyond that by disclosing the concrete behavioral outcome — workspace entities may be modified and conflicts may be surfaced — which tells the agent something the annotations alone do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the core action is front-loaded before the side-effect caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the action and its mutation/conflict side effects adequately; only minor gaps remain (permission requirements, whether conflicts are reported or block the sync).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of account/container/workspace documented in the schema itself (including the note that workspace is required for mutating operations). The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (sync) and resource (workspace) plus the counterpart it syncs against (latest container version), which is far more informative than a tautology. It does not, however, distinguish itself from adjacent siblings such as gtm_workspace_status or gtm_quick_preview_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to reach for this tool versus gtm_workspace_status, gtm_quick_preview_workspace, or gtm_list_workspaces. Usage is only implicitly suggested by the word 'sync'; there are no exclusions, prerequisites, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_tagADestructive
Safely update selected tag fields by fetching and merging the current tag and checking its fingerprint.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name of the tag in GTM. | |
| type | No | GTM tag type id, e.g. 'gaawe' (GA4 event), 'googtag' (Google tag), 'html' (Custom HTML), or 'awct' (Google Ads Conversion Tracking). | |
| notes | No | ||
| tagId | Yes | ID of the tag to update (from gtm_list_tags). | |
| paused | No | Whether the tag is inactive. | |
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| liveOnly | No | ||
| priority | No | ||
| setupTag | No | ||
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| parameter | No | Parameters in the GTM API format matching the tag type. | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| teardownTag | No | ||
| scheduleEndMs | No | ||
| parentFolderId | No | ||
| consentSettings | No | ||
| firingTriggerId | No | Trigger IDs that fire this tag. | |
| scheduleStartMs | No | ||
| tagFiringOption | No | ||
| blockingTriggerId | No | Trigger IDs that block this tag. | |
| monitoringMetadata | No | ||
| monitoringMetadataTagNameKey | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds important behavioral context beyond that: it fetches the current tag, merges selected fields, and checks the fingerprint for concurrency safety. It does not, however, explain permission requirements or what happens to unmentioned fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the action and the safety mechanism with no wasted words. Efficient given what it chooses to cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 22-parameter mutation tool with nested objects and only 45% schema coverage, a one-sentence description is insufficient. Although an output schema exists so return values need not be explained, the description omits guidance on the many optional and nested parameters, required identifiers, and failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 22 parameters and only 45% schema description coverage, the description needs to compensate for undocumented parameters but does not. It only broadly says 'selected tag fields' without clarifying which fields are optional, how nested parameter objects map to GTM types, or how fields like setupTag/teardownTag behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('update'), resource ('tag fields'), and scope ('selected tag fields'), which clearly distinguishes it from siblings gtm_create_tag, gtm_delete_tag, and gtm_revert_tag. The description also names the update mechanism (fetch, merge, fingerprint check), so an agent knows this is a partial-update operation, not a replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'update selected tag fields' implies partial updates as opposed to full replacement, but the description never explicitly states when to use this over gtm_create_tag or gtm_revert_tag, nor does it note prerequisites or exclusions. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_triggerCDestructive
Safely update selected trigger fields with fingerprint conflict protection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name of the trigger. | |
| type | No | GTM trigger type, e.g. 'pageview', 'domReady', 'click', 'linkClick', 'customEvent', or 'timer'. | |
| limit | No | ||
| notes | No | ||
| filter | No | Filter conditions in GTM API format. | |
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| interval | No | ||
| selector | No | ||
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| eventName | No | ||
| parameter | No | ||
| triggerId | Yes | ID of the trigger to update (from gtm_list_triggers). | |
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| waitForTags | No | ||
| parentFolderId | No | ||
| autoEventFilter | No | ||
| checkValidation | No | ||
| intervalSeconds | No | ||
| uniqueTriggerId | No | ||
| customEventFilter | No | ||
| visibilitySelector | No | ||
| waitForTagsTimeout | No | ||
| visiblePercentageMax | No | ||
| visiblePercentageMin | No | ||
| maxTimerLengthSeconds | No | ||
| totalTimeMinMilliseconds | No | ||
| verticalScrollPercentageList | No | ||
| continuousTimeMinMilliseconds | No | ||
| horizontalScrollPercentageList | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond that – 'fingerprint conflict protection' – implying optimistic-concurrency semantics. However it never explains what a fingerprint is, how a conflict is surfaced (error? retry?), or that changes are confined to a workspace, so the added context is suggestive but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the key action and the conflict-protection trait come first. It is arguably too terse for a 29-parameter mutation tool, but as a conciseness/structure measure it wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation tool with 29 parameters and 24% schema coverage, this description is far too thin. The output schema exists so return values need not be explained, but partial-update mechanics, conflict handling, and workspace prerequisites are all left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 24% across 29 parameters, so the description carries a heavy burden – and it provides essentially none. 'Selected trigger fields' is the only hint about parameter behavior, leaving the vast majority of params (limit, interval, selector, visibility fields, etc.) undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('update') and resource ('trigger fields'), and 'selected fields' signals partial-update semantics rather than a full replace. It is clear what the tool does, though it offers no explicit differentiation from siblings like gtm_revert_trigger or gtm_create_trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. that workspace must exist and be current), and no alternatives named. An agent cannot tell from this text why it would pick gtm_update_trigger over gtm_revert_trigger or gtm_sync_workspace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_variableBDestructive
Safely update selected variable fields with fingerprint conflict protection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name of the variable. | |
| type | No | GTM variable type, e.g. 'v' (Data Layer), 'c' (Constant), or 'jsm' (Custom JavaScript). | |
| notes | No | ||
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| parameter | No | ||
| workspace | Yes | Workspace name or ID. Required for every mutating operation. | |
| variableId | Yes | ID of the variable to update (from gtm_list_variables). | |
| formatValue | No | ||
| parentFolderId | No | ||
| enablingTriggerId | No | ||
| disablingTriggerId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds one genuinely new trait not present in annotations: fingerprint conflict protection (optimistic locking). However, it omits what happens on a conflict, whether unspecified fields are preserved, and whether type changes are allowed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the key safety concept (fingerprint protection) is placed immediately after the action. Nothing is wasted, though brevity here comes at the cost of detail scored elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with nested objects and a destructive annotation, one sentence is thin. An output schema exists so return values need not be described, but the description says nothing about conflict resolution, merge behavior, or variable-type specifics for a tool that edits deeply nested variable configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% across 12 parameters, so the baseline is 3. 'Selected variable fields' usefully signals partial-update semantics (only supplied fields change), which the schema does not state, but the complex parameter/parameter-array, formatValue, and enabling/disablingTriggerId inputs get no explanation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('update ... variable fields') plus a scope qualifier ('selected fields'), so the operation is unambiguous. It does not distinguish itself from siblings like gtm_create_variable, gtm_revert_variable, or gtm_delete_variable, which an agent must infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus create/revert/delete, nor any stated prerequisites such as needing a workspace or a fresh fingerprint. The only implicit signal is 'update', leaving routing decisions entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_workspace_statusBRead-onlyIdempotent
Show modified entities and merge conflicts in a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | Name or ID of the GTM account (e.g. 'My Company' or '1234567'). | |
| container | Yes | Name, GTM container ID (publicId, e.g. GTM-XXXX), or internal container ID. | |
| workspace | No | Workspace name or ID. Omit only for reads to use Default Workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds the useful detail that the output includes both modified entities and merge conflicts, but says nothing about permissions, workspace resolution, or scope limits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the two payloads an agent cares about, with zero padding or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations carry the safety profile. The description is adequate for an agent to call this correctly, though it omits any routing against the preview/sync siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (account, container, workspace) are fully documented in the schema itself, including the Default Workspace fallback for omitted workspace. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and a concrete payload ('modified entities and merge conflicts in a workspace'), so the agent knows exactly what it gets back. It does not, however, contrast itself with siblings like gtm_sync_workspace or gtm_quick_preview_workspace, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no statement of prerequisites, and no named alternative among the many workspace tools. The intent (check state before syncing) is only implied by the word 'status'.
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.
25 tool updates
v0.2.0- First observed
gtm_create_tag - First observed
gtm_create_trigger - First observed
gtm_create_variable - First observed
gtm_create_workspace - First observed
gtm_delete_tag - First observed
gtm_delete_trigger - First observed
gtm_delete_variable - First observed
gtm_get_tag - First observed
gtm_get_trigger - First observed
gtm_get_variable - First observed
gtm_list_accounts - First observed
gtm_list_containers - First observed
gtm_list_tags - First observed
gtm_list_triggers - First observed
gtm_list_variables - First observed
gtm_list_workspaces - First observed
gtm_quick_preview_workspace - First observed
gtm_revert_tag - First observed
gtm_revert_trigger - First observed
gtm_revert_variable - First observed
gtm_sync_workspace - First observed
gtm_update_tag - First observed
gtm_update_trigger - First observed
gtm_update_variable - First observed
gtm_workspace_status
TDQS
Scored across 25 tools
Each tool targets a distinct resource (account, container, workspace, tag, trigger, variable) and action (list, get, create, update, delete, revert, status, sync, preview). The workspace operations are clearly differentiated by their descriptions, so misselection is unlikely.
Tool names follow a consistent gtm_<verb>_<resource> snake_case pattern for the most part, but gtm_workspace_status breaks the verb-first convention, and gtm_quick_preview_workspace uses a compound verb. Minor deviations, still readable.
25 tools is at the upper bound of reasonable for this domain. The full CRUD+revert for three entity types plus workspace management accounts for the count, but it feels heavy rather than tightly scoped.
The set covers full lifecycle for tags, triggers, and variables, and workspace drafting operations. However, there is no publish tool (explicitly avoided in descriptions) and no create/update/delete for containers or accounts, leaving a notable gap in the overall GTM lifecycle.
Maintenance
Related MCP Connectors
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Let AI manage your Google Tag Manager containers — tags, triggers, variables, and more.
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
Create, update, and revoke Apple Wallet and Google Wallet passes from any MCP client.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables comprehensive management of Google Tag Manager accounts, containers, workspaces, tags, triggers, and variables through OAuth2 authentication, allowing users to create, update, and publish GTM configurations via natural language.2627 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Google Tag Manager API v2, enabling programmatic management of accounts, containers, workspaces, tags, triggers, variables, and version workflows.44 npm15MIT
- AlicenseNot gradedqualityCmaintenanceEnables full Google Tag Manager management via the GTM API v2, including tags, triggers, variables, and version publishing, with workspace-based change tracking.MIT
- AlicenseAqualityAmaintenanceMCP server for the Google Tag Manager API v2, enabling natural-language management of containers, workspaces, tags, triggers, variables, and publishing. It handles OAuth authentication and built-in rate limiting for the strict GTM API quota.25230 npm1MIT