Spegeln på egen server
En liten server på hårdvara du äger som håller en fullständig, levande kopia av din Marrow-data och svarar agenter medan din telefon sover, ligger i fickan eller är på andra sidan jorden.
Installation för en app i taget finns på en egen sida under anslutningar.
Alla Marrow-guider: MCP · Spegel på egen server · Automatiseringar · Filer · Support
Vad det är
En liten server med öppen källkod som du kör på hårdvara du äger: en Raspberry Pi, en NAS, en gammal laptop, en VPS för $5. Din telefon parkopplas med den en gång genom att skanna en QR-kod och skickar sedan varje ändring i bakgrunden, med appen stängd. Servern håller en fullständig SQLite-kopia av din Marrow-data och serverar tretton MCP-verktyg för läsning: telefonens sju, sleep_log och symptoms_and_mood, och fyra som svarar på appens egna villkor (daily_brief, baselines, what_changed, data_quality), så att en agent kan fråga ”hur sov jag den här veckan” klockan 3 på natten med din telefon i en låda. MIT-licens: github.com/MarrowHealth/marrow-mcp.
Installera
En Python-fil, bara standardbiblioteket, Python 3.10 eller nyare:
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
Vid första start skriver den ut en URL för parkoppling och visar en QR-kod i vilken webbläsare som helst i ditt nätverk.
Parkoppla telefonen
- Öppna parkopplings-URL:en på vilken skärm som helst nära dig.
- I Marrow: Exportera, Server-MCP, Parkoppla med en server, skanna koden.
- Klart. Telefonen börjar skicka, och sidan Server visar tidpunkten för det senaste utskicket och hur många poster som väntar.
Parkopplingen skapar två token i serverns datakatalog: en som telefonen använder för att skicka, en som agenter använder för att läsa. Radera en tokenfil för att rotera den.
Peka en agent mot den
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Tretton verktyg, alla läsning. De nio råa: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. Och fyra som börjar där de råa slutar, mätta mot din egen normalnivå bakåt i tiden med samma matematik som appens startsida använder: daily_brief (en dag: varje nyckelmätvärde med sitt värde och appens egen fras, mat och vatten mot dina mål, gårdagens sömn, genomförd träning, flaggor värda att nämna), baselines (din egen normalnivå per mätvärde, det senaste värdets z och 90-dagarstrenden), what_changed (den senaste veckan mot de fyra före: vad som förändrades, hur anmärkningsvärt det är för dig, förskjutningar i sömn och läggdags, flöden som började eller slutade) och data_quality (vad som är färskt, gammalt eller saknas, så att en agent aldrig misstar ett glapp för ett faktum). Varje läsning tar dagar tillbaka eller från och till i telefonens kalender. Servern listar också fyra prompter (how_am_i_doing, weekly_review, doctor_prep, log_from_text) och fyra resurser för klienter som visar dem. Den har också tolv skrivverktyg, som listas när din telefon tillåter dem. Från Marrow 1.5, slå på Tillåt AI att skriva för din server under Exportera, Dina anslutningar så kan en AI logga måltider, vatten, vikt, träningspass, sömn, symtom, humör och mål via den, gratis. Servern köar varje post och telefonen utför den när Marrow öppnas eller vaknar, och varenda en kan ångras. Installation för Claude Desktop, Cursor och andra finns på MCP-sidan. Bara URL:en ändras.
Nå den utanför ditt LAN
Servern talar vanlig HTTP och har ingen egen TLS. Öppna inte portar mot internet för den rakt av. Lägg Tailscale på datorn och telefonen och använd tailscale serve, eller sätt Cloudflare Tunnel eller valfri omvänd proxy som avslutar HTTPS framför den. QR-koden för parkoppling bär den adress som servern annonserar: dess egen LAN-adress, eller den du ger den med --url. Starta den med den adress du faktiskt kommer att använda, till exempel marrow-server --url https://pi.your-tailnet.ts.net, och parkoppla sedan.
Det som hamnar på disken
- En SQLite-databas med varje dagsserie, prov, dagboksrad och styrkeset, hållen aktuell av telefonens utskick.
- Varje rått utskick lagras som JSONL bredvid den, så att databasen kan byggas om om du någonsin förstör den.
- Räkna med 50 till 150 MB per år med historik i full upplösning.
Enheter: Hälsomätvärden kommer i sina lagrade SI-enheter med etiketter. Styrkeset kommer i pund med "unit": "lb" oavsett telefonens visningsinställning, så att spegeln aldrig blandar enheter. Peka Grafana, DuckDB eller ett cron-jobb direkt mot databasfilen.
Felsökning
Två tester från datorn som din AI körs på visar var problemet finns. Först, är servern uppe? Det här kräver ingen token:
curl http://<server-ip>:8800/health
Den svarar {"server": "marrow", "ok": true}. Fungerar sedan 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 | Vad det betyder |
|---|---|
200 OK och en lista över verktyg | Servern fungerar. Kontrollera adressen, token och servertypen (HTTP) i din agents konfiguration och starta sedan om agenten. |
401 med bad bearer token | Fel token. Agenter använder mcp-token, inte den som telefonen parkopplas med. Se nedan. |
| Anslutningen nekas eller en timeout | Servern körs inte, porten är fel, eller en brandvägg på datorn blockerar port 8800. Med Docker, kontrollera portmappningen 8800:8800. |
- Vilken token. Servern skriver ut agenternas token när den startar, på raden som börjar med
agents:. Den finns också i filen.mcp-tokeni datamappen (./dataom du inte angav--data,/datai Docker). Telefonen använder en annan token, från.app-token. För att byta agenternas token, radera.mcp-token, starta om servern och uppdatera varje agent. - Parkopplingssidan säger felaktig eller saknad token. Öppna parkopplingslänken exakt som servern skrev ut den, med delen
?token=. - Parkopplingssidan visar text, inte en QR-kod. QR-koden kräver det valfria paketet
segno:pip install "marrow-mcp[qr]". Eller välj i Marrow Ange manuellt istället och skrivurlochtokenfrån den texten. - Parkopplingen misslyckades på telefonen. Telefonen kunde inte nå adressen i QR-koden. Under Docker ser servern bara containerns egen adress, så ge den din: lägg till
--url http://<your-computer-ip>:8800i dess kommando. Utanför ditt wifi hemma, använd en HTTPS-adress fråntailscale serveeller en tunnel. - Åtkomst till lokalt nätverk. För att nå en server i ditt hemnätverk behöver Marrow åtkomst till lokalt nätverk. iOS frågar första gången du parkopplar. Om du sa nej, slå på Marrow i Inställningar, Integritet och säkerhet, Lokalt nätverk och parkoppla sedan igen med Marrow öppen.
- Den QR-koden är ingen parkopplingskod för Marrow. Kameran läste en annan kod. Skanna den på serverns parkopplingssida.
- Gamla data, eller Levererar inte i Marrow. Telefonen kan inte skicka till servern. Sidan Server-MCP i Marrow visar det senaste utskicket och hur många poster som väntar. Kontrollera att servern körs och öppna sedan Marrow för att skicka det som väntar. Utskick i bakgrunden körs när iOS tillåter det.
- Den här servern behöver en uppdatering innan den kan logga. Uppdatera den med
pip install -U marrow-mcpoch starta om den. Med Docker, körgit pullochdocker compose up -d --buildi klonen. - Poster från AI:n syns inte. Slå på Tillåt AI att skriva för servern under Exportera, Dina anslutningar. Skrivverktygen dyker upp på servern först efter det. Varje post väntar på servern och landar när Marrow öppnas eller vaknar nästa gång.
- Anslutningen går inte att slå på. Gratis har 1 anslutning på åt gången, Marrow Pro upp till 10: AI:er, servrar och automatiseringar tillsammans.
När du ska välja den här framför de andra
Välj spegeln när din agent behöver datan medan din telefon sover eller är borta, eller när du vill ha en databas du kan söka i i stället för filer. Välj MCP-servern på telefonen när din agent körs nära telefonen och du inte vill ha något annat att underhålla. Välj automatiseringar när du redan har ett ställe där datan ska landa.