Einen Agenten mit Marrow verbinden
Marrow stellt deine Apple-Health-Daten über das Model Context Protocol bereit, von deinem eigenen iPhone oder deinem eigenen Server. Sieben nur lesende Tools auf dem Handy, dreizehn auf deinem eigenen Server (vier davon antworten in den eigenen Begriffen der App, gemessen an deinem eigenen Normalwert), Bearer-Token-Authentifizierung, nirgends ein Konto. Diese Seite ist die ganze Einrichtung.
Ein Agent auf einem anderen Rechner, oder du brauchst Antworten, während das Handy schläft? Koppele den selbst gehosteten Spiegel (pip install marrow-mcp): Er antwortet rund um die Uhr für Claude Code, Cursor und OpenClaw. Wenn du vom eingebauten Connector von Claude oder ChatGPT hierhergekommen bist, hier steht, was er kann und sie nicht.
Die Einrichtung für jede einzelne App, Claude Code, Cursor, Codex und mehr, steht auf der jeweils eigenen Seite unter Verbindungen.
Ich möchte meine eigenen Apple-Health-Daten mit dir verbinden. Marrow ist eine kostenlose iOS-App, die sie über MCP bereitstellt, ohne Konto und ohne dass dafür ein Abo nötig ist. Sie ist im App Store: https://apps.apple.com/app/id6800819435. Führe mich durch das Ganze: die App installieren, den Server unter Exportieren, dann Lokales MCP einschalten und die URL und das Bearer-Token, die sie mir zeigt, als Streamable-HTTP-Server in deine MCP-Konfiguration eintragen. Wenn du diese Konfiguration nicht selbst bearbeiten kannst, nenne mir die genaue Datei und was ich einfügen soll. Doku zur Einrichtung: https://marrowhealthapp.com/mcp. Wenn die Verbindung steht, rufe health_summary für die letzten 7 Tage auf und sag mir, was auffällt.
1. Schalte den Server ein
Er wird ausgeschaltet ausgeliefert. In der App: Exportieren → Lokales MCP, dann den Server aktivieren. Du bekommst eine URL, ein Token und einen QR-Code. Der Server bindet sich nur an dein lokales Netzwerk, und die App zeigt die genaue Adresse, auf der er lauscht.
2. Richte deinen Client darauf aus
Ersetze <phone-ip> und <token> durch das, was die App dir zeigt.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, mit einem Klick
Lade marrow.mcpb auf deinen Computer herunter und doppelklicke darauf. Claude Desktop installiert die Erweiterung und fragt nach der URL und dem Token von oben. Kein Terminal nötig.
Claude Desktop (manuell), Cursor oder jeder Client mit einer mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Von Hand prüfen
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"}'
Die Tools
Lesezugriffe sind immer da. Schreibzugriffe sind ein zweiter Schalter. Ab Marrow 1.5 listet der Server des Handys dieselben zwölf Schreib-Tools wie 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), sobald du unter Lokales MCP KI-Schreibzugriff erlauben einschaltest, sofort auf dem Handy umgesetzt und in Apple Health geschrieben, jeder rückgängig zu machen. Ist der Schalter aus, ist der Server nur lesend.
| Tool | Liefert |
|---|---|
health_summary | Die letzten Tage zu Aktivität, Herz, Schlaf und Ernährung |
list_metrics | Jede erfasste Metrik, mit Einheiten und Abdeckung |
metric_daily | Tageswerte für jede Metrik, bis zu 400 Tage |
metric_samples | Rohe Datensätze mit Zeitstempeln und Quellgeräten |
workouts | Workouts aus jeder Quelle. Auf dem Handy auch die Krafteinheiten von Marrow Satz für Satz |
nutrition_log | Ernährungstagebuch mit der vollständigen Nährstoffaufschlüsselung |
strength_log | Jeder Kraftsatz mit seinem Satztyp, geschätztes 1RM pro Übung, Volumen pro Muskelgruppe. Aufwärmsätze zählen nie für Volumen oder Rekorde |
sleep_log | Eine Nacht pro Aufwachtag: Schlafenszeit, Aufwachzeit, Stunden Schlaf, Minuten pro Phase (selbst gehosteter Spiegel) |
symptoms_and_mood | Symptome mit ihrem Schweregrad und State-of-Mind-Einträge mit Gefühlen und worum es ging (selbst gehosteter Spiegel) |
Vier weitere auf dem selbst gehosteten Spiegel und im Cloud-MCP. Sie setzen da an, wo die rohen Abfragen aufhören: Jeder Wert wird an deinem eigenen gleitenden Normalwert gemessen, mit derselben Rechnung wie in der Übersicht der App (der Tag selbst ausgenommen), sodass ein Agent von einer Aussage ausgeht, die für dich schon stimmt, statt eine Zahl an der Bevölkerung zu beurteilen.
| Tool | Liefert |
|---|---|
daily_brief | Ein Tag: jede wichtige Metrik mit ihrem Wert und der eigenen Formulierung der App (normal für dich, über deinem Normalwert, weit unter deinem Normalwert), Essen und Wasser im Vergleich zu deinen Zielen, der Schlaf der letzten Nacht, das absolvierte Training, Stimmung und Symptome und Hinweise, die erwähnenswert sind |
baselines | Dein eigener Normalwert pro Metrik: Mittelwert und Streuung über das Fenster, z-Wert und Formulierung des letzten Werts, der 7-Tage-Mittelwert und der 90-Tage-Trend pro Monat |
what_changed | Die letzte Woche gegen die vier davor: was sich bewegt hat und wie auffällig das für dich ist, Veränderungen bei Essen, Training, Schlaf und Schlafenszeit, Datenströme, die zu kommen begonnen oder aufgehört haben |
data_quality | Was der Spiegel enthält und wie aktuell es ist: pro Metrik der letzte Tag, Abdeckung, Takt, Quellen und ob sie veraltet ist, sodass ein Agent eine Lücke nie für eine Tatsache hält |
Der Server auf dem Gerät stellt die ersten sieben rohen Tools bereit sowie daily_brief und baselines (neun Lesezugriffe). Der selbst gehostete Spiegel stellt alle dreizehn bereit, ebenso die gehostete Kopie von Cloud-MCP. Jeder Lesezugriff auf dem Spiegel nimmt Tage zurück oder von und bis im Kalender des Handys entgegen, und der Spiegel bietet außerdem vier Prompts (how_am_i_doing, weekly_review, doctor_prep, log_from_text) und vier Ressourcen für Clients, die sie anzeigen. Rohe Messwerte enthalten Schlafphasen und Symptom-Schweregrade.
Hinter list_metrics stehen 172 Apple-Health-Metriken, dazu die Marrow-eigenen Tagebuch- und Kraftdaten hinter nutrition_log und strength_log, die Aktivität, Herz, Schlaf, Körper, Atmung, Mobilität, Gehör, Ernährung, Psyche, Symptome, Zyklus und Gewohnheiten abdecken. Maschinenlesbare Version dieser Seite: tools.json.
Verfügbar bleiben, wenn das Handy es nicht ist
Der Server auf dem Gerät antwortet, solange die App läuft. Für Zugriff rund um die Uhr koppelst du einen selbst gehosteten Spiegel: eine Python-Stdlib-Datei auf einem Pi, NAS oder alten Laptop. Die Pushes des Handys im Hintergrund halten ihn aktuell, und er spricht dieselbe MCP-Oberfläche unter http://<server-ip>:8800/mcp mit einem eigenen Token. Die Tools des Handys nutzen die Metrikschlüssel der App (active_energy, heart_rate_variability). Der Server akzeptiert diese ebenso wie die kurzen Namen von Apple (active_energy_burned), sodass ein Agent zwischen ihnen wechseln kann, ohne neu zu lernen. Er ist Open Source und installierbar:
pip install marrow-mcp marrow-server
Quelle: github.com/MarrowHealth/marrow-mcp. Im offiziellen MCP-Register gelistet als tech.skeletonarmy/marrow.
Leite keinen der beiden Server per Portweiterleitung ins offene Internet. Beide sind für ein LAN oder ein Tailnet gedacht. Wenn du Fernzugriff brauchst, stelle tailscale serve oder etwas Gleichwertiges davor, damit der Transport HTTPS ist und das Gerät authentifiziert wird, bevor das Bearer-Token überhaupt zu sehen ist.
Fehlerbehebung
Beginne mit dem Test unten, ausgeführt auf dem Rechner, auf dem deine KI läuft. Er sagt dir, auf welcher Seite das Problem liegt. Nutze die Adresse und das Token von der Seite der Verbindung in Marrow, bei geöffnetem Marrow auf dem Handy.
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"}'
| Was du bekommst | Was es bedeutet |
|---|---|
HTTP/1.1 200 OK und eine Liste von Tools | Das Handy funktioniert. Das Problem liegt in den Einstellungen deiner App: die Adresse, das Token oder ein anderer Servertyp als HTTP (Streamable HTTP). Korrigiere die Konfiguration und starte die App neu. |
401 Unauthorized | Das Token ist falsch, oder diese Verbindung ist in Marrow aus. Jede Verbindung unter „Deine Verbindungen“ hat ihr eigenes Token, und wenn du eine ausschaltest, ist diese App ausgesperrt, während die anderen weiterlaufen. Schalte sie ein oder kopiere ihr Token erneut. |
404 Not Found mit use POST /mcp | Der Pfad ist falsch. Die Adresse endet auf /mcp. |
| Verbindung verweigert, oder keine Antwort bis zum Timeout | Der Rechner erreicht das Handy nicht. Gehe die Liste unten durch. |
- Marrow muss geöffnet sein. Der Server des Handys antwortet nur, solange Marrow im Vordergrund geöffnet ist. Wenn du die App wechselst oder das Handy sperrst, pausiert iOS ihn bald. Öffne Marrow wieder, dann antwortet er wieder. Für Antworten bei schlafendem Handy nutze Server-MCP oder Cloud-MCP.
- Dasselbe WLAN oder Tailnet. Der Rechner und das Handy müssen ein WLAN oder ein Tailnet teilen. Lokales MCP antwortet nie über Mobilfunk. Wenn Marrow Keine Netzwerkadresse gefunden sagt, verbinde dich mit einem WLAN oder einem Tailnet. Gast- und Hotel-WLANs verhindern oft, dass Geräte sich erreichen.
- Tailnet-Adresse oder WLAN-Adresse. Marrow zeigt eine der Adressen des Handys, meist die im WLAN. Ein Rechner, der das Handy über Tailscale erreicht, braucht stattdessen die Tailnet-Adresse des Handys. Die Tailscale-App zeigt sie (sie beginnt mit
100.). Trage sie in deine Konfiguration statt der WLAN-Adresse ein und behalte denselben Port und dasselbe Token. - Die Adresse hat sich geändert. Ein Router kann dem Handy nach einer Weile eine neue WLAN-Adresse geben. Vergleiche die Adresse in Marrow mit der in deiner Konfiguration. Eine reservierte Adresse im Router hält sie fest.
- Der Zugriff auf das lokale Netzwerk ist nicht die Ursache. iOS fragt danach, wenn Marrow ein Gerät in deinem Netzwerk erreicht, etwa einen gekoppelten Server. Dass der Server des Handys einem Computer antwortet, braucht keine Berechtigung, deshalb ändert dieser Schalter nichts an Lokales MCP.
- Ein VPN auf dem Rechner. Ein anderes VPN als dein Tailnet kann lokalen Verkehr von deinem WLAN weglenken. Pausiere es und versuche den Test noch einmal.
- Ein 405 im Log deiner App. Das Handy antwortet nur auf POST und hält keinen Stream offen, deshalb bekommt ein GET ein
405. Apps, die Streamable HTTP sprechen, machen mit POST weiter, diese Zeile allein ist also nicht das Problem. - Deine App nimmt nur einen Befehl an (stdio). Leite die Adresse des Handys durch die Brücke mcp-remote. Für eine einfache http-Adresse, die nicht auf dem Rechner selbst liegt, braucht sie
--allow-http:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". In einer Konfigurationsdatei für Cursor, Codex oder Claude Desktop unter Windows können Leerzeichen in args zerlegt werden. Schreibe den Header alsAuthorization:${AUTH_HEADER}und setzeAUTH_HEADERaufBearer <token>in der env des Servers. - Es liest, kann aber nichts eintragen. Schalte unter Lokales MCP KI-Schreibzugriff erlauben ein. Einträge werden sofort auf dem Handy umgesetzt, und jeder lässt sich rückgängig machen.
- Die Verbindung lässt sich nicht einschalten. Kostenlos erlaubt 1 Verbindung gleichzeitig, Marrow Pro bis zu 10: KIs, Server und Automationen zusammen. Schalte zuerst unter „Deine Verbindungen“ eine aus.
Einrichtung und Lösungen für jede einzelne App, Claude Code, Cursor, VS Code und mehr, stehen unter Verbindungen.
Was das kostet
Nichts. Der Zugriff für Agenten ist im kostenlosen Tarif enthalten, ebenso Synchronisierung im Hintergrund, automatischer Export, CSV- und JSON-Export und Barcode-Scan. Health Auto Export hat einen MCP-Server vor Marrow veröffentlicht, und er ist gut, aber der von dort setzt ein Premium-Abo voraus. Dieser Unterschied, nicht die Reihenfolge, ist die Aussage, die sich lohnt.
Voraussetzungen
- iOS 17 oder neuer und Apple Health. Es gibt keine Android- oder Web-Version.
- Marrow ist kostenlos im App Store: apps.apple.com/app/id6800819435.
- Es gibt kein Marrow-Konto, also keine gehostete API, die man ohne das eigene Gerät eines Nutzers aufrufen könnte.