Skip to main content
Glama

Lifesign — Benutzerstatus- und Gesundheits-Telemetrieserver

Leichter HTTP-Dienst: Empfängt Gerätestatus + Gesundheitsdaten, die vom Mobiltelefon gemeldet werden, und stellt sie AI-Agenten über MCP (Model Context Protocol) zur Verfügung. Einzelprozess, einzelner Port.

✨ Funktionen

  • 📱 Mobiltelefon-Meldung: iOS-Kurzbefehl POST /ingest sendet Akkustand/Standort/Netzwerk/Gesundheits-Schnappschuss

  • 🤖 MCP-Gateway: /mcp im selben Prozess bereitgestellt, Hermes und andere AI-Agenten lesen direkt

  • 🏗️ Ein Port, ein Prozess: Hochladen + Abfragen + MCP nutzen alle 8764, kein zweiter HTTP-Hop

  • 🐳 Docker-bereit: GitHub Actions erstellt automatisch Images, 1Panel One-Click Compose-Bereitstellung

Related MCP server: Rouse Context

🏗️ Architektur

手机 (iOS 快捷指令)
   │ POST https://<your-domain>/user-status/ingest   ← 仅上传经反代
   ▼
1Panel OpenResty (反向代理)
   │ proxy_pass → <host-ip>:8764/ingest
   ▼
┌──────────────────────────────┐
│ FastAPI + FastMCP 同一进程    │
│  (单端口 8764)               │
│                              │
│  POST /ingest   手机上传      │
│  GET  /query_all  agent读取  │
│  /mcp  MCP 网关 (同进程)      │
└──────┬───────────────────────┘
       │ 本机回环 http://127.0.0.1:8764/mcp
       ▼
   Hermes Agent (AI)
  • Mobiltelefon-Hochladen: Öffentliches HTTPS via Reverse Proxy → 8764/ingest

  • AI-Lesen: Lokale Loopback-Direktverbindung zu 8764/mcp (nicht über öffentliches Netz)

  • Shared Memory: MCP-Tools lesen direkt app.store, keine Serialisierung/sekundäre Anfragen erforderlich

🔌 Endpunkte

Methode

Pfad

Authentifizierung

Beschreibung

POST

/ingest

Bearer Handy-Key

Mobiltelefon meldet neuesten Status

GET

/query_all

Bearer Agent-Key

Gibt vollständigen Schnappschuss zurück

GET

/health

Keine

Gesundheitscheck (für Docker HEALTHCHECK)

POST

/mcp

Keine (lokaler Loopback)

MCP streamable-http-Endpunkt

🔑 Identität und Konfiguration

Nur zwei gemeinsame Schlüssel zur Identifikation (Identitätsmerkmale, keine feldspezifische Autorisierung), beide durch Umgebungsvariablen überschreibbar:

Verwendung

Umgebungsvariable

Standardwert (nur Entwicklung)

Endpunkt

Handy-Key

USER_STATUS_PHONE_KEY

phone-secret-key-001

POST /ingest

Agent-Key

USER_STATUS_AGENT_KEY

agent-read-secret-key-001

GET /query_all

Überwachungsport

USER_STATUS_PORT

8764

— (von run.sh verwendet)

⚠️ In der Produktion müssen die Standardschlüssel durch Umgebungsvariablen überschrieben werden, verwenden Sie nicht die Standardwerte aus dem Repository.

🚀 Schnellstart

Lokale Ausführung

python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
./run.sh start      # 后台启动 :8764
./run.sh status
./run.sh stop

Docker-Ausführung

# 本地构建
docker build -t lifesign:local .
docker run -d --name lifesign -p 8764:8764 \
  -e USER_STATUS_PHONE_KEY='<phone-key>' \
  -e USER_STATUS_AGENT_KEY='<agent-key>' \
  lifesign:local

1Panel Compose-Bereitstellung (empfohlen)

  1. In 1Panel → Container → Orchestrierung neue Orchestrierung erstellen, docker-compose.yml einfügen;

  2. Images werden von GitHub Actions automatisch erstellt und an GHCR gepusht, bei der Bereitstellung direkt abrufen;

  3. Nur 1 Port 8764 muss geöffnet werden, der Rest wird vom Reverse Proxy erledigt.

Daten vom Mobiltelefon senden

# 经公网反代(手机端快捷指令用这个)
curl -s -X POST https://<your-domain>/user-status/ingest \
  -H "Authorization: Bearer <phone-key>" \
  -H "Content-Type: application/json" \
  -d '{"deviceStage":{"battery":{"percentage":87,"is_charging":true}}}'

# 或内网直连
curl -s -X POST http://<host-ip>:8764/ingest \
  -H "Authorization: Bearer <phone-key>" \
  -H "Content-Type: application/json" \
  -d '{"deviceStage":{"battery":{"percentage":87,"is_charging":true}}}'

Hermes MCP-Konfiguration (config.yaml)

mcp_servers:
  user-status:
    type: streamable-http
    url: http://127.0.0.1:8764/mcp   # 本机回环,不走公网
    connect_timeout: 10
    timeout: 30

Überprüfung: hermes mcp test user-status; nach Neustart von Hermes wird das Tool als mcp_user_status_* registriert.

🐳 Docker-Image-Erstellung (GitHub Actions)

Das Repository enthält .github/workflows/docker-build.yml:

  • Auslöser: Push auf main / manuell workflow_dispatch / Tag setzen

  • Artefakt: ghcr.io/<owner>/lifesign:latest und :<git-sha> doppeltes Tag

  • Plattform: linux/amd64, linux/arm64

  • Hinweis: Image ist privat (privates Repository → privates GHCR-Paket), bei 1Panel-Bereitstellung müssen in der Docker-Konfiguration GHCR-Anmeldedaten (ghcr.io Benutzername + PAT) hinzugefügt werden.

✅ Tests

. .venv/bin/activate
python -m pytest tests/ -v

🗂️ Projektstruktur

lifesign/
├── app/
│   ├── main.py            # FastAPI 入口(挂载 MCP 网关)
│   ├── mcp_server.py      # FastMCP 工具定义(get_status/get_battery/...)
│   ├── store.py           # 线程安全内存存储
│   ├── models/status.py   # Pydantic 数据模型
│   └── routers/           # /ingest 与 /query_all 路由
├── config/clients.example.yaml   # 身份配置模板(真实文件勿提交)
├── panel_api.py           # 1Panel API 签名请求辅助脚本
├── docker-compose.yml     # 1Panel Compose 部署编排
├── Dockerfile
├── run.sh                 # 本机后台启停
└── tests/

📜 Lizenz

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    A real-time system diagnostics MCP server that gives AI agents live access to CPU, RAM, disk, network, processes, and hardware health metrics, with zero cloud dependency.
    7
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Turn your Android phone into an MCP server. AI assistants connect on demand, query your health data, notifications, app usage, and take actions on your device — all end-to-end encrypted, no cloud sync.
    5
    Apache 2.0