חיבור סוכן ל-Marrow
Marrow מגיש את נתוני Apple Health שלכם דרך Model Context Protocol, מה-iPhone שלכם או מהשרת שלכם. שבעה כלים לקריאה בלבד בטלפון, שלושה עשר בשרת שלכם (ארבעה מהם עונים במונחים של האפליקציה עצמה, מדורגים ביחס לנורמה שלכם), אימות עם אסימון bearer, בלי חשבון בשום מקום. הדף הזה הוא כל ההגדרה.
סוכן במחשב אחר, או צריכים תשובות בזמן שהטלפון ישן? צמדו את המראה באירוח עצמי (pip install marrow-mcp): היא עונה 24/7 ל-Claude Code, ל-Cursor ול-OpenClaw. אם הגעתם לכאן מהמחבר המובנה של Claude או של ChatGPT, הנה מה שהיא עושה ושהם לא.
ההגדרה לכל אפליקציה בנפרד, Claude Code, Cursor, Codex ועוד, נמצאת בדף משלה תחת חיבורים.
אני רוצה לחבר אליך את נתוני Apple Health שלי. Marrow היא אפליקציית iOS חינמית שמגישה אותם דרך MCP, בלי חשבון ובלי מנוי לשם כך. היא ב-App Store: https://apps.apple.com/app/id6800819435. הדרך אותי בכל התהליך: התקנת האפליקציה, הפעלת השרת תחת ייצוא ואז MCP מקומי, והוספת הכתובת ואסימון ה-bearer שהיא מציגה לי להגדרות ה-MCP שלך כשרת Streamable HTTP. אם אתה לא יכול לערוך את ההגדרות האלה בעצמך, אמור לי את הקובץ המדויק ומה להדביק. תיעוד ההגדרה: https://marrowhealthapp.com/mcp. כשהוא מחובר, הפעל את health_summary ל-7 הימים האחרונים וספר לי מה בולט.
1. הפעלת השרת
הוא מגיע כבוי. באפליקציה: ייצוא ← MCP מקומי, ואז הפעילו את השרת. תקבלו כתובת, אסימון וקוד QR. השרת מאזין לרשת המקומית שלכם בלבד, והאפליקציה מציגה את הכתובת המדויקת שעליה הוא מאזין.
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 מתקין את התוסף ומבקש את הכתובת והאסימון שלמעלה. בלי טרמינל.
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"}'
הכלים
הקריאות תמיד שם. הכתיבות הן מתג שני. מ-Marrow 1.5 השרת של הטלפון מציג את אותם שנים עשר כלי כתיבה כמו ב-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) ברגע שמפעילים אפשר כתיבה על ידי AI תחת MCP מקומי, מיושמים מיד בטלפון ונכתבים ל-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 Cloud. הם מתחילים איפה שהקריאות הגולמיות נגמרות: כל ערך מדורג ביחס לנורמה הנגררת שלכם עם אותו חישוב שמסך הבית של האפליקציה משתמש בו (היום עצמו לא נכלל), כך שסוכן מתחיל מקריאה שכבר נכונה עבורכם במקום לשפוט מספר מול האוכלוסייה.
| כלי | מחזיר |
|---|---|
daily_brief | יום אחד: כל מדד מפתח עם הערך שלו והביטוי של האפליקציה עצמה (רגיל עבורכם, מעל הרגיל שלכם, הרבה מתחת לרגיל שלכם), מזון ומים מול היעדים שלכם, השינה של אמש, האימונים שנעשו, מצב רוח ותסמינים, ודגלים ששווה להזכיר |
baselines | הנורמה שלכם לכל מדד: ממוצע וסטייה בחלון, ה-z והביטוי של הערך האחרון, ממוצע 7 ימים ומגמת 90 הימים לכל חודש |
what_changed | השבוע האחרון מול ארבעת הקודמים לו: מה זז ועד כמה זה בולט עבורכם, מזון, אימונים, שינה ושינויים בשעת השינה, זרמי נתונים שהתחילו או הפסיקו להגיע |
data_quality | מה המראה מחזיקה ועד כמה זה טרי: לכל מדד היום האחרון, כיסוי, קצב, מקורות והאם התיישן, כך שסוכן אף פעם לא מטעה פער בעובדה |
השרת שעל המכשיר מגיש את שבעת הכלים הגולמיים הראשונים בתוספת daily_brief ו-baselines (תשע קריאות). המראה באירוח עצמי מגישה את כל שלושה עשר, וכך גם העותק המאורח של MCP Cloud. כל קריאה במראה מקבלת ימים אחורה או from ו-to לפי לוח השנה של הטלפון, והמראה מציעה גם ארבעה פרומפטים (how_am_i_doing, weekly_review, doctor_prep, log_from_text) וארבעה משאבים ללקוחות שמציגים אותם. דגימות גולמיות נושאות שלבי שינה וחומרת תסמינים.
מאחורי list_metrics יש 172 מדדים של Apple Health, ובנוסף נתוני יומן וכוח ילידיים של Marrow מאחורי nutrition_log ו-strength_log, שמכסים פעילות, לב, שינה, גוף, נשימה, ניידות, שמיעה, תזונה, נפש, תסמינים, מחזור והרגלים. גרסה קריאה למכונה של הדף הזה: tools.json.
להמשיך לעבוד כשהטלפון לא
השרת שעל המכשיר עונה כשהאפליקציה רצה. לגישה 24/7, צמדו מראה באירוח עצמי: קובץ Python אחד עם ספרייה סטנדרטית בלבד על 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 לאף אחד מהשרתים לאינטרנט הפתוח. שניהם מיועדים לרשת מקומית או ל-tailnet. אם אתם צריכים גישה מרחוק, העמידו לפניו tailscale serve או מקבילה, כך שהתעבורה היא HTTPS והמכשיר מאומת לפני שאסימון ה-bearer נראה בכלל.
פתרון בעיות
התחילו בבדיקה שלמטה, שמריצים מהמחשב שה-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 שוב והוא עונה שוב. לתשובות כשהטלפון ישן, השתמשו ב-MCP בשרת או ב-MCP Cloud.
- אותה רשת 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, רווחים בתוך ארגומנטים יכולים להתקלקל. כתבו את הכותרת כ-Authorization:${AUTH_HEADER}והגדירו אתAUTH_HEADERל-Bearer <token>ב-env של השרת. - הוא קורא אבל לא יכול לרשום. הפעילו את אפשר כתיבה על ידי AI תחת MCP מקומי. רשומות מיושמות מיד בטלפון וכל אחת אפשר לבטל.
- החיבור לא נדלק. במסלול החינמי חיבור אחד פועל בכל רגע, ב-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 באירוח שאפשר לקרוא לו בלי המכשיר של המשתמש עצמו.