A Model Context Protocol (MCP) server that enables Claude to interact with Google Tag Manager.
- Features
- Quick Start
- Complete Setup Guide
- Available Tools
- How Authentication Works
- Upgrade
- Troubleshooting
- Security Notes
- Development
- License
- Contributing
- Getting Help
- List GTM accounts and containers
- Manage tags, triggers, and variables
- Create and publish container versions
- Full workspace management
- Python 3.10 or higher
- Claude Desktop (or any MCP-compatible client like Cursor)
- A Google account with access to Google Tag Manager
pip install gtm-mcpSee PyPi
- Go to Google Cloud Console
- Click on the project dropdown (top left)
- Click "New Project"
- Enter a project name (e.g., "My GTM MCP Server")
- Click "Create"
- Wait for the project to be created and select it
- In your project, go to "APIs & Services" β "Library"
- Search for "Tag Manager API"
- Click on it and click "Enable"
- Wait for it to enable (may take a minute)
- Go to "APIs & Services" β "OAuth consent screen"
- Select "External" (unless you have a Google Workspace)
- Click "Create"
- Fill in required fields:
- App name: My GTM MCP (or whatever you like)
- User support email: Your email
- Developer contact email: Your email
- Click "Save and Continue"
- Click "Update" then "Save and Continue"
- Add your email as a test user
- Click "Save and Continue"
- Go to "APIs & Services" β "Credentials"
- Click "Create Credentials" β "OAuth client ID"
- Select "Desktop app" as the application type
- Enter a name: "GTM MCP Desktop Client"
- Click "Create"
- IMPORTANT: A dialog appears with your credentials - DO NOT CLOSE IT YET
From the dialog that appeared:
- Copy the Client ID (looks like:
123456789-abc123.apps.googleusercontent.com) - Copy the Client secret (looks like:
GOCSPX-...) - Note your Project ID from the Google Cloud Console (top bar, next to project name)
- Save these somewhere safe - you'll need them in the next step
You can also download the JSON file, but you only need the three values above.
β¬ top Edit your Claude Desktop config file:
- Linux:
~/.config/Claude/claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Claude Code
~/.claude.json
Add your credentials:
{
"mcpServers": {
"gtm-mcp": {
"command": "gtm-mcp",
"env": {
"GTM_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
"GTM_CLIENT_SECRET": "GOCSPX-your-client-secret",
"GTM_PROJECT_ID": "your-project-id"
}
}
}
}Replace the values with your actual credentials from Part 2, Step 5.
Note: If you have other MCP servers configured, just add the
"gtm-mcp"entry to the existing"mcpServers"object.
-
Restart Claude Desktop completely (close and reopen)
-
Ask Claude to use a GTM tool (e.g., "List my GTM accounts")
-
First-time authorization - a browser window will open automatically:
- Sign in with your Google account
- You'll see "Google hasn't verified this app" warning
- Click "Advanced" β "Go to [Your App Name] (unsafe)"
- This is safe because you created the app yourself
- Grant the requested permissions
- You'll see "The authentication flow has completed"
- Return to Claude Desktop
-
Your authorization is saved locally - you won't need to do this again!
β¬ top
Once configured, Claude will have access to these GTM tools:
| Tool | Description |
|---|---|
gtm_list_accounts |
List all your GTM accounts |
gtm_list_containers |
List containers in an account |
gtm_list_tags |
List tags in a workspace |
gtm_get_tag |
Get detailed configuration of a specific tag |
gtm_create_tag |
Create a new tag |
gtm_update_tag |
Update an existing tag |
gtm_list_triggers |
List triggers in a workspace |
gtm_create_trigger |
Create a new trigger |
gtm_list_variables |
List variables in a workspace |
gtm_create_variable |
Create a new variable (constant, data layer, cookie, URL, etc.) |
gtm_publish_container |
Create and publish a new container version |
β¬ top
This MCP server uses OAuth 2.0 to securely access Google Tag Manager:
- You create OAuth credentials in your own Google Cloud project
- You configure those credentials in Claude Desktop
- First use: Browser opens to authorize access to your GTM account
- Your tokens are saved locally on your machine (
~/.gtm-mcp-token.json) for future use
For security and privacy:
- β You maintain full control over the OAuth app
- β No shared credentials between users
- β You can revoke access anytime
- β Your credentials stay private
- β Compliant with Google's OAuth policies
Run pip install --upgrade gtm-mcp
Problem: The MCP server can't find your credentials.
Solution: Make sure you:
- Set the environment variables correctly in
claude_desktop_config.json(or~/.claude.json) - Restarted Claude Desktop after editing the config
- Used the correct format (no extra quotes in JSON)
- The config file is valid JSON (use a JSON validator if unsure)
Problem: Google shows a security warning during first authorization.
Solution: This is completely normal for personal OAuth apps. Since you created the OAuth app yourself, Google shows this warning.
To proceed: Click "Advanced" β "Go to [App Name] (unsafe)"
This is safe because you control the app.
Possible causes:
- Your Google account doesn't have access to any GTM accounts
- You didn't grant all requested permissions during authorization
- Tag Manager API isn't enabled in your Google Cloud project
Solution:
- Verify your Google account has GTM access
- Re-authorize by deleting
~/.gtm-mcp-token.jsonand trying again - Check that Tag Manager API is enabled in Google Cloud Console
Debugging steps:
- Verify Claude Desktop is completely restarted
- Check Claude Desktop logs for MCP server errors
- Verify
gtm-mcpcommand works: rungtm-mcpin terminal - Check your config file is valid JSON
- Ensure all three environment variables are set correctly
Problem: gtm-mcp command not found after installation.
Solution:
# Ensure pip install location is in PATH
pip install --user gtm-mcp
# Or use pipx for isolated installation
pipx install gtm-mcpTo revoke access to your GTM account:
- Go to Google Account Permissions
- Find your app name in the list
- Click "Remove access"
- Delete the local token file:
rm ~/.gtm-mcp-token.json
You can re-authorize anytime by using any GTM tool in Claude again.
- Your OAuth credentials are yours alone - keep them private
- Never share your Client Secret - treat it like a password
- Your access tokens are stored locally:
~/.gtm-mcp-token.json - You can regenerate credentials anytime in Google Cloud Console
- You can revoke access anytime from your Google account settings
- This server only accesses GTM - no other Google services
pip install -e ".[dev]"
pytest⬠top see LICENSE file for details
β¬ top Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
For bugs and feature requests, please open an issue.
β¬ top If you encounter issues:
- Check the Troubleshooting section above
- Review Claude Desktop logs for error messages
- Verify your Google Cloud project has Tag Manager API enabled
- Ensure environment variables are set correctly in the config
- Open an issue on GitHub with:
- Your operating system
- Python version (
python --version) - Error messages from Claude Desktop logs
- Steps to reproduce the issue