Skip to main content
Glama
jayweezy247

tracking-stack-mcp

by jayweezy247

tracking-stack-mcp

MCP server for an agency's tracking-stack setup: WhatConverts, GA4 Admin, GTM. Same write-safety contract as google-ads-mcp: every mutating tool is a dry-run by default and executes only with confirmed: true; writes are rate-limited and logged to ~/.local/state/tracking-stack-mcp/actions.jsonl.

Create-only by design. No delete, unlink, user-management, or GTM publish tools exist here. Removing things and publishing containers stays portal work.

Tools

Tool

Type

Description

wc_list_accounts

Read

All WhatConverts accounts + profiles

wc_create_account

⚠️ Mutating

New WC account (dupe-name refusal)

wc_create_profile

⚠️ Mutating

New profile; refuses if the name exists anywhere in the agency

ga4_list_properties

Read

GA4 accounts, properties, streams + measurement IDs

ga4_create_property

⚠️ Mutating

New GA4 property + web stream; returns G- measurement ID

gtm_list_containers

Read

GTM accounts + containers

gtm_create_container

⚠️ Mutating

New web container; returns GTM- id; never publishes

Related MCP server: enterprise-agent-lab

Credentials — ~/.config/tracking-stack-mcp/.env (chmod 600)

WC_API_TOKEN=...        # canonical copy lives in your secret manager
WC_API_SECRET=...       
GOOGLE_CLIENT_ID=...    # OAuth client (can reuse the google-ads-mcp client)
GOOGLE_CLIENT_SECRET=...
GOOGLE_REFRESH_TOKEN=...  # must carry analytics.edit + tagmanager.edit.containers + tagmanager.readonly
GA4_DEFAULT_TIME_ZONE=America/Los_Angeles   # optional, default UTC
GA4_INDUSTRY_CATEGORY=HOME_AND_GARDEN       # optional, omitted if unset

Mint the Google refresh token once with the OAuth playground or the google-ads-mcp auth-setup pattern, adding the three scopes above. Never commit .env; never put these values in the vault.

Safety contract

  • Create-only. No delete, unlink, user-management, or publish tools exist.

  • Dry run by default. Only a boolean confirmed: true executes; "true" does not.

  • Validated inputs. Names are non-empty strings; ids are integers or accounts/<id>; stream URLs must be https://.

  • Duplicate-name refusal across the whole agency before any create.

  • Rate cap of 10 writes per rolling hour per process, checked after the confirmed branch.

  • Append-only action log of every executed write, refusal, and failure; never previews.

  • No tenant values in code. Time zone and industry category come from env.

Claude Desktop wiring

"tracking-stack": {
  "command": "node",
  "args": ["/Users/<you>/Documents/Claude/tracking-stack-mcp/dist/index.js"]
}

Build

npm install && npm run build

Available Tools

7 tools
ga4_create_propertyA

⚠️ MUTATING — Create a GA4 property under an existing Analytics account, plus a web data stream (returns the G- measurement ID). Refuses on duplicate display name. Dry-run by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoMust be true to execute. Defaults to false (dry run).
time_zoneNoIANA tz. Defaults to GA4_DEFAULT_TIME_ZONE env, else UTC.
website_urlYeshttps:// URL for the web data stream.
display_nameYesProperty name, e.g. 'Acme Pools & Spas'.
analytics_accountYesParent, e.g. 'accounts/12345678' (from ga4_list_properties).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly warns 'MUTATING', identifies the side effect of creating a web data stream, notes duplicate refusal, and states that dry-run is the default. It omits permissions or quota implications, but the core mutation behavior is transparent.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that begins with the mutation warning, states the main action, and packs in key behavioral details without filler. Every clause earns its place.

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

Completeness4/5

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

Given the schema covers all parameters and no output schema exists, the description usefully notes the G- measurement ID return value and the dry-run default. It is largely complete, though it leaves some details about expected error behavior or response shape unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds some context around display-name duplicates and the returned measurement ID, but it does not substantially enrich parameter meaning beyond what the schema provides.

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

Purpose5/5

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

The description states a specific action and resource: 'Create a GA4 property under an existing Analytics account, plus a web data stream (returns the G- measurement ID).' It clearly distinguishes this from sibling tools that create accounts, profiles, or GTM containers.

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

Usage Guidelines4/5

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

It explicitly frames the prerequisite as an existing Analytics account and notes the duplicate display-name refusal, which helps an agent decide when to call it. It does not name an alternative for when no account exists, but the sibling list and prerequisite phrasing provide adequate context.

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

ga4_list_propertiesA

Read-only — list GA4 accounts and their properties (names + ids + measurement streams).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly labels the operation as read-only and describes the data returned. This is sufficient for a zero-parameter, non-destructive listing operation, though it does not mention authentication or potential pagination.

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

Conciseness5/5

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

The description is a single sentence that front-loads the most important safety characteristic ('Read-only'), followed immediately by the action and resource. Every word contributes meaning; there is no filler or redundancy.

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

Completeness4/5

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

For a zero-parameter, no-output-schema list tool, this description is nearly complete. It identifies the resource, the mode, and the key return components. It could be slightly richer by noting the output format or relationship between accounts and properties, but nothing essential is missing for an agent to call it correctly.

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

Parameters4/5

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

The input schema has zero parameters, so the baseline is 4. The description adds useful output-scope context by listing what will be returned, but there are no parameters for it to explain.

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

Purpose5/5

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

The description uses a specific verb ('list'), names the exact resource ('GA4 accounts and their properties'), and even specifies the output elements ('names + ids + measurement streams'). It clearly distinguishes itself from sibling tools like wc_list_accounts and ga4_create_property by scope and operation type.

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

Usage Guidelines3/5

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

The 'Read-only' prefix and 'list' verb imply that this is the tool to use for retrieving GA4 account/property information, and the sibling names suggest it is the read counterpart to ga4_create_property. However, it does not explicitly state when to use this tool over alternatives or provide any conditions for selection.

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

gtm_create_containerA

⚠️ MUTATING — Create a web container in an existing GTM account. Returns the GTM-XXXX id. Refuses on duplicate name. Does NOT publish anything. Dry-run by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoMust be true to execute. Defaults to false (dry run).
container_nameYes
gtm_account_idYesGTM account id (from gtm_list_containers).

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly flags mutation, dry-run by default, refusal on duplicate names, and the fact that nothing is published. These are meaningful behavioral disclosures beyond the schema. It does not cover all possible side effects, but it gives an agent enough to safely invoke the tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with a clear warning prefix and no filler. It packs the mutating nature, the action, the return value, duplicate handling, publish behavior, and dry-run default into a compact, immediately scannable format.

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

Completeness4/5

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

Given no output schema and no annotations, the description plus the schema covers the essential details: dry-run default, confirmation requirement, duplicate refusal, no publishing, and the returned id. The missing explicit instruction to obtain the account id via gtm_list_containers is partially covered by the schema, so the overall context is sufficient but not exhaustive.

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

Parameters3/5

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

The schema already documents confirmed and gtm_account_id, while container_name has no schema description. The tool description loosely implies container_name refers to a web container, but it does not add meaningful parameter-level detail. With 67% schema coverage, the description partially compensates but does not fully clarify the unspecified parameter.

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

Purpose5/5

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

The description states a specific verb and resource: 'Create a web container in an existing GTM account.' It also specifies the return value (GTM-XXXX id) and a key behavior (refuses on duplicate name). This clearly distinguishes it from sibling tools like gtm_list_containers and platform-specific create tools.

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

Usage Guidelines3/5

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

The description implies usage context by saying 'existing GTM account' and the schema notes gtm_account_id comes from gtm_list_containers. However, the description itself does not explicitly state when to use this tool versus alternatives, such as wc_create_account or ga4_create_property, nor does it mention exclusions.

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

gtm_list_containersA

Read-only — list GTM accounts and their containers (names + public GTM-XXXX ids).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It explicitly declares 'Read-only' and describes the returned data, which is sufficient behavioral disclosure for a parameterless listing tool. It does not cover error cases or pagination, but those are less critical here.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. 'Read-only' is placed first, and the output specifics ('names + public GTM-XXXX ids') justify the rest of the sentence.

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

Completeness5/5

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

For a 0-parameter, no-output-schema listing tool, the description is complete: it states what is listed, the resource scope, and the exact data returned. No further context is needed for an agent to call it correctly.

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

Parameters4/5

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

The tool has zero parameters, so the baseline for parameter semantics is 4. The description's mention of the output fields adds useful context despite the empty input schema.

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

Purpose5/5

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

The description uses a specific verb ('list'), names a precise resource ('GTM accounts and their containers'), and specifies the output ('names + public GTM-XXXX ids'). This clearly distinguishes it from sibling tools like ga4_list_properties and gtm_create_container.

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

Usage Guidelines3/5

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

The read-only listing behavior implies this is a discovery tool, but there is no explicit statement of when to use it or when to prefer a sibling such as gtm_create_container. Usage context is implied rather than spelled out.

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

wc_create_accountA

⚠️ MUTATING — Create a WhatConverts account (one per client, matching the agency convention). Refuses if an account with the same name exists. Dry-run by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoMust be true to execute. Defaults to false (dry run).
account_nameYesClient name, e.g. 'Acme Pools & Spas'.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It clearly warns that the operation is mutating, explains that it refuses duplicate names, and states the dry-run-by-default behavior, which is critical for safe invocation.

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

Conciseness5/5

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

The description is one compact sentence that front-loads the mutating warning and packs in the key constraints: one per client, duplicate refusal, and dry-run default. Every clause adds meaningful guidance with no wasted words.

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

Completeness4/5

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

For a simple two-parameter creation tool, the description covers the essential safety and success criteria: mutating action, duplicate behavior, and confirmation flow. It does not describe what the tool returns on success or failure, but the absence of an output schema is partially offset by the schema's clear parameter documentation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds useful semantic context around account_name uniqueness and the one-per-client rule, but it does not substantially expand parameter meaning beyond what the schema provides.

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

Purpose5/5

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

The description states a precise action ('Create a WhatConverts account'), the resource type, and the agency convention of one account per client. It also distinguishes itself from siblings like wc_create_profile by explicitly scoping to accounts at the WhatConverts level.

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

Usage Guidelines4/5

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

It gives clear contextual usage guidance by explaining the one-per-client agency convention and that the tool refuses duplicate names. However, it does not explicitly direct the agent to alternatives such as wc_create_profile when a profile is needed instead of a new account.

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

wc_create_profileA

⚠️ MUTATING — Create a profile inside an existing WhatConverts account. Refuses if a profile with the same name exists anywhere in the agency (guards against the duplicate/wrong-parent mistake). Dry-run by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoMust be true to execute. Defaults to false (dry run).
account_idYesParent account id (from wc_list_accounts).
profile_nameYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden. It explicitly flags the operation as MUTATING, explains the duplicate-name refusal and its protective purpose, and discloses the dry-run default. This is strong and actionable transparency.

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

Conciseness5/5

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

Three concise sentences, each earning its place: mutation warning, core purpose, duplicate guard, and dry-run behavior. The warning is front-loaded, and there is no filler or redundant restating of the tool name.

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

Completeness4/5

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

The description covers purpose, mutation risk, safety defaults, and a key failure mode. The only meaningful gap is that it does not describe what the tool returns or how the agent should confirm success, and there is no output schema to fill that gap.

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

Parameters4/5

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

The input schema already covers confirmed and account_id well, and the description adds meaning for profile_name by explaining the duplicate-name constraint. It stops short of describing naming rules or the response, but it adds value beyond the schema.

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

Purpose5/5

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

The description states a specific action ('Create a profile'), a specific resource ('inside an existing WhatConverts account'), and distinguishes itself from sibling tools like wc_create_account and the GA4/GTM creators. An agent can clearly tell what this tool does and what it does not do.

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

Usage Guidelines4/5

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

The description clearly situates use within an existing WhatConverts account, implying the account should first be obtained via wc_list_accounts. It does not explicitly name sibling alternatives or state when not to use it, but the 'existing account' qualifier provides practical routing guidance.

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

wc_list_accountsA

Read-only — list all WhatConverts agency accounts and their profiles (ids + names).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly states the operation is read-only and discloses the return contents (ids + names), which is meaningful behavioral context. It does not mention auth, rate limits, or pagination, but for a zero-parameter list-all tool this is a minor gap.

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

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. The read-only nature leads, the scope is clear, and the return detail is included efficiently.

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

Completeness5/5

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

For a zero-parameter, read-only list-all tool, the description fully covers what an agent needs: what the tool returns (accounts and profiles with ids and names) and its safety profile. No output schema exists, but the stated return contents are sufficient for this simple call.

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

Parameters4/5

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

The tool has no parameters, so the baseline is 4. The description adds useful information about the return payload (ids + names) even though there is nothing to explain about parameters.

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

Purpose5/5

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

The description uses a specific verb ('list') and names the exact resources (all WhatConverts agency accounts and their profiles), plus the fields returned (ids + names). It is clearly distinguishable from the sibling creation tools, which are obviously different operations.

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

Usage Guidelines4/5

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

The 'Read-only' label plus 'list all' gives clear context for when to call this tool: for a non-mutating listing operation. It does not explicitly enumerate alternatives or exclusions, but the sibling tool names make the contrast obvious.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedga4_create_property
    • First observedga4_list_properties
    • First observedgtm_create_container
    • First observedgtm_list_containers
    • First observedwc_create_account
    • First observedwc_create_profile
    • First observedwc_list_accounts

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Every tool has a unique vendor prefix (wc, ga4, gtm) combined with a distinct action/resource pair. The list_* and create_* tools are clearly separated, and wc_create_profile is unambiguous relative to wc_create_account.

Naming Consistency5/5

All tools follow the consistent [vendor]_[verb]_[resource] pattern with lowercase snake_case. List verbs are plural and create verbs are singular, with no mixed conventions or vague action names.

Tool Count5/5

Seven tools is well-scoped for a tracking-stack provisioning server covering three platforms. Each list/create pair earns its place, and the extra wc_create_profile is justified by the distinct resource type.

Completeness4/5

The set covers the core list-and-create lifecycle for WhatConverts, GA4, and GTM resources, including duplicate guards and dry-run defaults. Minor gaps exist around updates/deletes and GTM publishing, but the primary provisioning workflow is complete enough for agents to accomplish real setup tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Production-grade MCP server for the Google Tag Manager API v2 with read-only GA4 (Admin + Data API) tooling. 107 tools covering the full GTM surface, including server-side containers. Ships read-only: writes, publishes, and deletes are each gated behind separate opt-in flags, every mutation requires per-call confirmation, and a dry-run mode simulates changes. Includes container audits
    100
    166 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.
    1
    -
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI coding agents to run Kubernetes inspection and Terraform plan/apply operations inside ephemeral gVisor-sandboxed jobs with short-lived, narrowly-scoped credentials, while routing destructive changes through a human approval gate.
    3
    -