health-relay
health-relay
セルフホスト型ブリッジです。Samsung Watch → Sync2R1 スマホアプリと Hermes AI エージェントを接続します。アプリはLAN経由でヘルスデータをこのリレーに送信し、 データはローカル(SQLite)に保存され、REST と MCP の両方で公開されるため、 エージェントからクエリできます。
Galaxy Watch ─▶ Samsung Health ─▶ Sync2Ra1 (phone) ──push──▶ health-relay ──MCP/REST──▶ Hermesすべてのデータはネットワーク内に留まります。外部へ送信されることはありません。
クイックスタート(Docker または Podman)
echo "HR_AUTH_TOKEN=<choose-a-secret>" > .env
docker compose up -d # or: podman compose up -d
curl http://localhost:8790/healthz # -> {"ok":true}データは ./data/ledger.db(SQLite、WALモード)に保存されます。
Docker を使わずに実行する
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
HR_AUTH_TOKEN=<secret> ./run.shRelated MCP server: Yummy Health MCP
スマホアプリをリレーに接続する
Sync2R1 → データタブ → Relay(Hermes ブリッジ) で設定します:
フィールド | 値 |
リレーURL |
|
トークン |
|
Save → Sync now をタップすると、数秒以内に測定値が届きます。
接続
phone (Sync2Ra1) ──HTTP :8790──▶ health-relay ◀──MCP stdio / HTTP── Hermes
same LAN · or Tailscale for anywhere-access項目 | 詳細 |
向き | スマホ → リレー(スマホからのアウトバウンド。スマホへ接続されるものはありません) |
ポート | リレーを実行中のマシンへのTCP 8790インバウンド — そのホストのファイアウォールで開放してください |
プロトコル | 平文HTTP + |
どこからでも接続可 | Tailscale をマシンとスマホにインストールし、Tailscale IP( |
同期頻度 | アプリは1時間ごと、アプリ起動時、手動の 今すぐ同期 で自動同期します |
オフライン時 | スマホはすべてをローカルSQLiteにバッファリングします。再接続時にそのバックログ全体を(古い順に)送信し、過去48時間を再同期して、Samsung側の更新も反映します |
重複対策 | 二重にカウントするのは不可能です — 各読み取りには一意なキーがあり、再送はサーバー側で無視されます |
Hermesの場所 | 同じマシン(MCPがローカルサブプロセスとしてSQLiteファイルを読み取る)またはリモート(MCP の代わりにRESTエンドポイントを使う) |
REST API(ベアラー認証)
エンドポイント | 目的 |
| liveness(認証なし) |
| バッチ取り込み — 冪等、再送は no-op |
| 生の測定値 |
| メトリックごとの最小/最大/平均/件数 |
| 日次ロールアップ |
| 種別ごとの合計 |
curl -H "Authorization: Bearer <secret>" \
"http://localhost:8790/api/v1/health/daily-summary?date=$(date +%F)&tz=Europe/London"Hermes に接続する(MCP)
MCPサーバーは同じSQLiteファイルを読み取ります — このリポジトリから起動してください。
python3 -m venv .venv-mcp
.venv-mcp/bin/pip install fastmcpエージェントのMCP設定に以下を追加します。
{
"mcpServers": {
"health-relay": {
"command": "<repo-path>/.venv-mcp/bin/python",
"args": ["<repo-path>/mcp_server.py"],
"env": { "HR_DATA_DIR": "<repo-path>/data" }
}
}
}エージェントが使えるツール
ツール | 対応する質問の例 |
| 「どんなヘルスデータがありますか?」 |
| 「今朝の心拍数を表示」 |
| 「昨日はどれくらい活動しましたか?」 |
| 「今週の睡眠状態はどうでしたか?」 |
日付の境界はタイムゾーン(tz="Europe/London" など、DSTにも対応)に従います。
記録されるデータ
心拍数・SpO₂・肌温度・呼吸回数・安静時心拍数・VO₂max・ sleep時間/スコア/ステージ・歩数と階数(毎時+毎日)・運動・ アクティビティーカロリー/時間/距離・体組成(BIA)・エナジースコア・血圧・glucose・水分補給・食事。
設定
環境変数 | デフォルト | 説明 |
|
| 本番では必ず設定 |
|
| |
|
| 信頼できるLAN内にのみ |
|
| SQLiteはここに保存されます |
テスト
.venv/bin/python -m pytest tests/ -qThis server cannot be deployed
Maintenance
Related MCP Connectors
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Let AI agents query data and act across all your business apps via MCP.
Connect AI agents to the health, screen-time and recorded location data you choose to share from myself.md. Discover schemas, query connected phones, and read paginated JSON or JSONL cloud exports. OAuth sign-in and explicit data grants are required. Phone requests depend on connectivity and OS permissions; cloud reads require existing storage access. Owners can revoke sharing; revocation does not erase recipient copies. Privacy: https://myself.md/privacy · Terms: https://myself.md/terms · Support: cody@isolated.tech
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceExposes personal health data (recovery, sleep, strain, etc.) as MCP tools for AI agents to query and analyze.4MIT
- FlicenseNot gradedqualityBmaintenancePrivate, read-only health data bridge that reads from Android Health Connect and exposes heart rate, steps, sleep, and other health metrics to ChatGPT via MCP tools.-
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to query and analyze Huawei Health data, including training records, sleep, heart rate, and athletic performance, through 14 MCP tools without third-party servers.3MIT
- AlicenseBqualityAmaintenanceEnables local, read-only access to Garmin Connect health and training data through MCP, letting assistants summarize recovery, sleep, activities, and more without uploading your data.19MIT