Skip to main content
Glama
nnishad
by nnishad

health-relay

Selbstgehostete Brücke zwischen Ihrer Samsung Watch → Sync2Ra1-Telefon-App und Ihrem Hermes-KI-Agenten. Die App überträgt Gesundheitswerte über Ihr LAN hierher; die Daten werden lokal (SQLite) gespeichert und über REST und MCP bereitgestellt, damit Ihr Agent sie abfragen kann.

Galaxy Watch ─▶ Samsung Health ─▶ Sync2Ra1 (phone) ──push──▶ health-relay ──MCP/REST──▶ Hermes

Alle Daten bleiben in Ihrem Netzwerk. Es wird nichts nach außen gesendet.


Schnellstart (Docker oder 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}

Die Daten werden dauerhaft in ./data/ledger.db gespeichert (SQLite, WAL-Modus).

Ohne Docker ausführen

python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
HR_AUTH_TOKEN=<secret> ./run.sh

Related MCP server: Yummy Health MCP

Richten Sie die Telefon-App auf den Server aus

Öffnen Sie Sync2Ra1 → Daten-Tab → Relay (Hermes-Brücke):

Feld

Wert

Relay-URL

http://<this-machne-id-ip>:8790

Token

derselbe geheime Schlüssel wie HR_AUTH_TOKEN

Tippen Sie auf Speichern → Jetzt synchronisieren. Die Messwerte treffen innerhalb von Sekunden ein.


Konnektivität

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

Regel

Detail

Richtung

Telefon → Relay (ausgehend vom Telefon; es wird keine Verbindung zum Telefon aufgebaut)

Port

TCP 8790 eingehend auf der Maschine, die das Relay ausführt – in der Firewall dieses Hosts öffnen

Protokoll

Einfaches HTTP + Authorization: Bearer <token>. Nur für das LAN vorgesehen, sonst abgesichert über Reverse-Proxy (Caddy/nginx) mit TLS

Überall Zugriff

Tailscale auf dem Gerät und dem Telefon installieren; die App auf die Tailscale-IP zeigen (http://100.x.y.z:8790) – verschlüsselt, mobil nutzbar, ohne Ports in den Internet freizugeben

Zeitraum

Automatische Synchronisierung stündlich + beim App-Start + manuell Jetzt synchronisieren

Offline

Das Telefon speichert alles lokal in SQLite; nach der Neuverbindung werden alle angesammelten Daten (zuerst die ältesten) übertragen und die letzten 48 Stunden neu synchronisiert, damit Korrekturen von Samsung übernommen werden

Duplikate

Doppelzählung ausgeschlossen – jede Ablesung hat einen eindeutigen Schlüssel; Wiederholungen werden serverseitig ignoriert

Hermes Standort

Gleiche Maschine (MCP läuft als lokaler Unterprozess und liest die SQLite-Datei) oder entfernt (REST-Endpunkte statt MCP verwenden)


REST-API (Bearer-Authentifizierung)

Endpunkt

Zweck

GET /healthz

Erreichbarkeitsprüfung (ohne Authentifizierung)

POST /api/v1/health/samples

Batch-Import – idempotent, Wiederholungen sind wirkungslos

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

Roh Messwerte

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

Min/Max/Anzahl pro Messwert

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

Tägliche Zusammenfassungen

GET /api/v1/health/status

Gesamtzahlen je Messwert

curl -H "Authorization: Bearer <secret>" \
  "http://localhost:8790/api/v1/health/daily-summary?date=$(date +%F)&tz=Europe/London"

Anbindung an Hermes (MCP)

Der MCP-Server liest dieselbe SQLite-Datei – starten Sie ihn direkt aus diesem Repository:

python3 -m venv .venv-mcp
.venv-mcp/bin/pip install fastmcp

Fügen Sie Folgendes in die MCP-Konfiguration Ihres Agenten ein:

{
  "mcpServers": {
    "health-relay": {
      "command": "<repo-path>/.venv-mcp/bin/python",
      "args": ["<repo-path>/mcp_server.py"],
      "env": { "HR_DATA_DIR": "<repo-path>/data" }
    }
  }
}

Tools, die Ihr Agent erhält

Tool

Beantwortetn Fragen wie

list_streams()

„Welche Gesundheitsdaten hast Sie?“

get_samples(type, from_ms, to_ms)

„Zeigen Sie mir meine Herzfrequenz von heute Morgen“

daily_summary(date, tz)

„Wie aktiv war ich gestern?“

sleep_breakdown(nights)

„Wie habe ich diese Woche geschlafen?“

Die Tagesgrenzen richten sich nach Ihrer Zeitzone (tz="Europe/London" usw., DST wird berücksichtigt).


Aufgezeichnete Messwerte

Herzfrequenz · SpO₂ · Hauttemperatur · Atmung · Ruhe herzfrequenz · VO₂max · Schlafdauer/Schlaf-Score/Schlafstadien · Schritte & Stockwerke (ständlich & täglich) · Trainingseinheit / Training · Aktivitätskalorien/-zeit/-distanz · · · Körperzusammensetzung (BI A) · Energie-Score · Blutdruck · Glukose · Flüssigkeitszufuhr · Mahlzeiten.


Konfiguration

Umgebungsvariable

Standard

HR_AUTH_TOKEN

(leer = keine Authentifizierung)

Unbedingt in Production setzen

HR_PORT

8790

HR_HOST

0.0.0.0

Nur im vertrauenswürdigen LAN betreiben

HR_DATA_DIR

~/health-relay-data

SQLite-Datenbank liegt hier

Tests

.venv/bin/python -m pytest tests/ -q

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Private, 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.
    -
  • A
    license
    B
    quality
    A
    maintenance
    Enables 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.
    19
    MIT