Skip to main content
Glama

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内部設計。大規模展開の前に読んでください。

docs/IMPLEMENTATION-NOTES.md

この実装が正しく処理している落とし穴、テスト済み/未テストの内容、ランニングコスト。

src/index.ts

MCPサーバー: ツール、fetchヘルパー、ノーマライザー、ルーター。コメント多数。

src/google-oauth.ts

「Googleでサインイン」ハンドラー — /authorizeと/callback。コメント多数。

wrangler.toml

Workerの設定。nodejs_compatに注意 — 落とし穴を参照。

.dev.vars.example

ローカル開発用のテンプレート。.dev.varsにコピー(gitignore対象)。


Related MCP server: GA4 MCP Server

当社のGA4プロパティ

プロパティID

名前

測定ID

ステータス

314138239

新しいzuddlウェブサイト GA4 プロパティ

G-JWBQ2Z84QF

標準 — 特段の指示がない限りこれを使用してください。

260479909

レガシー

—

レガシー。履歴のみ。現在のレポートには使用しないでください。

328977581

レガシー

—

レガシー。履歴のみ。現在のレポートには使用しないでください。

このサーバーはプロパティ非依存です。すべてのツールがproperty_idを受け取り、314138239、314138239、"properties/314138239"のどちらも受け付けます。省略した場合、wrangler.tomlのDEFAULT_PROPERTY_IDにフォールバックします。標準プロパティに設定されているため、チームメンバーが数字を暗記する必要はありません。get_account_summariesを呼び出すと、その資格情報が実際に閲覧できるすべてを一覧できます。


ツール(9)

ツール

メソッド + エンドポイント

用途

run_report

POST analyticsdata.googleapis.com/v1beta/properties/{id}:runReport

主力ツール。 履歴レポート。フルパラメータセットに対応。

run_realtime_report

POST .../v1beta/properties/{id}:runRealtimeReport

直近約30分。別の小さなスキーマ。

run_funnel_report

POST .../v1alpha/properties/{id}:runFunnelReport

順序付けられたステップ群と離脱。

run_conversions_report

POST .../v1alpha/properties/{id}:runReport

コンバージョン、広告費用、ROAS、アトリビューション・モデリング。フィールドタイトが制限されている。

get_custom_dimensions_and_metrics

GET .../v1beta/properties/{id}/metadata

クエリ可能なapiNameを持つカスタムフィールド。カスタムフィールド使用前に呼び出してください。

get_account_summaries

GET analyticsadmin.googleapis.com/v1beta/accountSummaries

この資格情報が読めるすべて。引数なし。

get_property_details

GET .../v1beta/properties/{id}

タイムゾーン、通貨、サービスレベル。タイムゾーンは日付のずれの原因を説明します。

list_property_annotations

GET .../v1alpha/properties/{id}/reportingDataAnnotations

スパイクや下落を説明する日付付きのメモ。

list_google_ads_links

GET .../v1beta/properties/{id}/googleAdsLinks

リンクされた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を除いた同形です。

ツールの説明は意図的に長くなっています。あらゆるフィルター形式の具体的な例を含んでおり、モデルがリクエスト形式を学習する唯一の場所だからです。ツールの説明への編集は、挙動の変更として扱ってください。


エンドポイント

エンドポイント

認証

目的

POST /mcp

OAuthベアラートークン

MCP接続(Streamable HTTP)。/sseはありません。

GET /authorize、POST /token、POST /register

—

OAuthエンドポイント。@cloudflare/workers-oauth-providerで実装。

GET /callback

—

Googleはサインイン後にここへリダイレクトします。人間が直接開く場所ではありません。

GET /health

なし

ステータス確認。200 {"status":"ok","auth":"oauth", ...}または503 + 詳細。下記の注記参照 — 共有シークレットモードほど意味はありません。データは漏洩しません。アップタイムモニタを設定してください。

GET /

なし

プレーンテキストのステータスバナー。現在の認証モードを表示。

その他は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つのレイヤーがすべて存在します:

  1. OAuthスコープ — 旧共有トークンでもメンバー自身のトークンでも、すべてのトークンはhttps://www.googleapis.com/auth/analytics.readonlyのみを要求し、それ以外は要求しません(データアクセスを付与しないOAuth用のID確認としてopenid/emailを追加します — src/google-oauth.ts参照)。Googleはサーバー側で書き込みを拒否します。これが真の保証です。 SETUP-GUIDE.mdにて、tokeninfoで検証する手順を説明します。

  2. エンドポイントの許可リスト — 2つのfetchヘルパー内で、ネットワーク呼び出しの前にアンカー付きの正規表現を確認。将来、書き込みエンドポイントを導入する編集をした場合、ネットワークへ接続せず例外を投げます。

  3. 変更を伴う動詞の不使用 — コードベース内にPATCH、PUT、DELETEは一切ありません。fetchの呼び出しは、トークンミント(POST)、gaGet(GET)、gaPost(POST)のちょうど3か所です。

:runReport、:runRealtimeReport、:runFunnelReportはHTTP POSTですが、クエリです。リクエスト定義がクエリ文字列には大きすぎるため、ボディに含めています。GA4では何も生成・変更されません。


クイックコマンド

npm install
npm run typecheck && npm run dry-run
npm run deploy
npm run tail
curl -s https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/health

両方の認証モードで必要な2つのシークレットを設定します(対話的に貼り付け — パイプ渡しでは値が壊れます):

npx wrangler secret put GOOGLE_CLIENT_ID
npx wrangler secret put GOOGLE_CLIENT_SECRET

Claude Codeから接続 — ヘッダー不要。サインインはブラウザで行われます:

claude mcp add --transport http --scope user ga4 https://ga4-mcp-worker.YOUR-SUBDOMAIN.workers.dev/mcp

次に、対話型のclaudeセッションで/mcpを実行し、ga4を選択して、Googleにサインインします。

さらに詳しく

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Connects 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.
    10
    1,015 PyPI
    243
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Connects 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.
    7
    48 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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