HYPD for Google Tag Manager: the user's connected containers — workspaces, tags, triggers, variables, versions, and what is live — plus reviewed changes. The recommended workflow: gtm_list_containers to pick a container, gtm_list_workspaces to pick a workspace, then gtm_get_container_snapshot for the whole workspace or gtm_get_live_version for what visitors get. Before drafting an update, read the entity with gtm_get_entity and keep Google's own field names in the proposal: an update replaces the whole entity. Every id is the NUMERIC id exactly as gtm_list_containers and gtm_list_workspaces return it, never the GTM-XXXXXXX public id. Google allows 25 Tag Manager requests per 100 seconds for all users combined: call gtm_* tools one at a time, never in parallel. Changes never reach Google directly: gtm_draft_* tools record a Change Draft, the user approves it in their own words via gtm_approve_change_draft, and gtm_apply_change_draft performs it — entity writes land in the workspace only; nothing is live until a publish draft is applied. A container that refuses drafts needs Actions turned on by its owner in the HYPD app: gtm_get_enable_changes_link hands them the link. When gtm_list_containers returns nothing, tell the user to reconnect the Google Tag Manager connector from their MCP client's connector settings. Report tool errors as errors; never invent tags or versions a tool did not return.
Discoverability
2 pass · 1 partial2 passed · 1 partial42/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The MCP Server Card declares this server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
The user's connected Tag Manager containers across their Google logins — each row carries the numeric account_id and container_id every other gtm_* tool takes (the GTM-XXXXXXX public id is display-only). Start here in every conversation: an empty list means the user has not connected Google Tag Manager yet — tell them to reconnect this connector from their MCP client's settings and complete its connect step — and plan_notice explains containers held back by the user's plan, or points a first conversation to hypd_show_getting_started.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"containers",
"truncated"
],
"properties": {
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
},
"containers": {
"type": "array",
"items": {
"type": "object",
"required": [
"account_id",
"container_id"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The container's name."
},
"public_id": {
"type": [
"string",
"null"
],
"description": "The GTM-XXXXXXX id the Tag Manager UI shows."
},
"account_id": {
"type": "string",
"description": "Numeric Tag Manager account id, for every other gtm_* tool."
},
"container_id": {
"type": "string",
"description": "Numeric container id, for every other gtm_* tool."
},
"usage_context": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Where the container runs: web, android, ios, server."
}
},
"additionalProperties": {}
},
"description": "The connected containers, by name."
},
"plan_notice": {
"type": "string",
"description": "Notes for the user: containers their plan holds back, and in their first conversation the getting started line."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_list_containers",
"title": "List Tag Manager containers",
"description": "The user's connected Tag Manager containers across their Google logins — each row carries the numeric account_id and container_id every other gtm_* tool takes (the GTM-XXXXXXX public id is display-only). Start here in every conversation: an empty list means the user has not connected Google Tag Manager yet — tell them to reconnect this connector from their MCP client's settings and complete its connect step — and plan_notice explains containers held back by the user's plan, or points a first conversation to hypd_show_getting_started.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"containers",
"truncated"
],
"properties": {
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
},
"containers": {
"type": "array",
"items": {
"type": "object",
"required": [
"account_id",
"container_id"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The container's name."
},
"public_id": {
"type": [
"string",
"null"
],
"description": "The GTM-XXXXXXX id the Tag Manager UI shows."
},
"account_id": {
"type": "string",
"description": "Numeric Tag Manager account id, for every other gtm_* tool."
},
"container_id": {
"type": "string",
"description": "Numeric container id, for every other gtm_* tool."
},
"usage_context": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Where the container runs: web, android, ios, server."
}
},
"additionalProperties": {}
},
"description": "The connected containers, by name."
},
"plan_notice": {
"type": "string",
"description": "Notes for the user: containers their plan holds back, and in their first conversation the getting started line."
}
},
"additionalProperties": false
},
"annotations": {
"title": "List Tag Manager containers",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
The workspaces of one container — every container has a Default Workspace, and teams add more for parallel work. A workspace_id is required before reading a snapshot, inspecting an entity, or drafting a change; ask the user which one when several exist.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
},
"workspaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The workspace's name."
},
"path": {
"type": [
"string",
"null"
],
"description": "Google's resource path for the workspace."
},
"description": {
"type": [
"string",
"null"
],
"description": "The workspace's description."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of the workspace at read time."
},
"workspace_id": {
"type": [
"string",
"null"
],
"description": "Numeric workspace id."
},
"tag_manager_url": {
"type": [
"string",
"null"
],
"description": "The workspace in the Tag Manager UI."
}
},
"additionalProperties": {}
},
"description": "The container's workspaces."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_list_workspaces",
"title": "List container workspaces",
"description": "The workspaces of one container — every container has a Default Workspace, and teams add more for parallel work. A workspace_id is required before reading a snapshot, inspecting an entity, or drafting a change; ask the user which one when several exist.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id"
],
"properties": {
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
},
"workspaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The workspace's name."
},
"path": {
"type": [
"string",
"null"
],
"description": "Google's resource path for the workspace."
},
"description": {
"type": [
"string",
"null"
],
"description": "The workspace's description."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of the workspace at read time."
},
"workspace_id": {
"type": [
"string",
"null"
],
"description": "Numeric workspace id."
},
"tag_manager_url": {
"type": [
"string",
"null"
],
"description": "The workspace in the Tag Manager UI."
}
},
"additionalProperties": {}
},
"description": "The container's workspaces."
}
},
"additionalProperties": false
},
"annotations": {
"title": "List container workspaces",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Every tag, trigger and variable in one workspace, as Google returns them — the full picture of what the container does before a change is proposed. Served from a short cache when the same workspace was read moments ago (from_cache says so). Audit questions ('is GA4 firing on every page?', 'what does this tag depend on?') start here.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Clear enough to supply this argument.
workspace_id
The workspace id from gtm_list_workspaces — the user's choice of where edits land.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
The version currently published to the user's site, with its tags, triggers and variables — what visitors actually get, as opposed to a workspace draft. live is false for a container that has never been published.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Read the live container version",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
Output schema85/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"live": {
"type": "boolean",
"description": "false when the container has never been published."
},
"version": {
"anyOf": [
{
"type": "object",
"properties": {
"tag": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The tag's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Tag type, e.g. gaawe for a GA4 event or html for custom HTML."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id."
},
"paused": {
"type": [
"boolean",
"null"
],
"description": "true when the tag is paused."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"firingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that fire the tag."
},
"tagFiringOption": {
"type": [
"string",
"null"
],
"description": "oncePerEvent, oncePerLoad or unlimited."
},
"blockingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that block the tag."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its tags."
},
"name": {
"type": [
"string",
"null"
],
"description": "The version's name."
},
"folder": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its folders."
},
"deleted": {
"type": [
"boolean",
"null"
],
"description": "true when the version was deleted."
},
"trigger": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The trigger's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Trigger type, e.g. pageview, click or customEvent."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"filter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions that must all hold for the trigger to fire."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"autoEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions of an auto-event trigger."
},
"customEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Event name conditions of a customEvent trigger."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its triggers."
},
"variable": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The variable's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Variable type, e.g. v for a data layer variable or c for a constant."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"enablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that enable the variable."
},
"disablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that disable the variable."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its variables."
},
"description": {
"type": [
"string",
"null"
],
"description": "The version's notes."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of the version."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "The version in the Tag Manager UI."
},
"builtInVariable": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Built-in variables it turns on."
},
"containerVersionId": {
"type": [
"string",
"null"
],
"description": "Numeric version id."
}
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The live version with its entities; null when live is false."
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_get_live_version",
"title": "Read the live container version",
"description": "The version currently published to the user's site, with its tags, triggers and variables — what visitors actually get, as opposed to a workspace draft. live is false for a container that has never been published.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id"
],
"properties": {
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"live": {
"type": "boolean",
"description": "false when the container has never been published."
},
"version": {
"anyOf": [
{
"type": "object",
"properties": {
"tag": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The tag's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Tag type, e.g. gaawe for a GA4 event or html for custom HTML."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id."
},
"paused": {
"type": [
"boolean",
"null"
],
"description": "true when the tag is paused."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"firingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that fire the tag."
},
"tagFiringOption": {
"type": [
"string",
"null"
],
"description": "oncePerEvent, oncePerLoad or unlimited."
},
"blockingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that block the tag."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its tags."
},
"name": {
"type": [
"string",
"null"
],
"description": "The version's name."
},
"folder": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its folders."
},
"deleted": {
"type": [
"boolean",
"null"
],
"description": "true when the version was deleted."
},
"trigger": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The trigger's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Trigger type, e.g. pageview, click or customEvent."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"filter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions that must all hold for the trigger to fire."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"autoEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions of an auto-event trigger."
},
"customEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Event name conditions of a customEvent trigger."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its triggers."
},
"variable": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The variable's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "Variable type, e.g. v for a data layer variable or c for a constant."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"enablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that enable the variable."
},
"disablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that disable the variable."
}
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Its variables."
},
"description": {
"type": [
"string",
"null"
],
"description": "The version's notes."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of the version."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "The version in the Tag Manager UI."
},
"builtInVariable": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Built-in variables it turns on."
},
"containerVersionId": {
"type": [
"string",
"null"
],
"description": "Numeric version id."
}
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The live version with its entities; null when live is false."
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Read the live container version",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
The container's version history: each version's id, name, entity counts and whether it was deleted. Pick two ids here for gtm_compare_versions, or the previous version to roll back to via a publish draft.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The version's name."
},
"path": {
"type": [
"string",
"null"
],
"description": "Google's resource path for the version."
},
"deleted": {
"type": [
"boolean",
"null"
],
"description": "true when the version was deleted."
},
"num_tags": {
"type": [
"string",
"null"
],
"description": "Tags in the version."
},
"num_clients": {
"type": [
"string",
"null"
],
"description": "Clients in the version (server containers)."
},
"num_triggers": {
"type": [
"string",
"null"
],
"description": "Triggers in the version."
},
"num_variables": {
"type": [
"string",
"null"
],
"description": "Variables in the version."
},
"container_version_id": {
"type": [
"string",
"null"
],
"description": "Numeric version id."
},
"num_custom_templates": {
"type": [
"string",
"null"
],
"description": "Custom templates in the version."
}
},
"additionalProperties": {}
},
"description": "One header per version; gtm_get_live_version has the entities."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_list_versions",
"title": "List container versions",
"description": "The container's version history: each version's id, name, entity counts and whether it was deleted. Pick two ids here for gtm_compare_versions, or the previous version to roll back to via a publish draft.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id"
],
"properties": {
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The version's name."
},
"path": {
"type": [
"string",
"null"
],
"description": "Google's resource path for the version."
},
"deleted": {
"type": [
"boolean",
"null"
],
"description": "true when the version was deleted."
},
"num_tags": {
"type": [
"string",
"null"
],
"description": "Tags in the version."
},
"num_clients": {
"type": [
"string",
"null"
],
"description": "Clients in the version (server containers)."
},
"num_triggers": {
"type": [
"string",
"null"
],
"description": "Triggers in the version."
},
"num_variables": {
"type": [
"string",
"null"
],
"description": "Variables in the version."
},
"container_version_id": {
"type": [
"string",
"null"
],
"description": "Numeric version id."
},
"num_custom_templates": {
"type": [
"string",
"null"
],
"description": "Custom templates in the version."
}
},
"additionalProperties": {}
},
"description": "One header per version; gtm_get_live_version has the entities."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"truncated": {
"type": "boolean",
"description": "true when Google's listing stopped at the pagination bound, so these rows are not all there are."
}
},
"additionalProperties": false
},
"annotations": {
"title": "List container versions",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
What changed between two versions of a container: tags, triggers and variables added, removed or modified, computed server-side so a 200-tag container does not have to be diffed by hand. The tool for 'what did the last release change?' and for verifying a rollback target.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tags": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Tag changes.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"triggers": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Trigger changes.",
"additionalProperties": false
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"variables": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Variable changes.",
"additionalProperties": false
},
"base_version_id": {
"type": "string",
"description": "The older version compared."
},
"target_version_id": {
"type": "string",
"description": "The newer version compared."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_compare_versions",
"title": "Compare two container versions",
"description": "What changed between two versions of a container: tags, triggers and variables added, removed or modified, computed server-side so a 200-tag container does not have to be diffed by hand. The tool for 'what did the last release change?' and for verifying a rollback target.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id",
"base_version_id",
"target_version_id"
],
"properties": {
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
},
"base_version_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The older version id (from gtm_list_versions)."
},
"target_version_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The newer version id to compare against the base."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tags": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Tag changes.",
"additionalProperties": false
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"triggers": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Trigger changes.",
"additionalProperties": false
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
},
"variables": {
"type": "object",
"required": [
"added",
"changed",
"removed"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the target version, not the base."
},
"changed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In both, with fields that differ."
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name in the target version, or the base one if removed."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type, on added and removed rows."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id, on a tag row."
},
"fields": {
"type": "object",
"description": "On changed rows: each differing field with its base and target value. Bookkeeping fields (fingerprint, path, ids) are left out.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"description": "The value in the base version."
},
"target": {
"description": "The value in the target version."
}
},
"additionalProperties": {}
}
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id, on a trigger row."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id, on a variable row."
}
},
"additionalProperties": {}
},
"description": "In the base version, not the target."
}
},
"description": "Variable changes.",
"additionalProperties": false
},
"base_version_id": {
"type": "string",
"description": "The older version compared."
},
"target_version_id": {
"type": "string",
"description": "The newer version compared."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Compare two container versions",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
One entity in full, exactly as the Tag Manager API holds it — parameters, firing and blocking triggers, notes, fingerprint. Read this before proposing an update: an update replaces the whole entity, so the proposal starts from this shape.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Clear enough to supply this argument.
workspace_id
The workspace id from gtm_list_workspaces — the user's choice of where edits land.
Clear enough to supply this argument.
entity_type
Which kind of entity this call addresses.
Clear enough to supply this argument.
entity_id
The entity's numeric id — tagId, triggerId or variableId as the snapshot lists it.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Read one tag, trigger or variable",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
Output schema79/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"entity": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id."
},
"filter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions that must all hold for the trigger to fire."
},
"paused": {
"type": [
"boolean",
"null"
],
"description": "true when the tag is paused."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"autoEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions of an auto-event trigger."
},
"firingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that fire the tag."
},
"tagFiringOption": {
"type": [
"string",
"null"
],
"description": "oncePerEvent, oncePerLoad or unlimited."
},
"blockingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that block the tag."
},
"customEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Event name conditions of a customEvent trigger."
},
"enablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that enable the variable."
},
"disablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that disable the variable."
}
},
"description": "The tag, trigger or variable as Google holds it: tagId, triggerId or variableId says which.",
"additionalProperties": {}
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_get_entity",
"title": "Read one tag, trigger or variable",
"description": "One entity in full, exactly as the Tag Manager API holds it — parameters, firing and blocking triggers, notes, fingerprint. Read this before proposing an update: an update replaces the whole entity, so the proposal starts from this shape.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id",
"workspace_id",
"entity_type",
"entity_id"
],
"properties": {
"entity_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The entity's numeric id — tagId, triggerId or variableId as the snapshot lists it."
},
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"entity_type": {
"enum": [
"tag",
"trigger",
"variable"
],
"type": "string",
"description": "Which kind of entity this call addresses."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
},
"workspace_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The workspace id from gtm_list_workspaces — the user's choice of where edits land."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"entity": {
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The entity's name."
},
"type": {
"type": [
"string",
"null"
],
"description": "The entity's Tag Manager type."
},
"notes": {
"type": [
"string",
"null"
],
"description": "The user's notes on it."
},
"tagId": {
"type": [
"string",
"null"
],
"description": "Numeric tag id."
},
"filter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions that must all hold for the trigger to fire."
},
"paused": {
"type": [
"boolean",
"null"
],
"description": "true when the tag is paused."
},
"parameter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Google's typed parameters: key, type, and value, list or map."
},
"triggerId": {
"type": [
"string",
"null"
],
"description": "Numeric trigger id."
},
"variableId": {
"type": [
"string",
"null"
],
"description": "Numeric variable id."
},
"fingerprint": {
"type": [
"string",
"null"
],
"description": "Google's hash of it at read time; changes on every edit."
},
"tagManagerUrl": {
"type": [
"string",
"null"
],
"description": "Link to it in the Tag Manager UI."
},
"parentFolderId": {
"type": [
"string",
"null"
],
"description": "The folder it sits in."
},
"autoEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Conditions of an auto-event trigger."
},
"firingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that fire the tag."
},
"tagFiringOption": {
"type": [
"string",
"null"
],
"description": "oncePerEvent, oncePerLoad or unlimited."
},
"blockingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that block the tag."
},
"customEventFilter": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
{
"type": "null"
}
],
"description": "Event name conditions of a customEvent trigger."
},
"enablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that enable the variable."
},
"disablingTriggerId": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Triggers that disable the variable."
}
},
"description": "The tag, trigger or variable as Google holds it: tagId, triggerId or variableId says which.",
"additionalProperties": {}
},
"guidance": {
"type": "string",
"description": "How the user connects Google Tag Manager, when connected is false."
},
"connected": {
"type": "boolean",
"const": false,
"description": "false when no Google Tag Manager connection exists; the data fields are absent."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Read one tag, trigger or variable",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Records a create/update of one tag, trigger or variable as a Change Draft; nothing is written to Google. Updates capture the current entity and fingerprint. Show current/proposed and reasoning, get the user's explicit yes, then call gtm_approve_change_draft with their exact reply, then gtm_apply_change_draft. Apply writes only to the workspace. After a stale-fingerprint apply failure, re-read gtm_get_entity and create a new draft without supersedes_draft_id; get fresh approval, never retry the old draft. Inspect result.droppedFields and report discarded fields. Version creation snapshots the workspace; a separately approved publish makes it live. No delete operation. Drafts expire after 24 hours.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Clear enough to supply this argument.
workspace_id
The workspace id from gtm_list_workspaces — the user's choice of where edits land.
Clear enough to supply this argument.
entity_type
Which kind of entity this call addresses.
Clear enough to supply this argument.
entity_id
The existing entity's id, for an update. A create has none.
Clear enough to supply this argument.
entity
Full Google Tag Manager v2 Tag, Trigger or Variable resource. Common fields: name, type, parameter, notes; tags may include firingTriggerId/blockingTriggerId; triggers may include filter and type-specific fields. parameter entries use key and type (template/boolean/list/map), with value/list/map as appropriate. Google may reject or discard unsupported fields. Updates replace the whole resource: start from gtm_get_entity; the server captures the fingerprint. autoEventFilter is for auto-event triggers only, customEventFilter for customEvent only; filter remains valid for firing conditions. A filter in the wrong field can be accepted and silently ignored.
Clear enough to supply this argument.
reasoning
Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval.
Clear enough to supply this argument.
supersedes_draft_id
The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Draft a tag, trigger or variable change",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
Output schema82/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"action",
"current",
"proposed"
],
"properties": {
"action": {
"enum": [
"create",
"update"
],
"type": "string",
"description": "Whether the apply creates the entity or replaces it."
},
"current": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The entity as it exists NOW (null on create) — the other half of the diff to show the user."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"proposed": {
"type": "object",
"description": "The entity as the apply will write it.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_draft_entity_change",
"title": "Draft a tag, trigger or variable change",
"description": "Records a create/update of one tag, trigger or variable as a Change Draft; nothing is written to Google. Updates capture the current entity and fingerprint. Show current/proposed and reasoning, get the user's explicit yes, then call gtm_approve_change_draft with their exact reply, then gtm_apply_change_draft. Apply writes only to the workspace. After a stale-fingerprint apply failure, re-read gtm_get_entity and create a new draft without supersedes_draft_id; get fresh approval, never retry the old draft. Inspect result.droppedFields and report discarded fields. Version creation snapshots the workspace; a separately approved publish makes it live. No delete operation. Drafts expire after 24 hours.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id",
"workspace_id",
"entity_type",
"entity",
"reasoning"
],
"properties": {
"entity": {
"type": "object",
"description": "Full Google Tag Manager v2 Tag, Trigger or Variable resource. Common fields: name, type, parameter, notes; tags may include firingTriggerId/blockingTriggerId; triggers may include filter and type-specific fields. parameter entries use key and type (template/boolean/list/map), with value/list/map as appropriate. Google may reject or discard unsupported fields. Updates replace the whole resource: start from gtm_get_entity; the server captures the fingerprint. autoEventFilter is for auto-event triggers only, customEventFilter for customEvent only; filter remains valid for firing conditions. A filter in the wrong field can be accepted and silently ignored.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"entity_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The existing entity's id, for an update. A create has none."
},
"reasoning": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval."
},
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"entity_type": {
"enum": [
"tag",
"trigger",
"variable"
],
"type": "string",
"description": "Which kind of entity this call addresses."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
},
"workspace_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The workspace id from gtm_list_workspaces — the user's choice of where edits land."
},
"supersedes_draft_id": {
"type": "string",
"minLength": 1,
"description": "The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"action",
"current",
"proposed"
],
"properties": {
"action": {
"enum": [
"create",
"update"
],
"type": "string",
"description": "Whether the apply creates the entity or replaces it."
},
"current": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "The entity as it exists NOW (null on create) — the other half of the diff to show the user."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"proposed": {
"type": "object",
"description": "The entity as the apply will write it.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Draft a tag, trigger or variable change",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Records a Change Draft that, once approved and applied, snapshots one workspace into a new container version — Tag Manager's equivalent of a commit. Nothing goes live: publishing that version is its own draft. Name and notes become the container's changelog, so say what changed and why.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Clear enough to supply this argument.
workspace_id
The workspace id from gtm_list_workspaces — the user's choice of where edits land.
Clear enough to supply this argument.
name
Version name — WHAT changed (shows in Tag Manager's history).
Clear enough to supply this argument.
notes
Version notes — WHY, so the history reads as a changelog.
Clear enough to supply this argument.
reasoning
Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval.
Clear enough to supply this argument.
supersedes_draft_id
The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Draft a new container version",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
Output schema87/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "What the apply will do, in plain words."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_draft_version_create",
"title": "Draft a new container version",
"description": "Records a Change Draft that, once approved and applied, snapshots one workspace into a new container version — Tag Manager's equivalent of a commit. Nothing goes live: publishing that version is its own draft. Name and notes become the container's changelog, so say what changed and why.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id",
"workspace_id",
"reasoning"
],
"properties": {
"name": {
"type": "string",
"description": "Version name — WHAT changed (shows in Tag Manager's history)."
},
"notes": {
"type": "string",
"description": "Version notes — WHY, so the history reads as a changelog."
},
"reasoning": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval."
},
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
},
"workspace_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The workspace id from gtm_list_workspaces — the user's choice of where edits land."
},
"supersedes_draft_id": {
"type": "string",
"minLength": 1,
"description": "The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "What the apply will do, in plain words."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Draft a new container version",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Records a Change Draft that, once approved and applied, makes one container version LIVE on the user's site — the only gtm_* step with visitor-facing effect. Tell the user exactly which version goes live and that the previous one stays restorable by publishing it again, and get an explicit yes before approving.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
account_id
The numeric Tag Manager account id, as a gtm_list_containers row carries it.
Clear enough to supply this argument.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
version_id
The version to make live — from a version-create apply or gtm_list_versions.
Clear enough to supply this argument.
reasoning
Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval.
Clear enough to supply this argument.
supersedes_draft_id
The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Draft a version publish",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
Output schema80/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "What the apply will do, in plain words."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_draft_version_publish",
"title": "Draft a version publish",
"description": "Records a Change Draft that, once approved and applied, makes one container version LIVE on the user's site — the only gtm_* step with visitor-facing effect. Tell the user exactly which version goes live and that the previous one stays restorable by publishing it again, and get an explicit yes before approving.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"account_id",
"container_id",
"version_id",
"reasoning"
],
"properties": {
"reasoning": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Why this change, in the words you will show the user: what you looked at and what the change is meant to achieve. Stored with the draft and shown at approval."
},
"account_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The numeric Tag Manager account id, as a gtm_list_containers row carries it."
},
"version_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The version to make live — from a version-create apply or gtm_list_versions."
},
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
},
"supersedes_draft_id": {
"type": "string",
"minLength": 1,
"description": "The draft_id this draft replaces when the user asked for a change to an earlier draft. Marks that draft superseded."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"summary"
],
"properties": {
"summary": {
"type": "string",
"description": "What the apply will do, in plain words."
},
"draft_id": {
"type": "string",
"description": "The draft's id, which gtm_approve_change_draft and gtm_apply_change_draft take."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "validated",
"description": "validated: recorded and checked, not yet approved."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Draft a version publish",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Records the user's explicit approval of one Change Draft, in their own words, after you showed them the current and proposed state and the reasoning. Only an approved draft can be applied. Never paraphrase the confirmation or supply it on the user's behalf.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
draft_id
A draft_id returned by one of the gtm_draft_* tools.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_confirmation
The user's reply, verbatim: an explicit yes to these exact changes. Not needed when the draft's next_step says HYPD asks the user in a form.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
summary
Only when the draft's next step says HYPD asks the User in a form: one line naming these changes, in the User's own language. The form shows it above the changes.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Approve a Tag Manager change draft",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema81/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"operation_count",
"write_action"
],
"properties": {
"draft_id": {
"type": "string",
"description": "The approved draft, for gtm_apply_change_draft."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "approved",
"description": "approved: ready for gtm_apply_change_draft."
},
"write_action": {
"type": "string",
"description": "What the draft does: google_tag_manager.entity.write, .version.create or .version.publish."
},
"operation_count": {
"type": "number",
"description": "Operations the draft holds."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_approve_change_draft",
"title": "Approve a Tag Manager change draft",
"description": "Records the user's explicit approval of one Change Draft, in their own words, after you showed them the current and proposed state and the reasoning. Only an approved draft can be applied. Never paraphrase the confirmation or supply it on the user's behalf.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft_id"
],
"properties": {
"summary": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Only when the draft's next step says HYPD asks the User in a form: one line naming these changes, in the User's own language. The form shows it above the changes."
},
"draft_id": {
"type": "string",
"minLength": 1,
"description": "A draft_id returned by one of the gtm_draft_* tools."
},
"user_confirmation": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The user's reply, verbatim: an explicit yes to these exact changes. Not needed when the draft's next_step says HYPD asks the user in a form."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"draft_id",
"draft_status",
"next_step",
"operation_count",
"write_action"
],
"properties": {
"draft_id": {
"type": "string",
"description": "The approved draft, for gtm_apply_change_draft."
},
"next_step": {
"type": "string",
"description": "The step that comes next for this draft, in plain words."
},
"container_id": {
"type": "string",
"description": "The container the draft targets."
},
"draft_status": {
"type": "string",
"const": "approved",
"description": "approved: ready for gtm_apply_change_draft."
},
"write_action": {
"type": "string",
"description": "What the draft does: google_tag_manager.entity.write, .version.create or .version.publish."
},
"operation_count": {
"type": "number",
"description": "Operations the draft holds."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Approve a Tag Manager change draft",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Performs one approved Change Draft against Google Tag Manager: writes the entity into its workspace, creates the version, or publishes it — whichever the draft recorded. Each draft applies once; a failed or uncertain apply is closed, never retried blindly (duplicate tags and double publishes come from retries). For entity writes, relay result.droppedFields verbatim; never claim discarded fields were applied.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
draft_id
The draft_id that gtm_approve_change_draft just approved.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Builds the HYPD app link where the container's owner turns on Actions — the way out of a 'changes not enabled' refusal from a gtm_draft_* tool. Nothing is changed by calling it: give the user the link, stop, and retry the draft once they say it is done.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
container_id
The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Get the link to turn on changes for a container",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema91/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"enable_url",
"next_step",
"platform"
],
"properties": {
"platform": {
"type": "string",
"const": "tagManager",
"description": "The HYPD platform the link is for."
},
"next_step": {
"type": "string",
"description": "What happens after the owner turns Actions on."
},
"enable_url": {
"type": "string",
"description": "The HYPD app page where the container's owner turns on Actions."
},
"container_id": {
"type": "string",
"description": "The container the link turns changes on for."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "gtm_get_enable_changes_link",
"title": "Get the link to turn on changes for a container",
"description": "Builds the HYPD app link where the container's owner turns on Actions — the way out of a 'changes not enabled' refusal from a gtm_draft_* tool. Nothing is changed by calling it: give the user the link, stop, and retry the draft once they say it is done.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id"
],
"properties": {
"container_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The NUMERIC container id from gtm_list_containers — never the GTM-XXXXXXX public id shown in the Tag Manager UI."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"container_id",
"enable_url",
"next_step",
"platform"
],
"properties": {
"platform": {
"type": "string",
"const": "tagManager",
"description": "The HYPD platform the link is for."
},
"next_step": {
"type": "string",
"description": "What happens after the owner turns Actions on."
},
"enable_url": {
"type": "string",
"description": "The HYPD app page where the container's owner turns on Actions."
},
"container_id": {
"type": "string",
"description": "The container the link turns changes on for."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get the link to turn on changes for a container",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Shows the user's getting started steps for Google Tag Manager by HYPD: connecting Tag Manager with a selected container, then a first audit of their live container. Use it when gtm_list_containers says so, and whenever the user asks how to get started with HYPD or about onboarding. Clients that render MCP Apps show the steps with a button each: a click sends that step's prompt as the user's next message, or opens the HYPD app. There, say only that the steps are shown above: do not repeat them and do not run a step before the user clicks it. Elsewhere, list the steps with their prompts and links.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations100/100
All four behavior hints are declared.
{
"title": "Getting started with Google Tag Manager by HYPD",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema72/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"done_count",
"step_count"
],
"properties": {
"done_count": {
"type": "number",
"description": "Steps the user has completed."
},
"step_count": {
"type": "number",
"description": "Steps in total."
}
},
"description": "Counts only. The steps, with their prompts and links, go to the widget; the text content lists them for clients that show no widget.",
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_show_getting_started",
"title": "Getting started with Google Tag Manager by HYPD",
"description": "Shows the user's getting started steps for Google Tag Manager by HYPD: connecting Tag Manager with a selected container, then a first audit of their live container. Use it when gtm_list_containers says so, and whenever the user asks how to get started with HYPD or about onboarding. Clients that render MCP Apps show the steps with a button each: a click sends that step's prompt as the user's next message, or opens the HYPD app. There, say only that the steps are shown above: do not repeat them and do not run a step before the user clicks it. Elsewhere, list the steps with their prompts and links.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"done_count",
"step_count"
],
"properties": {
"done_count": {
"type": "number",
"description": "Steps the user has completed."
},
"step_count": {
"type": "number",
"description": "Steps in total."
}
},
"description": "Counts only. The steps, with their prompts and links, go to the widget; the text content lists them for clients that show no widget.",
"additionalProperties": false
},
"annotations": {
"title": "Getting started with Google Tag Manager by HYPD",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Answers questions about platforms Google Tag Manager by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Search Console or Merchant Center: it shows which HYPD plugin covers them, with the same hypd.ai account, and a button that installs it. Tag Manager data comes from the gtm_* tools.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
platform
The platform the user asked about, e.g. 'Google Ads'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"hypd_plugin",
"hypd_plugin_covers",
"this_plugin_covers"
],
"properties": {
"hypd_plugin": {
"type": "string",
"description": "The HYPD plugin that covers other platforms."
},
"hypd_plugin_covers": {
"type": "array",
"items": {
"type": "string"
},
"description": "The platforms that plugin covers."
},
"this_plugin_covers": {
"type": "string",
"description": "What this plugin covers."
}
},
"description": "The facts only. The install link is on the widget's card, or in the text content for clients that show no widget.",
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_other_platforms",
"title": "Platforms beyond Tag Manager",
"description": "Answers questions about platforms Google Tag Manager by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Search Console or Merchant Center: it shows which HYPD plugin covers them, with the same hypd.ai account, and a button that installs it. Tag Manager data comes from the gtm_* tools.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"platform": {
"type": "string",
"maxLength": 80,
"description": "The platform the user asked about, e.g. 'Google Ads'."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"hypd_plugin",
"hypd_plugin_covers",
"this_plugin_covers"
],
"properties": {
"hypd_plugin": {
"type": "string",
"description": "The HYPD plugin that covers other platforms."
},
"hypd_plugin_covers": {
"type": "array",
"items": {
"type": "string"
},
"description": "The platforms that plugin covers."
},
"this_plugin_covers": {
"type": "string",
"description": "What this plugin covers."
}
},
"description": "The facts only. The install link is on the widget's card, or in the text content for clients that show no widget.",
"additionalProperties": false
},
"annotations": {
"title": "Platforms beyond Tag Manager",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Searches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privacy and data access, what HYPD can do, and setting HYPD up in Claude, ChatGPT or other AI clients. Returns the matching articles' text and links; answer from them and cite them. Not for advertising advice or the user's account data; use the platform tools for those.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
question
The user's question about HYPD, in their words, e.g. 'How do I connect my Google Ads account?'
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Search the HYPD help center",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
Output schema75/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"articles",
"help_center_url",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How these results relate to the question."
},
"status": {
"enum": [
"ok",
"no_results"
],
"type": "string",
"description": "no_results when no article matched."
},
"articles": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"description",
"content",
"updated_at"
],
"properties": {
"url": {
"type": "string",
"description": "The article's public link."
},
"title": {
"type": "string",
"description": "The article's title."
},
"content": {
"type": "string",
"description": "The article text to answer from."
},
"updated_at": {
"type": "string",
"description": "When the article last changed."
},
"description": {
"type": "string",
"description": "A one-line summary."
}
},
"additionalProperties": false
},
"description": "The matching articles."
},
"help_center_url": {
"type": "string",
"description": "The help center, for questions no article answers."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "hypd_search_help",
"title": "Search the HYPD help center",
"description": "Searches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privacy and data access, what HYPD can do, and setting HYPD up in Claude, ChatGPT or other AI clients. Returns the matching articles' text and links; answer from them and cite them. Not for advertising advice or the user's account data; use the platform tools for those.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The user's question about HYPD, in their words, e.g. 'How do I connect my Google Ads account?'"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"articles",
"help_center_url",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How these results relate to the question."
},
"status": {
"enum": [
"ok",
"no_results"
],
"type": "string",
"description": "no_results when no article matched."
},
"articles": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"description",
"content",
"updated_at"
],
"properties": {
"url": {
"type": "string",
"description": "The article's public link."
},
"title": {
"type": "string",
"description": "The article's title."
},
"content": {
"type": "string",
"description": "The article text to answer from."
},
"updated_at": {
"type": "string",
"description": "When the article last changed."
},
"description": {
"type": "string",
"description": "A one-line summary."
}
},
"additionalProperties": false
},
"description": "The matching articles."
},
"help_center_url": {
"type": "string",
"description": "The help center, for questions no article answers."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Search the HYPD help center",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search the HYPD help centerSearches HYPD's help center for articles that answer a question about HYPD itself: connecting or reconnecting ad accounts, plans, billing and credits, privac…
02Platforms beyond Tag ManagerAnswers questions about platforms Google Tag Manager by HYPD doesn't cover, such as Google Ads, Meta Ads, Google Analytics, Search Console or Merchant Center…
03List Tag Manager containersThe user's connected Tag Manager containers across their Google logins — each row carries the numeric account_id and container_id every other gtm_* tool take…
04Getting started with Google Tag Manager by HYPDShows the user's getting started steps for Google Tag Manager by HYPD: connecting Tag Manager with a selected container, then a first audit of their live con…
05Read a workspace snapshotEvery tag, trigger and variable in one workspace, as Google returns them — the full picture of what the container does before a change is proposed.
Want to run these tasks against your MCP server with us?
HYPD AI for Google Tag Manager setup, tools, quality score, publishing readiness, and alternatives.
How do I add HYPD AI for Google Tag Manager to Claude, ChatGPT, or Cursor?
Add HYPD AI for Google Tag Manager to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://tagmanager.hypd.ai/mcp.
Is HYPD AI for Google Tag Manager MCP ready for ChatGPT and Claude?
As of November 14, 2026, HYPD AI for Google Tag Manager scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is HYPD AI for Google Tag Manager's MCP tool documentation?
As of November 14, 2026, HYPD AI for Google Tag Manager scores 92/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 16 of 16 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to HYPD AI for Google Tag Manager?
As of November 15, 2026, alternatives to HYPD AI for Google Tag Manager in marketing-seo on the Manufact MCP leaderboard include Notra, BulkPublish, Fuxux, HYPD AI for App Store Optimization, and HYPD AI for Google Search Console.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.