MetricBridge Apple Health について
MetricBridge Apple Healthは、エクスポートしたApple Healthデータをエージェントから照会できるローカルMCPサーバーです。個人の記録を分析したい人向けで、読み取り専用で動作し、サーバーへのネットワークリクエストは行いません。
主な機能
- 01194項目のApple Health指標を照会
- 0216個の読み取り専用ツールと22個のプロンプト
- 03傾向と期間の比較
- 04結果に網羅範囲、単位、日付を表示
- 05ネットワークリクエストなしでローカル出力を読み取り
活用シーン
- 01今週と先週のHRVを比較
- 02日付を指定して睡眠やワークアウトを確認
- 03エクスポートの鮮度と指標の網羅範囲を確認
MCP 対応
このMCPサーバーは、ローカルstdio経由でApple Healthの指標、ワークアウト、睡眠セッション、イベント、プロフィール情報、関連する分析ツールをMCPクライアントに提供します。データはローカルのエクスポートから読み取ります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
16掲載時のツール一覧 · 今日に更新
このツールにパラメーターはありません。
詳細
health-export-mcp
あなた自身の Apple Health データを扱う MCP サーバーです。 194 種類の指標、16 個の読み取り専用ツール、22 個のプロンプトを、依存関係なし、アカウント不要、当社のサーバーを介さずにローカルの stdio 経由で利用できます。エージェントは単位、日付範囲、データの網羅状況を含む JSON を受け取り、あなたの数値に基づいて回答します。
ドキュメントとクライアント別の設定:healthexport.dev/mcp · エージェントは SKILL.md からセットアップを実行できます · プライバシーについて:サーバーはローカルファイルを読み取るだけで、ネットワークリクエストを行いません。そのため、健康データが当社やクラウド AI に送信されることはありません。
インストール:コマンド 1 つ
claude mcp add health-export -- npx -y health-export-mcp
Mac ではこれだけでインストールできます。1.7.3 以降、サーバーは MetricBridge アプリの iCloud Drive フォルダーを自動で見つけます。Windows または Linux の場合、あるいは別のフォルダーにあるエクスポートを使う場合は、-- の前に --env "HEALTH_DATA_DIR=/path/to/folder" を追加してください。Node.js 18 以降が必要です。Claude Desktop: 代わりに health-export.mcpb を開いてください(JSON も PATH 上の Node も不要です)。Cursor、VS Code、opencode、OpenClaw、Hermes の場合は、AGENTS.md を参照してください。
次に 「health-export を使って、今週の HRV は先週と比べてどうでしたか?」 と尋ねてください。エージェントは get_trends を呼び出し、出典情報を伴う数値を取得します。数値には、単位、正確な日付範囲、各期間のデータが完全かどうか、エクスポートにどれだけの履歴が含まれているかが示されます。以下は 1.7.3 での実際の出力です(組み込みの --demo データセットからの出力です。公開できるよう合成データを使用しています。実際のエクスポートでも同じフィールドが返され、透かしは付きません)。
[SYNTHETIC DEMO DATA] {"metric":"heart_rate_variability","unit":"ms","window":7,"recent":50.859,"prior":51.306,
"change":-0.447,"changePercent":-0.871,"direction":"flat","recentRange":{"from":"2026-08-12","to":"2026-08-18"},
"recentDays":7,"priorDays":7,"windowSatisfied":true,"coverage":{"firstDate":"2025-07-15","lastDate":"2026-08-18","days":400}}
まだ iPhone をお持ちでない場合は? claude mcp add health-export-demo -- npx -y health-export-mcp --demo を実行すると、透かし入りの合成データセットを使って、スマートフォンに何もインストールする前に、30 秒ですべてのツールを試せます。
実際のデータを使う(初回は約 5 分、iPhone が必要)
- エクスポートします。 iPhone に MetricBridge をインストールし、ヘルスケアの読み取りアクセスを許可して、今すぐエクスポートをタップします。iCloud Drive(またはフォルダー、LAN)に
.health-cache.jsonが書き込まれます。アプリは 7 日間の無料トライアル後、買い切りで 1 回購入($24.99)となり、サブスクリプションはありません。このサーバーは MIT ライセンスで、無料です。 - 接続します。 上記のコマンド(Claude Code)、
.mcpb(Claude Desktop)、または AGENTS.md にあるクライアント用の設定ブロックを使います。 - ファイルが届いたことを確認します。
npx -y health-export-mcp --doctorを実行すると、選択されたフォルダーとその理由、各ファイルの経過時間、データの新しさが表示されます。新しいエクスポートが Mac に届くまで、iCloud では数分かかることがあります。
health-export-mcp とは?
Apple Health のエクスポートデータを、AI エージェントが自然言語で問い合わせられるツールに変換する MCP サーバーです。HRV、睡眠、安静時心拍数、歩数、ワークアウト、VO₂ max など、180 種類以上のデータに対応しています。
- 対象となる方: 古い CSV ではなく、実際の健康データを AI に分析させたい方。
- 対象外のもの: クラウドサービスではありません。開発者のサーバーを経由せず、データの送信先はご自身で指定した場所だけです。
- セットアップ: エクスポートしたデータの場所をサーバーに指定し、AI クライアントに追加します。
- データの取得元: MetricBridge iOS アプリ(旧 Health Export AI。 App Store から入手できます)が、このサーバーが読み込むエクスポートデータを書き出します。サーバーの
serverInfoに表示される名前は引き続きhealth-export-aiで、npm パッケージ名とリポジトリ名も変更されていません。
エクスポートしたばかりで、Mac にまだ反映されていませんか? iCloud でファイルが同期されるまで数分かかることがあるため、アプリで「実行」をタップしてから 60 秒後に確認しても、タイムスタンプが古いままの場合があります。
get_mcp_statusでlastDataDateと日中のlastWriteを確認すると、「同期中」なのか「まだ届いていない」のかをすばやく見分けられます。
iPhone がなくてもお試しいただけます:
npx -y health-export-mcp --demo(またはクローン内でnode server.mjs --demo)を実行すると、決定論的な合成データセット(400 日分のデータ、ワークアウト、イベント、睡眠セッション)が提供され、すべての回答に合成データであることが明記されます。またはnpm testを実行すると、サンプルキャッシュを書き込み、すべてのツールをテストできます。
Apple Health を AI エージェントに接続する:クイックスタート
1. Apple Health のデータを同期する
コンパニオン iOS アプリの MetricBridge は、Apple Health のデータを読み取り専用で、自動かつプライベートにエクスポートします。この MCP サーバーで使用するには、読み込み可能な保存先にエクスポートしてください。
| 保存先 | 備考 |
|---|---|
| iCloud Drive(デフォルト) | Mac が同期済みのフォルダーを自動的に読み込みます |
| ローカルフォルダー | Mac と同期する任意のフォルダー(Dropbox、Google Drive、OneDrive、…) |
| LAN(HTTP / WebSocket) | サーバーに直接送信します。Tailscale 経由での使用に最適です |
MCP 以外のツール(ChatGPT、n8n、Home Assistant)をお使いですか? アプリから、これらのツールが直接読み込む Webhook に POST することもできます。詳しくは対応サービスをご覧ください。
2. サーバーをエージェントに追加する
最速の方法、コマンド1つ(Claude Code):
claude mcp add health-export -- npx -y health-export-mcp
# Windows, Linux, or an export outside iCloud Drive:
claude mcp add health-export --env "HEALTH_DATA_DIR=/path/to/folder" -- npx -y health-export-mcp
-- より前はすべて claude mcp add のオプションで、後ろはサーバーを起動するコマンドです。Mac では、HEALTH_DATA_DIR が未設定の場合、サーバーはアプリの iCloud Drive フォルダーを読み取ります(1.7.3 以降)。手動でそのフォルダーを指定する場合は、フォルダー名にスペースが含まれるためダブルクォートで囲み、シェルではクォートされた ~ が展開されないため $HOME を使用してください。--scope user を追加すると、すべてのプロジェクトでサーバーを利用できるようになります(デフォルトのスコープは現在のプロジェクトのみです)。claude mcp list で確認してください。
Claude Desktop(~/Library/Application Support/Claude/claude_desktop_config.json)および mcpServers ブロックを受け付けるすべてのクライアント:
{
"mcpServers": {
"health-export": {
"command": "npx",
"args": ["-y", "health-export-mcp"]
}
}
}
Mac 以外で使用する場合、または別のフォルダーを指定する場合は、エントリーに
"env": { "HEALTH_DATA_DIR": "/path/to/folder" }を追加してください(先頭の~はサーバーによって展開されます)。npx -yはインストールを求めずに実行時に公開パッケージを取得するため(npm がパッケージの完全性を検証します)、クローンや絶対パスなしでどこでも実行できます。サーバーはHEALTH_DATA_DIRの先頭にある~を展開するため、JSON ではそのまま指定できます。検証済みのローカルチェックアウトを固定して使う場合は、"command": "node", "args": ["REPLACE_WITH_ABSOLUTE_PATH/server.mjs"]を使用し、リポジトリ内でnode -e "console.log(process.cwd()+'/server.mjs')"を実行してパスを取得してください。 または、JSON の設定を省略し、health-export.mcpbを Claude Desktop → Settings → Extensions にドラッグします。
クローンから自動設定する場合:
git clone https://github.com/PhilipAD/health-export-mcp.git
cd health-export-mcp
node apply-mcp-config.mjs # detects installed clients and writes the config for you
Cursor / VS Code: node gen-deeplinks.mjs を実行すると、ワンクリックでインストールできるリンクが表示されます。
opencode / OpenClaw / Hermes: 正確なブロックは AGENTS.md を参照してください。形式は同じで、クライアントごとに1つです。
3. エージェントに質問する
クライアントを再起動して、次のように試してください。
「health-export を使って、今週と先週の平均 HRV を比較してください」
Claude、Cursor、ChatGPT、OpenClaw、Hermes で利用できます
| クライアント / エージェント | 統合方法 | 方法 |
|---|---|---|
| Claude Code | ネイティブ MCP | claude mcp add ... -- npx -y health-export-mcp |
| Claude Desktop | ネイティブ MCP | .mcpb バンドル、または mcpServers ブロック |
| Cursor | ネイティブ MCP | ワンクリックのディープリンク、または ~/.cursor/mcp.json |
| opencode | ネイティブ MCP | opencode.json の mcp ブロック |
| OpenClaw | ネイティブ MCP | MCP 設定にサーバーブロックを追加 |
| Hermes | ネイティブ MCP | エージェントの MCP 設定にサーバーブロックを追加 |
| VS Code(Copilot / Continue) | ネイティブ MCP | ワンクリックのディープリンク |
| ChatGPT · Gemini · Grok | Webhook* | アプリの webhook エクスポートを利用 |
| n8n · Home Assistant | Webhook* | エクスポートされた JSON で自動化をトリガー |
*MCP クライアントは、このサーバーに stdio 経由で直接クエリを送信します。ChatGPT / Gemini / Grok / n8n / Home Assistant は MCP に対応していないため、iOS アプリのトークン認証付き webhook エクスポートを通じて、同じ Apple Health データを利用します。
16 個の MCP ツール
リクエスト/レスポンスの例を含む完全なリファレンスは、healthexport.dev/mcp をご覧ください。
| ツール | 機能 |
|---|---|
get_mcp_status | ヘルスチェック:データソース、指標/ワークアウトの件数、存在するコンテキストファイル、最新データの日付、および freshness の概要を確認します。最初に呼び出してください。 |
get_freshness | エクスポートがどの程度最新かを確認します。指定されたしきい値(デフォルトは 26 h、HEALTH_STALE_AFTER_HOURS、または maxAgeHours)に照らした stale、age_hours、as_of、last_data_date、ファイルごとの書き込み時刻を返します。status --max-age の cron ゲートと同じルールを使用します。 |
list_metrics | 利用可能なすべての指標と、単位、日数、日付範囲を返します。 |
get_health_metrics | 指標(またはすべての指標)の指定日付範囲における日次値と、集計値(avg/sum/min/max/latest)を返します。filterDays(negate を指定して、記録済みイベントがある日に絞り込み)に対応しています。 |
get_trends | 直近 N 日間と、その前の N 日間を比較し、変化量、変化率、傾向を返します。excludeTravelDays に対応しています。 |
compare_periods | 指標を任意の 2 つの期間(A 対 B)で比較するか、記録済みイベントを基準に anchor: {eventId, days} で比較します(イベント当日は両期間から除外されます)。 |
get_structured_export | 指定した指標/期間の整形済み JSON を、カーソルによるページネーション付きで返します。 |
get_intraday | アプリの時間単位の自動化機能(health-intraday.json、アプリ 1.4 以降)による、今日の時間ごとのデータを返します。実行のたびに置き換えられます。 |
query_health_data | 「先月の平均 HRV」 のような自然言語での問い合わせを、構造化された結果に振り分ける便利な機能です。 |
list_events | 記録済みのコンテキストイベント(服薬、習慣、受診、生活、勤務シフト、エピソード、旅行)を、タイプ/タグ/日付で絞り込んで返します。 |
get_profile | オプトインされたコンテキスト項目(疾患、服薬、目標、アレルギー、メモ)と presentFields を返します。存在しない項目は非公開扱いであり、「なし」を意味するものではありません。 |
get_workouts | アクティビティ/日付でワークアウトを検索し、ページネーション付きで返します。エクスポートに含まれている場合は、心拍数、ランニングダイナミクス、サイクリングパワー、インターバル、hasRoute も含まれます。 |
get_sleep_sessions | 起床日に割り当てられた睡眠セッションをまとめて返します。分割された夜間の睡眠は、そのまま返されます。 |
get_cycle_context | 記録された月経開始日から導出した、周期日と大まかなフェーズを返します。予測は行いません。 |
correlate_metrics | 2 つの指標間のピアソン相関を、0〜3 日のラグで算出します。常に、相関は因果関係を示すものではないと明記します。 |
resolve_metric | あらゆる表記(steps、StepCount、Body Weight、hrv)の標準名と単位、正確な計算式を含む単位のバリエーション、任意の {value, unit} 変換、およびエクスポートにそのデータが含まれているかどうかを返します。曖昧な語は推測せず、候補を返します。データツールも同じ別名を受け付け、resolvedFrom を返します。エクスポートにデータソースごとの帰属情報が含まれる場合(日次ポイントに src/by を書き込むアプリビルドと、キャッシュスキーマのマイナー 2 で health-sources.json を使用)、回答には sources ブロックが追加されます。このブロックには、エクスポートにデータを提供したデバイス、各指標で採用されたデータソース、優先順位のルールが記載され、sourceMerge は不一致を可視化します。それより古いエクスポートでは、利用できないことが示されます。 |
カバレッジ: アクティビティ、心臓、HRV、モビリティ、呼吸、身体、睡眠、聴覚、栄養に関する 194 種類の Apple Health 指標に加え、ワークアウトにも対応しています。データの回答には正確な coverage ブロックが含まれ、単一指標の回答では、期間内の記録済みイベントが segmentBoundaries として示されます。これにより、服薬開始や生活の変化をまたぐ平均値が、同一の状態における値であるかのように見えることを防ぎます。
データファイル
日次キャッシュ(.health-cache.json)とワークアウトキャッシュには、任意のコンテキストファイルを追加できます。いずれも読み取り専用で、すべて任意です。health-events.json(ログ記録用)、health-profile.json(オプトインのコンテキスト)、health-sessions.json(睡眠セッション)、health-cycles.json(観測された周期の開始日)、health-days.json(タイムゾーン変更ログ)があります。ファイルが存在しない場合は、決して「データなし」とせず、注記とともに available:false として報告します。形式については、docs/SCHEMA-CONTRACTS.md をご覧ください。
知っておくと便利なパターンが 2 つあります。自分の AI から親の Apple Health に問い合わせる(同意を優先し、親のスマートフォンを正本とします)方法と、Shortcuts 経由で Apple Health にデータを記録する方法です(サーバーとアプリは厳密に読み取り専用のままです)。
MCP プロンプト
サーバーには、prompts/list / prompts/get 経由で利用できる 22 個のプロンプトが含まれています。日次ブリーフ、週次レビュー、医師の診察準備、前回の診察からの変化、睡眠の質と規則性、HRV の傾向、トレーニングとレース週のレビュー、ゾーン滞在時間、N-of-1 実験、服薬前後の比較、GLP-1 の用量ステップ比較、断酒の節目、シフト期間の比較、旅行を考慮した誠実な月次レビュー、周期を考慮した傾向の読み取り、介護者向けチェックイン、血糖値の日次サマリー、長期的な活動の記録、データカバレッジ監査、プロフィールを考慮したコンテキストの初期設定です。どのプロンプトもデータカバレッジの正確な説明を最初に行い、データを診断に結び付けることはありません。
デモモード
node server.mjs --demo(または HEALTH_DEMO=1)を実行すると、決定論的な合成データセットが提供されます。固定日を基準とし、シード付き PRNG を使って、約 400 日分の約 15 種類の指標、インターバルを含む 30 件のワークアウト、8 件のイベント、プロフィール、60 件の睡眠セッション、周期の開始日、タイムゾーンの変更を生成します。すべての回答には demo: true と [SYNTHETIC DEMO DATA] のテキスト接頭辞が付くため、デモ出力が実際のエクスポートと誤認されることはありません。
CLI
node server.mjs --doctor # diagnostics: files, sizes, schema, freshness, pairing
node server.mjs status --max-age 24 # exit 0 if data is fresh, 1 if stale (cron gate)
node server.mjs receive # standalone LAN receiver (binds 127.0.0.1 by default)
node server.mjs --help
AI への質問例
"What has my resting heart rate done over the last 30 days?"
"Compare my deep sleep this week vs last week."
"Is my VO₂ max trending up or down this quarter?"
"Give me a clean JSON export of HRV, RHR and sleep for the last 14 days."
"Correlate my step count with my sleep duration this month."
ユースケース
- AI ヘルスコーチ: 実際の HRV、安静時心拍数、睡眠データをエージェントに分析させ、一般論ではなく実際の数値に基づいて、負荷をかけるときと回復するときを提案できます。
- トレーニング負荷の分析: ワークアウト、VO₂ max、心拍数の傾向を取得し、エージェントにオーバーリーチの兆候を検出させたり、フィットネスの向上をグラフ化させたり、トレーニング期間のペース配分を提案させたりできます。
- 睡眠の相関関係: 深い睡眠の時間と、歩数、カフェイン、遅い時間のワークアウト、画面を見る時間などをエージェントに関連付けさせ、よりよく眠れた夜に何が伴っていたかを確認できます(因果関係ではなく、関連性を示します)。
- 定量化された自己のダッシュボード: あらゆる指標と日付範囲のクリーンな JSON をノートブック、スプレッドシート、または LLM で構築したダッシュボードに直接取り込み、自分のセルフトラッキングに活用できます。
- 個人研究と実験: N-of-1 実験(サプリメント、ルーティン、プロトコルの変更など)を行い、エージェントに 194 種類の指標で実施前後の期間を比較させ、何が変化したかを確認できます。
ウェルネス製品やコーチング製品を開発していますか?
このサーバーは、MetricBridge iOS アプリがユーザー自身のデバイス上に書き込むファイルを読み取ります。経路上に一元管理されたヘルスデータ処理業者は存在しません。同じアプリから署名付き JSON(Standard Webhooks v1、公開済みの JSON Schemas)をお客様のエンドポイントに直接 POST できるため、アプリに SDK を組み込んだり、ベンダーのサーバーにデータを保持させたりすることなく、ユーザー自身の Apple Health データを製品に取り込めます。提供内容、定額料金、利用範囲については、healthexport.dev/platforms をご覧ください。統合ガイドと依存関係ゼロの適合性キットについては、healthexport.dev/docs/platforms をご覧ください。ウェルネス用途に限定され、エンドユーザーの指示に基づいて使用します。臨床用途や HIPAA 対応には対応していません。
データを連携するアプリ
MetricBridge は、Apple Health のデータをエージェントに自動でエクスポートします。
プライバシーとセキュリティ
エクスポートからサーバーが読み取る、健康データ以外の唯一の情報は _meta.license です。これはアプリが次の 2 種類の形式で書き込むマーカーです:{"state": "trial", "daysRemaining": N} または {"state": "unlocked"}。トライアル中の新しいエクスポートでは、トライアルの終了時期を示す一文が get_freshness に追加されます。ロック解除済みのエクスポートには何も追加されません。ネットワークリクエストは発生せず、情報がどこかに送信されることもありません。
- 読み取り専用。 サーバーはエクスポートされたデータを読み取るだけで、HealthKit にアクセスしたり、データを書き戻したりすることはありません。
- ローカル優先。 stdio を介してご利用のマシン上で動作します。経路上に開発者のサーバーはありません。
- ペアリングは任意です。 アクセスを制限するには、
PAIRING_SECRETに iOS アプリの画面(設定 → エージェントのペアリング)に表示されるコードを設定します。 - 暗号化エクスポート(任意)。 iOS アプリで「エクスポートの暗号化」を有効にした場合、同じパスフレーズを
HEALTH_EXPORT_PASSPHRASE(またはHEALTH_EXPORT_PASSPHRASE_FILE)に設定すると、サーバーがご利用のマシン上でデータを復号します。暗号化エクスポートをご覧ください。 - テレメトリなし。 サーバーはネットワークリクエストを行いません。
get_mcp_statusには、連携アプリのウェブサイト(および App Store ページ)への固定リンクが常に 1 つ含まれているため、この連携機能の提供元をインストール元までたどれます。どちらのリンクにも、すべてのユーザーで同一の固定キャンペーンラベル(utm_source=mcp、utm_medium=agent-tool、utm_campaign=mcp-unlock、ct=mcpserver、ppid=…)が付いており、ユーザーやデータに関する情報は含まれません。リンクを開いた場合にのみカウントされます。 - 監査可能。 実行時の依存関係はなく、プレーンな ES モジュール約 4,000 行で構成され、ビルド手順もありません。npm 上のものはこのリポジトリ内のものと同一で、npm の来歴情報から各 tarball をビルドしたコミットとワークフローをたどれます。
- 署名済みリリース。 ホストされているアーティファクトには minisign 署名とチェックサムが付いています。リリースの検証をご覧ください。
暗号化エクスポート
iOS アプリでは、選択したパスフレーズを使ってエクスポート内容を暗号化できます(設定 > エクスポートの暗号化で有効にし、保存先ごとに設定します:iCloud Drive、フォルダー、サーバー、ローカルネットワーク)。サーバーにも同じパスフレーズを設定すると、このマシン上で各ファイルがメモリ内で透過的に復号されます。
HEALTH_EXPORT_PASSPHRASE='your passphrase' HEALTH_DATA_DIR=... node server.mjs
# or keep it out of your shell history and process list:
HEALTH_EXPORT_PASSPHRASE_FILE=~/.config/metricbridge/passphrase HEALTH_DATA_DIR=... node server.mjs
両方が設定されている場合は、HEALTH_EXPORT_PASSPHRASE が優先されます。ファイル末尾の改行は 1 つ無視され、空の値は未設定として扱われます。.mcpb バンドルには、省略可能な エクスポートのパスフレーズ フィールドがあります。どちらの場合も、平文のエクスポートは引き続き利用できます。パスフレーズが未設定または間違っている場合や、ファイルの完全性チェックに失敗した場合は、その旨が報告されます(get_mcp_status は encrypted: true と理由を示し、--doctor は encryption: 行を出力します)。「データなし」とは報告されません。パスフレーズがログに記録されたり、表示されたりすることはありません。
LAN レシーバー(HEALTH_LISTEN=1)は、同じ変数を使って暗号化されたプッシュを復号し、機械可読な reason(passphrase_missing、passphrase_mismatch、tampered、malformed、unsupported_version、passphrase_file_unreadable、encryption_required)とともに 422 を返します。この接続ではペアリングトークンが平文の http ヘッダーで送信されるため、アプリがこの接続を暗号化するようになったら、HEALTH_REQUIRE_ENCRYPTED=1 を設定して平文のプッシュを拒否してください。Webhook やスクリプトなどで、メッセージ本文を自分で復号するには、次のようにします。
HEALTH_EXPORT_PASSPHRASE='...' node envelope.mjs open body.json # prints the decrypted JSON
形式(metricbridge.enc v1、envelope.mjs、node:crypto のみを使用):JSON オブジェクト
{format, v, alg: "A256GCM", kdf: "PBKDF2-HMAC-SHA256", iter, salt, kcv, nonce, ct}。
master = PBKDF2-HMAC-SHA256(NFC(passphrase), salt[16], iter)(OWASP の推奨値である 600,000 回の反復)から、HKDF-SHA256 を使って AES-256-GCM キーと 8 バイトの鍵チェック値を導出します。メッセージごとにランダムな 12 バイトのノンスを使用します。すべてのヘッダーフィールドは、次の文字列を AAD としてバインドされます。
metricbridge.enc|v=1|alg=A256GCM|kdf=PBKDF2-HMAC-SHA256|iter=<n>|salt=<b64>|kcv=<b64>|nonce=<b64>。
Base64 はパディング付きの正規形式です。test/fixtures/ には、iOS アプリの Swift エンコーダーとこのモジュールで作成したエンベロープが格納されています。envelope.test.mjs では、どちらも復号でき、バイト単位で再生成できることを検証します。
保護されるもの: 保存先(iCloud Drive、同期フォルダー、Webhook ホストのストレージ)に保存されたエクスポート、通信中の LAN プッシュ、封印されたすべてのファイルの完全性です。保護されないもの: ロック解除されたスマートフォン、このコンピューター(パスフレーズを保持しています)、メタデータ(サイズ、タイミング)、封印されたファイル全体のロールバックやリプレイ、アプリから手動で共有するファイル、弱いパスフレーズ(ファイルを持つ人は誰でもオフラインで推測できます。アプリでは 8 文字以上が必要です)。
リリースの検証
セットアップスキルで使用される、healthexport.dev/mcp/ でホストされているサーバーアーティファクトには minisign 署名 が付いており、すべてのダウンロードには SHA-256 チェックサム が付いています。署名用公開鍵は このリポジトリ内(minisign.pub)と SKILL.md で公開されています。鍵はウェブサイトだけでなく、ここからピン留めしてください。これにより、ウェブサイトだけが侵害されても、アーティファクトと鍵の両方がすり替えられることを防げます。
PUBKEY='RWS6TxVWSKUblYkx7Db6ZpmvHALwHpznZpjaED/FlZj+PpxSlel0MxHZ' # = minisign.pub in this repo
curl -fsSL https://healthexport.dev/mcp/SHA256SUMS -o SHA256SUMS
curl -fsSL https://healthexport.dev/mcp/SHA256SUMS.minisig -o SHA256SUMS.minisig
minisign -Vm SHA256SUMS -P "$PUBKEY" || { echo "signature INVALID, do not run"; exit 1; } # fail closed
curl -fsSL https://healthexport.dev/mcp/server.mjs -o server.mjs
shasum -a 256 --ignore-missing -c SHA256SUMS || { echo "checksum mismatch, do not run"; exit 1; }
上記のピン留め済みでチェックサム検証済みのダウンロードが、最も厳格な方法です。一方、npx -y health-export-mcp は実行時に npm で公開されている最新バージョンを解決します(npm には独自のパッケージ完全性検証機能があります)。GitHub リリースには SHA256SUMS ファイルと CycloneDX SBOM(*.cdx.json)が含まれます。同じ鍵で作成された SHA256SUMS.minisig は、メンテナーがそのリリースにローカルで署名した時点で添付されるため、信頼する前にファイルの有無を確認してください。npm のプロベナンスと脆弱性を非公開で報告する方法を含む、ポリシーの全文は SECURITY.md をご覧ください。セキュリティの概要:https://healthexport.dev/security。
要件
- Node.js ≥ 18(
node -v)。 - MetricBridge からエクスポートした
.health-cache.jsonを含むフォルダー。または、npm testを実行してサンプルを生成してください。 - MCP 互換クライアント(Claude Desktop、Cursor、opencode、OpenClaw、Hermes、VS Code)、または Webhook エクスポートを読み取れるツール。
よくある質問
Apple Health のデータを Claude/ChatGPT/AI エージェントに取り込むにはどうすればよいですか?
health-export-mcpをインストールし、MetricBridge iOS アプリで Apple Health のデータをエクスポート(iCloud、フォルダー、または LAN)してから、MCP サーバーを AI クライアントに追加します。エージェントは、自然言語で Apple Health の指標を問い合わせられるようになります。(ChatGPT などの MCP 以外のツールは、代わりにアプリの Webhook エクスポートを読み取ります。)
健康データはサーバーに送信されますか? 当社には送信されません。MCP サーバーはローカルで動作し、設定したエクスポートファイルまたはエンドポイントのみを読み取ります。開発者のサーバーが間に入ることはありません。iOS のエクスポート先(iCloud、LAN、Webhook)は、すべてご自身で選択できます。
どのエージェントに対応していますか? 任意の MCP クライアント、Claude Desktop、Cursor、opencode、OpenClaw、Hermes、VS Code にネイティブ対応しています。ChatGPT、Gemini、Grok、n8n、Home Assistant は、Webhook 経由で同じデータを利用します。
iOS アプリは必要ですか?
ご自身のデータを使う場合は必要です。サーバーは MetricBridge アプリが書き出したファイルを読み取り、HealthKit には直接アクセスしません。まず試す場合は、アプリも iPhone も不要な、透かし入りの合成データセットを提供する--demoを使用できます。
トラブルシューティング
- 「指標が見つかりません」:
npx -y health-export-mcp --doctorを実行してください。サーバーが選択したフォルダーとその理由(HEALTH_DATA_DIR、Mac での iCloud のデフォルト、または現在のディレクトリ)、および.health-cache.jsonがそこにあるかどうかが表示されます。アプリで少なくとも一度エクスポートしたことを確認してください。get_mcp_statusで同じデータソースと最新の日付を確認できます。 - クライアントにサーバーが表示されない: ターミナルで
npx -y health-export-mcp --doctorを実行してください。そこで動作する場合、クライアントがnpxを見つけられていません(nvm または Homebrew で Node をインストールした Claude Desktop でよく発生します)。.mcpbを使用するか、"command"にwhich npxで確認したフルパスを設定してください。その後、クライアントを完全に終了して再起動します。 - 1 週間後にエクスポートが停止した: アプリの無料トライアルが終了しています。
get_freshnessでエクスポートが古いことが報告され、ロック解除ページへのリンクが表示されます。アプリのロックを解除すると、この側で変更を加えることなくエクスポートが再開します。 - データがロックされているというエラー: エクスポートファイルは、再起動後に初めてロック解除するまで保護されています。デバイスのロックを一度解除してください。
ローカルで実行する
# Node ≥18, no install needed
HEALTH_DATA_DIR=~/Library/Mobile\ Documents/iCloud~ai~healthexport~app/Documents node server.mjs
# integration test, writes a 14-day sample cache and exercises every tool
npm test
stdio トランスポート(改行区切りの JSON-RPC 2.0)を使用します。これは汎用的な MCP トランスポートです。任意でHEALTH_LISTEN=1を設定すると、同じプロセスで iOS アプリからの LAN プッシュも受け付けます(receiver.mjsを参照)。
動作の仕組み
iOS アプリは Apple Health を読み取り専用で読み込み、選択した保存先にコンパクトな.health-cache.json(および任意のコンテキストファイル)を書き出します。このサーバーはそれらのファイルを読み取り、上記の 16 個のツールを MCP 経由で公開します。ブリッジも、Docker も、データベースも不要です。ファイルと stdio だけで動作します。
Apple Health → MetricBridge (iOS) → .health-cache.json → health-export-mcp → MCP client → you
関連プロジェクト
エコシステム内のほかの Apple Health MCP サーバーです。ご利用の環境に応じてご覧ください。
- neiltron/apple-health-mcp: Apple Health のエクスポートに対して SQL 形式のクエリを実行する MCP サーバーです。
- the-momentum/apple-health-mcp-server: ヘルスケアアプリからエクスポートした Apple Health データを分析する MCP サーバーです。
- HealthyApps/health-auto-export-mcp-server: Health Auto Export アプリのデータを扱う MCP サーバーです。
health-export-mcpとの違い: iPhone アプリがバックグラウンドでエクスポートを最新の状態に保つため、手動でのexport.xmlの作成も再インポートも不要です。サーバーには依存関係がなく、Docker、データベース、Mac アプリも必要ありません。すべての回答に単位、日付範囲、データの網羅範囲が含まれます。また、最初から最後まで読み取り専用です。
関連情報
- コンパニオン iOS アプリ: MetricBridge。Apple Health の 194 個の指標を自動的にエージェントへエクスポートします。
- Model Context Protocol: modelcontextprotocol.io
- エージェントごとのセットアップ: AGENTS.md
セットアップに役立った場合は、⭐を付けていただくと、ほかの人にも見つけてもらいやすくなります。
License
MIT, see LICENSE. Contributions welcome.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。