把智能体连接到 Marrow
Marrow 通过 Model Context Protocol 提供你的 Apple Health 数据,来源是你自己的 iPhone 或你自己的服务器。手机上有九个读取工具,你自己的服务器上有十三个(其中四个按应用自己的说法作答,并对照你自己的日常水平打分),开关后面还有十二个写入工具,使用承载令牌验证,任何地方都不需要账号。整个设置过程都在这一页。
智能体在另一台机器上,或者需要手机休眠时也能得到答案?配对自托管镜像(pip install marrow-mcp):它全天候为 Claude Code、Cursor 和 OpenClaw 应答。如果你是从内置的 Claude 或 ChatGPT 连接器过来的,这里说明了它能做而它们做不到的事.
一次一个应用的设置方法(Claude Code、Cursor、Codex 等)各有专门的页面,见连接.
我想把自己的 Apple Health 数据连接给你。Marrow 是一款免费的 iOS 应用,可以通过 MCP 提供这些数据,这一步不需要账号,也不需要订阅。它在 App Store 上:https://apps.apple.com/app/id6800819435 请带我完成整个过程:安装应用,在“导出”里的“本地 MCP”下打开服务器,再把它显示给我的 URL 和承载令牌,作为 Streamable HTTP 服务器添加到你的 MCP 配置里。如果你自己没法修改那个配置,请告诉我具体是哪个文件,以及要粘贴什么。设置文档:https://marrowhealthapp.com/mcp 连接成功后,请调用 health_summary 查看最近 7 天,并告诉我有什么值得注意的地方。
1. 打开服务器
它默认是关闭的。在应用里:导出 → 本地 MCP,然后启用服务器。你会得到一个 URL、一个令牌和一个二维码。服务器只绑定到你的本地网络,应用会显示它正在监听的确切地址。
2. 让你的客户端指向它
把 <phone-ip> 和 <token> 换成应用显示给你的内容。
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop,一键安装
在电脑上下载 marrow.mcpb 并双击它。Claude Desktop 会安装这个扩展,并询问上面的 URL 和令牌。全程不用终端。
Claude Desktop(手动)、Cursor,或任何使用 mcp.json 的客户端
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
手动检查
curl -s http://<phone-ip>:21212/mcp \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
工具
读取始终可用。写入是第二个开关。只要你在“本地 MCP”下打开允许 AI 写入,手机上的服务器就会列出与 Cloud MCP 相同的十二个写入工具(log_meal、log_water、log_weight、log_workout、log_strength、log_sleep、log_symptom、log_mood、edit_entry、delete_entry、set_targets、undo_entry),在手机上立即生效并写入 Apple Health,每一项都可以撤销。关闭时,服务器是只读的。
| 工具 | 返回内容 |
|---|---|
health_summary | 最近几天的活动、心脏、睡眠和营养概况 |
list_metrics | 追踪的每个指标,附单位和覆盖范围 |
metric_daily | 任意指标的每日数值,最多 400 天 |
metric_samples | 带时间戳和来源设备的原始记录 |
workouts | 来自所有来源的训练。在手机上,还包括 Marrow 的力量训练,逐组列出 |
nutrition_log | 带完整营养素明细的饮食日记 |
strength_log | 每一个力量组及其组类型,每个动作的估算 1RM,每个肌群的训练量。热身组从不计入训练量或记录 |
sleep_log | 按起床日算,每晚一条:就寝时间、起床时间、睡眠时长、各阶段分钟数(自托管镜像) |
symptoms_and_mood | 症状及其严重程度,心境记录及其感受和相关内容(自托管镜像) |
自托管镜像和 Cloud MCP 上还有四个。它们从原始读取止步的地方开始:每个数值都用应用首页所用的同一套算法,对照你自己近期的日常水平打分(不含当天本身),这样智能体一开始拿到的就是对你而言已经成立的判断,而不必拿一个数字去和普通人群比较。
| 工具 | 返回内容 |
|---|---|
daily_brief | 一天的概览:每个关键指标的数值和应用自己的说法(对你来说正常、高于你的日常水平、远低于你的日常水平),饮食和饮水与目标的对比,昨晚的睡眠,完成的训练,心情和症状,以及值得一提的提示 |
baselines | 每个指标你自己的日常水平:时间窗口内的均值和离散程度,最新数值的 z 值和说法,7 天均值,以及每月的 90 天趋势 |
what_changed | 最近一周与之前四周的对比:什么变了、对你来说有多显著,饮食、训练、睡眠和就寝时间的变化,以及开始或停止到达的数据流 |
data_quality | 镜像里有什么、有多新:每个指标的最新日期、覆盖范围、更新频率、来源,以及是否已经过时,这样智能体就不会把空缺当成事实 |
设备端服务器提供前七个原始工具,外加 daily_brief 和 baselines(共九个读取工具)。自托管镜像提供全部十三个,托管的 Cloud MCP 副本也是如此。镜像上的每个读取工具都可以传入回溯天数,或按手机日历传入起止日期,镜像还会向能显示它们的客户端提供四个提示词(how_am_i_doing、weekly_review、doctor_prep、log_from_text)和四个资源。原始样本带有睡眠阶段和症状严重程度。
list_metrics 背后有 172 项 Apple Health 指标,nutrition_log 和 strength_log 背后则是 Marrow 自有的日记和力量数据,涵盖活动、心脏、睡眠、身体、呼吸、行动能力、听力、营养、心理、症状、周期和习惯。本页的机器可读版本:tools.json.
手机不在线时,保持可用
设备端服务器在应用运行时应答。想要全天候访问,就配对一个自托管镜像:在树莓派、NAS 或旧笔记本上运行一个只用 Python 标准库的文件。手机的后台推送让它保持最新,它在 http://<server-ip>:8800/mcp 提供同样的 MCP 接口,使用它自己的令牌。手机上的工具使用应用的指标键名(active_energy、heart_rate_variability)。服务器两种都接受,也接受 Apple 的短名称(active_energy_burned),所以智能体在它们之间切换不用重新学习。它是开源的,可以安装:
pip install marrow-mcp marrow-server
源码:github.com/MarrowHealth/marrow-mcp。已列入官方 MCP 注册表,名称为 tech.skeletonarmy/marrow.
不要把任何一个服务器通过端口转发暴露到公网。两者都是为局域网或 tailnet 设计的。如果需要远程访问,请在前面放 tailscale serve 或类似的东西,让传输使用 HTTPS,并在承载令牌被看到之前先对设备做身份验证。
问题排查
先做下面这个测试,在你的 AI 所在的电脑上运行。它能告诉你问题出在哪一边。使用 Marrow 里该连接页面上的地址和令牌,并让 Marrow 在手机上保持打开。
curl -i http://<phone-ip>:21212/mcp \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
| 你得到的结果 | 意味着什么 |
|---|---|
HTTP/1.1 200 OK 和一个工具列表 | 手机这边没问题。问题出在你的应用设置里:地址、令牌,或者服务器类型不是 HTTP(Streamable HTTP)。修正配置并重启应用。 |
401 Unauthorized | 令牌不对,或者这个连接在 Marrow 里是关闭的。“你的连接”里的每个连接都有自己的令牌,关闭其中一个会把那个应用挡在外面,其他的照常工作。请把它打开,或者重新复制它的令牌。 |
404 Not Found,附带 use POST /mcp | 路径不对。地址要以 /mcp 结尾. |
| 连接被拒绝,或者一直没有回应直到超时 | 电脑连不上手机。请按下面的清单逐项排查。 |
- Marrow 必须保持打开。手机上的服务器只有在 Marrow 打开在前台时才会应答。切换应用或锁屏后,iOS 很快就会把它暂停。重新打开 Marrow,它就又能应答了。想在手机休眠时也有应答,请用 Server MCP 或 Cloud MCP.
- 同一个 Wi-Fi 或 tailnet。电脑和手机必须在同一个 Wi-Fi 网络或 tailnet 里。本地 MCP 不会通过蜂窝网络应答。如果 Marrow 显示 未找到网络地址,请连上 Wi-Fi 或加入 tailnet。访客 Wi-Fi 和酒店 Wi-Fi 常常会阻止设备互相访问。
- tailnet 地址还是 Wi-Fi 地址。Marrow 显示的是手机的某一个地址,通常是 Wi-Fi 地址。通过 Tailscale 连接手机的电脑则需要手机的 tailnet 地址。Tailscale 应用里能看到它(以
100.开头)。把它填进你的配置,替换 Wi-Fi 地址,端口和令牌保持不变。 - 地址变了。路由器过一段时间可能会给手机分配新的 Wi-Fi 地址。请把 Marrow 里的地址和你配置里的对比一下。在路由器上为手机预留一个固定地址就能保持不变。
- 原因不在“本地网络”权限。iOS 会在 Marrow 主动连接你网络里的设备(比如已配对的服务器)时询问这项权限。手机上的服务器回应电脑不需要权限,所以开关这个选项不会影响本地 MCP。
- 电脑上的 VPN。你的 tailnet 以外的 VPN 可能会把本地流量引离你的 Wi-Fi。先暂停它,再重新做一次测试。
- 应用日志里出现 405。手机只应答 POST,也不保持打开的数据流,所以 GET 请求会得到
405。支持 Streamable HTTP 的应用会继续用 POST,所以光是这一行并不是问题所在。 - 你的应用只接受命令(stdio)。让手机的地址通过 mcp-remote 桥接。对于不在电脑本机上的纯 http 地址,需要加
--allow-http:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>"。在 Windows 上的 Cursor、Codex 或 Claude Desktop 配置文件里,args 中的空格可能被破坏。请把请求头写成Authorization:${AUTH_HEADER},并在服务器的 env 里把AUTH_HEADER设为Bearer <token>。 - 能读取,但不能记录。在“本地 MCP”下打开允许 AI 写入。记录会立即在手机上生效,每一条都可以撤销。
- 连接打不开。免费版同时只能开启 1 个连接,Marrow Pro 最多 10 个,AI、服务器和自动化合起来算。请先在“你的连接”里关掉一个。
一次一个应用的设置方法和问题修复(Claude Code、Cursor、VS Code 等)见连接.
要花多少钱
不花钱。智能体访问包含在免费档里,后台同步、自动导出、CSV 和 JSON 导出,以及条形码扫描也都在其中。Health Auto Export 比 Marrow 更早推出了 MCP 服务器,而且做得不错,但它的需要 Premium 订阅。值得说的是这个差别,而不是谁先谁后。
使用要求
- iOS 17 或更高版本,以及 Apple Health。没有 Android 或网页版。
- Marrow 在 App Store 上免费下载:apps.apple.com/app/id6800819435.
- Marrow 没有账号体系,所以没有脱离用户自己的设备就能调用的托管 API。