Marrow Health
简
下载

自托管镜像

一台运行在你自己硬件上的小型服务器,保存你的 Marrow 数据的完整实时副本,在你的手机休眠、揣在口袋里、甚至在地球另一端时也能为智能体应答。

一次一个应用的设置方法各有专门的页面,见连接.

所有 Marrow 指南: MCP · 自托管镜像 · 自动化 · 文件 · 支持

是什么

一台小型开源服务器,运行在你自己的硬件上:树莓派、NAS、旧笔记本,或 $5 的 VPS。你的手机扫一次二维码与它配对,之后会在后台推送每一处变化,应用关着也行。服务器保存一份完整的 SQLite 副本,提供十三个用于读取的 MCP 工具:手机上的那七个、sleep_log 和 symptoms_and_mood,以及四个按应用自己的说法作答的工具(daily_brief、baselines、what_changed、data_quality),所以即使你的手机躺在抽屉里,智能体也可以在凌晨 3 点问“我这周睡得怎么样”。MIT 许可:github.com/MarrowHealth/marrow-mcp.

安装

一个 Python 文件,只用标准库,需要 Python 3.10 或更新版本:

pip install marrow-mcp
marrow-server         # or: python3 marrow_server.py

或者用 Docker:

git clone https://github.com/MarrowHealth/marrow-mcp
cd marrow-mcp
docker compose up -d

首次启动时,它会打印一个配对 URL,并在你网络里的任何浏览器中显示一个二维码。

配对手机

  1. 在你身边的任意屏幕上打开配对 URL。
  2. 在 Marrow 里:导出,Server MCP,与服务器配对,扫描二维码。
  3. 完成。手机开始推送,“服务器”页面会显示上次推送的时间和有多少条记录在等待。

配对会在服务器的数据目录中创建两个令牌:一个供手机推送使用,一个供智能体读取使用。删除令牌文件即可更换令牌。

让智能体指向它

claude mcp add --transport http marrow http://<server-ip>:8800/mcp \
  --header "Authorization: Bearer <mcp token>"

共十三个工具,全是读取类。九个原始工具:health_summary、list_metrics、metric_daily、metric_samples、workouts、nutrition_log、strength_log、sleep_log、symptoms_and_mood。还有四个从原始工具止步的地方开始,用应用首页相同的算法,对照你自己近期的日常水平打分:daily_brief(一天的概览:每个关键指标的数值和应用自己的说法,饮食和饮水与目标的对比,昨晚的睡眠,完成的训练,值得一提的提示)、baselines(每个指标你自己的日常水平,最新数值的 z 值和 90 天趋势)、what_changed(最近一周与之前四周的对比:什么变了、对你来说有多显著、睡眠和就寝时间的变化、开始或停止的数据流)和 data_quality(哪些数据是新的、过时的或缺失的,这样智能体就不会把空缺当成事实)。每个读取工具都可以传入回溯天数,或按手机日历传入起止日期。服务器还会列出四个提示词(how_am_i_doing、weekly_review、doctor_prep、log_from_text)和四个资源,供能显示它们的客户端使用。它还带有十二个写入工具,在你的手机允许后才会列出。从 Marrow 1.5 起,在导出,你的连接里为你的服务器打开允许 AI 写入,AI 就可以通过它记录餐食、饮水、体重、训练、睡眠、症状、心情和目标,免费。服务器会把每条记录排队,手机在 Marrow 打开或唤醒时应用它们,每一条都可以撤销。Claude Desktop、Cursor 等客户端的设置方法见 MCP 页面。只需要换 URL。

从局域网之外访问

服务器使用纯 HTTP,自己没有 TLS。不要直接做端口转发。在服务器主机和手机上都装上 Tailscale,使用 tailscale serve,或者在前面放 Cloudflare Tunnel 或任何终止 HTTPS 的反向代理。配对二维码里带有服务器对外宣告的地址:它自己的局域网地址,或你用 --url 给它的地址。启动时请带上你实际会使用的地址,例如 marrow-server --url https://pi.your-tailnet.ts.net,然后再配对。

磁盘上会存什么

单位:健康指标以存储的 SI 单位并带标签到达。无论手机的显示设置如何,力量组都以磅为单位到达,并带有 "unit": "lb",所以镜像永远不会混用单位。可以让 Grafana、DuckDB 或定时任务直接读取数据库文件。

问题排查

在你的 AI 所在的电脑上做两个测试,就能知道问题出在哪里。首先,服务器是否在运行?这个测试不需要令牌:

curl http://<server-ip>:8800/health

它会返回 {"server": "marrow", "ok": true}。接着,你的智能体的令牌是否有效?

curl -i http://<server-ip>:8800/mcp \
  -H "Authorization: Bearer <mcp token>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
你得到的结果意味着什么
200 OK 和一个工具列表服务器没问题。请检查智能体配置里的地址、令牌和服务器类型(HTTP),然后重启智能体。
401,附带 bad bearer token令牌不对。智能体使用的是 mcp 令牌,而不是手机配对用的那个。见下文。
连接被拒绝或超时服务器没有运行、端口不对,或者主机上的防火墙拦截了 8800 端口。用 Docker 的话,请检查 8800:8800 端口映射。

什么时候选它而不是其他方式

当你的智能体需要在手机休眠或不在身边时也能获取数据,或者你想要一个可查询的数据库而不是文件时,选镜像。当你的智能体就在手机附近运行、并且你不想再维护别的东西时,选手机上的 MCP 服务器。当你已经有一个数据该去的地方时,选自动化。