用途
该 MCP 服务器为 Google Tag Manager 提供接口,使支持 MCP 的客户端能够通过工具调用访问 Google Tag Manager API。项目由 Stape 团队开发维护,采用 Apache 2.0 许可证。
主要能力
服务器提供两种形态:托管服务器与本地 CLI。两者提供相同的 20 个 GTM 工具,区别在于由谁处理 Google 认证。工具通过 GtmAuthProvider(getAccessToken(): Promise<string>)访问 Google,而非绑定特定会话,因此同一套工具可以同时支撑两种服务器,也可用于自建私有认证的服务器。
使用方式
托管服务器
托管服务器是远程 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)添加,名称如 gtm-mcp-server,URL 为 https://gtm-mcp.stape.io/mcp;若询问认证方式选择 Sign in now,若询问 OAuth 客户端选择 Register automatically(服务器不支持 Use Claude's published identity)。团队和企业版由 Owner 在组织设置中添加,成员再各自连接并用自己的 Google 账号登录。该连接器在 claude.ai 上同样可用。也可通过 claude_desktop_config.json 使用 mcp-remote 配置。
- Claude Code:直接支持 HTTP 与 OAuth 握手,无需桥接。添加后在 Claude Code 内运行 /mcp(或从 shell 运行 claude mcp login gtm-mcp-server)并用 Google 登录;claude mcp list 可查看连接状态。默认仅添加到当前项目,加 --scope user 可全局使用;--scope project 会写入项目的 .mcp.json,适合托管服务器(不含密钥,每位成员用自己的 Google 账号登录),但不适合本地 CLI(其条目包含凭据)。
- VS Code:MCP 客户端原生支持 HTTP 服务器及其 OAuth 流程,无需 mcp-remote。将配置加入 .vscode/mcp.json(当前工作区)或 MCP: Open User Configuration 打开的文件(所有工作区)。服务器首次启动时 VS Code 会要求用 Google 登录。VS Code 中的 GitHub Copilot Chat 使用 VS Code 自身的 MCP 客户端,读取同一配置,无需单独配置。
- Copilot CLI:对远程 HTTP 服务器原生完成 OAuth,提示时用 Google 登录。配置写入 ~/.copilot/mcp-config.json,可用 copilot mcp get gtm-mcp-server 检查;交互式会话中 /mcp add 也可通过表单完成。
- Cursor:直接支持 HTTP 与 OAuth 流程,无需 mcp-remote。配置加入 .cursor/mcp.json(当前项目)或 ~/.cursor/mcp.json(所有项目),然后在 Cursor 侧边栏 Customize 下的服务器条目中用 Google 登录。
- Antigravity:其对远程 HTTP 服务器的 OAuth 支持目前尚不能把令牌传给服务器(antigravity-cli#25),因此托管服务器需使用 mcp-remote。配置加入 ~/.gemini/config/mcp_config.json,编辑器与 CLI 共用;编辑器中可从 agent 面板通过 … → MCP Servers → Manage MCP Servers → View raw config 打开,或从 Antigravity CLI 运行 agy mcp add(同名条目会被替换)。mcp-remote 首次连接时会在浏览器中打开 Google 登录。
- ChatGPT:在网页版进入 Plugins,选择 +,再选 Add custom MCP server。输入名称(如 gtm-mcp-server),在 Connection 下将服务器 URL 设为 https://gtm-mcp.stape.io/mcp,认证设为 OAuth(服务器支持动态客户端注册,无需 client ID 或 secret)。确认风险警告后选择 Create as a plugin,从个人插件中安装、用 Google 登录,并在提示框中用 @ 选择。ChatGPT 只能访问公网服务器,因此没有本地 CLI 选项,仅支持托管服务器;工作区管理员可限制自定义 MCP 服务器。
- 其他 MCP 客户端:若支持带 OAuth 的远程 HTTP MCP 服务器,直接指向 https://gtm-mcp.stape.io/mcp;否则使用 mcp-remote 桥接托管服务器,或直接使用本地 CLI 并提供自己的凭据。
本地 CLI
本地 CLI 不经过 OAuth 流程,也不经由他人服务器传输数据,需自行提供服务账号密钥或刷新令牌。在 Claude Desktop 中可通过 Settings → Developer → Edit Config 配置。CLI README 中列出了所有凭据选项。
故障排查
- 认证错误:若工具返回 401/403 错误,可让助手运行 gtm_auth_status。它会报告当前 Google 令牌是否被接受、何时过期以及缺少哪些 Tag Manager 权限范围,且不会泄露令牌。
- MCP 服务器名称长度限制:部分 MCP 客户端(如 Cursor AI)对服务器名与工具名合计长度有 60 字符限制。若配置中使用较长的服务器名(如 gtm-mcp-server-your-additional-long-name),部分工具可能被过滤。建议使用较短的服务器名(如 gtm-mcp-server)。
- 清除 MCP 缓存:若通过 mcp-remote 连接(Antigravity、以该方式配置的 Claude Desktop 或其他使用 mcp-remote 块的客户端),凭据信息存储在 ~/.mcp-auth(或 MCP_REMOTE_CONFIG_DIR 指向的位置)。若持续出现问题,可清除该缓存后重启 MCP 客户端。
本地测试改动
改动分为两类:
- packages/core 或 packages/cli 的改动:这是工具逻辑本身(schema、GTM API 调用、错误处理),绝大多数修复或新增都在这里。无需 Google Cloud OAuth 客户端或 Worker 设置,从源码构建并直接用已有凭据运行 CLI 即可。将 MCP 客户端指向本地构建而非 npx,凭据选项与 Claude Desktop 本地 CLI 示例相同;从 OAuth Playground 获取访问令牌是测试单个改动最快的方式。
- apps/worker 的改动:仅托管服务器自身代码需要,包括 OAuth 流程、路由、会话处理、审批与状态页面。这会在本机使用自己的 Google Cloud OAuth 凭据运行该代码,而非 gtm-mcp.stape.io。步骤:在 Google Cloud Console 创建或选择项目并启用 Tag Manager API;配置 OAuth 同意屏幕(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;复制示例文件并填入上述值(.dev.vars 已被 git 忽略,仅本地使用,不会提交)。npm run build 编译 Worker 打包所依赖的 core 包;npm run dev 在 http://localhost:8788 启动 Worker。Claude Desktop 的自定义连接器需要公网可达 URL,因此指向 localhost 只能用 mcp-remote。重启 Claude Desktop 后会打开浏览器进行 Google OAuth 流程,使用第 1 步添加为测试用户的账号登录。注意:若此前连接过托管服务器(或在本地与托管之间切换),先清除 mcp-remote 缓存并完全重启 MCP 客户端,否则可能复用过期或缓存的连接。
发布与开发
版本与变更日志通过 Changesets 管理。随应发布的改动一起添加 changeset。合并到 main 后,发布工作流会打开一个 "Version Packages" PR;合并该 PR 即发布到 npm,先发布 core,再发布依赖它的 CLI。Worker 为私有,从不发布,每次推送 main 都会部署。拉取请求会运行上述全部检查以及 Worker 打包检查,并对已发布包的改动缺少 changeset 的情况进行标记。apps/worker 中的 @modelcontextprotocol/sdk 与 agents 均固定为精确版本。SDK 通过 instanceof 识别工具 schema,因此整个工作区必须解析到单一副本,而 agents 的发布固定了其构建时对应的 SDK 版本。两者需一起升级并有意识地部署。
仓库结构
npm workspace,包含一个应用和两个已发布包。
适用场景与限制
适用于需要通过 MCP 客户端操作 Google Tag Manager 的用户,可选择托管服务器(便捷、内置 OAuth)或本地 CLI(数据不经他人服务器、使用自有凭据)。限制包括:ChatGPT 仅支持托管服务器;Antigravity 对远程 HTTP 服务器的 OAuth 支持尚不完善,需借助 mcp-remote;部分客户端存在服务器名长度限制;本地测试 Worker 改动需要自建 Google Cloud OAuth 客户端。