google-health-fitbit-mcp について
google-health-fitbit-mcpは、個人や健康データを扱うエージェント向けのローカルMCPサーバーです。OAuthでFitbit、Pixel WatchなどのGoogle Health APIデータを読み取り、認証情報は端末内に保存します。データツールは既定で読み取り専用です。
主な機能
- 01活動、睡眠、心拍数などの健康データ読み取り
- 02日次・週次サマリーと集計の提供
- 03デバイス、データ型、スコープ、接続状態の確認
- 04OAuth認証情報のローカル保存と機密情報の秘匿
- 05プロンプトとリソースによるデータ提供
活用シーン
- 01日々の活動と睡眠の傾向確認
- 02接続済みデバイスとデータ型の確認
- 03推薦システムへの標準化された活動・睡眠コンテキストの提供
MCP 対応
ローカルMCPサーバーとして健康データ用ツール、リソース、プロンプトを提供し、AIエージェントがOAuth経由でGoogle Health APIのデータを読み取れます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y google-health-fitbit-mcpGOOGLE_HEALTH_CLIENT_IDGoogle Cloud OAuth client ID for Google Health API. Optional when configured with google-health-fitbit-mcp-server setup.GOOGLE_HEALTH_CLIENT_SECRETシークレットGoogle Cloud OAuth client secret. Prefer google-health-fitbit-mcp-server setup so this secret is stored in ~/.google-health-mcp/config.json instead of MCP client config.GOOGLE_HEALTH_REDIRECT_URIRedirect URI configured in the Google Cloud OAuth client. Optional when configured with google-health-fitbit-mcp-server setup.GOOGLE_HEALTH_TOKEN_PATHシークレットOptional local path for OAuth tokens. Defaults to ~/.google-health-mcp/tokens.json.GOOGLE_HEALTH_PRIVACY_MODEOptional payload mode: summary, structured, or raw. Defaults to structured. raw means full Google Health API payloads, not continuous 24/7 raw sensor telemetry.GOOGLE_HEALTH_CACHEOptional SQLite cache toggle. Set to true or sqlite to enable.GOOGLE_HEALTH_CACHE_PATHOptional local SQLite cache path. Defaults to ~/.google-health-mcp/cache.sqlite.GOOGLE_HEALTH_NO_CACHESet to true to bypass the in-memory HTTP response cache (60s TTL for GET only). POST/PUT/DELETE and 4xx/5xx responses are never cached regardless.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
29掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| response_format | enum | いいえ | markdown | json |
詳細
Google Health Fitbit MCP
ローカル OAuth を通じて、ご自身の Google Health API データ(Fitbit、Pixel Watch、接続されたパートナーのデータソース)を照会できます。ベータ版。
すべてご自身のマシン上で動作し、認証情報がデバイスの外に出ることはありません。
ローカルで動作する MCP サーバーです。OAuth を通じて、Fitbit トラッカー、Pixel Watch、サポート対象のパートナーのデータソースから、ご自身の Google Health API データを AI エージェントに渡します。
- 1つのコマンドでインストール —
npx -y google-health-fitbit-mcp setup - 次の環境で実行できます Claude Desktop · Claude Code · Cursor · Windsurf · Hermes · OpenClaw — クライアントの例をご覧ください。
- ご自身のマシン上で動作 — OAuth トークンはローカルに
0600の権限で保存され、どのツールからも返されることはありません(プライバシー)。 - デフォルトは読み取り専用 — 提供されるデータツールはすべて読み取り専用です。書き込み機能は、明示的な有効化が必要で、ドライランを優先する設計となっており、現在は有効になっていません。
ベータ版の状況: Google Health API は開発者向けに提供されていますが、仕様はまだ変更され続けています。Google のリリースノートには公開後もスコープやデータ型の変更が記載されているため、このコネクターはベータ版のままとし、本番環境で使用する前に、安全な読み取り専用の検証を行うようテスターに推奨しています。
独立したコミュニティ開発のコネクターです。Google、Fitbit、Alphabet との提携、推奨、サポートを受けていません。医療機器ではなく、医療上の助言を提供するものでもありません。データは傾向を把握するための参考情報としてのみご利用ください。
⚡ クイック接続
前提条件:Google Cloud OAuth クライアント(種類:デスクトップ)で、Google Health API が有効になっており、リダイレクト
http://127.0.0.1:3000/callbackが登録されていること。詳細はインストールを参照してください。
ステップ 1 — インストールと認証(初回のみ):
npx -y google-health-fitbit-mcp setup # guided: Google Cloud OAuth client + scopes
npx -y google-health-fitbit-mcp auth # browser OAuth — tokens stay on your machine
npx -y google-health-fitbit-mcp checkup # ✓ verifies everything is ready
🔑 初めてですか?Google Client ID と Secret を取得しましょう(約 2 分)
setup では Client ID と Client Secret の入力を求められます。これらは Google Cloud で一度だけ無料で作成します。
- 新しいプロジェクト — console.cloud.google.com/projectcreate を開き、名前(例:
health-mcp)を付けて Create をクリックし、プロジェクトを選択します。 - API を有効化 — Google Health API ページを開き、Enable をクリックします。
- 同意画面 — OAuth 同意画面に移動し、External を選択して、必須のアプリ名とメールアドレスを入力します。Test users で、自分の Google アカウントを追加してください。これを省略すると、サインイン時に
403: access_deniedが発生します。 - クライアントを作成 — Credentials → + Create credentials → OAuth client ID → Application type: Desktop app → Create の順に進みます。
- コピー — Client ID(末尾が
…apps.googleusercontent.com)と Client secret をコピーし、setupで求められたときにそれぞれ貼り付けます。
リダイレクト URI: デスクトップアプリのクライアントでは、ループバックの
http://127.0.0.1:3000/callbackが自動的に許可されるため、どこにも登録する必要はありません。setupで尋ねられたら、Enter を押してデフォルトを受け入れてください。その他のsetupのプロンプト(スコープのプリセット、プライバシーモード)でも、Enter を押すと適切なデフォルトが選択されます。
注意 — 7 日間のルール: 同意画面の公開ステータスが Testing の間、Google は 7 日後にリフレッシュトークンを失効させます。週に一度ほど、次のリクエストで
invalid_grantが発生しますが、これは正常であり、このサーバーの不具合ではありません。再び同意フローが開始されます(接続を維持するを参照)。承認は数秒で完了します。アプリを公開すると有効期限はなくなります。切り替える前に、同意画面でスコープに必要な要件を確認してください。
ステップ 2 — アプリを接続:
Claude Code
claude mcp add google-health -- npx -y google-health-fitbit-mcp
Claude Desktop
Settings → Developer → Edit Config に移動し、claude_desktop_config.json に追加します。
{
"mcpServers": {
"google_health": {
"command": "npx",
"args": ["-y", "google-health-fitbit-mcp"]
}
}
}
Claude Desktop を再起動すると、🔌 コネクターメニューにツールが表示されます。
Cursor
同じ mcpServers ブロックを .cursor/mcp.json(プロジェクトごと)または ~/.cursor/mcp.json(グローバル)に追加するか、Settings → MCP → Add new server を使用します。
{
"mcpServers": {
"google_health": {
"command": "npx",
"args": ["-y", "google-health-fitbit-mcp"]
}
}
}
Windsurf
同じ mcpServers ブロックを ~/.codeium/windsurf/mcp_config.json に追加します。
Hermes
npx -y google-health-fitbit-mcp setup --client hermes # writes the Hermes config for you
その後、/reload-mcp または hermes mcp test google_health で再読み込みします。
ステップ 3 — テストします。 エージェントに次のように尋ねてください。
Run google_health_connection_status and tell me if I'm connected.
これが存在する理由
Google Health API は Fitbit Web API の後継です。新しい OAuth、新しいベース URL(https://health.googleapis.com)、簡素化されたエンドポイントスキーマ、標準化された kebab-case のデータタイプ、複数ソースのストリームの統合、日次および身体活動時間の集計を備えています。
エージェントが API を調べ、セットアップを検証し、ローカルでサインインしてデータを取得できる、シンプルな方法を提供します。トークンをプロンプトやエージェント設定に貼り付ける必要はありません。
エージェントで試す
このコネクターに実際に含まれるツールを使った、最初に試すのに適したプロンプトを 3 つ紹介します。
Check my setup with google_health_connection_status, then call
google_health_data_inventory and tell me which Google Health
domains and scopes I've granted.
Pull today's google_health_daily_summary, then google_health_weekly_summary.
Keep observed data separate from any suggestions, and stay non-medical.
List my paired devices with google_health_list_paired_devices and tell me
which device is producing my sleep and heart-rate data.
ツール
ツールは 29 個あり、以下に記載されている、明示的に制限されたローカルプロフィール/認証アクションの 2 つを除き、すべて読み取り専用です。
まずはこちら
| ツール | 機能 |
|---|---|
google_health_connection_status | ローカル設定、トークン、スコープ、MCP クライアントの準備状況を確認します。Google への呼び出しは行いません |
google_health_quickstart | 現在の状態に合わせて調整される、3 ステップのパーソナライズされたセットアップガイドです |
google_health_data_inventory | 対応ドメイン、スコープ、データ型の命名規則、おすすめのエージェントフローを確認します |
google_health_list_data_types | 単位、スコープ、対応する動詞を含む、39 種類のケバブケースのデータ型スラッグを一覧表示します |
google_health_demo | エージェントが実際に呼び出す前に仕様を確認できる、現実的な合成ペイロードを提供します |
データの読み取り(Google Health API)
| ツール | エンドポイント |
|---|---|
google_health_get_identity | /v4/users/me/identity — Google Health と従来の Fitbit の ID マッピング |
google_health_get_profile | /v4/users/me/profile |
google_health_get_settings | /v4/users/me/settings — 単位、タイムゾーン |
google_health_list_paired_devices | /v4/users/me/pairedDevices — Fitbit トラッカーと Pixel Watch、および各デバイスが生成するデータ |
google_health_get_irn_profile | /v4/users/me/irnProfile — 不規則な心拍リズム(AFib)通知への反応状況 |
google_health_list_data_points | /v4/.../dataPoints — あらゆるデータ型のイントラデイ詳細 |
google_health_get_data_point | /v4/.../dataPoints/{id} — 特定の睡眠セッション、運動、または測定値 |
google_health_reconcile_data_points | /v4/.../dataPoints:reconcile — ソースを横断した単一の整理済みデータストリーム(all-sources、google-wearables、google-sources) |
google_health_daily_rollup | /v4/.../dataPoints:dailyRollUp — 暦日単位の集計 |
google_health_rollup | /v4/.../dataPoints:rollUp — 実時間の期間単位の集計 |
サマリーとウェルネスのコンテキスト
| ツール | 機能 |
|---|---|
google_health_daily_summary | 1 日分の歩数、距離、カロリー、アクティブゾーン時間、睡眠、安静時 HR、HRV、体重をデータ品質フラグとともに表示します |
google_health_weekly_summary | 前の期間との比較(任意)、負荷分類、ボトルネックを含む週間スコアカードです |
google_health_wellness_context | レコメンデーションエンジン向けに、活動と睡眠のコンテキストを正規化します |
認証、診断、メタデータ
google_health_get_auth_url · google_health_exchange_code(ゲート付き:ユーザーの明示的な意図が必要) · google_health_revoke_access(ゲート付きかつ破壊的:Google Health との接続を解除します) · google_health_privacy_audit · google_health_cache_status · google_health_data_type_coverage · google_health_capabilities · google_health_agent_manifest · google_health_onboarding · google_health_profile_get · google_health_profile_update(ローカルファイルのみ。explicit_user_intent=true が必要)
リソースとプロンプト
MCP リソース:google-health://agent-manifest、google-health://capabilities、google-health://inventory、google-health://latest/steps、google-health://profile、google-health://summary/daily、google-health://summary/weekly。
MCP プロンプト:google_health_daily_checkin、google_health_weekly_review、google_health_data_type_investigation。
データ型
公式の Google Health テーブルにある39種類のデータ型です。steps、sleep、heart-rate、heart-rate-variability、daily-resting-heart-rate、active-zone-minutes、distance、total-calories、weight、body-fat、blood-glucose、oxygen-saturation、vo2-max、electrocardiogram、irregular-rhythm-notification、exercise、floors、swim-lengths-data、nutrition-log、hydration-log などがあります。
エージェントが知っておく必要のある命名規則:
- エンドポイントでは、ケバブケースのデータ型を使用します:
steps、daily-resting-heart-rate。 - フィルターでは、スネークケースのフィールドパスを使用します:
sleep.interval.civil_start_time、heart_rate.sample_time.physical_time。 - ソースファミリー:
all-sources、google-wearables、google-sources。
単位、スコープ、および各型が対応する動詞(list/reconcile/rollup)を含む完全なカタログを確認するには、google_health_list_data_types を呼び出してください。
プライバシーとオフラインで実行される処理
- OAuth トークンは
~/.google-health-mcp/tokens.jsonに保存され、アクセス権限は0600に制限されます。 - クライアントシークレットは
~/.google-health-mcp/config.jsonまたはGOOGLE_HEALTH_*環境変数に保存します。 - どのツールもアクセストークン、リフレッシュトークン、クライアントシークレットを返すことはありません。エラー出力も秘匿化されます。
- デフォルトのプライバシーモードは
GOOGLE_HEALTH_PRIVACY_MODE=structuredです。summaryでは識別情報がさらに取り除かれ、rawはデバッグ用の明示的なオプトインです。 - GPS/ルートデータは機密情報として扱われ、明示的にリクエストされない限り秘匿化されます。
supportは、GitHub の Issue にコピー&ペーストできるサポート用バンドルを出力します。常に秘匿化され、トークン、シークレット、ローカルパス、健康測定値は含まれません。support --feedback --jsonは、ベータテスター向けの匿名セットアップフィードバック用バンドルを出力します(ガイド)。coverage --live --jsonは、秘匿化されたデータ型のステータスとデータポイント数の区分のみを出力します。Google Health の生データは出力しません(ガイド)。
インストール
Google Cloud OAuth クライアント(種類:Desktop)をセットアップし、Google Health API を有効にして、ローカルリダイレクトを登録します。
http://127.0.0.1:3000/callback
次に、以下を実行します。
npx -y google-health-fitbit-mcp setup --scope-preset full
npx -y google-health-fitbit-mcp auth
npx -y google-health-fitbit-mcp checkup
スコープのプリセット
プリセットを使うと、用途に必要なものだけをリクエストでき、OAuth の同意内容を把握しやすくなります。
| プリセット | 付与される権限 |
|---|---|
basic | プロフィール+設定 |
activity | basic+アクティビティ/フィットネス+健康指標 |
sleep | basic+睡眠 |
heart | basic+健康指標+ECG+不整脈の通知 |
full | 推奨されるすべての読み取り専用スコープ(デフォルト) |
nutrition-write | 栄養情報の書き込み用オプトインスコープ。書き込み機能を持つ唯一のプリセットですが、書き込みツールはまだ提供されていません |
上級ユーザーは --scopes に、スペースまたはカンマで区切ったスコープのリストを明示的に指定できます。
セットアップで問題が発生した場合
npx -y google-health-fitbit-mcp checkup --fix # repairs local config/token permissions (chmod 600 where supported)
npx -y google-health-fitbit-mcp checkup --live # hits read-only identity/profile/settings endpoints to confirm the API responds
npx -y google-health-fitbit-mcp coverage --live --json # redacted read-only data-type coverage report
npx -y google-health-fitbit-mcp support # shareable support bundle, stripped of tokens/secrets/measurements
npx -y google-health-fitbit-mcp support --feedback --json # anonymous setup feedback bundle
接続を維持する
アクセストークンはバックグラウンドで自動的に更新されます。期限切れになるのは、その更新に使われるリフレッシュトークンです。同意画面の公開ステータスが Testing の間は、Google によって 7 日後に取り消され、次の呼び出しは invalid_grant を返します。再試行しても解決できません。許可はすでに無効になっており、新たに認証し直す必要があります。
そこで、サーバーが代わりに認証を行います。許可が取り消された状態で初めて呼び出すと、Google の同意画面がブラウザーで開きます。承認すると、元のリクエストは自動的に完了します。実行するコマンドも、原因を調べる作業も必要ありません。GOOGLE_HEALTH_REAUTH_WAIT_MS(デフォルトは 45 秒)を超えて時間がかかった場合、呼び出しは代わりに URL を返し、リスナーは起動したままになります。そのため、後から承認しても認証でき、次のリクエストは正常に処理されます。
これは、ブラウザーとサーバーが同じマシン上にあるローカルの stdio トランスポートでのみ動作します。サーバーがリモートにある可能性があり、デフォルトポートがループバックリダイレクトと競合する HTTP トランスポートでは、auth を実行するよう明示するエラーが返されます。再認証を常に自分で行うには GOOGLE_HEALTH_AUTO_REAUTH=0 を設定します。ヘッドレスホストでブラウザーを起動せずに URL を取得するには、GOOGLE_HEALTH_AUTH_NO_BROWSER=1 を設定します。
MCP クライアントの設定
Claude Desktop/Cursor/Windsurf(examples/ を参照):
{
"mcpServers": {
"google_health": {
"command": "npx",
"args": ["-y", "google-health-fitbit-mcp"]
}
}
}
Hermes
npx -y google-health-fitbit-mcp setup --client hermes --no-auth
npx -y google-health-fitbit-mcp auth
npx -y google-health-fitbit-mcp checkup --client hermes
設定を変更したら、/reload-mcp または hermes mcp test google_health を実行します。データを読み取るだけなら、ゲートウェイを再起動する必要はありません。
HTTP トランスポート(任意)
デフォルトのトランスポートは stdio です。必要とするクライアント向けに、ローカルの Streamable-HTTP トランスポートを利用できます。
npx -y google-health-fitbit-mcp --http # serves http://127.0.0.1:3000/mcp (+ /health)
設定
| 環境変数 | 用途 | デフォルト |
|---|---|---|
GOOGLE_HEALTH_CLIENT_ID | Google Cloud OAuth クライアント ID | —(またはローカル設定) |
GOOGLE_HEALTH_CLIENT_SECRET | OAuth クライアントシークレット(MCP クライアント設定よりローカル設定を優先) | —(またはローカル設定) |
GOOGLE_HEALTH_REDIRECT_URI | 登録済みのリダイレクト URI | —(またはローカル設定) |
GOOGLE_HEALTH_TOKEN_PATH | トークンファイルの場所 | ~/.google-health-mcp/tokens.json |
GOOGLE_HEALTH_PRIVACY_MODE | summary | structured | raw | structured |
GOOGLE_HEALTH_CACHE | SQLite レスポンスキャッシュ(任意。true/sqlite) | 無効 |
GOOGLE_HEALTH_CACHE_PATH | SQLite キャッシュの場所 | ~/.google-health-mcp/cache.sqlite |
GOOGLE_HEALTH_NO_CACHE | インメモリ HTTP キャッシュ(TTL 60 秒、GET のみ)をバイパス | 未設定 |
GOOGLE_HEALTH_MCP_TRANSPORT | stdio | http | stdio |
GOOGLE_HEALTH_MCP_HOST / GOOGLE_HEALTH_MCP_PORT | HTTP トランスポートのバインドアドレス | 127.0.0.1 / 3000 |
GOOGLE_HEALTH_AUTO_REAUTH | グラントが取り消されたとき、同意フローを自動的に再開します(無効にするには 0/false) | 有効 |
GOOGLE_HEALTH_REAUTH_WAIT_MS | URL を返すまでに、ツール呼び出しが承認を待つ時間 | 45000 |
GOOGLE_HEALTH_AUTH_NO_BROWSER | ブラウザーを起動せず、URL のみを表示/返します(ヘッドレスホスト向け) | 未設定 |
信頼性を組み込み済みです。Google へのすべての呼び出しは、リトライミドルウェア(指数バックオフ+ジッター、Retry-After を尊重し、408/429/5xx を再試行)と、GET のみを対象とする 60 秒のレスポンスキャッシュを経由します。複数日にわたるサマリーでは、レート制限を超えないようリクエストの同時実行数を制限します。
CLI コマンド
すべてのコマンドは npx -y google-health-fitbit-mcp <command> で実行します(インストール済みバイナリ:google-health-fitbit-mcp-server)。
| コマンド | 機能 | 主なフラグ |
|---|---|---|
| (none) | stdio で MCP サーバーを起動します | --http — 127.0.0.1:3000/mcp でローカル Streamable-HTTP を使用 |
setup | ガイド付きセットアップ:ローカル設定と MCP クライアント設定を書き込みます | --scope-preset <basic|activity|sleep|heart|full|nutrition-write> · --scopes "<url …>" · --client <generic|claude|cursor|windsurf|hermes|openclaw> · --no-auth · --json |
auth | ローカルコールバックを使用したブラウザー OAuth を行い、0600 の権限でトークンを保存します | --no-open — ブラウザーを開かずに認証 URL を表示 |
checkup | ✓/✗ のチェック項目と次の手順を表示してセットアップを診断します(エイリアス:doctor、status) | --json · --client <name> · --fix — ファイルの権限を修復 · --live — API に到達できることを確認 · --live-write — 書き込み経路をドライランし、POST は実行しません |
coverage | list/reconcile/rollup にまたがるデータ型のカバレッジレポート | --json · --live — 実アカウントに対して、情報を秘匿した読み取り専用チェックを実施 |
support | GitHub の課題報告用の、情報を秘匿したサポートバンドル | --json · --feedback — 匿名のセットアップフィードバックバンドル |
onboarding | 共通のウェルネス・オンボーディングフローを JSON で出力します | --pt-BR |
version / help | バージョン/使用方法の全情報を表示します |
ベータテスター募集中
現在、最も価値のある貢献は、実際の Fitbit、Pixel Watch、Android、Google Health API アカウントを使ったセットアップの実地フィードバックです。
実際のアカウントでテストできる場合は、次の手順をお試しください。
npx -y google-health-fitbit-mcp checkupを実行し、OAuth フローが分かりやすいかお知らせください。npx -y google-health-fitbit-mcp support --feedback --jsonを実行し、匿名バンドルを GitHub の課題に投稿してください。- OAuth の完了後、
npx -y google-health-fitbit-mcp coverage --live --jsonを実行し、内容を確認してから、情報を秘匿したカバレッジレポートを投稿してください。 - MCP クライアント内から
google_health_connection_status、google_health_data_inventory、google_health_daily_summaryを試してください。 - データ型の不足、分かりにくいセットアップ手順、クライアント固有の使いにくさ、プライバシー上の懸念があれば、課題を報告してください。
- OAuth トークン、クライアントシークレット、ローカルパス、個人の健康測定値は、公開の課題に決して記載しないでください。
開発
git clone https://github.com/BerkKilicoglu/google-health-fitbit-mcp.git
cd google-health-fitbit-mcp
npm install
npm test
npm test を実行すると、型チェック、ビルド、MCP スモークテスト(stdio + HTTP)、サマリーフィクスチャ、プライバシー/キャッシュ/リトライのテストスイート、CLI の UX チェック、メタデータの検証が実行されます。ガイドラインについてはCONTRIBUTING.md、セキュリティポリシーについてはSECURITY.mdをご覧ください。
リンク
- Google Health API:https://developers.google.com/health
- リリースノート:https://developers.google.com/health/release-notes
- REST リファレンス:https://developers.google.com/health/reference/rest
- スコープ:https://developers.google.com/health/scopes
- データ型:https://developers.google.com/health/data-types
- 移行ガイド(Fitbit → Google Health):https://developers.google.com/health/migration
お問い合わせとサポート
- 🐛 バグ報告/機能リクエスト — GitHub Issues
- 📨 [email protected] — 一般的な質問や連携に関するサポート
ライセンス
MIT — LICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。