google-analytics-adsense-remote-mcp
A read-only MCP server exposing Google Analytics 4 and AdSense APIs (reports, metadata, admin reads) via Cloudflare Workers with OAuth authentication.
README
Google Analytics + AdSense Remote MCP
Cloudflare Workers 上で動く、GA4 と AdSense Management API v2 の読み取り専用 Remote MCP サーバーです。HTTP ルーティングは Hono、MCP transport は createMcpHandler()、クライアントの OAuth 認可は Cloudflare Access Managed OAuth を利用します。
1 つの Worker は 1 組の Google OAuth refresh token に固定され、その Google アカウントが読み取れるすべての GA4 プロパティと AdSense アカウントを扱います。ツール呼び出しから OAuth 資格情報・Google API ホスト・書込み操作を差し替えることはできません。
Cloudflare へワンクリックデプロイ
ボタンはこの公開 GitHub リポジトリを利用者自身のアカウントへ複製し、Worker 名と次の設定を入力してビルド・デプロイします。
- 非秘密設定:
CF_ACCESS_TEAM_DOMAIN、CF_ACCESS_AUD - Secret:
GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET、GOOGLE_REFRESH_TOKEN
GOOGLE_REFRESH_TOKEN はボタンを押す前に、後述の手順で read-only scope だけを承認して発行してください。Cloudflare Access Application と Managed OAuth の有効化はデプロイ後に利用者自身で行います。
エンドポイント
| Endpoint | 認証 | 内容 |
|---|---|---|
GET / |
不要 | サービス概要。資格情報は返しません。 |
GET /health |
不要 | ヘルスチェック。 |
ALL /mcp |
Cloudflare Access | Streamable HTTP MCP endpoint。 |
MCP ツール
ga4_run_report、ga4_run_realtime_report、ga4_run_pivot_report、ga4_run_funnel_reportga4_get_metadata、ga4_check_compatibilityga4_admin_read: GA4 Admin API v1alpha のaccountSummaries、accounts、properties配下の GET/list 操作。adsense_generate_reportadsense_read: AdSense Management API v2 のaccounts配下の GET/list 操作。
すべてのツールは read-only として MCP に注釈付けされ、入力は Zod で検証されます。外部 URL、任意 HTTP ヘッダー、POST/PUT/PATCH/DELETE の任意実行は受け付けません。Google の生エラーは MCP 応答には含めませんが、障害調査のためデプロイ先 Cloudflare アカウントの Worker Logs には完全な内容を出力します。
Google OAuth の準備
- Google Cloud Project で Google Analytics Data API、Google Analytics Admin API、AdSense Management API を有効にします。
- OAuth consent screen を設定し、GA4 の
https://www.googleapis.com/auth/analytics.readonlyと AdSense のhttps://www.googleapis.com/auth/adsense.readonlyだけを要求します。 - Credentials で OAuth Client ID を作成し、Application type は Desktop app を選択します。AdSense は service account 非対応で、Installed Application flow が必要です。
- refresh token は再表示できない場合があるため、発行時に安全なパスワードマネージャーへ保管します。リポジトリ、Issue、CI log、
wrangler.jsoncに置いてはいけません。
Google は access token を短時間で失効させます。Worker は各 MCP ツール実行時に refresh token grant を使って access token を再取得するため、Worker が token を永続保存する必要はありません。
Python で refresh token を発行する
Python 3.10 以降だけで動作し、追加パッケージは不要です。scripts/get_google_refresh_token.py は PKCE を使ってローカル callback を待ち受け、資格情報・access token・refresh token をファイルへ保存しません。
Google Cloud Console の redirect URI 設定
この Worker は Google から直接 callback を受けません。Credentials で作成する OAuth client は必ず Desktop app にしてください。Desktop app では Cloud Console の Authorized redirect URIs や Authorized JavaScript origins を設定する必要はありません。
Python スクリプトは実行時に空いているローカル port を選び、例えば次のような loopback redirect URI を Google へ送ります。
http://127.0.0.1:54321/callback/
これは Google が Desktop app 用に許可する loopback callback です。https://<worker-host>/callback、https://<worker-host>/mcp、Cloudflare Access の URL を Google OAuth client の redirect URI として登録してはいけません。また、Web application 型の OAuth client でこのスクリプトを使うことも避けてください。
python scripts/get_google_refresh_token.py
GOOGLE_CLIENT_ID と GOOGLE_CLIENT_SECRET の入力を求められます。ブラウザで、Worker が使う Google アカウントにログインし、次の read-only scope だけを承認してください。
ブラウザ承認を取り消したい場合は、待受中のターミナルで Ctrl+C を押してください。ローカル callback listener を閉じ、token を保存せず終了します。
https://www.googleapis.com/auth/analytics.readonlyhttps://www.googleapis.com/auth/adsense.readonly
成功時に表示される1行だけをコピーし、Deploy Button の GOOGLE_REFRESH_TOKEN Secret 欄、または次の対話コマンドへ入力します。
pnpm wrangler secret put GOOGLE_REFRESH_TOKEN
Client ID / secret も未設定なら同様に設定します。
pnpm wrangler secret put GOOGLE_CLIENT_ID
pnpm wrangler secret put GOOGLE_CLIENT_SECRET
Google OAuth consent screen が External + Testing のままだと refresh token は通常7日で失効します。継続利用する前に Production へ移行し、Google が求める verification を完了してください。invalid_grant が発生した場合は、Google アカウントで本アプリのアクセスを取り消してからこのスクリプトを再実行し、Worker Secret を更新します。
ローカル開発
必要: Node.js 20 以上、Corepack、Cloudflare Zero Trust を使える Cloudflare アカウント。
corepack enable
pnpm install
Copy-Item .dev.vars.example .dev.vars
pnpm check
pnpm dev --local
.dev.vars に実際の Google credentials を設定します。このファイルは Git に追加しません。
Cloudflare へのデプロイ
wrangler.jsoncのname、CF_ACCESS_TEAM_DOMAIN、CF_ACCESS_AUDを自分の Cloudflare Access 設定値に変更します。- Secret を個別に設定します。
pnpm wrangler secret put GOOGLE_CLIENT_ID
pnpm wrangler secret put GOOGLE_CLIENT_SECRET
pnpm wrangler secret put GOOGLE_REFRESH_TOKEN
pnpm run deploy
- Cloudflare Zero Trust Dashboard で Worker の
https://<worker-host>/mcpを対象に MCP server application を作成します。 - 許可するメールアドレスまたは ID group の Access Policy を作成し、対象外のユーザーを拒否します。
- Advanced settings で Managed OAuth を有効にします。Application Audience tag と Team Domain が Worker 設定値と一致していることを確認します。
Cloudflare Access が OAuth discovery、Dynamic Client Registration、Authorization Code Flow、PKCE、Access token の更新を担います。Worker 内に独自の /authorize、/token、/register を追加しないでください。
MCP クライアント接続
MCP endpoint は https://<worker-host>/mcp です。最初の接続時に Cloudflare Access のログイン・認可が開きます。
- Inspector:
npx @modelcontextprotocol/inspector@latestを起動して endpoint を接続し、全ツールを Scan / List Tools します。 - Codex 等: OAuth 対応の Remote MCP 設定へ endpoint を登録します。
- ChatGPT: Developer mode の Custom MCP app / connector に endpoint を登録し、OAuth 認可を完了してから Tool Scan を実行します。ChatGPT の利用可否は契約プラン・Workspace 設定・地域に依存します。
検証
pnpm check
check は ESLint、TypeScript、Vitest、Worker binding 型同期、wrangler deploy --dry-run を順に実行します。実 Google アカウントへの問い合わせは自動テストしません。デプロイ後に Access を通して Inspector と利用する MCP クライアントで、GA4 report と AdSense report を 1 件ずつ実行してください。
Google API の障害調査
Google API の失敗時には、Worker が Cloudflare Workers Logs へ JSON の診断イベントを出力します。Google の HTTP 応答本文、リクエスト URL・本文、例外名・メッセージ・スタックトレースを省略せず出力します。これはデプロイ先の Cloudflare アカウントのログ閲覧者だけが見られるデバッグ用設定です。ログの外部転送、共有、公開を行う場合は、事前にこの詳細ログを無効化してください。MCP 応答には引き続き含めません。
pnpm wrangler tail --format json
例: {"event":"google_request_failed","tool":"ga4_run_report","category":"google_api","upstreamStatus":403,"error":{"request":{"url":"..."},"responseBody":"...","stack":"..."}}。oauth_refresh は refresh token の更新失敗、google_api は GA4 / AdSense API の拒否、unexpected はネットワーク等の予期しない失敗です。
ライセンス
MIT License
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。