Skip to main content
Glama

Lifesign — Servidor de Telemetría de Estado y Salud del Usuario

Servicio HTTP ligero: recibe estado del dispositivo + datos de salud reportados desde el móvil y los expone a agentes de IA a través de MCP (Model Context Protocol). Un solo proceso, un solo puerto.

✨ Características

  • 📱 Reporte desde el móvil: Atajo de iOS POST /ingest envía instantáneas de batería/ubicación/red/salud

  • 🤖 Puerta de enlace MCP: El mismo proceso monta /mcp, los agentes de IA como Hermes lo leen directamente

  • 🏗️ Un solo puerto, un solo proceso: Carga + consulta + MCP todo reutiliza el puerto 8764, sin saltos HTTP secundarios

  • 🐳 Listo para Docker: GitHub Actions construye la imagen automáticamente, 1Panel despliega con un clic Compose

Related MCP server: Rouse Context

🏗️ Arquitectura

手机 (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)
  • Carga desde el móvil: HTTPS público a través de proxy inverso → 8764/ingest

  • Lectura por IA: Conexión directa de bucle local a 8764/mcp (sin pasar por la red pública)

  • Memoria compartida: Las herramientas MCP leen directamente app.store, sin necesidad de serialización/solicitudes secundarias

🔌 Endpoints

Método

Ruta

Autenticación

Descripción

POST

/ingest

Bearer clave de móvil

El móvil reporta el estado más reciente

GET

/query_all

Bearer clave de agente

Devuelve la instantánea completa

GET

/health

Ninguna

Verificación de salud (para Docker HEALTHCHECK)

POST

/mcp

Ninguna (bucle local)

Endpoint MCP streamable-http

🔑 Identidad y Configuración

Solo dos claves compartidas para identificación (identidad, no autorización a nivel de campo), ambas sobrescribibles con variables de entorno:

Uso

Variable de entorno

Valor por defecto (solo desarrollo)

Endpoint

Clave de móvil

USER_STATUS_PHONE_KEY

phone-secret-key-001

POST /ingest

Clave de agente

USER_STATUS_AGENT_KEY

agent-read-secret-key-001

GET /query_all

Puerto de escucha

USER_STATUS_PORT

8764

— (usado por run.sh)

⚠️ En producción, las claves predeterminadas deben sobrescribirse mediante variables de entorno. No use los valores predeterminados del repositorio.

🚀 Inicio Rápido

Ejecución local

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

Ejecución con Docker

# 本地构建
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

Despliegue con 1Panel Compose (recomendado)

  1. En 1Panel → Contenedores → Orquestación, cree una nueva orquestación y pegue docker-compose.yml;

  2. La imagen se construye automáticamente mediante GitHub Actions y se envía a GHCR, se extrae directamente al desplegar;

  3. Solo necesita abrir 1 puerto 8764, el resto lo maneja el proxy inverso.

Envío de datos desde el móvil

# 经公网反代(手机端快捷指令用这个)
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}}}'

Configuración de Hermes MCP (config.yaml)

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

Verificación: hermes mcp test user-status; después de reiniciar Hermes, la herramienta se registra como mcp_user_status_*.

🐳 Construcción de imagen Docker (GitHub Actions)

El repositorio incluye .github/workflows/docker-build.yml:

  • Disparador: push a main / workflow_dispatch manual / etiqueta (tag)

  • Artefacto: ghcr.io/<owner>/lifesign:latest y :<git-sha> doble etiqueta

  • Plataforma: linux/amd64, linux/arm64

  • Nota: La imagen es privada (repositorio privado → paquete GHCR privado). Al desplegar con 1Panel, debe agregar las credenciales de inicio de sesión de GHCR en la configuración de Docker (nombre de usuario ghcr.io + PAT).

✅ Pruebas

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

🗂️ Estructura del proyecto

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/

📜 Licencia

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