Det selvhostede spejl
En lille server på hardware, du selv ejer, som holder en komplet, levende kopi af dine Marrow-data og svarer agenter, mens din telefon sover, ligger i en lomme eller er på den anden side af jorden.
Opsætning for én app ad gangen står på sin egen side under forbindelser.
Alle Marrow-guides: MCP · Selvhostet spejl · Automatiseringer · Filer · Support
Hvad det er
En lille server med åben kildekode, du kører på hardware, du selv ejer: en Raspberry Pi, en NAS, en gammel bærbar, en VPS til $5. Din telefon parres med den én gang ved at scanne en QR-kode og sender derefter hver ændring i baggrunden, mens appen er lukket. Serveren opbevarer en komplet SQLite-kopi af dine Marrow-data og leverer tretten MCP-værktøjer til læsning: telefonens syv, sleep_log og symptoms_and_mood og fire, der svarer i appens egne vendinger (daily_brief, baselines, what_changed, data_quality), så en agent kan spørge »hvordan sov jeg i denne uge« klokken 3 om natten med din telefon i en skuffe. MIT-licens: github.com/MarrowHealth/marrow-mcp.
Installér
Én Python-fil, kun standardbiblioteket, Python 3.10 eller nyere:
pip install marrow-mcp marrow-server # or: python3 marrow_server.py
Eller med Docker:
git clone https://github.com/MarrowHealth/marrow-mcp cd marrow-mcp docker compose up -d
Ved første start udskriver den en parrings-URL og viser en QR-kode i en hvilken som helst browser på dit netværk.
Par telefonen
- Åbn parrings-URL'en på en hvilken som helst skærm i nærheden.
- I Marrow: Eksporter, Server-MCP, Par med en server, scan koden.
- Færdig. Telefonen begynder at sende, og siden Server viser tidspunktet for den seneste afsendelse og hvor mange poster, der venter.
Parring opretter to tokens i serverens datamappe: ét, telefonen bruger til at sende, og ét, agenter bruger til at læse. Slet en tokenfil for at rotere den.
Peg en agent på den
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Tretten værktøjer, alle til læsning. De ni rå: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. Og fire, der starter, hvor de rå stopper, vurderet op imod dit eget løbende normale med samme matematik som på appens Hjem-side: daily_brief (én dag: hver nøglemåling med sin værdi og appens egen vending, mad og vand mod dine mål, nattens søvn, udført træning, markeringer der er værd at nævne), baselines (dit eget normale pr. måling, den seneste værdis z og 90-dages tendensen), what_changed (den seneste uge mod de fire før: hvad der flyttede sig, hvor bemærkelsesværdigt det er for dig, forskydninger i søvn og sengetid, strømme der begyndte eller stoppede) og data_quality (hvad der er friskt, forældet eller mangler, så en agent aldrig forveksler et hul med et faktum). Hver læsning tager dage tilbage eller fra og til på telefonens kalender. Serveren viser også fire prompter (how_am_i_doing, weekly_review, doctor_prep, log_from_text) og fire ressourcer til klienter, der viser dem. Den har også tolv skriveværktøjer, som vises, når din telefon tillader dem. Fra Marrow 1.5 kan du slå Tillad AI at skrive til for din server under Eksporter, Dine forbindelser, og en AI kan så logføre måltider, vand, vægt, træninger, søvn, symptomer, humør og mål gennem den, gratis. Serveren stiller hver post i kø, og telefonen udfører den, når Marrow åbnes eller vågner, og hver eneste kan fortrydes. Opsætning til Claude Desktop, Cursor og andre står på siden om MCP. Kun URL'en ændrer sig.
Sådan når du den uden for dit LAN
Serveren taler almindelig HTTP og har ingen egen TLS. Åbn ikke porte til den uden beskyttelse. Sæt Tailscale på boksen og telefonen, og brug tailscale serve, eller sæt Cloudflare Tunnel eller en hvilken som helst reverse proxy, der afslutter HTTPS, foran. QR-koden til parring bærer den adresse, serveren oplyser: dens egen LAN-adresse eller den, du giver den med --url. Start den med den adresse, du rent faktisk vil bruge, for eksempel marrow-server --url https://pi.your-tailnet.ts.net, og par derefter.
Det, der havner på disken
- En SQLite-database med hver daglig serie, prøve, dagbogspost og hvert styrkesæt, holdt opdateret af telefonens afsendelser.
- Hver rå afsendelse gemt som JSONL ved siden af, så databasen kan genopbygges, hvis du nogensinde ødelægger den.
- Regn med 50 til 150 MB pr. år med historik i fuld kvalitet.
Enheder: Sundhedsmålinger kommer i deres gemte SI-enheder med mærkater. Styrkesæt kommer i pund med "unit": "lb", uanset telefonens visningsindstilling, så spejlet aldrig blander enheder. Peg Grafana, DuckDB eller et cron-job direkte på databasefilen.
Fejlfinding
To tests fra den computer, din AI kører på, fortæller dig, hvor problemet er. Først: er serveren oppe? Denne kræver intet token:
curl http://<server-ip>:8800/health
Den svarer {"server": "marrow", "ok": true}. Dernæst: virker din agents token?
curl -i http://<server-ip>:8800/mcp \ -H "Authorization: Bearer <mcp token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
| Det, du får | Hvad det betyder |
|---|---|
200 OK og en liste over værktøjer | Serveren virker. Tjek adressen, tokenet og servertypen (HTTP) i din agents konfiguration, og genstart agenten. |
401 med bad bearer token | Forkert token. Agenter bruger mcp-tokenet og ikke det, telefonen parres med. Se nedenfor. |
| Forbindelse afvist eller en timeout | Serveren kører ikke, porten er forkert, eller en firewall på boksen blokerer port 8800. Med Docker skal du tjekke portmappingen 8800:8800. |
- Hvilket token. Serveren udskriver agenternes token, når den starter, på linjen, der begynder med
agents:. Det står også i filen.mcp-tokeni datamappen (./data, medmindre du angav--data,/datai Docker). Telefonen bruger et andet token, fra.app-token. For at skifte agenternes token skal du slette.mcp-token, genstarte serveren og opdatere hver agent. - Parringssiden siger bad or missing token. Åbn parringslinket præcis, som serveren udskrev det, med dens del
?token=. - Parringssiden viser tekst og ikke en QR-kode. QR-koden kræver den valgfrie pakke
segno:pip install "marrow-mcp[qr]". Eller vælg Indtast manuelt i stedet i Marrow, og skrivurlogtokenfra den tekst. - Parring mislykkedes på telefonen. Telefonen kunne ikke nå adressen i QR-koden. Under Docker ser serveren kun containerens egen adresse, så giv den din: føj
--url http://<your-computer-ip>:8800til dens kommando. Uden for dit Wi-Fi derhjemme skal du bruge en HTTPS-adresse fratailscale serveeller en tunnel. - Adgang til lokalt netværk. For at nå en server på dit hjemmenetværk skal Marrow have adgang til lokalt netværk. iOS spørger første gang, du parrer. Hvis du sagde nej, så slå Marrow til under Indstillinger, Anonymitet og sikkerhed, Lokalt netværk, og par derefter igen med Marrow åben.
- Den QR-kode er ikke en parringskode til Marrow. Kameraet læste en anden kode. Scan den på serverens parringsside.
- Gamle data, eller Leverer ikke i Marrow. Telefonen kan ikke sende til serveren. Siden Server-MCP i Marrow viser den seneste afsendelse og hvor mange poster, der venter. Tjek, at serveren kører, og åbn derefter Marrow for at sende det, der venter. Afsendelser i baggrunden kører, når iOS tillader det.
- Denne server skal opdateres, før den kan logføre. Opdater den med
pip install -U marrow-mcp, og genstart den. Med Docker skal du køregit pullogdocker compose up -d --buildi klonen. - Poster fra AI'en vises ikke. Slå Tillad AI at skrive til for serveren under Eksporter, Dine forbindelser. Skriveværktøjerne vises først på serveren efter det. Hver post venter på serveren og lander, næste gang Marrow åbnes eller vågner.
- 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.
Hvornår du skal vælge denne frem for de andre
Vælg spejlet, når din agent har brug for dataene, mens din telefon sover eller er væk, eller når du vil have en database, du kan forespørge, frem for filer. Vælg MCP-serveren på telefonen, når din agent kører tæt på telefonen, og du ikke vil have noget andet at vedligeholde. Vælg automatiseringer, når du allerede har et sted, hvor data skal lande.