标签管理服务器

用于操作Google Tag Manager的MCP服务器,提供账户、容器、标签、触发器等全面管理功能。

  • by ambit1977
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 ambit1977/GTM-MCP

使用说明

谷歌标签管理器MCP服务器

用于操作谷歌Tag Manager的MCP(Model Context Protocol)服务器。在Mac本地环境中运行。

机能

此MCP服务器提供以下谷歌Tag Manager操作:

  • 帐户管理:获取、高级和更新帐户列表
  • 用户权限管理:用户权限的一览取得、详细取得、制作、更新、删除(tagmanager.manage.users范围需要、需要再认证)
  • 容器管理:获取、获取、创建、更新和删除容器列表
  • 工作区管理:汇总、创建、更新、删除、同步和快速预览工作区
  • 标签管理:检索、高级检索、创建、更新和删除标记
  • 触发器管理:列出、高级、创建、更新和删除触发器
  • 変数管理:列出、高级、创建、更新和删除变量
  • 版本控制:获取版本列表、获取详细信息、创建(准备发布)、发布

安装,安装

1.安装相关性

npm install

2.Google Cloud OAuth2认证信息的设置

要使用谷歌Tag Manager API,需要OAuth2认证信息。

  1. 谷歌云控制台在中创建项目
  2. API和服务>凭据 移到
  3. 创建凭据>审计客户机标识 列表框中,此格式对应于条目“无”
  4. 应用程序类型 桌面应用程序 列表框中,此格式对应于条目“无”
  5. 通过输入名称创建
  6. 客户端标识 和 客户端密码 复制
  7. API和服务>库 的 标签管理器API 启用

注意:帐户管理功能(update_account),则必须在“OAuth2”凭据设置中添加以下范围:

  • https://www.googleapis.com/auth/tagmanager.manage.accounts

此作用域已包含在MCP服务器的实施中,但在谷歌云控制台中创建OAuth2凭据时,请确保这些作用域已启用。

3.设置环境变量

.env创建文件并设置OAuth2凭据:

GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback

注意: GOOGLE_REDIRECT_URI必须在Google Cloud Console的OAuth2认证信息设置中添加到“已批准的重定向URI”中。

4.初回认证・再认证

推荐(不费事):在项目的路线上执行以下操作,只需在打开的浏览器中登录谷歌并批准权限。用于回调的临时服务器将接收code,并自动保存令牌。

node auth.js
# または
npm run auth

认证信息是 ~/.gtm-mcp-token.json 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

使用用户权限管理时:创建和更新用户权限 tagmanager.manage.users 我需要一个作用域。如果不包含在现有令牌中 node auth.js(或 npm run auth)重新认证后,即可获得带有新作用域的标记。事先 reset_auth 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

手动进行时:MCP的 get_auth_url 获取URL-在浏览器中验证-重定向到 code= 复制值- authenticate 交付,或 node test-auth.js "認証コード" 执行。

使用方法

设置为MCP客户端

在MCP客户端(如Cursor)上设置此服务器。

设定例(~/.cursor/mcp.json 或适当的配置文件):

{
  "mcpServers": {
    "gtm": {
      "command": "node",
      "args": ["/Users/01035280/Documents/タグマネTテスト/GTM_MCP/src/index.js"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "GOOGLE_REDIRECT_URI": "http://localhost:3000/oauth2callback"
      }
    }
  }
}

单击功能区上.env使用文件时,可以省略环境变量的设置。

重新启动MCP服务器

如何重启MCP服务器:

  1. 重新启动Cursor(最可靠的方法)

    • 完全退出Cursor(Cmd + Q),然后重新启动
  2. 编辑并保存MCP设置文件

    • ~/.cursor/mcp.json ,添加、删除并保存注释和空间
    • Cursor可能检测到设置更改并重新启动MCP服务器
  3. 从命令选项板重新启动(根据Cursor版本)

    • Cmd + Shift + P(Mac)或 Ctrl + Shift + P(Windows/Linux)打开命令调色板
    • 通过“MCP”或“reload”等关键字进行检索,执行MCP服务器重启命令

注意:在当前Cursor版本中,通过编辑MCP配置文件重新启动是最简单的方法。

可用工具

认证操作

  • get_auth_url:获取OAuth2认证URL
  • authenticate:使用验证代码完成验证
  • check_auth_status:确认当前认证状态
  • reset_auth:重置保存的凭据

帐户操作

  • list_accounts:获取帐户列表
  • get_account:获取帐户详细信息
  • update_account:更新帐户信息(例如,名称)

用户权限操作(帐户管理)

  • list_user_permissions:获取帐户用户权限列表
  • get_user_permission:获取指定用户权限详细信息
  • create_user_permission:创建对帐户容器的用户访问(邮件、帐户权限:noAccess/user/admin、容器权限:noAccess/read/edit/approve/publish)
  • update_user_permission:更新用户权限
  • delete_user_permission:删除用户权限(取消访问)

※用户权限的制作、更新 tagmanager.manage.users 我需要一个作用域。请重新验证现有令牌。

容器操作

  • list_containers:获取容器列表
  • get_container:获取容器详细信息
  • create_container:创建新容器
  • update_container:更新容器信息
  • delete_container:删除容器

工作区操作

  • list_workspaces:获取工作区列表
  • get_workspace:获取工作区详细信息
  • get_workspace_status:获取工作区状态(从基本版本更改合并冲突)。用于批准审核前的确认
  • get_workspace_review_info:汇总并获取用于审批审核的更改摘要和参考信息(要更改的合并冲突/审核备注)
  • create_workspace:创建新工作区
  • update_workspace:更新工作区信息
  • delete_workspace:删除工作区
  • sync_workspace:同步工作区
  • quick_preview:获取工作区快速预览

标记操作

  • list_tags:获取标记列表
  • get_tag:获取标记详细信息
  • create_tag:创建新标记
  • update_tag:更新现有标记(可更新所有参数)
  • delete_tag:删除标记
    • 支持的主要标记类型:
      • googtag:GA4设置标签
      • gaawe:GA4事件标签
      • awct:谷歌广告转换跟踪
      • html:自定义HTML标记
      • img:自定义图像标记(像素跟踪)
      • fbq:Facebook像素
      • ua: Universal Analytics(旧GA)
    • tagFiringOption(标记的调用选项): unlimited / oncePerEvent / oncePerLoad。create_tag 中未指定的情况下,相当于UI默认 oncePerEvent 自动设置(省略为API上的空白,在运行时相当于unlimited)

触发操作

  • list_triggers:获取触发器列表
  • get_trigger:获取触发器详细信息
  • create_trigger:创建新触发器
  • update_trigger:更新现有触发器(可更新所有设置,如filter、autoEventFilter和waitForTags)
  • delete_trigger:删除触发器
    • 支持的触发器类型:
      • pageview:页面视图触发器
      • customEvent:自定义事件触发器(customEventFilter),模板名称将采用不同的格式
      • linkClick:链接单击触发器(filter、autoEventFilter、waitForTags等)
      • click:单击触发器(filter),模板名称将采用不同的格式
      • formSubmission:表单提交触发器(formId、formClasses),模板名称将采用不同的格式
      • scrollDepth:滚动深度触发器(verticalThreshold、horizontalThreshold),模板名称将采用不同的格式
      • visible / elementVisibility:显示元素触发器(selector、visiblePercentageThreshold),模板名称将采用不同的格式
      • youtubeVideo:YouTube视频触发(videoId、各种enableTriggerOnVideo*),模板名称将采用不同的格式
      • timer:计时器触发器(interval、limit、startTimerOn),模板名称将采用不同的格式

変数操作

  • list_variables:获取变量列表
  • get_variable:获取变量详细信息
  • create_variable:创建新变量
  • update_variable:更新现有变量
  • delete_variable:删除变量
    • 支持的变量类型:
      • c: 定数変数
      • v:数据层变量
      • j: JavaScript変数
      • d: DOM要素変数
      • k: 1st Party Cookie変数
      • u: URL変数
      • ae:自动事件变量
      • b:内置变量

版本操作

  • create_version:将工作区更改创建为版本(准备发布)
  • list_versions:获取容器版本列表
  • get_version:获取版本详细信息
  • publish_version:发布版本

获取批准审核的信息(工作区更改)

接受批准请求时,批准者可以获取信息以确定“当前工作区更新是否有问题”。GTM API没有专用的API来获取批准队列,但您可以使用以下工具来获取审核所需的参考信息。

  • get_workspace_status:GTM API的 workspaces.getStatus 从基本版本调用更改实体列表(workspaceChange)和合并冲突(mergeConflict),模板名称将采用不同的格式。
  • get_workspace_review_info:除上述内容外,还包括工作空间名称、说明、变更对象的集计(标记/触发器/变量/文件夹等的件数)、冲突的有无、审核备注(reviewNotes),模板名称将采用不同的格式。作为批准判断的概要直接使用变得容易。

使用示例(批准审核前的确认):

  1. list_workspaces 获取目标容器的工作区列表
  2. 指定批准请求的目标工作区标识 get_workspace_review_info 执行
  3. 已归还 changeSummary 和 reviewNotes 中所述修改相应参数的值 get_workspace_status 查看原始更改列表
  4. 如果存在合并冲突,则必须在发布前解决 reviewNotes 包含

使用例

创建主要标记类型

GA4设置标签
{
  "name": "GA4設定",
  "type": "googtag",
  "parameter": [
    {
      "type": "template",
      "key": "tagId",
      "value": "G-XXXXXXXXXX"
    }
  ],
  "firingTriggerId": ["2147479573"]
}
GA4事件标签
{
  "name": "GA4 イベント",
  "type": "gaawe",
  "parameter": [
    {
      "type": "template",
      "key": "eventName",
      "value": "custom_event"
    },
    {
      "type": "boolean",
      "key": "sendEcommerceData",
      "value": "false"
    },
    {
      "type": "template",
      "key": "measurementIdOverride",
      "value": "G-XXXXXXXXXX"
    }
  ],
  "firingTriggerId": ["トリガーID"]
}
谷歌广告转换跟踪
{
  "name": "Google広告コンバージョン",
  "type": "awct",
  "parameter": [
    {
      "type": "template",
      "key": "conversionId",
      "value": "1006772047"
    },
    {
      "type": "template",
      "key": "conversionLabel",
      "value": "0L_dCLyI84sBEM--iOAD"
    },
    {
      "type": "boolean",
      "key": "enableConversionLinker",
      "value": "true"
    }
  ],
  "firingTriggerId": ["トリガーID"]
}

创建主要触发器类型

创建linkClick触发器
{
  "name": "リンククリック - test_click9",
  "type": "linkClick",
  "filter": [
    {
      "type": "contains",
      "parameter": [
        {
          "type": "template",
          "key": "arg0",
          "value": "{{Click URL}}"
        },
        {
          "type": "template",
          "key": "arg1",
          "value": "test_click9"
        }
      ]
    }
  ],
  "autoEventFilter": [
    {
      "type": "contains",
      "parameter": [
        {
          "type": "template",
          "key": "arg0",
          "value": "{{Page URL}}"
        },
        {
          "type": "template",
          "key": "arg1",
          "value": "20251202cvtest/test1.html"
        }
      ]
    }
  ],
  "waitForTags": true,
  "checkValidation": false,
  "waitForTagsTimeout": 2000
}
更新linkClick触发器(配置filter和autoEventFilter)

向现有触发器添加和更新filter和autoEventFilter的示例:

{
  "triggerId": "27",
  "filter": [
    {
      "type": "contains",
      "parameter": [
        {
          "type": "template",
          "key": "arg0",
          "value": "{{Click URL}}"
        },
        {
          "type": "template",
          "key": "arg1",
          "value": "test_click9"
        }
      ]
    }
  ],
  "autoEventFilter": [
    {
      "type": "contains",
      "parameter": [
        {
          "type": "template",
          "key": "arg0",
          "value": "{{Page URL}}"
        },
        {
          "type": "template",
          "key": "arg1",
          "value": "20251202cvtest/test1.html"
        }
      ]
    }
  ],
  "waitForTags": true,
  "waitForTagsTimeout": 2000
}
创建formSubmission触发器
{
  "name": "フォーム送信",
  "type": "formSubmission",
  "formId": "contact-form",
  "formClasses": "form-class"
}
创建scrollDepth触发器
{
  "name": "スクロール深度 50%",
  "type": "scrollDepth",
  "verticalThreshold": 50,
  "horizontalThreshold": 75
}
创建elementVisity触发器
{
  "name": "要素の表示",
  "type": "visible",
  "selector": "#important-element",
  "visiblePercentageThreshold": 50,
  "continuousTimeMinMilliseconds": 1000
}
创建youtubeVideo触发器
{
  "name": "YouTube動画",
  "type": "youtubeVideo",
  "videoId": "dQw4w9WgXcQ",
  "enableTriggerOnVideoStart": true,
  "enableTriggerOnVideoComplete": true
}

创建主要变量类型

数据层变量
{
  "name": "データレイヤー変数",
  "type": "v",
  "parameter": [
    {
      "type": "template",
      "key": "dataLayerVersion",
      "value": "2"
    },
    {
      "type": "template",
      "key": "dataLayerVariable",
      "value": "event"
    }
  ]
}
JavaScript変数
{
  "name": "JavaScript変数",
  "type": "j",
  "parameter": [
    {
      "type": "template",
      "key": "javascript",
      "value": "function() {\n  return document.title;\n}"
    }
  ]
}
DOM要素変数
{
  "name": "DOM要素変数",
  "type": "d",
  "parameter": [
    {
      "type": "template",
      "key": "selector",
      "value": "#element-id"
    },
    {
      "type": "template",
      "key": "attributeName",
      "value": "data-value"
    }
  ]
}
Cookie変数
{
  "name": "Cookie変数",
  "type": "k",
  "parameter": [
    {
      "type": "template",
      "key": "cookieName",
      "value": "session_id"
    }
  ]
}

开発

以开发模式运行

npm run dev

以正常模式运行

npm start

运行测试

运行所有测试(更新测试):

npm test

运行单个测试:

npm run test:auth              # 認証テスト
npm run test:accounts           # アカウント一覧取得テスト
npm run test:gtm                # 基本GTMテスト
npm run test:details            # 詳細情報取得テスト
npm run test:trigger            # linkClickトリガー作成テスト
npm run test:filter             # filter/autoEventFilterテスト
npm run test:detailed-filters   # 詳細フィルタ設定テスト

也可以直接运行测试文件:

node run-all-tests.js           # すべてのテストを実行
node test-auth.js               # 認証テスト
node test-accounts.js            # アカウント一覧取得テスト
# ... など

容器确认实用程序

公开ID(GTM-XXXXXX)中查找帐户ID、容器ID的CLI。在授权或MCP操作之前,可以在确定对象容器时使用。

node check-container.js GTM-M6KP89G
# または
npm run check-container -- GTM-M6KP89G

输出内容:帐户信息、容器概览详细信息、工作区列表、起始工作区审核信息(get_workspace_review_info 相当)。

注意事项

  • 此服务器通过标准输入/输出(stdio)进行通信
  • 请注意谷歌Tag Manager API的汇率限制
  • 请安全管理OAuth2凭据(客户端ID、客户端密码)
  • 认证令牌 ~/.gtm-mcp-token.json 将条目添加到文档注册表.gitignore),模板名称将采用不同的格式
  • 自动使用刷新标记,并在访问标记过期之前更新

许可证

麻省理工学院