Apple Health について
Apple Health MCP は、Simple Health Export CSV の書き出しデータを DuckDB と SQL で照会するローカル動作の MCP サーバーです。睡眠、ワークアウト、心臓のデータを分析し、書き出しファイルを手元に置いておきたい利用者に向いています。
主な機能
- 01Simple Health Export CSV ファイルの読み込み
- 02DuckDB による SELECT 系の分析クエリ
- 03サンプル行付きのスキーマ探索
- 04週次・月次・任意期間のサマリー生成
- 05ファイルアクセスの制限とネットワークの無効化
活用シーン
- 01睡眠、ワークアウト、心拍数の履歴データの照会
- 02週次または月次の健康サマリーの作成
- 03健康記録に対する SQL による独自分析
MCP 対応
stdio トランスポートで動作する MCP サーバーで、health_schema、health_query、health_report の各ツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @neiltron/apple-health-mcpHEALTH_DATA_DIRPath to the Apple Health CSV export directoryMAX_MEMORY_MBMaximum memory usage in megabytesCACHE_SIZEMaximum number of cached query resultsローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Apple Health MCP サーバー
SQL と DuckDB を使って、MCP クライアントから Apple Health のデータを照会します。サーバーはローカルで実行され、必要に応じて CSV エクスポートを読み込み、スキーマの確認、分析クエリ、ヘルスサマリー用のツールを提供します。
要件
- Node.js 22 以降
- Simple Health Export CSV で作成した Apple Health の CSV エクスポート
ネイティブの Apple Health export.xml 形式には、現在対応していません。
MCP クライアントの設定
Claude Desktop の場合、次の内容を
~/Library/Application Support/Claude/claude_desktop_config.json に追加します。
{
"mcpServers": {
"apple-health": {
"command": "npx",
"args": ["-y", "@neiltron/apple-health-mcp"],
"env": {
"HEALTH_DATA_DIR": "/path/to/your/unzipped/health-export"
}
}
}
}
設定を変更した後は、クライアントを再起動してください。他の MCP クライアントでも、同じコマンド、引数、環境、stdio トランスポートを使用できます。
環境変数
| 変数 | 必須 | デフォルト | 用途 |
|---|---|---|---|
HEALTH_DATA_DIR | はい | — | エクスポートした CSV ファイルを含むディレクトリ |
MAX_MEMORY_MB | いいえ | 2048 | DuckDB のメモリ上限(メガバイト) |
CACHE_SIZE | いいえ | 100 | キャッシュするクエリ結果の最大数 |
ヘルスデータをエクスポートする
- iPhone に Simple Health Export CSV をインストールして開きます。
- All を選択し、エクスポートする期間を指定します。
- アーカイブを MCP クライアントを実行するコンピューターに転送します。
- アーカイブを解凍し、
HEALTH_DATA_DIRに展開先のディレクトリを設定します。
サーバーはファイルをその場で読み込みます。エクスポートをアップロードしたり、ネットワークリクエストを送信したりすることはありません。ただし、MCP クライアントに返されるクエリ結果は、そのクライアントで設定されたモデルプロバイダーに送信される場合があります。
ツール
| ツール | 用途 |
|---|---|
health_schema | テーブル名、列、単位、サンプル行を確認します |
health_query | JSON、CSV、またはサマリー形式で、DuckDB の SELECT 系分析ステートメントを 1 つ実行します |
health_report | 週次、月次、またはカスタムのヘルスサマリーを生成します |
まず health_schema を使用してください。テーブル名はエクスポート内のファイルによって異なります。データモデルと実際の例については、Apple Health データのクエリを参照してください。
health_query は DuckDB の分析ステートメントを 1 つ受け付けます。対応するステートメントと制限対象の操作については、クエリの保護策を参照してください。
クエリの保護策
サーバーは DuckDB のファイルアクセスを HEALTH_DATA_DIR に制限します。また、ネットワークアクセスと一時ディスクストレージを無効にし、データベース設定を固定します。インポーターが CSV ファイルを読み込めるよう、データディレクトリは読み取り可能かつ書き込み可能な状態に保たれます。
これらの制御により、生成された SQL による意図しない副作用を減らせます。ただし、プロセスを分離するものではありません。サーバーはローカルの stdio MCP クライアント経由で実行してください。信頼できないネットワーククライアントに公開しないでください。サーバーが信頼できない SQL を受け付ける必要がある場合は、プロセスまたは OS による分離を使用してください。
履歴とメモリ
テーブルを必要とする最初のリクエストでは、そのテーブルの CSV 履歴全体が読み込まれます。 日付の範囲は設けられていないため、エクスポートされたデータの最も古い時点までクエリできます。
すべてのツールが設定済みの履歴全体にアクセスできるため、このデータを信頼できる MCP クライアントからのみこのサーバーを起動してください。
読み込まれたテーブルはメモリに保持され、DuckDB には上記で説明した MAX_MEMORY_MB の制限が適用されます。
おおよそ 1 GiB あれば 2 年分の複数テーブルのエクスポートに対応できるため、デフォルトの 2048MB なら余裕があります。より大きなエクスポートには MAX_MEMORY_MB を引き上げてください。
サーバーはヘルスデータの行をディスク上の一時ディレクトリに退避しないため、制限内に収まらないエクスポートは、代わりに明示的なエラーで失敗します。
その他の現在の制限事項:
- Simple Health Export の CSV レイアウトのみがサポートされています。
- DuckDB データベースはメモリ上にあり、サーバープロセスごとに再構築されるため、起動のたびに CSV ファイルから再読み込みされます。永続的な差分インポートは今後の作業として計画されており、現時点では実装されていません。
- デバイスの重複によって、同じように見える測定値が生成されることがあります。必要に応じて、クエリでは
sourceNameを考慮してください。 - ヘルスレポートは記録されたデータを要約するものであり、医療上の助言ではありません。
開発
git clone https://github.com/neiltron/apple-health-mcp.git
cd apple-health-mcp
bun install
npm test
npm run typecheck
npm run build
コード構成、データのライフサイクル、実装上の制約については、アーキテクチャを参照してください。 公開と復旧の手順については、リリース手順を参照してください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。