Conectează un agent la Marrow
Marrow servește datele tale din Apple Health prin Model Context Protocol, de pe propriul tău iPhone sau de pe propriul tău server. Șapte instrumente doar pentru citire pe telefon, treisprezece pe propriul tău server (patru dintre ele răspund în termenii proprii ai aplicației, raportate la normalul tău), autentificare cu token bearer, niciun cont nicăieri. Pagina asta este întreaga configurare.
Agent pe altă mașină sau ai nevoie de răspunsuri cât telefonul doarme? Asociază oglinda auto-găzduită (pip install marrow-mcp): răspunde 24/7 pentru Claude Code, Cursor și OpenClaw. Dacă ai venit aici de la conectorul încorporat Claude sau ChatGPT, iată ce face el și ele nu.
Configurarea pentru fiecare aplicație în parte, Claude Code, Cursor, Codex și altele, este pe pagina ei, la conexiuni.
Vreau să te conectez la propriile mele date din Apple Health. Marrow este o aplicație iOS gratuită care le servește prin MCP, fără cont și fără abonament pentru asta. Este în App Store: https://apps.apple.com/app/id6800819435. Condu-mă prin tot procesul: instalarea aplicației, pornirea serverului la Exportă apoi MCP local și adăugarea URL-ului și a tokenului bearer pe care mi le arată în configurația ta MCP, ca server Streamable HTTP. Dacă nu poți edita singur acea configurație, spune-mi exact fișierul și ce să lipesc. Documentația de configurare: https://marrowhealthapp.com/mcp. Când e conectat, apelează health_summary pentru ultimele 7 zile și spune-mi ce iese în evidență.
1. Pornește serverul
Vine oprit. În aplicație: Exportă → MCP local, apoi activează serverul. Primești un URL, un token și un cod QR. Serverul se leagă doar de rețeaua ta locală, iar aplicația arată adresa exactă pe care ascultă.
2. Îndreaptă clientul spre el
Înlocuiește <phone-ip> și <token> cu ce îți arată aplicația.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, cu un singur clic
Descarcă marrow.mcpb pe calculator și dă dublu clic pe el. Claude Desktop instalează extensia și cere URL-ul și tokenul de mai sus. Fără terminal.
Claude Desktop (manual), Cursor sau orice client care folosește un mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Verifică manual
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"}'
Instrumentele
Citirile sunt mereu acolo. Scrierile sunt un al doilea comutator. De la Marrow 1.5, serverul telefonului listează aceleași douăsprezece instrumente de scriere ca MCP în 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) după ce activezi Permite scrierea de către AI la MCP local, aplicate imediat pe telefon și scrise în Apple Health, fiecare putând fi anulată. Oprit, serverul este doar pentru citire.
| Instrument | Returnează |
|---|---|
health_summary | Zilele recente la activitate, inimă, somn și nutriție |
list_metrics | Fiecare metrică urmărită, cu unități și acoperire |
metric_daily | Valori zilnice pentru orice metrică, până la 400 de zile |
metric_samples | Înregistrări brute cu marcaje de timp și dispozitive sursă |
workouts | Antrenamente din fiecare sursă. Pe telefon, și sesiunile de forță Marrow serie cu serie |
nutrition_log | Jurnal alimentar cu defalcarea completă a nutrienților |
strength_log | Fiecare serie de ridicări cu tipul ei, maximul estimat pentru o repetare pe exercițiu, volumul pe grupă musculară. Încălzirile nu se numără niciodată la volum sau la recorduri |
sleep_log | O noapte pe zi de trezire: ora de culcare, ora de trezire, ore dormite, minute pe fază (oglinda auto-găzduită) |
symptoms_and_mood | Simptome cu severitatea lor și intrări State of Mind cu emoții și despre ce erau (oglinda auto-găzduită) |
Patru în plus pe oglinda auto-găzduită și pe MCP în cloud. Pornesc de unde se opresc citirile brute: fiecare valoare este raportată la normalul tău recent, cu aceleași calcule pe care le folosește pagina Acasă a aplicației (ziua însăși exclusă), așa că un agent pornește de la o citire care e deja adevărată pentru tine, în loc să judece un număr față de populație.
| Instrument | Returnează |
|---|---|
daily_brief | O zi: fiecare metrică cheie cu valoarea ei și fraza proprie a aplicației (normal pentru tine, peste normalul tău, mult sub normalul tău), mâncarea și apa față de obiective, somnul de azi-noapte, antrenamentul făcut, dispoziția și simptomele și indicatorii care merită pomeniți |
baselines | Normalul tău pentru fiecare metrică: media și împrăștierea pe fereastră, z-ul ultimei valori și fraza ei, media pe 7 zile și tendința pe 90 de zile pe lună |
what_changed | Ultima săptămână față de cele patru dinainte: ce s-a mișcat și cât de notabil e pentru tine, schimbări la mâncare, antrenament, somn și ora de culcare, fluxuri care au început sau au încetat să sosească |
data_quality | Ce ține oglinda și cât de proaspăt: pe metrică, ultima zi, acoperirea, cadența, sursele și dacă s-a învechit, ca un agent să nu confunde niciodată un gol cu un fapt |
Serverul de pe dispozitiv servește primele șapte instrumente brute plus daily_brief și baselines (nouă citiri). Oglinda auto-găzduită le servește pe toate treisprezece, la fel ca și copia găzduită MCP în cloud. Fiecare citire pe oglindă primește zile în urmă sau from și to, pe calendarul telefonului, iar oglinda oferă și patru prompturi (how_am_i_doing, weekly_review, doctor_prep, log_from_text) și patru resurse către clienții care le arată. Eșantioanele brute poartă fazele somnului și severitățile simptomelor.
În spatele lui list_metrics sunt 172 de metrici Apple Health, plus datele proprii Marrow de jurnal și forță în spatele lui nutrition_log și strength_log, acoperind activitate, inimă, somn, corp, respirație, mobilitate, auz, nutriție, minte, simptome, ciclu și obiceiuri. Versiunea citibilă de mașini a acestei pagini: tools.json.
Cum îl ții activ când telefonul nu este
Serverul de pe dispozitiv răspunde cât timp aplicația rulează. Pentru acces 24/7, asociază o oglindă auto-găzduită: un fișier Python stdlib pe un Pi, un NAS sau un laptop vechi. Trimiterile în fundal ale telefonului o țin la zi, iar ea vorbește aceeași suprafață MCP la http://<server-ip>:8800/mcp, cu propriul token. Instrumentele telefonului folosesc cheile de metrici ale aplicației (active_energy, heart_rate_variability). Serverul le acceptă atât pe acelea, cât și numele scurte Apple (active_energy_burned), așa că un agent poate trece de la unele la altele fără să învețe din nou. Este open source și se poate instala:
pip install marrow-mcp marrow-server
Sursa: github.com/MarrowHealth/marrow-mcp. Listat în registrul oficial MCP ca tech.skeletonarmy/marrow.
Nu redirecționa porturi către niciunul dintre servere spre internetul deschis. Ambele sunt gândite pentru un LAN sau un tailnet. Dacă ai nevoie de acces de la distanță, pune în față tailscale serve sau un echivalent, ca transportul să fie HTTPS, iar dispozitivul să fie autentificat înainte ca tokenul bearer să fie vreodată văzut.
Depanare
Începe cu testul de mai jos, rulat de pe calculatorul pe care rulează AI-ul tău. Îți spune de ce parte e problema. Folosește adresa și tokenul de pe pagina conexiunii din Marrow, cu Marrow deschis pe telefon.
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"}'
| Ce primești | Ce înseamnă |
|---|---|
HTTP/1.1 200 OK și o listă de instrumente | Telefonul funcționează. Problema e în setările aplicației tale: adresa, tokenul sau un tip de server diferit de HTTP (Streamable HTTP). Repară configurația și repornește aplicația. |
401 Unauthorized | Tokenul este greșit sau această conexiune este oprită în Marrow. Fiecare conexiune din Conexiunile tale are propriul token, iar oprirea uneia blochează acea aplicație, în timp ce celelalte merg în continuare. Pornește-o sau copiază din nou tokenul ei. |
404 Not Found cu use POST /mcp | Calea este greșită. Adresa se termină în /mcp. |
| Conexiune refuzată sau niciun răspuns până expiră | Calculatorul nu poate ajunge la telefon. Parcurge lista de mai jos. |
- Marrow trebuie să fie deschis. Serverul telefonului răspunde doar cât timp Marrow este deschis în prim-plan. Când treci la altă aplicație sau blochezi telefonul, iOS îl pune curând în pauză. Deschide din nou Marrow și răspunde iar. Pentru răspunsuri cu telefonul în repaus, folosește MCP pe server sau MCP în cloud.
- Același Wi-Fi sau tailnet. Calculatorul și telefonul trebuie să fie în aceeași rețea Wi-Fi sau în același tailnet. MCP local nu răspunde niciodată pe date mobile. Dacă Marrow spune Nu s-a găsit nicio adresă de rețea, conectează-te la Wi-Fi sau la un tailnet. Wi-Fi-ul pentru oaspeți și cel din hoteluri împiedică adesea dispozitivele să se vadă între ele.
- Adresă de tailnet sau adresă Wi-Fi. Marrow arată una dintre adresele telefonului, de obicei cea de Wi-Fi. Un calculator care ajunge la telefon prin Tailscale are nevoie în schimb de adresa de tailnet a telefonului. Aplicația Tailscale o arată (începe cu
100.). Pune-o în configurația ta în locul adresei Wi-Fi și păstrează același port și același token. - Adresa s-a schimbat. Un router poate da telefonului o adresă Wi-Fi nouă după o vreme. Compară adresa din Marrow cu cea din configurația ta. O adresă rezervată pe router o ține fixă.
- Accesul la Local Network nu este cauza. iOS îl cere când Marrow se conectează la un dispozitiv din rețeaua ta, de exemplu un server asociat. Serverul telefonului care răspunde unui calculator nu are nevoie de permisiune, așa că activarea sau dezactivarea acelui comutator nu schimbă MCP local.
- Un VPN pe calculator. Un VPN diferit de tailnetul tău poate duce traficul local departe de Wi-Fi-ul tău. Pune-l în pauză și încearcă din nou testul.
- Un 405 în jurnalul aplicației tale. Telefonul răspunde doar la POST și nu ține niciun flux deschis, așa că un GET primește
405. Aplicațiile care vorbesc Streamable HTTP continuă cu POST, deci această linie singură nu este problema. - Aplicația ta acceptă doar o comandă (stdio). Treci adresa telefonului prin puntea mcp-remote. Are nevoie de
--allow-httppentru o adresă http simplă care nu e chiar pe calculator:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". Într-un fișier de configurare pentru Cursor, Codex sau Claude Desktop pe Windows, spațiile din args pot fi stricate. Scrie antetul caAuthorization:${AUTH_HEADER}și seteazăAUTH_HEADERlaBearer <token>în env-ul serverului. - Citește, dar nu poate înregistra. Activează Permite scrierea de către AI la MCP local. Intrările se aplică imediat pe telefon și fiecare poate fi anulată.
- Conexiunea nu se activează. Gratuit păstrează 1 conexiune activă odată, Marrow Pro până la 10: AI-uri, servere și automatizări la un loc. Oprește mai întâi una în Conexiunile tale.
Configurarea și rezolvările pentru fiecare aplicație în parte, Claude Code, Cursor, VS Code și altele, sunt la conexiuni.
Cât costă
Nimic. Accesul agenților este în nivelul gratuit, odată cu sincronizarea în fundal, exportul automat, exportul CSV și JSON și scanarea codurilor de bare. Health Auto Export a lansat un server MCP înaintea Marrow și este bun, dar al lor cere un abonament Premium. Diferența aceasta, nu întâietatea, este afirmația care merită făcută.
Cerințe
- iOS 17 sau mai nou și Apple Health. Nu există versiune pentru Android sau web.
- Marrow este în App Store, gratuit: apps.apple.com/app/id6800819435.
- Nu există cont Marrow, așa că nu există un API găzduit pe care să-l apelezi fără dispozitivul propriu al unui utilizator.