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

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