Skip to main content
Glama
nnishad
by nnishad

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.sh

スマホアプリをリレーに接続する

Sync2R1 → データタブ → Relay(Hermes ブリッジ) で設定します:

フィールド

リレーURL

http://<this-machine-ip>:8790

トークン

HR_AUTH_TOKEN と同じシークレット

Save → Sync now をタップすると、数秒以内に測定値が届きます。


接続

phone (Sync2Ra1) ──HTTP :8790──▶ health-relay ◀──MCP stdio / HTTP── Hermes
        same LAN · or Tailscale for anywhere-access

項目

詳細

向き

スマホ → リレー(スマホからのアウトバウンド。スマホへ接続されるものはありません)

ポート

リレーを実行中のマシンへのTCP 8790インバウンド — そのホストのファイアウォールで開放してください

プロトコル

平文HTTP + Authorization: Bearer <token>。LAN内のみに限定するか、TLSにするにはリバースプロキシ(Caddy/nginx)を前面に置いてください

どこからでも接続可

Tailscale をマシンとスマホにインストールし、Tailscale IP(http://100.x.y.z:8790)をアプリに向けます — 暗号化され、モバイルデータでも動作し、ポートをインターネットに公開することはありません

同期頻度

アプリは1時間ごと、アプリ起動時、手動の 今すぐ同期 で自動同期します

オフライン時

スマホはすべてをローカルSQLiteにバッファリングします。再接続時にそのバックログ全体を(古い順に)送信し、過去48時間を再同期して、Samsung側の更新も反映します

重複対策

二重にカウントするのは不可能です — 各読み取りには一意なキーがあり、再送はサーバー側で無視されます

Hermesの場所

同じマシン(MCPがローカルサブプロセスとしてSQLiteファイルを読み取る)またはリモート(MCP の代わりにRESTエンドポイントを使う)


REST API(ベアラー認証)

エンドポイント

目的

GET /healthz

liveness(認証なし)

POST /api/v1/health/samples

バッチ取り込み — 冪等、再送は no-op

GET /api/v1/health/samples?type=&from_ms=&to_ms=&limit=&offset=

生の測定値

GET /api/v1/health/daily-summary?date=YYYY-MM-DD&tz=Europe/London

メトリックごとの最小/最大/平均/件数

GET /api/v1/health/trends?type=X&days=N&tz=Europe/London

日次ロールアップ

GET /api/v1/health/status

種別ごとの合計

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" }
    }
  }
}

エージェントが使えるツール

ツール

対応する質問の例

list_streams()

「どんなヘルスデータがありますか?」

get_samples(type, from_ms, to_ms)

「今朝の心拍数を表示」

daily_summary(date, tz)

「昨日はどれくらい活動しましたか?」

sleep_breakdown(nights)

「今週の睡眠状態はどうでしたか?」

日付の境界はタイムゾーン(tz="Europe/London" など、DSTにも対応)に従います。


記録されるデータ

心拍数・SpO₂・肌温度・呼吸回数・安静時心拍数・VO₂max・ sleep時間/スコア/ステージ・歩数と階数(毎時+毎日)・運動・ アクティビティーカロリー/時間/距離・体組成(BIA)・エナジースコア・血圧・glucose・水分補給・食事。


設定

環境変数

デフォルト

説明

HR_AUTH_TOKEN

(空欄 = 認証オフ)

本番では必ず設定

HR_PORT

8790

HR_HOST

0.0.0.0

信頼できるLAN内にのみ

HR_DATA_DIR

~/health-relay-data

SQLiteはここに保存されます

テスト

.venv/bin/python -m pytest tests/ -q
-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.

  • MCP server for Withings health data — sleep, activity, heart, and body metrics.

  • 63 tools for Apple Health, Fitbit, Oura & Health Connect data in Claude, ChatGPT, Grok & Mistral.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nnishad/health-relay'

If you have feedback or need assistance with the MCP directory API, please join our Discord server