اربط وكيلًا بـ Marrow
يقدّم Marrow بيانات Apple Health عبر Model Context Protocol، من iPhone الخاص بك أو من خادمك الخاص. سبع أدوات للقراءة فقط على الهاتف، وثلاث عشرة على خادمك (أربع منها تجيب بمصطلحات التطبيق نفسه، مقيّمة مقابل معدلك الطبيعي)، ومصادقة برمز bearer، وبلا حساب في أي مكان. هذه الصفحة هي الإعداد كله.
وكيل على جهاز آخر، أو تحتاج إلى إجابات والهاتف نائم؟ اقرن النسخة المطابقة المستضافة ذاتيًا (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 ورمز bearer اللذين يعرضهما لي إلى إعدادات MCP لديك كخادم Streamable HTTP. وإذا لم تستطع تعديل تلك الإعدادات بنفسك، فأخبرني بالملف بالضبط وما ألصقه. وثائق الإعداد: https://marrowhealthapp.com/mcp. وعندما يتصل، استدعِ health_summary لآخر 7 أيام وأخبرني بما يلفت النظر.
1. شغّل الخادم
يأتي متوقفًا. في التطبيق: تصدير ← MCP محلي، ثم فعّل الخادم. تحصل على URL ورمز ورمز 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 الإضافة ويطلب الـ 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"}'
الأدوات
القراءات موجودة دائمًا. والكتابات مفتاح ثانٍ. من 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) بعد أن تشغّل السماح للذكاء الاصطناعي بالكتابة تحت MCP محلي، وتُطبَّق فورًا على الهاتف وتُكتب في Apple Health، وكل واحدة منها قابلة للتراجع. وعند إيقافه يكون الخادم للقراءة فقط.
| الأداة | ما تعيده |
|---|---|
health_summary | الأيام الأخيرة عبر النشاط والقلب والنوم والتغذية |
list_metrics | كل مقياس يُتتبَّع، مع الوحدات والتغطية |
metric_daily | قيم يومية لأي مقياس، حتى 400 يوم |
metric_samples | سجلات خام مع الطوابع الزمنية والأجهزة المصدر |
workouts | التمارين من كل مصدر. وعلى الهاتف أيضًا جلسات القوة في Marrow جولةً بجولة |
nutrition_log | يوميات الطعام مع التفصيل الكامل للعناصر الغذائية |
strength_log | كل جولة رفع مع نوعها، وأقصى وزن مقدَّر لتكرار واحد لكل تمرين، والحجم لكل مجموعة عضلية. جولات الإحماء لا تُحتسب أبدًا في الحجم أو الأرقام القياسية |
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) وأربعة موارد للعملاء الذين يعرضونها. وتحمل العينات الخام مراحل النوم وشدة الأعراض.
هناك 172 مقياسًا من Apple Health خلف list_metrics، إضافةً إلى بيانات اليوميات والقوة الأصلية في Marrow خلف nutrition_log وstrength_log، وتغطي النشاط والقلب والنوم والجسم والتنفس والحركة والسمع والتغذية والذهن والأعراض والدورة والعادات. النسخة المقروءة آليًا من هذه الصفحة: tools.json.
إبقاؤه يعمل حين لا يعمل الهاتف
يجيب الخادم على الجهاز ما دام التطبيق يعمل. وللوصول على مدار الساعة، اقرن نسخة مطابقة مستضافة ذاتيًا: ملف 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.
لا تفتح منفذًا لأي من الخادمين على الإنترنت المفتوح. كلاهما مصمم لشبكة محلية أو tailnet. وإذا احتجت إلى وصول عن بُعد، فضع أمامه tailscale serve أو ما يعادله، ليكون النقل عبر HTTPS ويُوثَّق الجهاز قبل أن يُرى رمز bearer.
استكشاف الأخطاء وإصلاحها
ابدأ بالاختبار أدناه، من الحاسوب الذي يعمل عليه ذكاؤك الاصطناعي. فهو يخبرك في أي جانب المشكلة. استخدم العنوان والرمز من صفحة الاتصال في 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. وكثيرًا ما توقف شبكات الضيوف والفنادق وصول الأجهزة إلى بعضها.
- عنوان 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 الخادم. - يقرأ ولا يستطيع التسجيل. شغّل السماح للذكاء الاصطناعي بالكتابة تحت MCP محلي. تُطبَّق الإدخالات فورًا على الهاتف ويمكن التراجع عن كل واحد منها.
- لا يمكن تشغيل الاتصال. تحتفظ الخطة المجانية باتصال واحد قيد التشغيل في كل مرة، وMarrow Pro حتى 10: الذكاء الاصطناعي والخوادم والتحكمات التلقائية معًا. أوقف أحدها في «اتصالاتك» أولًا.
الإعداد والحلول لكل تطبيق على حدة، 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، لذا لا توجد واجهة مستضافة يمكن استدعاؤها دون جهاز المستخدم نفسه.