Skip to main content
Glama

Lifesign โ€” User Status & Health Telemetry Server

Lightweight HTTP service: receives device status + health data reported from mobile devices and exposes it to AI agents via MCP (Model Context Protocol). Single process, single port.

โœจ Features

  • ๐Ÿ“ฑ Mobile Reporting: iOS Shortcut POST /ingest pushes battery/location/network/health snapshots

  • ๐Ÿค– MCP Gateway: /mcp mounted in the same process, directly readable by AI agents like Hermes

  • ๐Ÿ—๏ธ Single Port, Single Process: Upload + query + MCP all reuse port 8764, no secondary HTTP hop

  • ๐Ÿณ Docker Ready: GitHub Actions automatically builds images, 1Panel one-click Compose deployment

Related MCP server: Rouse Context

๐Ÿ—๏ธ Architecture

ๆ‰‹ๆœบ (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)
  • Mobile Upload: Public HTTPS via reverse proxy โ†’ 8764/ingest

  • AI Reading: Local loopback direct connection to 8764/mcp (not via public network)

  • Shared Memory: MCP tools directly read app.store, no serialization or secondary requests needed

๐Ÿ”Œ Endpoints

Method

Path

Authentication

Description

POST

/ingest

Bearer phone key

Mobile reports latest status

GET

/query_all

Bearer agent key

Returns full snapshot

GET

/health

None

Health check (for Docker HEALTHCHECK)

POST

/mcp

None (local loopback)

MCP streamable-http endpoint

๐Ÿ”‘ Identity and Configuration

Only two shared secrets for identity verification (identity markers, not field-level authorization), both overridable via environment variables:

Purpose

Environment Variable

Default Value (Development Only)

Endpoint

Phone 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

Listen port

USER_STATUS_PORT

8764

โ€” (used by run.sh)

โš ๏ธ Production deployment must override default secrets via environment variables, do not use default values from the repository.

๐Ÿš€ Quick Start

Local Run

python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
./run.sh start      # ๅŽๅฐๅฏๅŠจ :8764
./run.sh status
./run.sh stop

Docker Run

# ๆœฌๅœฐๆž„ๅปบ
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
  1. In 1Panel โ†’ Container โ†’ Orchestration, create a new orchestration and paste docker-compose.yml;

  2. The image is automatically built by GitHub Actions and pushed to GHCR, pulled directly during deployment;

  3. Only one port 8764 needs to be exposed, the rest is handled by the reverse proxy.

Sending Data from Mobile

# ็ปๅ…ฌ็ฝ‘ๅไปฃ๏ผˆๆ‰‹ๆœบ็ซฏๅฟซๆทๆŒ‡ไปค็”จ่ฟ™ไธช๏ผ‰
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 Configuration (config.yaml)

mcp_servers:
  user-status:
    type: streamable-http
    url: http://127.0.0.1:8764/mcp   # ๆœฌๆœบๅ›ž็Žฏ๏ผŒไธ่ตฐๅ…ฌ็ฝ‘
    connect_timeout: 10
    timeout: 30

Verification: hermes mcp test user-status; after restarting Hermes, tools are registered as mcp_user_status_*.

๐Ÿณ Docker Image Build (GitHub Actions)

The repository includes .github/workflows/docker-build.yml:

  • Trigger: push to main / manual workflow_dispatch / tag push

  • Artifact: ghcr.io/<owner>/lifesign:latest and :<git-sha> dual tags

  • Platforms: linux/amd64, linux/arm64

  • Note: The image is private (private repository โ†’ private GHCR package). When deploying with 1Panel, you need to add GHCR login credentials (ghcr.io username + PAT) in the Docker configuration.

โœ… Testing

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

๐Ÿ—‚๏ธ Project Structure

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/

๐Ÿ“œ License

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