Skip to main content
Glama
nnishad
by nnishad

health-relay

Мост между вашим приложением на телефоне Samsung Watch → Sync2Ra1 и вашим ИИ-агентом Hermes. Приложение отправляет показания здоровья сюда по вашей локальной сети; данные хранятся локально (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

Related MCP server: Yummy Health MCP

Настройка приложения на телефоне

В Sync2Ra1 → вкладка Data → 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>. Держите его только в локальной сети либо спрячьте за обратным прокси (Caddy/nginx) для TLS

Доступ извне

Установите Tailscale на машину и телефон; укажите приложению Tailscale-IP (http://100.x.y.z:8790) — трафик шифруется, работает через мобильную сеть, порты в интернет не открываются

Периодичность

Приложение автоматически синхронизируется каждый час, при запуске и вручную через Sync now

Офлайн

Телефон буферизует всё в локальной SQLite; при восстановлении связи он отправляет всю накопленную очередь (сначала самые старые) и заново синхронизирует последние 48 часов, чтобы правки распространились

Дубликаты

Двойной подсчёт невозможен: у каждого показания уникальный ключ; повторные отправки игнорируются на сервере

Место Hermes

На той же машине (MCP работает как локальный подпроцесс и читает файл SQLite) или удалённо (тогда используйте REST API вместо MCP)


REST API (Bearer-авторизация)

Endpoint

Назначение

GET /healthz

проверка жизни сервиса (без авторизации)

POST /api/v1/health/samples

пакетная загрузка — идемпотентно, повторы не дают эффекта

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" и т.д., переход на летнее время учитывается).


Записываемые данные

Пульс · SpO₂ · температура кожи · частота дыхания · пульс в покое · VO₂max · длительность/оценка/стадии сна · шаги и этажи (по часам и по дням) · тренировки · время/каллории/дистанция активности · состав тела (BIA) · показатель энергии · артериальное давление · глюкоза · гидратация · приёмы пищи.


Конфигурация

Переменная

По умолчанию

Это

HR_AUTH_TOKEN

(пусто = авторизация отключена)

задайте в производственной среде (prod)

HR_PORT

8790

HR_HOST

0.0.0.0

оставьте в надёжной локальной сети

HR_DATA_DIR

~/health-relay-data

здесь хранится SQLite

Тесты

.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