Det selvdrevne speilet
En liten server på maskinvare du eier som holder en komplett, levende kopi av Marrow-dataene dine og svarer agenter mens telefonen sover, ligger i en lomme eller er på den andre siden av verden.
Oppsett for én app om gangen står på sin egen side under tilkoblinger.
Alle Marrow-guider: MCP · Selvdrevet speil · Automatiseringer · Filer · Brukerstøtte
Hva det er
En liten server med åpen kildekode som du kjører på maskinvare du eier: en Raspberry Pi, en NAS, en gammel bærbar, en VPS til $5. Telefonen din kobles sammen med den én gang ved å skanne en QR-kode, og sender deretter hver endring i bakgrunnen, med appen lukket. Serveren holder en komplett SQLite-kopi av Marrow-dataene dine og tilbyr tretten MCP-verktøy for lesing: telefonens sju, sleep_log og symptoms_and_mood, og fire som svarer på appens egne premisser (daily_brief, baselines, what_changed, data_quality), slik at en agent kan spørre «hvordan sov jeg denne uken» klokken 03 med telefonen i en skuff. MIT-lisens: github.com/MarrowHealth/marrow-mcp.
Installer
Én Python-fil, bare 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 oppstart skriver den ut en paringsadresse og viser en QR-kode i en hvilken som helst nettleser på nettverket ditt.
Koble sammen telefonen
- Åpne paringsadressen på en hvilken som helst skjerm i nærheten.
- I Marrow: Eksporter, Server-MCP, Koble sammen med en server, skann koden.
- Ferdig. Telefonen begynner å sende, og Server-siden viser tidspunktet for siste sending og hvor mange poster som venter.
Sammenkoblingen lager to tokens i serverens datamappe: ett telefonen bruker til å sende, ett agenter bruker til å lese. Slett en tokenfil for å rotere den.
Pek en agent mot den
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Tretten verktøy, alle lesing. De ni rå: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. Og fire som begynner der de rå slutter, målt mot ditt eget normalnivå over tid med den samme regnemåten som Hjem i appen bruker: daily_brief (én dag: hver nøkkelmåling med verdien og appens egen formulering, mat og vann mot målene dine, gårsnattens søvn, gjennomført trening, flagg som er verdt å nevne), baselines (ditt eget normalnivå per måling, siste verdis z og 90-dagerstrenden), what_changed (den siste uken mot de fire før: hva som har endret seg, hvor bemerkelsesverdig det er for deg, endringer i søvn og leggetid, datastrømmer som begynte eller sluttet) og data_quality (hva som er ferskt, utdatert eller mangler, så en agent aldri forveksler et hull med et faktum). Hver lesing tar et antall dager tilbake eller fra og til etter telefonens kalender. Serveren lister også fire prompter (how_am_i_doing, weekly_review, doctor_prep, log_from_text) og fire ressurser for klienter som viser dem. Den har også tolv skriveverktøy, som listes når telefonen din tillater dem. Fra Marrow 1.5 slår du på Tillat AI-skriving for serveren din i Eksporter, Tilkoblingene dine, og en AI kan loggføre måltider, vann, vekt, treningsøkter, søvn, symptomer, humør og mål gjennom den, gratis. Serveren legger hver oppføring i kø, og telefonen utfører den når Marrow åpnes eller våkner, og hver kan angres. Oppsett for Claude Desktop, Cursor og andre står på MCP-siden. Bare URL-en endres.
Å nå den utenfra lokalnettet ditt
Serveren snakker vanlig HTTP og har ingen egen TLS. Ikke videresend porter til den uten beskyttelse. Sett Tailscale på maskinen og telefonen og bruk tailscale serve, eller sett Cloudflare Tunnel eller en hvilken som helst reverse proxy som avslutter HTTPS foran den. Paring-QR-koden bærer adressen serveren annonserer: sin egen adresse på lokalnettet, eller den du gir den med --url. Start den med adressen du faktisk skal bruke, for eksempel marrow-server --url https://pi.your-tailnet.ts.net, og koble deretter sammen.
Det som havner på disken
- En SQLite-database med hver dagsserie, prøve, dagboksoppføring og styrkesett, holdt oppdatert av telefonens sendinger.
- Hver rå sending lagret som JSONL ved siden av, slik at databasen kan bygges opp igjen hvis du noen gang ødelegger den.
- Regn med 50 til 150 MB per år med historikk i full oppløsning.
Enheter: Helsemålinger kommer i sine lagrede SI-enheter med merking. Styrkesett kommer i pund med "unit": "lb" uansett visningsinnstillingen på telefonen, så speilet blander aldri enheter. Pek Grafana, DuckDB eller en cron-jobb rett mot databasefilen.
Feilsøking
To tester fra datamaskinen AI-en din kjører på, forteller deg hvor problemet er. Først: er serveren oppe? Denne trenger ikke token:
curl http://<server-ip>:8800/health
Den svarer {"server": "marrow", "ok": true}. Deretter: fungerer tokenet til agenten din?
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 | Hva det betyr |
|---|---|
200 OK og en liste over verktøy | Serveren fungerer. Sjekk adressen, tokenet og servertypen (HTTP) i konfigurasjonen til agenten din, og start deretter agenten på nytt. |
401 med bad bearer token | Feil token. Agenter bruker mcp-tokenet, ikke det telefonen kobles sammen med. Se nedenfor. |
| Tilkobling avvist eller tidsavbrudd | Serveren kjører ikke, porten er feil, eller en brannmur på maskinen blokkerer port 8800. Med Docker sjekker du portmappingen 8800:8800. |
- Hvilket token. Serveren skriver ut tokenet til agentene når den starter, på linjen som begynner med
agents:. Det ligger også i filen.mcp-tokeni datamappen (./datamed mindre du ga--data,/datai Docker). Telefonen bruker et annet token, fra.app-token. For å bytte tokenet til agentene sletter du.mcp-token, starter serveren på nytt og oppdaterer hver agent. - Paringssiden sier bad or missing token. Åpne paringslenken nøyaktig slik serveren skrev den ut, med
?token=-delen. - Paringssiden viser tekst, ikke en QR-kode. QR-koden trenger den valgfrie pakken
segno:pip install "marrow-mcp[qr]". Eller velg Legg inn manuelt i stedet i Marrow og skriv innurlogtokenfra den teksten. - Paring mislyktes på telefonen. Telefonen kunne ikke nå adressen i QR-koden. Under Docker ser serveren bare containerens egen adresse, så gi den din: legg til
--url http://<your-computer-ip>:8800i kommandoen. Utenfor hjemme-Wi-Fi-et bruker du en HTTPS-adresse fratailscale serveeller en tunnel. - Tilgang til Lokalt nettverk. For å nå en server på hjemmenettverket ditt trenger Marrow tilgang til Lokalt nettverk. iOS spør første gang du kobler sammen. Hvis du sa nei, slå på Marrow i Innstillinger, Personvern og sikkerhet, Lokalt nettverk, og koble deretter sammen på nytt med Marrow åpen.
- Den QR-koden er ikke en Marrow-paringskode. Kameraet leste en annen kode. Skann den på serverens paringsside.
- Gamle data, eller Leverer ikke i Marrow. Telefonen kan ikke sende til serveren. Siden Server-MCP i Marrow viser siste sending og hvor mange poster som venter. Sjekk at serveren kjører, og åpne deretter Marrow for å sende det som venter. Sendinger i bakgrunnen kjører når iOS tillater det.
- Denne serveren må oppdateres før den kan loggføre. Oppdater den med
pip install -U marrow-mcpog start den på nytt. Med Docker kjører dugit pullogdocker compose up -d --buildi klonen. - Oppføringer fra AI-en vises ikke. Slå på Tillat AI-skriving for serveren i Eksporter, Tilkoblingene dine. Skriveverktøyene vises på serveren først etter det. Hver oppføring venter på serveren og kommer inn når Marrow åpnes eller våkner neste gang.
- Tilkoblingen slår seg ikke på. Gratis har 1 tilkobling på om gangen, Marrow Pro opptil 10: AI-er, servere og automatiseringer til sammen.
Når du bør velge denne fremfor de andre
Velg speilet når agenten din trenger dataene mens telefonen sover eller er borte, eller når du vil ha en database du kan spørre i, i stedet for filer. Velg MCP-serveren på telefonen når agenten din kjører nær telefonen og du ikke vil ha noe annet å vedlikeholde. Velg automatiseringer når du allerede har et sted dataene skal havne.