# Gtm Mcp

> MCP server for Google Tag Manager: read tags/triggers/variables, publish containers, and audit changes via Claude/Gemini.

- **Type:** MCP server
- **Install:** `agentstack add mcp-pouyanafisi-gtm-mcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [pouyanafisi](https://agentstack.voostack.com/s/pouyanafisi)
- **Installs:** 0
- **Category:** [Data & Analytics](https://agentstack.voostack.com/c/data-and-analytics)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [pouyanafisi](https://github.com/pouyanafisi)
- **Source:** https://github.com/pouyanafisi/gtm-mcp

## Install

```sh
agentstack add mcp-pouyanafisi-gtm-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Google Tag Manager MCP Server

MCP server for Google Tag Manager API v2. Provides programmatic access to GTM accounts, containers, workspaces, tags, triggers, variables, and version management.

## Requirements

- Node.js 18.0.0+
- Google Cloud Project with Tag Manager API enabled
- OAuth 2.0 credentials (Desktop application type)

## Installation

### Install from npm (Recommended)

```bash
npm install -g gtm-mcp
```

Or install locally:

```bash
npm install gtm-mcp
```

### Install from source

```bash
git clone https://github.com/pouyanafisi/gtm-mcp.git
cd gtm-mcp
npm install
npm run build
```

## Google Cloud Setup

1. Enable Tag Manager API in Google Cloud Console
2. Create OAuth 2.0 credentials (Desktop application)
3. Download credentials JSON
4. Save as `credentials.json` in `gtm-mcp` directory

## Configuration

### Using npm package

If installed globally, use the binary directly:

```json
{
  "mcpServers": {
    "gtm": {
      "command": "gtm-mcp",
      "env": {
        "GTM_CREDENTIALS_FILE": "/absolute/path/to/credentials.json",
        "GTM_TOKEN_FILE": "/absolute/path/to/token.json"
      }
    }
  }
}
```

If installed locally, use `npx`:

```json
{
  "mcpServers": {
    "gtm": {
      "command": "npx",
      "args": ["gtm-mcp"],
      "env": {
        "GTM_CREDENTIALS_FILE": "/absolute/path/to/credentials.json",
        "GTM_TOKEN_FILE": "/absolute/path/to/token.json"
      }
    }
  }
}
```

### Using source installation

```json
{
  "mcpServers": {
    "gtm": {
      "command": "node",
      "args": ["/absolute/path/to/gtm-mcp/dist/index.js"],
      "env": {
        "GTM_CREDENTIALS_FILE": "/absolute/path/to/gtm-mcp/credentials.json",
        "GTM_TOKEN_FILE": "/absolute/path/to/gtm-mcp/token.json"
      }
    }
  }
}
```

See `MCP_SETUP.md` for platform-specific instructions.

## Authentication

### Using npm package

If installed globally:

```bash
gtm-mcp-auth
```

Or with npx:

```bash
npx gtm-mcp-auth
```

### Using source installation

```bash
npm run auth
```

Token saved to `token.json` and auto-refreshed.

## Operations

99 operations available (95 API operations + 4 workflow helpers). See [OPERATIONS.md](./OPERATIONS.md) for complete reference.

### Categories

- **Accounts**: List, get, update accounts
- **Containers**: List, get, create, update, delete, snippet, lookup, combine, move tag ID
- **Workspaces**: List, get, create, update, delete, status, sync, resolve conflicts, bulk update, quick preview
- **Tags**: List, get, create, update, delete, revert
- **Triggers**: List, get, create, update, delete, revert
- **Variables**: List, get, create, update, delete, revert
- **Built-in Variables**: List, create, delete, revert
- **Folders**: List, get, create, update, delete, revert, move entities, get entities
- **Container Versions**: List, get, update, delete, undelete, set latest, get live, publish
- **Version Headers**: List, get latest
- **Environments**: List, get, create, update, delete, reauthorize
- **User Permissions**: List, get, create, update, delete
- **Clients** (Server-side): List, get, create, update, delete, revert
- **Google Tag Config**: List, get, create, update, delete, revert
- **Templates**: List, get, create, update, delete, revert, import from gallery
- **Transformations** (Server-side): List, get, create, update, delete, revert
- **Zones** (Server-side): List, get
- **Workflows**: GA4 setup, Facebook Pixel, form tracking, site-type workflows

## Usage

### List containers
```
List all containers for account 123456
```

### Create GA4 setup
```
Create GA4 setup with measurement ID G-XXXXXXXXXX for account 123456, container 7890123
```

### Update tag
```
Update tag 1 in account 123456, container 7890123 with new parameters
```

### Publish changes
```
Publish version for account 123456, container 7890123 with name "Version 1.0"
```

## GTM IDs

- Account ID: Numeric string (e.g., `123456`)
- Container ID: Numeric string (e.g., `7890123`)
- Workspace ID: Numeric string (e.g., `1` for default)
- Public Container ID: `GTM-XXXXXXX` format (not used by API)

Find IDs in GTM UI URL or container settings.

## Project Structure

```
gtm-mcp/
├── src/
│   ├── index.ts              # MCP server
│   ├── gtm-client.ts         # GTM API client
│   ├── gtm-components.ts     # Workflow templates
│   ├── auth-helper.ts        # OAuth2 helper
│   └── auth.ts               # Auth script
├── docs/                      # API documentation
├── dist/                      # Compiled output
└── package.json
```

## Development

```bash
npm run dev          # Watch mode
npm run type-check   # Type checking
npm run build        # Build
npm run auth         # Authenticate
npm test             # Run tests
npm run test:run     # Run tests once
npm run test:ui      # Test UI
npm run test:coverage # Coverage report
```

## Documentation

- [OPERATIONS.md](./OPERATIONS.md) - All 99 operations reference
- [docs/](./docs/) - GTM API v2 documentation
- [API_COVERAGE.md](./API_COVERAGE.md) - Implementation coverage
- [MCP_SETUP.md](./MCP_SETUP.md) - Setup instructions
- [CONTRIBUTING.md](./CONTRIBUTING.md) - Contribution guidelines

## Troubleshooting

**Authentication fails**: Run `npm run auth` separately. Verify `credentials.json` exists.

**Permission errors**: Verify account has edit access to container. Use numeric IDs, not `GTM-XXX`.

**API errors**: Check account/container IDs. Verify workspace exists. Check rate limits.

**Build errors**: Node.js 18+, run `npm install`, verify TypeScript config.

## License

MIT

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [pouyanafisi](https://github.com/pouyanafisi)
- **Source:** [pouyanafisi/gtm-mcp](https://github.com/pouyanafisi/gtm-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-pouyanafisi-gtm-mcp
- Seller: https://agentstack.voostack.com/s/pouyanafisi
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
