自托管镜像
一台运行在你自己硬件上的小型服务器,保存你的 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,并在你网络里的任何浏览器中显示一个二维码。
配对手机
- 在你身边的任意屏幕上打开配对 URL。
- 在 Marrow 里:导出,Server MCP,与服务器配对,扫描二维码。
- 完成。手机开始推送,“服务器”页面会显示上次推送的时间和有多少条记录在等待。
配对会在服务器的数据目录中创建两个令牌:一个供手机推送使用,一个供智能体读取使用。删除令牌文件即可更换令牌。
让智能体指向它
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,然后再配对。
磁盘上会存什么
- 一个 SQLite 数据库,包含每个每日数据序列、样本、日记条目和力量组,由手机的推送保持最新。
- 每一次原始推送都以 JSONL 的形式暂存在它旁边,所以万一你把数据库弄坏了,可以重建。
- 完整保真的历史记录,每年预留 50 到 150 MB。
单位:健康指标以存储的 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 端口映射。 |
- 该用哪个令牌。服务器启动时会打印智能体用的令牌,在以
agents:开头的那一行。它也在数据文件夹里的.mcp-token文件中(除非你传了--data,否则是./data,Docker 里是/data)。手机使用另一个令牌,来自.app-token。要更换智能体的令牌,删除.mcp-token,重启服务器,并更新每一个智能体。 - 配对页面提示令牌错误或缺失。请按服务器打印的原样打开配对链接,包括其中的
?token=部分。 - 配对页面显示的是文字,不是二维码。二维码需要可选的
segno包:pip install "marrow-mcp[qr]"。或者在 Marrow 里选择改为手动输入,然后输入那段文字里的url和token。 - 手机上提示配对失败。手机连不上二维码里的地址。在 Docker 下,服务器只能看到容器自己的地址,所以请把你的地址告诉它:在它的命令里加上
--url http://<your-computer-ip>:8800。不在家里的 Wi-Fi 时,请使用来自tailscale serve或隧道的 HTTPS 地址。 - “本地网络”权限。要连接你家庭网络里的服务器,Marrow 需要“本地网络”访问权限。iOS 会在你第一次配对时询问。如果你选了不允许,请在“设置,隐私与安全性,本地网络”里打开 Marrow,然后在 Marrow 保持打开的情况下重新配对。
- 这个二维码不是 Marrow 的配对码。相机读到的是另一个码。请扫描服务器配对页面上的那个。
- 数据是旧的,或者 Marrow 里显示“未能送达”。手机无法向服务器推送。Marrow 里的 Server MCP 页面会显示上次推送和有多少条记录在等待。请检查服务器是否在运行,然后打开 Marrow 把等待中的内容发出去。后台推送会在 iOS 允许时运行。
- 这台服务器需要先更新才能记录。用
pip install -U marrow-mcp更新它并重启。用 Docker 的话,在克隆下来的目录里运行git pull和docker compose up -d --build。 - AI 的记录没有出现。在“导出,你的连接”里为这台服务器打开允许 AI 写入。写入工具要在那之后才会出现在服务器上。每条记录会在服务器上等待,并在 Marrow 下次打开或唤醒时落地。
- 连接打不开。免费版同时只能开启 1 个连接,Marrow Pro 最多 10 个,AI、服务器和自动化合起来算。
什么时候选它而不是其他方式
当你的智能体需要在手机休眠或不在身边时也能获取数据,或者你想要一个可查询的数据库而不是文件时,选镜像。当你的智能体就在手机附近运行、并且你不想再维护别的东西时,选手机上的 MCP 服务器。当你已经有一个数据该去的地方时,选自动化。