Koble en agent til Marrow
Marrow serverer Apple Health-dataene dine over Model Context Protocol, fra din egen iPhone eller din egen server. Sju skrivebeskyttede verktøy på telefonen, tretten på din egen server (fire av dem svarer på appens egne premisser, målt mot ditt eget normalnivå), bearer-token-autentisering, ingen konto noe sted. Denne siden er hele oppsettet.
Agent på en annen maskin, eller trenger du svar mens telefonen sover? Koble sammen det selvdrevne speilet (pip install marrow-mcp): det svarer døgnet rundt for Claude Code, Cursor og OpenClaw. Hvis du kom hit fra den innebygde koblingen til Claude eller ChatGPT, her er det den gjør som de ikke gjør.
Oppsett for én app om gangen, Claude Code, Cursor, Codex og flere, står på sin egen side under tilkoblinger.
Jeg vil koble mine egne Apple Health-data til deg. Marrow er en gratis iOS-app som serverer dem over MCP, uten konto og uten abonnement for dette. Den finnes i App Store: https://apps.apple.com/app/id6800819435. Ta meg gjennom det hele: installere appen, slå på serveren under Eksporter og deretter Lokal MCP, og legge til URL-en og bearer-tokenet den viser i MCP-konfigurasjonen din som en Streamable HTTP-server. Hvis du ikke kan redigere den konfigurasjonen selv, fortell meg nøyaktig hvilken fil og hva jeg skal lime inn. Dokumentasjon for oppsettet: https://marrowhealthapp.com/mcp. Når den er koblet til, kall health_summary for de siste 7 dagene og fortell meg hva som skiller seg ut.
1. Slå på serveren
Den leveres avslått. I appen: Eksporter → Lokal MCP, og slå deretter på serveren. Du får en URL, et token og en QR-kode. Serveren binder seg bare til det lokale nettverket ditt, og appen viser nøyaktig hvilken adresse den lytter på.
2. Pek klienten din mot den
Erstatt <phone-ip> og <token> med det appen viser deg.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, ett klikk
Last ned marrow.mcpb på datamaskinen din og dobbeltklikk på den. Claude Desktop installerer utvidelsen og ber om URL-en og tokenet ovenfor. Ingen terminal involvert.
Claude Desktop (manuelt), Cursor, eller en hvilken som helst klient som bruker en mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Sjekk det for hånd
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"}'
Verktøyene
Lesing er alltid der. Skriving er en andre bryter. Fra Marrow 1.5 lister serveren på telefonen de samme tolv skriveverktøyene som Cloud-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) når du slår på Tillat AI-skriving under Lokal MCP, utført med en gang på telefonen og skrevet til Apple Health, og hvert av dem kan angres. Når den er av, er serveren skrivebeskyttet.
| Verktøy | Returnerer |
|---|---|
health_summary | Siste dager på tvers av aktivitet, hjerte, søvn og ernæring |
list_metrics | Hver måling som følges, med enheter og dekning |
metric_daily | Daglige verdier for en hvilken som helst måling, opptil 400 dager |
metric_samples | Rå poster med tidsstempler og kildeenheter |
workouts | Treningsøkter fra alle kilder. På telefonen også Marrows styrkeøkter sett for sett |
nutrition_log | Matdagbok med full næringsoversikt |
strength_log | Hvert løftesett med settype, anslått 1RM per øvelse, volum per muskelgruppe. Oppvarmingssett teller aldri med i volum eller rekorder |
sleep_log | Én natt per oppvåkningsdag: leggetid, oppvåkningstid, timer søvn, minutter per fase (selvdrevet speil) |
symptoms_and_mood | Symptomer med alvorlighetsgrad, og Sinnstilstand-oppføringer med følelser og hva de handlet om (selvdrevet speil) |
Fire til på det selvdrevne speilet og på Cloud-MCP. De begynner der de rå lesingene slutter: hver verdi måles mot ditt eget normalnivå over tid med den samme regnemåten som Hjem i appen bruker (selve dagen er utelatt), så en agent starter fra en lesing som allerede er sann for deg i stedet for å bedømme et tall mot befolkningen.
| Verktøy | Returnerer |
|---|---|
daily_brief | Én dag: hver nøkkelmåling med verdien og appens egen formulering (normalt for deg, over det normale for deg, godt under det normale for deg), mat og vann mot målene dine, gårsnattens søvn, gjennomført trening, humør og symptomer, og flagg som er verdt å nevne |
baselines | Ditt eget normalnivå per måling: gjennomsnitt og spredning over vinduet, siste verdis z og formulering, 7-dagers gjennomsnittet og 90-dagers trenden per måned |
what_changed | Den siste uken mot de fire før: hva som har endret seg og hvor bemerkelsesverdig det er for deg, mat, trening, søvn og endringer i leggetid, datastrømmer som begynte eller sluttet å komme |
data_quality | Hva speilet har og hvor ferskt det er: per måling siste dag, dekning, kadens, kilder og om den er blitt utdatert, så en agent aldri forveksler et hull med et faktum |
Serveren på enheten tilbyr de sju første rå verktøyene pluss daily_brief og baselines (ni lesinger). Det selvdrevne speilet tilbyr alle tretten, det samme gjør den hostede Cloud-MCP-kopien. Hver lesing på speilet tar et antall dager tilbake eller fra og til etter telefonens kalender, og speilet tilbyr også fire prompter (how_am_i_doing, weekly_review, doctor_prep, log_from_text) og fire ressurser til klienter som viser dem. Rå prøver bærer søvnfaser og alvorlighetsgrader for symptomer.
Det er 172 Apple Health-målinger bak list_metrics, pluss Marrows egne dagbok- og styrkedata bak nutrition_log og strength_log, som dekker aktivitet, hjerte, søvn, kropp, luftveier, mobilitet, hørsel, ernæring, sinn, symptomer, syklus og vaner. Maskinlesbar versjon av denne siden: tools.json.
Å holde det oppe når telefonen ikke er det
Serveren på enheten svarer mens appen kjører. For tilgang døgnet rundt kobler du sammen et selvdrevet speil: én Python-fil med bare standardbiblioteket på en Pi, NAS eller gammel bærbar. Telefonens bakgrunnssendinger holder det oppdatert, og det snakker den samme MCP-flaten på http://<server-ip>:8800/mcp med sitt eget token. Verktøyene på telefonen bruker appens målingsnøkler (active_energy, heart_rate_variability). Serveren godtar både disse og Apples korte navn (active_energy_burned), så en agent kan bevege seg mellom dem uten å lære på nytt. Den har åpen kildekode og kan installeres:
pip install marrow-mcp marrow-server
Kilde: github.com/MarrowHealth/marrow-mcp. Oppført i det offisielle MCP-registeret som tech.skeletonarmy/marrow.
Ikke videresend porter til noen av serverne ut til det åpne internett. Begge er laget for et lokalnett eller et tailnet. Hvis du trenger ekstern tilgang, sett tailscale serve eller noe tilsvarende foran, slik at transporten er HTTPS og enheten er autentisert før bearer-tokenet noen gang blir sett.
Feilsøking
Begynn med testen nedenfor, kjørt fra datamaskinen AI-en din kjører på. Den forteller deg hvilken side problemet er på. Bruk adressen og tokenet fra tilkoblingens side i Marrow, med Marrow åpen på telefonen.
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"}'
| Det du får | Hva det betyr |
|---|---|
HTTP/1.1 200 OK og en liste over verktøy | Telefonen fungerer. Problemet ligger i innstillingene til appen din: adressen, tokenet, eller en servertype som ikke er HTTP (Streamable HTTP). Rett opp konfigurasjonen og start appen på nytt. |
401 Unauthorized | Tokenet er feil, eller denne tilkoblingen er av i Marrow. Hver tilkobling i Tilkoblingene dine har sitt eget token, og å slå av en låser den appen ute mens de andre fortsetter å fungere. Slå den på, eller kopier tokenet på nytt. |
404 Not Found med use POST /mcp | Banen er feil. Adressen ender på /mcp. |
| Tilkobling avvist, eller ingen svar før tidsavbrudd | Datamaskinen kan ikke nå telefonen. Gå gjennom listen nedenfor. |
- Marrow må være åpen. Serveren på telefonen svarer bare mens Marrow er åpen i forgrunnen. Når du bytter app eller låser telefonen, setter iOS den snart på pause. Åpne Marrow igjen, så svarer den igjen. For svar mens telefonen sover bruker du Server-MCP eller Cloud-MCP.
- Samme Wi-Fi eller tailnet. Datamaskinen og telefonen må dele et Wi-Fi-nettverk eller et tailnet. Lokal MCP svarer aldri over mobilnett. Hvis Marrow sier Fant ingen nettverksadresse, koble til Wi-Fi eller et tailnet. Gjestenett og hotellnett stopper ofte enheter fra å nå hverandre.
- Tailnet-adresse eller Wi-Fi-adresse. Marrow viser en av telefonens adresser, vanligvis Wi-Fi-adressen. En datamaskin som når telefonen over Tailscale, trenger telefonens tailnet-adresse i stedet. Tailscale-appen viser den (den starter med
100.). Sett den i konfigurasjonen din i stedet for Wi-Fi-adressen og behold den samme porten og tokenet. - Adressen har endret seg. En ruter kan gi telefonen en ny Wi-Fi-adresse etter en stund. Sammenlign adressen i Marrow med den i konfigurasjonen din. En reservert adresse på ruteren holder den fast.
- Tilgang til Lokalt nettverk er ikke årsaken. iOS spør om den når Marrow når ut til en enhet på nettverket ditt, for eksempel en sammenkoblet server. At serveren på telefonen svarer en datamaskin, trenger ingen tillatelse, så å slå den bryteren på eller av endrer ikke Lokal MCP.
- En VPN på datamaskinen. En annen VPN enn tailnettet ditt kan sende lokal trafikk bort fra Wi-Fi-et ditt. Sett den på pause og prøv testen igjen.
- En 405 i loggen til appen din. Telefonen svarer bare på POST og holder ingen strøm åpen, så en GET får
405. Apper som snakker Streamable HTTP fortsetter med POST, så denne linjen alene er ikke problemet. - Appen din tar bare en kommando (stdio). Kjør telefonens adresse gjennom mcp-remote-broen. Den trenger
--allow-httpfor en vanlig http-adresse som ikke er på selve datamaskinen:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". I en konfigurasjonsfil for Cursor, Codex eller Claude Desktop på Windows kan mellomrom inni args bli ødelagt. Skriv overskriften somAuthorization:${AUTH_HEADER}og settAUTH_HEADERtilBearer <token>i env til serveren. - Den leser, men kan ikke loggføre. Slå på Tillat AI-skriving under Lokal MCP. Oppføringer utføres med en gang på telefonen, og hver av dem kan angres.
- Tilkoblingen slår seg ikke på. Gratis har 1 tilkobling på om gangen, Marrow Pro opptil 10: AI-er, servere og automatiseringer til sammen. Slå av én i Tilkoblingene dine først.
Oppsett og løsninger for én app om gangen, Claude Code, Cursor, VS Code og flere, står under tilkoblinger.
Hva dette koster
Ingenting. Agenttilgang ligger i gratisnivået, sammen med synkronisering i bakgrunnen, automatisk eksport, CSV- og JSON-eksport og strekkodeskanning. Health Auto Export leverte en MCP-server før Marrow gjorde det, og den er god, men deres krever et Premium-abonnement. Den forskjellen, ikke det å ha vært først, er påstanden som er verdt å fremme.
Krav
- iOS 17 eller nyere, og Apple Health. Det finnes ingen versjon for Android eller nett.
- Marrow finnes i App Store, gratis: apps.apple.com/app/id6800819435.
- Det finnes ingen Marrow-konto, så det finnes heller ingen hostet API å kalle uten brukerens egen enhet.