Kết nối một agent với Marrow
Marrow phục vụ dữ liệu Apple Health của bạn qua Model Context Protocol, từ chính iPhone hoặc máy chủ của bạn. Chín công cụ đọc trên điện thoại, mười ba trên máy chủ của riêng bạn (bốn công cụ trả lời theo cách riêng của ứng dụng, chấm điểm theo mức bình thường của riêng bạn), mười hai công cụ ghi sau một công tắc, xác thực bằng bearer token, không cần tài khoản ở đâu cả. Trang này là toàn bộ phần thiết lập.
Agent ở máy khác, hoặc cần câu trả lời khi điện thoại ngủ? Hãy ghép đôi bản sao tự lưu trữ (pip install marrow-mcp): nó trả lời 24/7 cho Claude Code, Cursor và OpenClaw. Nếu bạn đến đây từ trình kết nối Claude hoặc ChatGPT tích hợp sẵn, đây là những gì nó làm được mà chúng không làm.
Thiết lập cho từng ứng dụng, Claude Code, Cursor, Codex và nhiều hơn nữa, nằm trên trang riêng trong mục kết nối.
Tôi muốn kết nối dữ liệu Apple Health của chính tôi với bạn. Marrow là một ứng dụng iOS miễn phí phục vụ nó qua MCP, không cần tài khoản và không cần đăng ký cho việc này. Nó có trên App Store: https://apps.apple.com/app/id6800819435. Hãy hướng dẫn tôi toàn bộ quá trình: cài ứng dụng, bật máy chủ trong Xuất rồi MCP cục bộ, và thêm URL cùng bearer token mà nó hiện cho tôi vào cấu hình MCP của bạn như một máy chủ Streamable HTTP. Nếu bạn không tự sửa được cấu hình đó, hãy cho tôi biết chính xác tệp nào và cần dán gì. Tài liệu thiết lập: https://marrowhealthapp.com/mcp. Khi đã kết nối, hãy gọi health_summary cho 7 ngày gần nhất và cho tôi biết điều gì nổi bật.
1. Bật máy chủ
Nó được giao ở trạng thái tắt. Trong ứng dụng: Xuất → MCP cục bộ, rồi bật máy chủ. Bạn nhận được một URL, một token và một mã QR. Máy chủ chỉ gắn vào mạng cục bộ của bạn, và ứng dụng hiện chính xác địa chỉ mà nó đang lắng nghe.
2. Trỏ client của bạn tới nó
Thay <phone-ip> và <token> bằng những gì ứng dụng hiện cho bạn.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, một lần bấm
Tải marrow.mcpb về máy tính và nhấp đúp vào nó. Claude Desktop cài tiện ích mở rộng và hỏi URL cùng token ở trên. Không cần terminal.
Claude Desktop (thủ công), Cursor, hoặc bất kỳ client nào dùng mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Tự kiểm tra
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"}'
Các công cụ
Việc đọc luôn có sẵn. Việc ghi là một công tắc thứ hai. Máy chủ trên điện thoại liệt kê cùng mười hai công cụ ghi như MCP Cloud (log_meal, log_water, log_weight, log_workout, log_strength, log_sleep, log_symptom, log_mood, edit_entry, delete_entry, set_targets, undo_entry) khi bạn bật Cho phép AI ghi trong MCP cục bộ, áp dụng ngay trên điện thoại và ghi vào Apple Health, mọi thao tác đều hoàn tác được. Khi tắt, máy chủ chỉ đọc.
| Công cụ | Trả về |
|---|---|
health_summary | Những ngày gần đây về hoạt động, tim, giấc ngủ và dinh dưỡng |
list_metrics | Mọi chỉ số được theo dõi, kèm đơn vị và độ phủ |
metric_daily | Giá trị theo ngày của bất kỳ chỉ số nào, tối đa 400 ngày |
metric_samples | Bản ghi thô kèm dấu thời gian và thiết bị nguồn |
workouts | Bài tập từ mọi nguồn. Trên điện thoại còn có các buổi tập sức mạnh của Marrow theo từng hiệp |
nutrition_log | Nhật ký ăn uống với đầy đủ chi tiết chất dinh dưỡng |
strength_log | Mọi hiệp tập tạ với loại hiệp, 1RM ước tính theo từng bài tập, khối lượng theo từng nhóm cơ. Hiệp khởi động không bao giờ tính vào khối lượng hay kỷ lục |
sleep_log | Mỗi đêm một ngày thức dậy: giờ đi ngủ, giờ thức dậy, số giờ ngủ, số phút theo từng giai đoạn (bản sao tự lưu trữ) |
symptoms_and_mood | Triệu chứng kèm mức độ nặng, và các mục State of Mind kèm cảm xúc và chúng nói về điều gì (bản sao tự lưu trữ) |
Bốn công cụ nữa trên bản sao tự lưu trữ và trên MCP Cloud. Chúng bắt đầu từ chỗ các lượt đọc thô dừng lại: mỗi giá trị được chấm điểm theo mức bình thường gần đây của riêng bạn bằng cùng phép tính mà màn hình Trang chủ của ứng dụng dùng (không tính chính ngày đó), nên một agent bắt đầu từ một kết quả đã đúng với bạn thay vì đánh giá một con số so với dân số chung.
| Công cụ | Trả về |
|---|---|
daily_brief | Một ngày: mỗi chỉ số chính với giá trị và cụm từ riêng của ứng dụng (bình thường với bạn, trên mức bình thường của bạn, thấp hơn nhiều mức bình thường của bạn), thực phẩm và nước so với mục tiêu, giấc ngủ đêm qua, buổi tập đã làm, tâm trạng và triệu chứng, và những cờ đáng nhắc tới |
baselines | Mức bình thường của riêng bạn theo từng chỉ số: trung bình và độ phân tán trong khoảng, z và cụm từ của giá trị mới nhất, trung bình 7 ngày và xu hướng 90 ngày theo từng tháng |
what_changed | Tuần vừa qua so với bốn tuần trước nó: cái gì thay đổi và đáng chú ý thế nào với bạn, thực phẩm, tập luyện, thay đổi giấc ngủ và giờ đi ngủ, các luồng dữ liệu bắt đầu hoặc ngừng đến |
data_quality | Bản sao nắm giữ gì và mới đến mức nào: theo từng chỉ số là ngày mới nhất, độ phủ, nhịp, nguồn và việc nó đã cũ chưa, để một agent không bao giờ nhầm một khoảng trống với một sự thật |
Máy chủ trên thiết bị phục vụ bảy công cụ thô đầu tiên cùng daily_brief và baselines (chín lượt đọc). Bản sao tự lưu trữ phục vụ cả mười ba, bản sao MCP Cloud được lưu trữ sẵn cũng vậy. Mỗi lượt đọc trên bản sao nhận số ngày lùi lại hoặc from và to theo lịch của điện thoại, và bản sao cũng cung cấp bốn prompt (how_am_i_doing, weekly_review, doctor_prep, log_from_text) và bốn resource cho các client hiển thị chúng. Mẫu thô mang các giai đoạn giấc ngủ và mức độ nặng của triệu chứng.
Có 172 chỉ số Apple Health đằng sau list_metrics, cùng dữ liệu nhật ký và sức mạnh riêng của Marrow đằng sau nutrition_log và strength_log, bao gồm hoạt động, tim, giấc ngủ, cơ thể, hô hấp, vận động, thính giác, dinh dưỡng, tinh thần, triệu chứng, chu kỳ và thói quen. Phiên bản máy đọc được của trang này: tools.json.
Giữ nó hoạt động khi điện thoại thì không
Máy chủ trên thiết bị trả lời khi ứng dụng đang chạy. Để truy cập 24/7, hãy ghép đôi một bản sao tự lưu trữ: một tệp Python stdlib trên Raspberry Pi, NAS hoặc laptop cũ. Các lần đẩy nền của điện thoại giữ nó luôn mới, và nó nói cùng giao diện MCP tại http://<server-ip>:8800/mcp với token riêng của nó. Các công cụ của điện thoại dùng khóa chỉ số của ứng dụng (active_energy, heart_rate_variability). Máy chủ chấp nhận cả những khóa đó lẫn tên ngắn của Apple (active_energy_burned), nên một agent có thể chuyển qua lại mà không phải học lại. Nó là mã nguồn mở và cài được:
pip install marrow-mcp marrow-server
Mã nguồn: github.com/MarrowHealth/marrow-mcp. Được liệt kê trong registry MCP chính thức với tên tech.skeletonarmy/marrow.
Đừng chuyển tiếp cổng của máy chủ nào ra internet công khai. Cả hai được thiết kế cho mạng LAN hoặc tailnet. Nếu cần truy cập từ xa, hãy đặt tailscale serve hoặc thứ tương đương phía trước, để đường truyền là HTTPS và thiết bị được xác thực trước khi bearer token bị nhìn thấy.
Khắc phục sự cố
Hãy bắt đầu với phép thử bên dưới, chạy từ máy tính mà AI của bạn chạy. Nó cho biết vấn đề nằm ở phía nào. Dùng địa chỉ và token từ trang của kết nối trong Marrow, với Marrow đang mở trên điện thoại.
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"}'
| Bạn nhận được gì | Ý nghĩa |
|---|---|
HTTP/1.1 200 OK và một danh sách công cụ | Điện thoại chạy tốt. Vấn đề nằm ở cài đặt của ứng dụng bạn: địa chỉ, token, hoặc loại máy chủ khác HTTP (Streamable HTTP). Sửa cấu hình và khởi động lại ứng dụng. |
401 Unauthorized | Token sai, hoặc kết nối này đang tắt trong Marrow. Mỗi kết nối trong Kết nối của bạn có token riêng, và tắt một kết nối sẽ chặn ứng dụng đó trong khi các ứng dụng khác vẫn chạy. Bật nó lên, hoặc sao chép lại token của nó. |
404 Not Found kèm use POST /mcp | Đường dẫn sai. Địa chỉ kết thúc bằng /mcp. |
| Kết nối bị từ chối, hoặc không có phản hồi cho đến khi hết thời gian chờ | Máy tính không tới được điện thoại. Hãy đi qua danh sách bên dưới. |
- Marrow phải đang mở. Máy chủ trên điện thoại chỉ trả lời khi Marrow đang mở ở nền trước. Khi bạn chuyển ứng dụng hoặc khóa điện thoại, iOS sẽ sớm tạm dừng nó. Mở lại Marrow là nó trả lời lại. Để có câu trả lời khi điện thoại ngủ, hãy dùng MCP máy chủ hoặc MCP Cloud.
- Cùng Wi-Fi hoặc tailnet. Máy tính và điện thoại phải dùng chung một mạng Wi-Fi hoặc một tailnet. MCP cục bộ không bao giờ trả lời qua mạng di động. Nếu Marrow báo Không tìm thấy địa chỉ mạng, hãy kết nối Wi-Fi hoặc một tailnet. Wi-Fi khách và khách sạn thường chặn các thiết bị tìm thấy nhau.
- Địa chỉ tailnet hay địa chỉ Wi-Fi. Marrow hiện một trong các địa chỉ của điện thoại, thường là địa chỉ Wi-Fi. Một máy tính tới điện thoại qua Tailscale cần địa chỉ tailnet của điện thoại. Ứng dụng Tailscale hiện nó (bắt đầu bằng
100.). Hãy đặt nó vào cấu hình thay cho địa chỉ Wi-Fi và giữ nguyên cổng và token. - Địa chỉ đã đổi. Bộ định tuyến có thể cấp cho điện thoại một địa chỉ Wi-Fi mới sau một thời gian. So sánh địa chỉ trong Marrow với địa chỉ trong cấu hình của bạn. Một địa chỉ được đặt trước trên bộ định tuyến giữ nó cố định.
- Quyền truy cập Mạng cục bộ không phải nguyên nhân. iOS hỏi quyền này khi Marrow kết nối tới một thiết bị trong mạng của bạn, chẳng hạn một máy chủ đã ghép đôi. Việc máy chủ trên điện thoại trả lời một máy tính không cần quyền nào, nên bật hay tắt công tắc đó không thay đổi MCP cục bộ.
- VPN trên máy tính. Một VPN không phải tailnet của bạn có thể đưa lưu lượng cục bộ đi khỏi Wi-Fi của bạn. Tạm dừng nó và thử lại phép thử.
- Mã 405 trong nhật ký ứng dụng của bạn. Điện thoại chỉ trả lời POST và không giữ luồng nào mở, nên một GET nhận
405. Các ứng dụng dùng Streamable HTTP vẫn tiếp tục với POST, nên riêng dòng này không phải vấn đề. - Ứng dụng của bạn chỉ nhận một lệnh (stdio). Cho địa chỉ của điện thoại đi qua cầu nối mcp-remote. Nó cần
--allow-httpcho địa chỉ http thuần không nằm trên chính máy tính:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". Trong tệp cấu hình cho Cursor, Codex hoặc Claude Desktop trên Windows, dấu cách bên trong args có thể bị lỗi. Hãy viết tiêu đề làAuthorization:${AUTH_HEADER}và đặtAUTH_HEADERthànhBearer <token>trong env của máy chủ. - Đọc được nhưng không ghi được. Bật Cho phép AI ghi trong MCP cục bộ. Các mục được áp dụng ngay trên điện thoại và mục nào cũng hoàn tác được.
- Kết nối không bật lên được. Gói miễn phí giữ được 1 kết nối bật cùng lúc, Marrow Pro tới 10: AI, máy chủ và tự động hóa cộng lại. Hãy tắt một kết nối trong Kết nối của bạn trước.
Thiết lập và cách khắc phục cho từng ứng dụng, Claude Code, Cursor, VS Code và nhiều hơn nữa, nằm ở mục kết nối.
Chi phí là bao nhiêu
Không gì cả. Truy cập cho agent nằm trong gói miễn phí, cùng với đồng bộ nền, xuất tự động, xuất CSV và JSON, và quét mã vạch. Health Auto Export ra mắt máy chủ MCP trước Marrow, và nó tốt, nhưng của họ yêu cầu đăng ký Premium. Sự khác biệt đó, chứ không phải việc đến trước, mới là điều đáng nói.
Yêu cầu
- iOS 17 trở lên, và Apple Health. Không có phiên bản Android hay web.
- Marrow có trên App Store, miễn phí: apps.apple.com/app/id6800819435.
- Không có tài khoản Marrow nào, nên không có API được lưu trữ sẵn để gọi mà không có thiết bị của chính người dùng.