Skip to main content
Glama
ambit1977

Google Tag Manager MCP Server

by ambit1977
README.md13.7 kB
# Google Tag Manager MCP Server Google Tag Managerを操作するためのMCP(Model Context Protocol)サーバーです。Macローカル環境で動作します。 ## 機能 このMCPサーバーは以下のGoogle Tag Manager操作を提供します: - **アカウント管理**: アカウント一覧の取得 - **コンテナ管理**: コンテナの一覧取得、詳細取得、作成 - **ワークスペース管理**: ワークスペースの一覧取得、詳細取得 - **タグ管理**: タグの一覧取得、作成、更新、削除 - **トリガー管理**: トリガーの一覧取得、作成 - **変数管理**: 変数の一覧取得、作成 - **バージョン管理**: バージョンの作成(公開準備) ## セットアップ ### 1. 依存関係のインストール ```bash npm install ``` ### 2. Google Cloud OAuth2認証情報の設定 Google Tag Manager APIを使用するには、OAuth2認証情報が必要です。 1. [Google Cloud Console](https://console.cloud.google.com/)でプロジェクトを作成 2. **APIとサービス > 認証情報** に移動 3. **認証情報を作成 > OAuth クライアント ID** を選択 4. アプリケーションの種類で **デスクトップアプリ** を選択 5. 名前を入力して作成 6. **クライアントID** と **クライアントシークレット** をコピー 7. **APIとサービス > ライブラリ** で **Tag Manager API** を有効化 ### 3. 環境変数の設定 `.env`ファイルを作成し、OAuth2認証情報を設定します: ```bash 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. 初回認証 MCPサーバーを起動後、以下の手順で認証を行います: 1. `get_auth_url`ツールを使用して認証URLを取得 2. ブラウザで認証URLにアクセス 3. Googleアカウントでログインし、権限を承認 4. リダイレクト先のURLから認証コードを取得(`code=`の後の値) 5. `authenticate`ツールに認証コードを渡して認証を完了 認証情報は `~/.gtm-mcp-token.json` に保存され、次回以降は自動的に使用されます。 ## 使用方法 ### MCPクライアントとして設定 CursorなどのMCPクライアントで、このサーバーを設定します。 設定例(`~/.cursor/mcp.json` または適切な設定ファイル): ```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`: アカウント一覧を取得 #### コンテナ操作 - `list_containers`: コンテナ一覧を取得 - `get_container`: コンテナの詳細を取得 - `create_container`: 新しいコンテナを作成 #### ワークスペース操作 - `list_workspaces`: ワークスペース一覧を取得 - `get_workspace`: ワークスペースの詳細を取得 #### タグ操作 - `list_tags`: タグ一覧を取得 - `get_tag`: タグの詳細を取得 - `create_tag`: 新しいタグを作成 - `update_tag`: 既存のタグを更新(すべてのパラメータを更新可能) - `delete_tag`: タグを削除 - サポートする主要なタグタイプ: - `googtag`: GA4設定タグ - `gaawe`: GA4イベントタグ - `awct`: Google広告コンバージョントラッキング - `html`: カスタムHTMLタグ - `img`: カスタム画像タグ(ピクセルトラッキング) - `fbq`: Facebookピクセル - `ua`: Universal Analytics(旧GA) #### トリガー操作 - `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`: ワークスペースの変更をバージョンとして作成 ### 使用例 #### 主要なタグタイプの作成 ##### GA4設定タグ ```json { "name": "GA4設定", "type": "googtag", "parameter": [ { "type": "template", "key": "tagId", "value": "G-XXXXXXXXXX" } ], "firingTriggerId": ["2147479573"] } ``` ##### GA4イベントタグ ```json { "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"] } ``` ##### Google広告コンバージョントラッキング ```json { "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トリガーの作成 ```json { "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を追加・更新する例: ```json { "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トリガーの作成 ```json { "name": "フォーム送信", "type": "formSubmission", "formId": "contact-form", "formClasses": "form-class" } ``` ##### scrollDepthトリガーの作成 ```json { "name": "スクロール深度 50%", "type": "scrollDepth", "verticalThreshold": 50, "horizontalThreshold": 75 } ``` ##### elementVisibilityトリガーの作成 ```json { "name": "要素の表示", "type": "visible", "selector": "#important-element", "visiblePercentageThreshold": 50, "continuousTimeMinMilliseconds": 1000 } ``` ##### youtubeVideoトリガーの作成 ```json { "name": "YouTube動画", "type": "youtubeVideo", "videoId": "dQw4w9WgXcQ", "enableTriggerOnVideoStart": true, "enableTriggerOnVideoComplete": true } ``` #### 主要な変数タイプの作成 ##### データレイヤー変数 ```json { "name": "データレイヤー変数", "type": "v", "parameter": [ { "type": "template", "key": "dataLayerVersion", "value": "2" }, { "type": "template", "key": "dataLayerVariable", "value": "event" } ] } ``` ##### JavaScript変数 ```json { "name": "JavaScript変数", "type": "j", "parameter": [ { "type": "template", "key": "javascript", "value": "function() {\n return document.title;\n}" } ] } ``` ##### DOM要素変数 ```json { "name": "DOM要素変数", "type": "d", "parameter": [ { "type": "template", "key": "selector", "value": "#element-id" }, { "type": "template", "key": "attributeName", "value": "data-value" } ] } ``` ##### Cookie変数 ```json { "name": "Cookie変数", "type": "k", "parameter": [ { "type": "template", "key": "cookieName", "value": "session_id" } ] } ``` ## 開発 ### 開発モードで実行 ```bash npm run dev ``` ### 通常モードで実行 ```bash npm start ``` ### テストの実行 すべてのテストを実行(リグレッションテスト): ```bash npm test ``` 個別のテストを実行: ```bash 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 # 詳細フィルタ設定テスト ``` テストファイルを直接実行することも可能です: ```bash node run-all-tests.js # すべてのテストを実行 node test-auth.js # 認証テスト node test-accounts.js # アカウント一覧取得テスト # ... など ``` ## 注意事項 - このサーバーは標準入出力(stdio)経由で通信します - Google Tag Manager APIのレート制限に注意してください - OAuth2認証情報(クライアントID、クライアントシークレット)は安全に管理してください - 認証トークンは `~/.gtm-mcp-token.json` に保存されます(`.gitignore`に含まれています) - リフレッシュトークンは自動的に使用され、アクセストークンが期限切れになる前に更新されます ## ライセンス MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ambit1977/GTM-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server