เชื่อมต่อเอเจนต์กับ Marrow
Marrow ให้บริการข้อมูล Apple Health ของคุณผ่าน Model Context Protocol จาก iPhone ของคุณเองหรือเซิร์ฟเวอร์ของคุณเอง เครื่องมืออ่านอย่างเดียวเก้าตัวบนโทรศัพท์ สิบสามตัวบนเซิร์ฟเวอร์ของคุณเอง (สี่ตัวตอบด้วยภาษาของแอปเอง ให้คะแนนเทียบกับค่าปกติของตัวคุณเอง) เครื่องมือเขียนสิบสองตัวหลังสวิตช์ ยืนยันตัวตนด้วย bearer token ไม่มีบัญชีที่ไหนเลย หน้านี้คือขั้นตอนตั้งค่าทั้งหมด
เอเจนต์อยู่บนอีกเครื่อง หรือต้องการคำตอบขณะโทรศัพท์พักอยู่ใช่ไหม จับคู่มิเรอร์ที่โฮสต์เอง (pip install marrow-mcp) ซึ่งตอบได้ตลอด 24 ชั่วโมงสำหรับ 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 กับ bearer token ที่มันแสดงลงในคอนฟิก MCP ของคุณเป็นเซิร์ฟเวอร์แบบ Streamable HTTP ถ้าคุณแก้คอนฟิกนั้นเองไม่ได้ ให้บอกฉันว่าไฟล์ไหนและต้องวางอะไร เอกสารการตั้งค่า: 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"}'
เครื่องมือ
การอ่านมีอยู่เสมอ การเขียนเป็นสวิตช์ที่สอง เมื่อคุณเปิด อนุญาตให้ AI เขียนข้อมูล ใต้ MCP ในเครื่อง เซิร์ฟเวอร์ของโทรศัพท์จะแสดงเครื่องมือเขียนสิบสองตัวชุดเดียวกับ 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 | อาการพร้อมความรุนแรง และรายการ State of Mind พร้อมความรู้สึกและสิ่งที่เกี่ยวข้อง (มิเรอร์ที่โฮสต์เอง) |
อีกสี่ตัวบนมิเรอร์ที่โฮสต์เองและบน MCP คลาวด์ เริ่มต้นตรงที่การอ่านดิบหยุด คือแต่ละค่าถูกให้คะแนนเทียบกับค่าปกติย้อนหลังของตัวคุณเอง ด้วยการคำนวณเดียวกับหน้าแรกของแอป (ไม่รวมวันนั้นเอง) เอเจนต์จึงเริ่มจากการอ่านที่จริงสำหรับคุณแล้ว แทนที่จะตัดสินตัวเลขเทียบกับประชากรทั่วไป
| เครื่องมือ | สิ่งที่ส่งคืน |
|---|---|
daily_brief | หนึ่งวัน: แต่ละตัวชี้วัดหลักพร้อมค่าและถ้อยคำของแอปเอง (ปกติสำหรับคุณ สูงกว่าปกติของคุณ ต่ำกว่าปกติของคุณมาก) อาหารและน้ำเทียบกับเป้าหมาย การนอนหลับเมื่อคืน การฝึกที่ทำ อารมณ์และอาการ และสิ่งที่ควรกล่าวถึง |
baselines | ค่าปกติของคุณต่อตัวชี้วัด: ค่าเฉลี่ยและการกระจายในช่วงเวลา z และถ้อยคำของค่าล่าสุด ค่าเฉลี่ย 7 วัน และแนวโน้ม 90 วันต่อเดือน |
what_changed | สัปดาห์ล่าสุดเทียบกับสี่สัปดาห์ก่อนหน้า: อะไรเปลี่ยนและน่าสังเกตสำหรับคุณแค่ไหน อาหาร การฝึก การเปลี่ยนแปลงของการนอนและเวลาเข้านอน สตรีมข้อมูลที่เริ่มหรือหยุดเข้ามา |
data_quality | สิ่งที่มิเรอร์เก็บอยู่และสดใหม่แค่ไหน: ต่อตัวชี้วัดคือวันล่าสุด ความครอบคลุม ความถี่ แหล่งที่มา และล้าสมัยหรือยัง เอเจนต์จึงไม่เข้าใจช่องว่างเป็นข้อเท็จจริง |
เซิร์ฟเวอร์บนอุปกรณ์ให้บริการเครื่องมือดิบเจ็ดตัวแรกพร้อม daily_brief และ baselines (อ่านได้เก้าอย่าง) มิเรอร์ที่โฮสต์เองให้บริการทั้งสิบสามตัว เช่นเดียวกับสำเนา MCP คลาวด์ที่โฮสต์ให้ ทุกการอ่านบนมิเรอร์รับค่าจำนวนวันย้อนหลังหรือจากและถึงตามปฏิทินของโทรศัพท์ และมิเรอร์ยังมีพรอมต์สี่ตัว (how_am_i_doing, weekly_review, doctor_prep, log_from_text) และทรัพยากรสี่รายการสำหรับไคลเอนต์ที่แสดงสิ่งเหล่านี้ ตัวอย่างดิบมีระยะการนอนหลับและความรุนแรงของอาการ
มีตัวชี้วัด Apple Health 172 ตัวอยู่เบื้องหลัง list_metrics บวกข้อมูลไดอารี่และเวทเทรนนิ่งของ Marrow เองอยู่เบื้องหลัง nutrition_log และ strength_log ครอบคลุมกิจกรรม หัวใจ การนอนหลับ ร่างกาย ระบบหายใจ การเคลื่อนไหว การได้ยิน โภชนาการ จิตใจ อาการ รอบเดือน และนิสัย หน้านี้ฉบับที่เครื่องอ่านได้: tools.json.
ให้ทำงานต่อเมื่อโทรศัพท์ไม่อยู่
เซิร์ฟเวอร์บนอุปกรณ์ตอบขณะที่แอปกำลังทำงาน หากต้องการเข้าถึงตลอด 24 ชั่วโมง ให้จับคู่มิเรอร์ที่โฮสต์เอง: ไฟล์ Python stdlib หนึ่งไฟล์บน Pi, NAS หรือแล็ปท็อปเครื่องเก่า การส่งข้อมูลเบื้องหลังของโทรศัพท์ทำให้ข้อมูลทันสมัย และมันพูด MCP แบบเดียวกันที่ http://<server-ip>:8800/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.
อย่าทำ port-forward ของเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งออกสู่อินเทอร์เน็ตสาธารณะ ทั้งสองออกแบบมาสำหรับ LAN หรือ tailnet หากต้องการเข้าถึงระยะไกล ให้วาง tailscale serve หรือสิ่งเทียบเท่าไว้ด้านหน้า เพื่อให้การส่งข้อมูลเป็น HTTPS และอุปกรณ์ได้รับการยืนยันตัวตนก่อนที่ใครจะเห็น bearer token
การแก้ปัญหา
เริ่มจากการทดสอบด้านล่าง รันจากคอมพิวเตอร์ที่ 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 | path ผิด ที่อยู่ต้องลงท้ายด้วย /mcp. |
| การเชื่อมต่อถูกปฏิเสธ หรือไม่มีการตอบจนหมดเวลา | คอมพิวเตอร์เข้าถึงโทรศัพท์ไม่ได้ ไล่ดูรายการด้านล่าง |
- ต้องเปิด Marrow ไว้ เซิร์ฟเวอร์ของโทรศัพท์ตอบเฉพาะเมื่อ Marrow เปิดอยู่ด้านหน้า เมื่อสลับแอปหรือล็อกโทรศัพท์ iOS จะหยุดมันไม่นานหลังจากนั้น เปิด Marrow อีกครั้งแล้วจะตอบอีกครั้ง หากต้องการคำตอบขณะโทรศัพท์พักอยู่ ให้ใช้ MCP เซิร์ฟเวอร์หรือ MCP คลาวด์.
- Wi-Fi หรือ tailnet เดียวกัน คอมพิวเตอร์และโทรศัพท์ต้องใช้เครือข่าย Wi-Fi หรือ tailnet เดียวกัน MCP ในเครื่องไม่ตอบผ่านเครือข่ายมือถือเลย ถ้า Marrow ขึ้นว่า ไม่พบที่อยู่เครือข่าย ให้เชื่อมต่อ Wi-Fi หรือ tailnet Wi-Fi สำหรับแขกและโรงแรมมักทำให้อุปกรณ์เข้าถึงกันไม่ได้
- ที่อยู่ tailnet หรือที่อยู่ Wi-Fi Marrow แสดงหนึ่งในที่อยู่ของโทรศัพท์ ปกติคือที่อยู่ Wi-Fi คอมพิวเตอร์ที่เข้าถึงโทรศัพท์ผ่าน Tailscale ต้องใช้ที่อยู่ tailnet ของโทรศัพท์แทน แอป Tailscale แสดงให้ดู (ขึ้นต้นด้วย
100.) ใส่ในคอนฟิกแทนที่อยู่ Wi-Fi และคงพอร์ตกับโทเคนเดิม - ที่อยู่เปลี่ยน เราเตอร์อาจให้ที่อยู่ Wi-Fi ใหม่กับโทรศัพท์หลังผ่านไปสักพัก เทียบที่อยู่ใน Marrow กับที่อยู่ในคอนฟิกของคุณ การจองที่อยู่ไว้บนเราเตอร์จะทำให้ที่อยู่คงที่
- สิทธิ์เข้าถึงเครือข่ายในพื้นที่ไม่ใช่สาเหตุ iOS ถามเมื่อ Marrow ติดต่ออุปกรณ์ในเครือข่ายของคุณ เช่น เซิร์ฟเวอร์ที่จับคู่ไว้ แต่เซิร์ฟเวอร์ของโทรศัพท์ที่ตอบคอมพิวเตอร์ไม่ต้องใช้สิทธิ์ใดๆ การเปิดหรือปิดสวิตช์นั้นจึงไม่เปลี่ยน MCP ในเครื่อง
- VPN บนคอมพิวเตอร์ VPN ที่ไม่ใช่ tailnet ของคุณอาจส่งทราฟฟิกในเครือข่ายออกไปนอก Wi-Fi ของคุณ หยุดมันชั่วคราวแล้วลองทดสอบอีกครั้ง
- มี 405 ในบันทึกของแอปคุณ โทรศัพท์ตอบเฉพาะ POST และไม่เปิดสตรีมค้างไว้ GET จึงได้
405แอปที่ใช้ Streamable HTTP จะทำต่อด้วย POST ดังนั้นบรรทัดนี้อย่างเดียวไม่ใช่ปัญหา - แอปของคุณรับได้แค่คำสั่ง (stdio) ส่งที่อยู่ของโทรศัพท์ผ่านบริดจ์ mcp-remote ซึ่งต้องใช้
--allow-httpสำหรับที่อยู่ http ธรรมดาที่ไม่ได้อยู่บนคอมพิวเตอร์เครื่องนั้นเอง:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>"ในไฟล์คอนฟิกของ Cursor, Codex หรือ Claude Desktop บน Windows ช่องว่างใน args อาจเพี้ยนได้ ให้เขียนเฮดเดอร์เป็นAuthorization:${AUTH_HEADER}และตั้งAUTH_HEADERเป็นBearer <token>ใน env ของเซิร์ฟเวอร์ - อ่านได้แต่บันทึกไม่ได้ เปิด อนุญาตให้ AI เขียนข้อมูล ใต้ MCP ในเครื่อง รายการมีผลทันทีบนโทรศัพท์และยกเลิกได้ทุกรายการ
- เปิดการเชื่อมต่อไม่ได้ แพลนฟรีเปิดได้ครั้งละ 1 การเชื่อมต่อ Marrow Pro ได้สูงสุด 10 รวม AI เซิร์ฟเวอร์ และการทำงานอัตโนมัติทั้งหมด ปิดหนึ่งรายการใน การเชื่อมต่อของคุณ ก่อน
ขั้นตอนตั้งค่าและวิธีแก้สำหรับแต่ละแอป เช่น Claude Code, Cursor, VS Code และอื่นๆ อยู่ในการเชื่อมต่อ.
ค่าใช้จ่าย
ไม่มีเลย การเข้าถึงของเอเจนต์อยู่ในระดับฟรี พร้อมการซิงค์เบื้องหลัง การส่งออกอัตโนมัติ การส่งออก CSV และ JSON และการสแกนบาร์โค้ด Health Auto Export ออกเซิร์ฟเวอร์ MCP ก่อน Marrow และก็ดี แต่ของเขาต้องสมัครสมาชิก Premium ความต่างนั้น ไม่ใช่การเป็นรายแรก คือสิ่งที่ควรพูดถึง
ข้อกำหนด
- iOS 17 ขึ้นไป และ Apple Health ไม่มีเวอร์ชัน Android หรือเว็บ
- Marrow อยู่บน App Store ฟรี: apps.apple.com/app/id6800819435.
- ไม่มีบัญชี Marrow จึงไม่มี API ที่โฮสต์ไว้ให้เรียกได้โดยไม่ใช้อุปกรณ์ของผู้ใช้เอง