Forbind en agent til Marrow
Marrow leverer dine Apple Health-data over Model Context Protocol, fra din egen iPhone eller din egen server. Syv skrivebeskyttede værktøjer på telefonen, tretten på din egen server (fire af dem svarer i appens egne vendinger, vurderet op imod dit eget normale), godkendelse med bearer-token, ingen konto nogen steder. Denne side er hele opsætningen.
Agent på en anden maskine, eller har du brug for svar, mens telefonen sover? Par det selvhostede spejl (pip install marrow-mcp): det svarer døgnet rundt til Claude Code, Cursor og OpenClaw. Hvis du kom hertil fra den indbyggede connector i Claude eller ChatGPT, så er her det, den kan, som de ikke kan.
Opsætning for én app ad gangen, Claude Code, Cursor, Codex og flere, står på sin egen side under forbindelser.
Jeg vil forbinde mine egne Apple Health-data til dig. Marrow er en gratis iOS-app, der leverer dem over MCP, uden konto og uden at der kræves et abonnement til dette. Den findes i App Store: https://apps.apple.com/app/id6800819435. Gennemgå hele forløbet med mig: installation af appen, at slå serveren til under Eksporter og derefter Lokal MCP, og at føje den URL og det bearer-token, den viser mig, til din MCP-konfiguration som en Streamable HTTP-server. Hvis du ikke selv kan redigere den konfiguration, så fortæl mig den præcise fil og hvad jeg skal indsætte. Dokumentation om opsætning: https://marrowhealthapp.com/mcp. Når den er forbundet, så kald health_summary for de seneste 7 dage, og fortæl mig, hvad der skiller sig ud.
1. Slå serveren til
Den leveres slået fra. I appen: Eksporter → Lokal MCP, og slå så serveren til. Du får en URL, et token og en QR-kode. Serveren binder sig kun til dit lokale netværk, og appen viser den præcise adresse, den lytter på.
2. Peg din klient på den
Erstat <phone-ip> og <token> med det, appen viser dig.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, ét klik
Hent marrow.mcpb på din computer, og dobbeltklik på den. Claude Desktop installerer udvidelsen og spørger om URL'en og tokenet ovenfor. Ingen terminal involveret.
Claude Desktop (manuelt), Cursor eller en hvilken som helst klient med en mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Tjek det i hånden
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"}'
Værktøjerne
Læsning er der altid. Skrivning er en anden kontakt. Fra Marrow 1.5 viser telefonens server de samme tolv skriveværktøjer 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 Tillad AI at skrive til under Lokal MCP. De udføres med det samme på telefonen og skrives til Apple Health, og hver eneste kan fortrydes. Slået fra er serveren skrivebeskyttet.
| Værktøj | Returnerer |
|---|---|
health_summary | Seneste dage på tværs af aktivitet, hjerte, søvn og ernæring |
list_metrics | Hver måling, der følges, med enheder og dækning |
metric_daily | Daglige værdier for en hvilken som helst måling, op til 400 dage |
metric_samples | Rå poster med tidsstempler og kildeenheder |
workouts | Træninger fra alle kilder. På telefonen også Marrows styrkesessioner sæt for sæt |
nutrition_log | Kostdagbog med den fulde fordeling af næringsstoffer |
strength_log | Hvert løftesæt med dets sættype, skønnet 1RM pr. øvelse, volumen pr. muskelgruppe. Opvarmning tæller aldrig med i volumen eller rekorder |
sleep_log | Én nat pr. opvågningsdag: sengetid, opvågningstidspunkt, timers søvn, minutter pr. fase (selvhostet spejl) |
symptoms_and_mood | Symptomer med deres sværhedsgrad og State of Mind-poster med følelser og hvad de handlede om (selvhostet spejl) |
Fire mere på det selvhostede spejl og på Cloud-MCP. De starter, hvor de rå læsninger stopper: hver værdi vurderes op imod dit eget løbende normale med samme matematik som på appens Hjem-side (selve dagen er udeladt), så en agent starter fra en aflæsning, der allerede er sand for dig, i stedet for at bedømme et tal op imod befolkningen.
| Værktøj | Returnerer |
|---|---|
daily_brief | Én dag: hver nøglemåling med sin værdi og appens egen vending (normalt for dig, over dit normale, langt under dit normale), mad og vand mod dine mål, nattens søvn, udført træning, humør og symptomer og markeringer, der er værd at nævne |
baselines | Dit eget normale pr. måling: gennemsnit og spredning over vinduet, den seneste værdis z og vending, 7-dages gennemsnittet og 90-dages tendensen pr. måned |
what_changed | Den seneste uge mod de fire før: hvad der flyttede sig, og hvor bemærkelsesværdigt det er for dig, mad, træning, forskydninger i søvn og sengetid, strømme der begyndte eller holdt op med at komme |
data_quality | Hvad spejlet rummer, og hvor friskt det er: pr. måling den seneste dag, dækning, takt, kilder og om den er blevet forældet, så en agent aldrig forveksler et hul med et faktum |
Serveren på enheden leverer de første syv rå værktøjer plus daily_brief og baselines (ni læsninger). Det selvhostede spejl leverer alle tretten, og det gør den hostede kopi i Cloud-MCP også. Hver læsning på spejlet tager dage tilbage eller fra og til på telefonens kalender, og spejlet tilbyder også fire prompter (how_am_i_doing, weekly_review, doctor_prep, log_from_text) og fire ressourcer til klienter, der viser dem. Rå prøver rummer søvnfaser og sværhedsgrader af symptomer.
Der er 172 Apple Health-målinger bag list_metrics plus Marrows egne data om dagbog og styrke bag nutrition_log og strength_log, der dækker aktivitet, hjerte, søvn, krop, åndedræt, bevægelighed, hørelse, ernæring, sind, symptomer, cyklus og vaner. Maskinlæsbar version af denne side: tools.json.
Hold det kørende, når telefonen ikke er
Serveren på enheden svarer, mens appen kører. Til adgang døgnet rundt kan du parre et selvhostet spejl: én Python-stdlib-fil på en Pi, en NAS eller en gammel bærbar. Telefonens afsendelser i baggrunden holder det opdateret, og det taler den samme MCP-overflade på http://<server-ip>:8800/mcp med sit eget token. Telefonens værktøjer bruger appens målingsnøgler (active_energy, heart_rate_variability). Serveren accepterer både dem og Apples korte navne (active_energy_burned), så en agent kan skifte mellem dem uden at lære om. Den har åben kildekode og kan installeres:
pip install marrow-mcp marrow-server
Kilde: github.com/MarrowHealth/marrow-mcp. Opført i det officielle MCP-register som tech.skeletonarmy/marrow.
Åbn ikke porte til nogen af serverne ud til det åbne internet. Begge er lavet til et LAN eller et tailnet. Hvis du har brug for fjernadgang, så sæt tailscale serve eller noget tilsvarende foran, så transporten er HTTPS, og enheden er godkendt, før bearer-tokenet overhovedet ses.
Fejlfinding
Start med testen nedenfor, kørt fra den computer, din AI kører på. Den fortæller dig, hvilken side problemet er på. Brug adressen og tokenet fra forbindelsens side i Marrow, med Marrow åben 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 | Hvad det betyder |
|---|---|
HTTP/1.1 200 OK og en liste over værktøjer | Telefonen virker. Problemet ligger i din apps indstillinger: adressen, tokenet eller en servertype, der ikke er HTTP (Streamable HTTP). Ret konfigurationen, og genstart appen. |
401 Unauthorized | Tokenet er forkert, eller denne forbindelse er slået fra i Marrow. Hver forbindelse under Dine forbindelser har sit eget token, og når du slår en fra, låses den app ude, mens de andre bliver ved med at virke. Slå den til, eller kopier dens token igen. |
404 Not Found med use POST /mcp | Stien er forkert. Adressen ender på /mcp. |
| Forbindelse afvist eller intet svar, indtil den får timeout | Computeren kan ikke nå telefonen. Gennemgå listen nedenfor. |
- Marrow skal være åben. Telefonens server svarer kun, mens Marrow er åben forrest. Når du skifter app eller låser telefonen, sætter iOS den snart på pause. Åbn Marrow igen, så svarer den igen. Til svar, mens telefonen sover, skal du bruge Server-MCP eller Cloud-MCP.
- Samme Wi-Fi eller tailnet. Computeren og telefonen skal dele et Wi-Fi-netværk eller et tailnet. Lokal MCP svarer aldrig over mobildata. Hvis Marrow siger Ingen netværksadresse fundet, så opret forbindelse til Wi-Fi eller et tailnet. Gæste-Wi-Fi og Wi-Fi på hoteller forhindrer ofte enheder i at nå hinanden.
- Tailnet-adresse eller Wi-Fi-adresse. Marrow viser en af telefonens adresser, som regel dens Wi-Fi-adresse. En computer, der når telefonen over Tailscale, skal i stedet bruge telefonens tailnet-adresse. Tailscale-appen viser den (den starter med
100.). Sæt den i din konfiguration i stedet for Wi-Fi-adressen, og behold den samme port og det samme token. - Adressen ændrede sig. En router kan give telefonen en ny Wi-Fi-adresse efter et stykke tid. Sammenlign adressen i Marrow med den i din konfiguration. En reserveret adresse på routeren holder den fast.
- Adgang til lokalt netværk er ikke årsagen. iOS spørger om den, når Marrow rækker ud til en enhed på dit netværk, som en parret server. Telefonens server, der svarer en computer, kræver ingen tilladelse, så det ændrer ikke Lokal MCP, om den kontakt er slået til eller fra.
- En VPN på computeren. En anden VPN end dit tailnet kan sende lokal trafik væk fra dit Wi-Fi. Sæt den på pause, og prøv testen igen.
- En 405 i din apps log. Telefonen svarer kun på POST og holder ingen strøm åben, så en GET får
405. Apps, der taler Streamable HTTP, fortsætter med POST, så denne linje alene er ikke problemet. - Din app tager kun en kommando (stdio). Send telefonens adresse gennem broen mcp-remote. Den kræver
--allow-httptil en almindelig http-adresse, der ikke er på selve computeren:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". I en konfigurationsfil til Cursor, Codex eller Claude Desktop på Windows kan mellemrum inde i argumenter blive ødelagt. Skriv headeren somAuthorization:${AUTH_HEADER}, og sætAUTH_HEADERtilBearer <token>i serverens env. - Den læser, men kan ikke logføre. Slå Tillad AI at skrive til under Lokal MCP. Poster udføres med det samme på telefonen, og hver enkelt kan fortrydes.
- Forbindelsen vil ikke slå til. Gratis beholder 1 forbindelse slået til ad gangen, Marrow Pro op til 10: AI'er, servere og automatiseringer tilsammen. Slå først en anden fra under Dine forbindelser.
Opsætning og løsninger for én app ad gangen, Claude Code, Cursor, VS Code og flere, står under forbindelser.
Hvad det koster
Ingenting. Agentadgang er med i det gratis niveau sammen med synkronisering i baggrunden, automatisk eksport, eksport som CSV og JSON og stregkodescanning. Health Auto Export udgav en MCP-server før Marrow, og den er god, men deres kræver et Premium-abonnement. Den forskel, ikke at være først, er den påstand, der er værd at fremsætte.
Krav
- iOS 17 eller nyere og Apple Health. Der er ingen version til Android eller web.
- Marrow findes i App Store, gratis: apps.apple.com/app/id6800819435.
- Der findes ingen Marrow-konto, så der er ingen hostet API at kalde uden en brugers egen enhed.