Lifesign
Enables AI agents to read real-time device status and health data (battery, location, network) reported from a mobile phone, acting as a single-port HTTP/MCP telemetry server.
README
Lifesign — User Status & Health Telemetry Server
轻量 HTTP 服务:接收手机端上报的设备状态 + 健康数据,并以 MCP(Model Context Protocol) 暴露给 AI Agent 读取。单进程、单端口。
✨ 特性
- 📱 手机上报:iOS 快捷指令
POST /ingest推送电量/位置/网络/健康快照 - 🤖 MCP 网关:同一进程挂载
/mcp,Hermes 等 AI Agent 直接读取 - 🏗️ 单端口单进程:上传 + 查询 + MCP 全部复用 8764,无二次 HTTP hop
- 🐳 Docker 就绪:GitHub Actions 自动构建镜像,1Panel 一键 Compose 部署
🏗️ 架构
手机 (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)
- 手机上传:公网 HTTPS 经反代 →
8764/ingest - AI 读取:本机回环直连
8764/mcp(不经过公网) - 共享内存:MCP 工具直接读
app.store,无需序列化/二次请求
🔌 端点
| 方法 | 路径 | 认证 | 说明 |
|---|---|---|---|
POST |
/ingest |
Bearer 手机 key | 手机上报最新状态 |
GET |
/query_all |
Bearer agent key | 返回完整快照 |
GET |
/health |
无 | 健康检查(Docker HEALTHCHECK 用) |
POST |
/mcp |
无(本机回环) | MCP streamable-http 端点 |
🔑 身份与配置
仅两个共享密钥做身份识别(身份标识,非字段级授权),均可用环境变量覆盖:
| 用途 | 环境变量 | 默认值(仅开发) | 端点 |
|---|---|---|---|
| 手机 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 |
| 监听端口 | USER_STATUS_PORT |
8764 |
—(run.sh 使用) |
⚠️ 生产部署必须通过环境变量覆盖默认密钥,勿使用仓库内默认值。
🚀 快速开始
本机运行
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
./run.sh start # 后台启动 :8764
./run.sh status
./run.sh stop
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
1Panel Compose 部署(推荐)
- 在 1Panel → 容器 → 编排 中新建编排,粘贴
docker-compose.yml; - 镜像由 GitHub Actions 自动构建推送到 GHCR,部署时直接拉取;
- 仅需开放 1 个端口
8764,其余由反向代理处理。
手机发送数据
# 经公网反代(手机端快捷指令用这个)
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 配置(config.yaml)
mcp_servers:
user-status:
type: streamable-http
url: http://127.0.0.1:8764/mcp # 本机回环,不走公网
headers:
Authorization: "Bearer <你的 agent key>" # 与 USER_STATUS_AGENT_KEY 一致
connect_timeout: 10
timeout: 30
⚠️ MCP 端点
/mcp带 Bearer 鉴权(复用USER_STATUS_AGENT_KEY): 无 token 的请求一律 401,防止本机其他服务 / 局域网客户端偷读数据。 生产部署务必通过环境变量设置强 key(勿用仓库默认值)。
验证:hermes mcp test user-status;重启 Hermes 后工具注册为 mcp_user_status_*。
🐳 Docker 镜像构建(GitHub Actions)
仓库内置 .github/workflows/docker-build.yml:
- 触发:打 tag
v*(如v1.0.0)/ 手动workflow_dispatch——普通 push 到main不会构建镜像 - 产物:
ghcr.io/<owner>/lifesign:v1.0.0、:v1、:v1.0与:sha-<git-sha>多 tag - 平台:
linux/amd64、linux/arm64 - 镜像源:国内可用
ghcr.nju.edu.cn/<owner>/lifesign:vX.Y.Z加速拉取 - 说明:包为 public,1Panel 主机免凭证匿名拉取。
发布新版本:
git tag v1.0.0 && git push origin v1.0.0
📱 配套 iOS 快捷指令
本仓库配套一个 iOS 快捷指令,用于手机端一键上报设备状态 + 健康数据到本服务:
https://www.icloud.com/shortcuts/4e534f96a25b4d148ac1cedd1ca79008
安装后在快捷指令内填写你的服务器地址与手机 key(与 USER_STATUS_PHONE_KEY 一致)即可使用。
✅ 测试
. .venv/bin/activate
python -m pytest tests/ -v
🗂️ 项目结构
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/
📜 许可证
PolyForm Noncommercial License 1.0.0
本软件仅限非商业用途。禁止将本软件或其衍生作品用于商业目的(包括但不限于:出售、出租、用于商业产品/服务、公司内部商业使用)。详情见 LICENSE 文件。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。