ga4-mcp-worker
ga4-mcp-worker
読み取り専用のGoogle Analytics 4 MCPサーバーで、Cloudflare Workers上で動作します。チームメンバーはローカルに何もインストールしなくてもClaudeからGA4を利用できるようになるため、Pythonも、gcloudも、ADCファイルも不要で、本バージョンでは共有パスワードも不要です。追加手順は「Connect」をクリックし、自分のGoogleアカウントでサインインし、自分自身としてGA4の質問に回答するだけです。
この実装は、公式のgoogleanalytics/google-analytics-mcp stdioサーバーのツール・サーフェースと同様ですが、GoogleのクライアントライブラリがWorkersランタイムで動作しないため、Google Analytics REST APIを直接呼び出します。
最初にお読みください: docs/IMPLEMENTATION-NOTES.md § テスト済みのものと未テストのもの。 ライブでのエンドツーエンド検証は実施済みですが、一部の領域(v1alphaエンドポイント、ページング)はフィクスチャのみでの検証となっています。
認証モード: ユーザーごとのOAuth
各チームメンバーは、自分のGoogleアカウントでサインインします。共有シークレットも、全員が依存する単一のGoogle資格情報もありません。全体の設計と、廃止済みの共有シークレットモードとの違いは、PRODUCTION.md § 1 と docs/PRODUCTION-PART2.md § 8 を参照してください。サインインは@zuddl.comのGoogleアカウントのみに制限されています(wrangler.tomlのALLOWED_EMAIL_DOMAIN)。
GOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECRETは引き続き必須です。Googleはユーザーデータを要求するすべてのアプリに登録を求めており、この2つの値が登録そのものであり、デプロイ時に一度だけ設定します。廃止されるのは、手作業で発行されたリフレッシュトークンと、チームメンバーが入力を惜しんでいたパスワードです。
ドキュメント
ファイル | 内容 |
SETUP-GUIDE.md (+ パート2) | 初回デプロイをゼロから解説 — OAuthの事前知識は不要。Googleアプリの作成、デプロイ、テスト、Claudeの接続。ここから始めましょう。 |
PRODUCTION.md (+ パート2) | アイデンティティモデル、監視、GA4クォータ、シークレットのローテーション、ローカル開発、運用ドキュメント、セキュリティチェックリスト、OAuth内部設計。大規模展開の前に読んでください。 |
この実装が正しく処理している落とし穴、テスト済み/未テストの内容、ランニングコスト。 | |
| MCPサーバー: ツール、fetchヘルパー、ノーマライザー、ルーター。コメント多数。 |
| 「Googleでサインイン」ハンドラー — |
| Workerの設定。 |
| ローカル開発用のテンプレート。 |
Related MCP server: GA4 MCP Server
当社のGA4プロパティ
プロパティID | 名前 | 測定ID | ステータス |
| 新しいzuddlウェブサイト GA4 プロパティ |
| 標準 — 特段の指示がない限りこれを使用してください。 |
| レガシー | — | レガシー。履歴のみ。現在のレポートには使用しないでください。 |
| レガシー | — | レガシー。履歴のみ。現在のレポートには使用しないでください。 |
このサーバーはプロパティ非依存です。すべてのツールがproperty_idを受け取り、314138239、314138239、"properties/314138239"のどちらも受け付けます。省略した場合、wrangler.tomlのDEFAULT_PROPERTY_IDにフォールバックします。標準プロパティに設定されているため、チームメンバーが数字を暗記する必要はありません。get_account_summariesを呼び出すと、その資格情報が実際に閲覧できるすべてを一覧できます。
ツール(9)
ツール | メソッド + エンドポイント | 用途 |
| POST | 主力ツール。 履歴レポート。フルパラメータセットに対応。 |
| POST | 直近約30分。別の小さなスキーマ。 |
| POST | 順序付けられたステップ群と離脱。 |
| POST | コンバージョン、広告費用、ROAS、アトリビューション・モデリング。フィールドタイトが制限されている。 |
| GET | クエリ可能な |
| GET | この資格情報が読めるすべて。引数なし。 |
| GET | タイムゾーン、通貨、サービスレベル。タイムゾーンは日付のずれの原因を説明します。 |
| GET | スパイクや下落を説明する日付付きのメモ。 |
| GET | リンクされたAdsアカウント。広告費用指標がデータを持つかどうかを確認。 |
run_reportは公式のフルパラメータセットを受け付けます: property_id、date_ranges(リスト、つまり1リクエストで前期比較が可能)、dimensions、metrics、dimension_filter、metric_filter、order_bys、limit、offset、currency_code、return_property_quota。run_realtime_reportは、date_rangesとcurrency_codeを除いた同形です。
ツールの説明は意図的に長くなっています。あらゆるフィルター形式の具体的な例を含んでおり、モデルがリクエスト形式を学習する唯一の場所だからです。ツールの説明への編集は、挙動の変更として扱ってください。
エンドポイント
エンドポイント | 認証 | 目的 |
| OAuthベアラートークン | MCP接続(Streamable HTTP)。 |
| — | OAuthエンドポイント。 |
| — | Googleはサインイン後にここへリダイレクトします。人間が直接開く場所ではありません。 |
| なし | ステータス確認。 |
| なし | プレーンテキストのステータスバナー。現在の認証モードを表示。 |
その他は404を返します。
/healthはOAuthモードでは検証度合いが低くなります。 単一の共有資格情報が存在せず、200はアプリ登録が設定され、グラントストア(OAUTH_KV)へ到達可能なことのみを確認します。特定の誰かのサインインが引き続き有効であるかどうかは確認しません。/healthが良好な間でも、個々のユーザーのグラントが失効または取り消されている可能性があります。これはユーザーごとの認証に本質的なことで、欠陥ではありません。
Workerは、MCPリクエストごと、拒否された認証試行ごと、ツールエラーごと、ヘルスチェック失敗ごとにJSONを1行記録し、さらにOAuth固有のイベント(oauth_authorize_redirect、oauth_authorized、oauth_domain_rejected等)を記録します。トークン素材がログに記録されることは一切ありません。すべてのGoogle API呼び出しはカスタムUser-Agent(ga4-mcp-worker/1.0.0 (+cloudflare-workers))を送信するため、クォータ使用量を判別できます。
読み取り専用の保証
独立した3つのレイヤーがすべて存在します:
OAuthスコープ — 旧共有トークンでもメンバー自身のトークンでも、すべてのトークンは
https://www.googleapis.com/auth/analytics.readonlyのみを要求し、それ以外は要求しません(データアクセスを付与しないOAuth用のID確認としてopenid/emailを追加します —src/google-oauth.ts参照)。Googleはサーバー側で書き込みを拒否します。これが真の保証です。 SETUP-GUIDE.mdにて、tokeninfoで検証する手順を説明します。エンドポイントの許可リスト — 2つのfetchヘルパー内で、ネットワーク呼び出しの前にアンカー付きの正規表現を確認。将来、書き込みエンドポイントを導入する編集をした場合、ネットワークへ接続せず例外を投げます。
変更を伴う動詞の不使用 — コードベース内に
PATCH、PUT、DELETEは一切ありません。fetchの呼び出しは、トークンミント(POST)、gaGet(GET)、gaPost(POST)のちょうど3か所です。
:runReport、:runRealtimeReport、:runFunnelReportはHTTP POSTですが、クエリです。リクエスト定義がクエリ文字列には大きすぎるため、ボディに含めています。GA4では何も生成・変更されません。
クイックコマンド
npm installnpm run typecheck && npm run dry-runnpm run deploynpm run tailcurl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/health両方の認証モードで必要な2つのシークレットを設定します(対話的に貼り付け — パイプ渡しでは値が壊れます):
npx wrangler secret put GOOGLE_CLIENT_IDnpx wrangler secret put GOOGLE_CLIENT_SECRETClaude Codeから接続 — ヘッダー不要。サインインはブラウザで行われます:
claude mcp add --transport http --scope user ga4 https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/mcp次に、対話型のclaudeセッションで/mcpを実行し、ga4を選択して、Googleにサインインします。
さらに詳しく
落とし穴、テストカバレッジ、運用コスト: docs/IMPLEMENTATION-NOTES.md
初回デプロイの手順: SETUP-GUIDE.md → パート2
ハードニング、監視、OAuthランブック: PRODUCTION.md → パート2
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects Google Analytics 4 data to Claude, Cursor and other MCP clients, enabling natural language queries of website traffic, user behavior, and analytics data with access to 200+ GA4 dimensions and metrics.10235MIT
- AlicenseAqualityBmaintenanceConnects MCP clients like Claude Desktop to Google Analytics 4 Data API, enabling natural language queries for reports, top pages, traffic sources, conversions, realtime users, and period comparisons.7MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Google Analytics 4 data using natural language through MCP clients like Claude and Cursor, supporting 200+ dimensions and metrics for traffic, user behavior, and e-commerce analysis.MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to read Google Analytics 4 data, deployed as a Cloudflare Worker with service account authentication.1
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
GA4 conversion analyst inside Claude — funnel drops, traffic anomalies, device gaps, with numbers.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/prashantdasari-tech/ga4-mcp-worker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server