关于 MCP Server for Google Tag Manager
MCP Server for Google Tag Manager 通过 20 个工具提供 Google Tag Manager API 操作。它提供内置 Google OAuth 的托管服务,以及使用自有凭据的本地 CLI。
主要功能
- 01提供 20 个 Google Tag Manager 工具
- 02支持内置 Google OAuth 的托管端点
- 03提供本地 stdio CLI 服务
- 04支持服务账号或令牌认证
- 05不同服务模式共用工具逻辑
适用场景
- 01通过 MCP 客户端检查或管理 Google Tag Manager
- 02使用托管 OAuth,免配本地凭据
- 03使用自有 Google 凭据在本地运行
MCP 相关
它提供托管 HTTP MCP 端点和本地 stdio MCP 服务。客户端可通过 OAuth 连接托管端点,或使用自有凭据启动 CLI。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Google Tag Manager 的 MCP 服务
通过 MCP 接入 Google Tag Manager API,提供两种形式:内置 Google OAuth 的托管服务,以及使用你自己的凭据运行的本地 CLI。
目录
仓库布局
包含一个应用和两个已发布软件包的 npm 工作区:
| 路径 | 软件包 | 说明 |
|---|---|---|
apps/worker | (私有) | 位于 gtm-mcp.stape.io 的托管 Cloudflare Worker:Google OAuth、审批流程、公共页面、会话移除。 |
packages/cli | google-tag-manager-mcp-server | npm 软件包:通过 stdio 运行的本地 MCP 服务,使用你提供的凭据进行身份验证。 |
packages/core | google-tag-manager-mcp-core | 所有 GTM 工具和架构,与凭据的获取方式无关。 |
工具通过 GtmAuthProvider(getAccessToken(): Promise<string>)访问 Google,而不依赖任何特定会话,因此同一套工具既可供这两种服务使用,也可供使用你自己的身份验证方式的私有服务使用。请参阅 核心软件包 README。
安装
此服务有两种形式:托管服务和本地 CLI。两者都提供相同的 20 个 GTM 工具;区别在于由谁处理 Google 身份验证。
| 托管服务 | 本地 CLI | |
|---|---|---|
| 身份验证 | 通过浏览器使用 Google OAuth,由服务代为处理 | 你提供服务账号密钥、刷新令牌或访问令牌 |
| 数据 | 经由 gtm-mcp.stape.io 传递 | 数据始终不会离开你的设备 |
| 设置 | 无需设置 | 设置一个环境变量 |
如果你是要测试尚未发布的更改,而不只是使用这些工具,请跳过以下所有内容,改为参阅在本地测试更改。
请在下方选择你的客户端。托管服务是一个基于 HTTP 的远程 MCP 端点,地址为 https://gtm-mcp.stape.io/mcp。能够自行完成 Google OAuth 流程的客户端(Claude Desktop、Claude Code、VS Code、Copilot CLI、Cursor、ChatGPT)会直接连接到该 URL,并在首次连接时使用 Google 登录;其他客户端(Antigravity、仅支持 stdio 的客户端)则通过 mcp-remote 连接,这是一个用于连接远程 HTTP MCP 服务的小型桥接工具。更改配置后,请重启客户端。
Claude Desktop
⬇️ 点击展开 ⬇️
托管服务,自定义连接器(推荐)。
- 前往 Customize → Connectors → Add custom connector。对于 Team 和 Enterprise 计划,Owner 应改为前往 Organization settings → Connectors → Add → Custom 添加,然后每位成员再在 Customize → Connectors 下选择该连接器上的 Connect,并使用自己的 Google 账号登录。
- 设置名称(例如
gtm-mcp-server)和 URL:https://gtm-mcp.stape.io/mcp。如果对话框询问如何进行身份验证,请选择 Sign in now;如果询问 OAuth 客户端,请选择 Register automatically(服务端不支持 Use Claude's published identity)。 - 选择 Add,然后选择 Connect,并使用 Google 账号登录。
该连接器也可在 claude.ai 上使用。
托管服务,mcp-remote。 要通过 claude_desktop_config.json(Settings → Developer → Edit Config)进行配置,请改为:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://gtm-mcp.stape.io/mcp"
]
}
}
}
本地 CLI — 不需要 OAuth 流程,不会通过他人的服务传输数据,你需要提供服务账号密钥或刷新令牌。打开 Settings → Developer → Edit Config 并添加:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
请参阅 CLI README,了解所有凭据选项。
Claude Code
⬇️ 点击展开 ⬇️
Claude Code 原生支持 HTTP,包括 OAuth 握手,因此托管服务无需桥接。
托管服务:
claude mcp add --transport http gtm-mcp-server https://gtm-mcp.stape.io/mcp
然后在 Claude Code 中运行 /mcp(或在 shell 中运行 claude mcp login gtm-mcp-server),并使用 Google 账号登录。运行 claude mcp list 可查看是否已连接。
本地 CLI:
claude mcp add gtm-mcp-server -e GOOGLE_SERVICE_ACCOUNT_KEY='{"type":"service_account", ... }' -- npx -y google-tag-manager-mcp-server
两种方式都会仅将服务添加到当前项目。添加 --scope user 可在每个项目中使用。--scope project 会将其写入项目的 .mcp.json,适用于托管服务(其中不包含机密信息,每位队友都使用自己的 Google 账号登录),但不适用于本地 CLI,其配置项包含你的凭据。
VS Code
⬇️ 点击展开 ⬇️
VS Code 的 MCP 客户端原生支持 HTTP 服务及其 OAuth 流程,无需使用 mcp-remote。将以下内容添加到 .vscode/mcp.json(此工作区),或添加到 MCP: Open User Configuration 打开的文件中(所有工作区):
托管服务:
{
"servers": {
"gtm-mcp-server": {
"type": "http",
"url": "https://gtm-mcp.stape.io/mcp"
}
}
}
服务首次启动时,VS Code 会提示你使用 Google 账号登录。
本地 CLI:
{
"servers": {
"gtm-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
GitHub Copilot
⬇️ 点击展开 ⬇️
VS Code 中的 GitHub Copilot Chat 使用 VS Code 自带的 MCP 客户端,因此会读取相同的 MCP 配置 — 请参阅上文的 VS Code。无需单独配置。
Copilot CLI
⬇️ 点击展开 ⬇️
托管服务 — Copilot CLI 可原生为远程 HTTP 服务完成 OAuth 流程:
copilot mcp add --transport http gtm-mcp-server https://gtm-mcp.stape.io/mcp
Copilot CLI 提示时,使用 Google 账号登录。
本地 CLI:
copilot mcp add --env GOOGLE_SERVICE_ACCOUNT_KEY='{"type":"service_account", ... }' gtm-mcp-server -- npx -y google-tag-manager-mcp-server
两种方式都会将服务配置项写入 ~/.copilot/mcp-config.json。运行 copilot mcp get gtm-mcp-server 进行检查。在交互式会话中,/mcp add 可通过表单完成相同操作。更多信息请参阅 GitHub 的文档。
Cursor
⬇️ 点击展开 ⬇️
Cursor 原生支持 HTTP,包括 OAuth 流程,无需使用 mcp-remote。将以下内容添加到 .cursor/mcp.json(此项目)或 ~/.cursor/mcp.json(所有项目):
托管服务:
{
"mcpServers": {
"gtm-mcp-server": {
"url": "https://gtm-mcp.stape.io/mcp"
}
}
}
然后在 Cursor 侧边栏 Customize 下的服务配置项中,使用 Google 账号登录。
本地 CLI:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
⬇️ 点击展开 ⬇️
Antigravity 对远程 HTTP 服务的 OAuth 支持目前还无法将令牌发送到服务端(antigravity-cli#25),因此这里请使用 mcp-remote 连接托管服务。将以下内容添加到 ~/.gemini/config/mcp_config.json。Antigravity 编辑器和 CLI 共用此配置文件。在编辑器中,可通过 Agent 面板中的 … → MCP 服务 → 管理 MCP 服务 → 查看原始配置 打开:
托管服务:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://gtm-mcp.stape.io/mcp"
]
}
}
}
本地 CLI:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
或者,在 Antigravity CLI 中运行以下任一命令(agy mcp add 会替换同名条目):
托管服务:
agy mcp add gtm-mcp-server -- npx -y mcp-remote https://gtm-mcp.stape.io/mcp
本地 CLI:
agy mcp add --env GOOGLE_SERVICE_ACCOUNT_KEY='{"type":"service_account", ... }' gtm-mcp-server -- npx -y google-tag-manager-mcp-server
mcp-remote 首次连接时,会在浏览器中打开 Google 登录页面。
ChatGPT
⬇️ 点击展开 ⬇️
- 在网页端 ChatGPT 中,前往 插件,选择 +,然后选择 添加自定义 MCP 服务。
- 输入名称(例如
gtm-mcp-server),并在 连接 下将服务 URL 设为https://gtm-mcp.stape.io/mcp。 - 将身份验证设为 OAuth。该服务支持动态客户端注册,因此无需客户端 ID 或密钥。
- 确认风险警告(我了解并希望继续),然后选择 创建为插件。
- 从个人插件中安装该插件,使用 Google 登录,然后在提示词框中输入
@并选择它。
ChatGPT 只能访问公共互联网中的服务,因此这里没有本地 CLI 选项,只能使用托管服务。工作区管理员可以限制自定义 MCP 服务。详情请参阅 OpenAI 文档。
其他 MCP 客户端
⬇️ 点击展开 ⬇️
如果你的客户端支持使用 OAuth 的远程 HTTP MCP 服务,请像 Cursor 配置示例那样,将其指向 https://gtm-mcp.stape.io/mcp。否则,请使用 mcp-remote 连接托管服务:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://gtm-mcp.stape.io/mcp"
]
}
}
}
或者,使用你的凭据直接运行本地 CLI:
{
"mcpServers": {
"gtm-mcp-server": {
"command": "npx",
"args": ["-y", "google-tag-manager-mcp-server"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\", ... }"
}
}
}
}
故障排除
身份验证错误
如果工具因 401/403 错误而无法运行,请让助手运行 gtm_auth_status。该命令会报告当前 Google 令牌是否有效、何时过期,以及缺少哪些 Tag Manager 权限范围,但不会泄露令牌。
MCP 服务名称长度限制
部分 MCP 客户端(如 Cursor AI)对 MCP 服务名称与工具名称的总长度限制为 60 个字符。如果你在配置中使用了较长的服务名称(例如 gtm-mcp-server-your-additional-long-name),部分工具可能会被过滤掉。
为避免此问题:
- 在 MCP 配置中使用较短的服务名称(例如
gtm-mcp-server)
清除 MCP 缓存
如果你通过 mcp-remote 连接(Antigravity、以这种方式配置的 Claude Desktop,或其他使用 mcp-remote 配置块的客户端),所有凭据都会存储在 ~/.mcp-auth 中(或存储在 MCP_REMOTE_CONFIG_DIR 指定的位置)。如果问题持续存在,请尝试运行:
rm -rf ~/.mcp-auth
然后重启 MCP 客户端。
在本地测试更改
需要采用哪种工作流取决于你更改的内容。大多数更改属于第一类,只有在修改 Worker 本身时才需要采用第二类工作流。
packages/core 或 packages/cli 的更改
这里是工具逻辑本身(架构、GTM API 调用、错误处理),几乎所有需要修复或添加的内容都在这里。你不需要 Google Cloud OAuth 客户端或任何 Worker 设置:从源代码构建,并使用现有凭据直接运行 CLI。
git clone https://github.com/stape-io/google-tag-manager-mcp-server
cd google-tag-manager-mcp-server
gh pr checkout <PR number> # or: git checkout <your-branch>
npm install
npm run build
将 MCP 客户端指向本地构建,而不是 npx。凭据选项与上文 Claude Desktop 的本地 CLI 示例相同;要测试单项更改,最快的方法是使用来自 OAuth Playground 的访问令牌:
{
"mcpServers": {
"gtm-mcp-local": {
"command": "node",
"args": ["/absolute/path/to/google-tag-manager-mcp-server/packages/cli/dist/index.js"],
"env": {
"GOOGLE_ACCESS_TOKEN": "..."
}
}
}
}
所有凭据选项请参阅 CLI README。
apps/worker 的变更
仅用于托管服务自身的代码:OAuth 流程、路由、会话处理、审批和状态页面。此设置会让这些代码在你自己的机器上运行,并使用你自己的 Google Cloud OAuth 凭据,而不是 gtm-mcp.stape.io。
1. 设置 Google Cloud OAuth 客户端
- 在 Google Cloud 控制台中创建或选择一个项目,然后启用 Tag Manager API。
- 前往 APIs & Services > OAuth consent screen 并进行配置(选择 External 即可)。当应用的发布状态为 Testing 时,只有列为测试用户的账号才能登录。
- 前往 Audience,在 Test users 下添加你自己的 Google 账号。
- 前往 APIs & Services > Credentials > Create Credentials > OAuth client ID,选择 Web application 类型。
- 在 Authorized redirect URIs 下添加
http://localhost:8788/callback。(可以将 Authorized JavaScript origins 留空——此流程仅在服务端运行,不会通过浏览器 JS 直接调用 Google。) - 保存,然后复制生成的 Client ID 和 Client secret。
2. 配置本地环境变量
复制示例文件,并填入上一步获取的值:
cp apps/worker/.dev.vars.example apps/worker/.dev.vars
GOOGLE_CLIENT_ID="<your client ID>"
GOOGLE_CLIENT_SECRET="<your client secret>"
COOKIE_ENCRYPTION_KEY="<any random string, at least 32 chars, e.g. output of: openssl rand -hex 32>"
WORKER_HOST="http://localhost:8788"
HOSTED_DOMAIN=""
.dev.vars 已加入 git 忽略规则——它仅在本地使用,不会提交。
3. 启动服务
npm install
npm run build
npm run dev
npm run build 会编译 Worker 所依赖的 core 包;npm run dev 会在 http://localhost:8788 启动 Worker。
4. 将 MCP 客户端指向本地服务
Claude Desktop 的自定义连接器需要可公开访问的 URL,因此要将连接器指向 localhost,只能使用 mcp-remote:
{
"mcpServers": {
"gtm-mcp-server-local": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8788/mcp"]
}
}
}
重启 Claude Desktop。随后会打开浏览器窗口以完成 Google OAuth 流程;请使用你在步骤 1 中添加为测试用户的账号登录。
**注意:**如果你之前连接过托管服务(或在本地服务和托管服务之间切换),请先清除 mcp-remote 的缓存(参见上文的故障排除),并完全重启 MCP 客户端,否则它可能会复用过期或已缓存的连接。
发布
版本和变更日志通过 Changesets 管理。对于计划发布的变更,请一并添加:
npm run changeset
合并到 main 后,发布工作流会创建一个“Version Packages”PR;合并该 PR 后,系统会先发布 core 包到 npm,然后发布依赖它的 CLI。Worker 是私有的,不会发布——每次推送到 main 都会部署它。
开发
npm install
npm run build # core, then the CLI, then the Worker's generated version
npm run typecheck
npm run lint
npm run smoke # starts the built CLI and runs an MCP handshake against it
拉取请求会运行上述所有检查,还会检查 Worker 打包,并标记未附带 changeset 的已发布包变更。
@modelcontextprotocol/sdk 和 agents 在 apps/worker 中都锁定为精确版本。SDK 使用 instanceof 识别工具架构,因此整个工作区必须只解析到同一份副本;而 agents 的版本会锁定其构建所用的 SDK 版本。请同时升级这两个依赖,并谨慎部署。
实用资源
开源
适用于 Google Tag Manager 的 MCP 服务由 Stape Team 开发和维护,采用 Apache 2.0 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。