Połącz agenta z Marrow
Marrow udostępnia Twoje dane z Apple Health przez Model Context Protocol, z Twojego własnego iPhone'a lub własnego serwera. Siedem narzędzi tylko do odczytu na telefonie, trzynaście na Twoim własnym serwerze (cztery z nich odpowiadają językiem samej aplikacji, oceniając dane względem Twojej własnej normy), uwierzytelnianie tokenem bearer, nigdzie żadnego konta. Ta strona to cała konfiguracja.
Agent na innym komputerze albo potrzebujesz odpowiedzi, gdy telefon śpi? Sparuj samodzielnie hostowaną kopię lustrzaną (pip install marrow-mcp): odpowiada całą dobę dla Claude Code, Cursor i OpenClaw. Jeśli trafiasz tu z wbudowanego konektora Claude lub ChatGPT, oto co robi to, czego one nie robią.
Konfiguracja dla poszczególnych aplikacji, Claude Code, Cursor, Codex i innych, jest na osobnej stronie w sekcji połączenia.
Chcę połączyć z Tobą moje własne dane z Apple Health. Marrow to bezpłatna aplikacja na iOS, która udostępnia je przez MCP, bez konta i bez subskrypcji potrzebnej do tego. Jest w App Store: https://apps.apple.com/app/id6800819435. Przeprowadź mnie przez całość: instalację aplikacji, włączenie serwera w Eksportuj, a potem Lokalny MCP, oraz dodanie adresu URL i tokena bearer, które mi pokaże, do Twojej konfiguracji MCP jako serwera Streamable HTTP. Jeśli nie da się edytować tej konfiguracji z Twojej strony, podaj mi dokładny plik i co wkleić. Dokumentacja konfiguracji: https://marrowhealthapp.com/mcp. Gdy będzie połączone, wywołaj health_summary dla ostatnich 7 dni i powiedz mi, co się wyróżnia.
1. Włącz serwer
Domyślnie jest wyłączony. W aplikacji: Eksportuj → Lokalny MCP, a potem włącz serwer. Dostajesz adres URL, token i kod QR. Serwer wiąże się wyłącznie z Twoją siecią lokalną, a aplikacja pokazuje dokładny adres, na którym nasłuchuje.
2. Wskaż swojemu klientowi serwer
Zastąp <phone-ip> i <token> tym, co pokazuje aplikacja.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, jedno kliknięcie
Pobierz marrow.mcpb na komputer i kliknij go dwukrotnie. Claude Desktop zainstaluje rozszerzenie i zapyta o powyższy adres URL i token. Bez terminala.
Claude Desktop (ręcznie), Cursor lub dowolny klient używający pliku mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Sprawdź ręcznie
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"}'
Narzędzia
Odczyty są zawsze. Zapisy to drugi przełącznik. Od Marrow 1.5 serwer na telefonie wymienia te same dwanaście narzędzi zapisu co 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), gdy włączysz Zezwalaj na zapis przez AI w Lokalnym MCP, stosowane od razu na telefonie i zapisywane w Apple Health, a każde z nich można cofnąć. Gdy wyłączone, serwer jest tylko do odczytu.
| Narzędzie | Zwraca |
|---|---|
health_summary | Ostatnie dni w obszarach aktywności, serca, snu i odżywiania |
list_metrics | Każdy śledzony wskaźnik, z jednostkami i pokryciem |
metric_daily | Wartości dzienne dowolnego wskaźnika, do 400 dni |
metric_samples | Surowe rekordy ze znacznikami czasu i urządzeniami źródłowymi |
workouts | Treningi ze wszystkich źródeł. Na telefonie także sesje siłowe Marrow seria po serii |
nutrition_log | Dziennik jedzenia z pełnym podziałem na składniki odżywcze |
strength_log | Każda seria siłowa z jej typem, szacowane 1RM dla każdego ćwiczenia, objętość dla każdej grupy mięśni. Rozgrzewki nigdy nie liczą się do objętości ani rekordów |
sleep_log | Jedna noc na dzień przebudzenia: pora położenia się spać, pora przebudzenia, godziny snu, minuty w każdej fazie (samodzielnie hostowana kopia lustrzana) |
symptoms_and_mood | Objawy z ich nasileniem i wpisy State of Mind z uczuciami i tym, czego dotyczyły (samodzielnie hostowana kopia lustrzana) |
Cztery kolejne w samodzielnie hostowanej kopii lustrzanej i w Cloud MCP. Zaczynają tam, gdzie kończą się odczyty surowe: każda wartość jest oceniana względem Twojej własnej bieżącej normy tym samym rachunkiem, którego używa ekran główny aplikacji (z wyłączeniem samego dnia), więc agent zaczyna od odczytu, który jest już prawdziwy dla Ciebie, zamiast oceniać liczbę na tle populacji.
| Narzędzie | Zwraca |
|---|---|
daily_brief | Jeden dzień: każdy kluczowy wskaźnik z jego wartością i własną frazą aplikacji (normalne dla Ciebie, powyżej Twojej normy, znacznie poniżej Twojej normy), jedzenie i woda na tle celów, sen z ostatniej nocy, wykonany trening, nastrój i objawy oraz flagi warte wspomnienia |
baselines | Twoja własna norma dla każdego wskaźnika: średnia i rozrzut w oknie, z i fraza najnowszej wartości, średnia z 7 dni i trend z 90 dni na miesiąc |
what_changed | Ostatni tydzień na tle czterech poprzednich: co się zmieniło i jak istotne jest to dla Ciebie, jedzenie, trening, zmiany snu i pory kładzenia się spać, strumienie danych, które zaczęły lub przestały przychodzić |
data_quality | Co przechowuje kopia lustrzana i jak jest świeża: dla każdego wskaźnika ostatni dzień, pokrycie, częstotliwość, źródła i to, czy stała się nieaktualna, aby agent nigdy nie wziął luki za fakt |
Serwer na urządzeniu udostępnia pierwsze siedem narzędzi surowych oraz daily_brief i baselines (dziewięć odczytów). Samodzielnie hostowana kopia lustrzana udostępnia wszystkie trzynaście, podobnie jak hostowana kopia Cloud MCP. Każdy odczyt w kopii lustrzanej przyjmuje liczbę dni wstecz albo od i do w kalendarzu telefonu, a kopia oferuje też cztery prompty (how_am_i_doing, weekly_review, doctor_prep, log_from_text) i cztery zasoby dla klientów, które je pokazują. Surowe próbki zawierają fazy snu i nasilenie objawów.
Za list_metrics stoi 172 wskaźników Apple Health, a za nutrition_log i strength_log własne dane Marrow o dzienniku i treningu siłowym, obejmujące aktywność, serce, sen, ciało, układ oddechowy, mobilność, słuch, odżywianie, umysł, objawy, cykl i nawyki. Wersja tej strony do odczytu maszynowego: tools.json.
Działanie, gdy telefon nie działa
Serwer na urządzeniu odpowiada, gdy aplikacja działa. Dla dostępu całodobowego sparuj samodzielnie hostowaną kopię lustrzaną: jeden plik z biblioteką standardową Pythona na Raspberry Pi, NAS lub starym laptopie. Wysyłanie danych z telefonu w tle utrzymuje ją aktualną, a ona udostępnia ten sam interfejs MCP pod adresem http://<server-ip>:8800/mcp z własnym tokenem. Narzędzia telefonu używają kluczy wskaźników aplikacji (active_energy, heart_rate_variability). Serwer akceptuje zarówno je, jak i krótkie nazwy Apple (active_energy_burned), więc agent może przechodzić między nimi bez ponownej nauki. Ma otwarty kod i można go zainstalować:
pip install marrow-mcp marrow-server
Źródło: github.com/MarrowHealth/marrow-mcp. Wpisany w oficjalnym rejestrze MCP jako tech.skeletonarmy/marrow.
Nie przekierowuj portów żadnego z serwerów do otwartego internetu. Oba są zaprojektowane dla sieci lokalnej lub tailneta. Jeśli potrzebujesz dostępu zdalnego, postaw przed nim tailscale serve lub odpowiednik, aby transport był HTTPS, a urządzenie zostało uwierzytelnione, zanim ktokolwiek zobaczy token bearer.
Rozwiązywanie problemów
Zacznij od poniższego testu, uruchomionego z komputera, na którym działa Twoje AI. Pokaże, po której stronie leży problem. Użyj adresu i tokena ze strony połączenia w Marrow, przy otwartym Marrow na telefonie.
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"}'
| Co dostajesz | Co to oznacza |
|---|---|
HTTP/1.1 200 OK i lista narzędzi | Telefon działa. Problem jest w ustawieniach Twojej aplikacji: adres, token albo typ serwera inny niż HTTP (Streamable HTTP). Popraw konfigurację i uruchom aplikację ponownie. |
401 Unauthorized | Token jest błędny albo to połączenie jest wyłączone w Marrow. Każde połączenie w sekcji Twoje połączenia ma własny token, a wyłączenie jednego blokuje tę aplikację, podczas gdy pozostałe działają dalej. Włącz je albo skopiuj jego token ponownie. |
404 Not Found z use POST /mcp | Ścieżka jest błędna. Adres kończy się na /mcp. |
| Połączenie odrzucone albo brak odpowiedzi aż do przekroczenia limitu czasu | Komputer nie może dotrzeć do telefonu. Przejdź przez poniższą listę. |
- Marrow musi pozostać otwarty. Serwer na telefonie odpowiada tylko wtedy, gdy Marrow jest otwarty na pierwszym planie. Gdy przełączysz aplikację lub zablokujesz telefon, iOS wkrótce go wstrzymuje. Otwórz Marrow ponownie, a znów będzie odpowiadać. Dla odpowiedzi przy śpiącym telefonie użyj Serwera MCP lub Cloud MCP.
- Ta sama sieć Wi-Fi lub tailnet. Komputer i telefon muszą być w tej samej sieci Wi-Fi lub tailnecie. Lokalny MCP nigdy nie odpowiada przez sieć komórkową. Jeśli Marrow pokazuje Nie znaleziono adresu sieciowego, połącz się z Wi-Fi lub tailnetem. Sieci Wi-Fi dla gości i w hotelach często uniemożliwiają urządzeniom łączenie się ze sobą.
- Adres tailneta albo adres Wi-Fi. Marrow pokazuje jeden z adresów telefonu, zwykle ten w Wi-Fi. Komputer, który łączy się z telefonem przez Tailscale, potrzebuje zamiast tego adresu telefonu w tailnecie. Pokazuje go aplikacja Tailscale (zaczyna się od
100.). Wstaw go do konfiguracji zamiast adresu Wi-Fi i zostaw ten sam port i token. - Adres się zmienił. Router może po jakimś czasie przydzielić telefonowi nowy adres Wi-Fi. Porównaj adres w Marrow z tym w konfiguracji. Zarezerwowany adres w routerze utrzymuje go na stałe.
- Dostęp do sieci lokalnej nie jest przyczyną. iOS pyta o niego, gdy Marrow sięga do urządzenia w Twojej sieci, takiego jak sparowany serwer. Serwer na telefonie odpowiadający komputerowi nie potrzebuje uprawnienia, więc włączenie lub wyłączenie tego przełącznika nie zmienia Lokalnego MCP.
- VPN na komputerze. VPN inny niż Twój tailnet może kierować ruch lokalny poza Twoją sieć Wi-Fi. Wstrzymaj go i spróbuj testu ponownie.
- Kod 405 w logu Twojej aplikacji. Telefon odpowiada tylko na POST i nie trzyma otwartego strumienia, więc GET dostaje
405. Aplikacje obsługujące Streamable HTTP kontynuują przez POST, więc sam ten wiersz nie jest problemem. - Twoja aplikacja przyjmuje tylko polecenie (stdio). Przepuść adres telefonu przez mostek mcp-remote. Potrzebuje
--allow-httpdla zwykłego adresu http, który nie jest na samym komputerze:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". W pliku konfiguracji dla Cursor, Codex lub Claude Desktop w Windows spacje wewnątrz argumentów mogą zostać zniekształcone. Zapisz nagłówek jakoAuthorization:${AUTH_HEADER}i ustawAUTH_HEADERnaBearer <token>w env serwera. - Czyta, ale nie może zapisywać. Włącz Zezwalaj na zapis przez AI w Lokalnym MCP. Wpisy są stosowane od razu na telefonie i każdy można cofnąć.
- Połączenie nie chce się włączyć. Plan bezpłatny pozwala mieć włączone 1 połączenie naraz, Marrow Pro do 10: AI, serwery i automatyzacje razem. Najpierw wyłącz jedno w sekcji Twoje połączenia.
Konfiguracja i rozwiązania dla poszczególnych aplikacji, Claude Code, Cursor, VS Code i innych, są w sekcji połączenia.
Ile to kosztuje
Nic. Dostęp dla agentów jest w poziomie bezpłatnym, razem z synchronizacją w tle, automatycznym eksportem, eksportem CSV i JSON oraz skanowaniem kodów kreskowych. Health Auto Export wydał serwer MCP przed Marrow i jest on dobry, ale ich serwer wymaga subskrypcji Premium. Ta różnica, a nie pierwszeństwo, jest twierdzeniem wartym postawienia.
Wymagania
- iOS 17 lub nowszy i Apple Health. Nie ma wersji na Androida ani wersji internetowej.
- Marrow jest w App Store, bezpłatnie: apps.apple.com/app/id6800819435.
- Nie istnieje konto Marrow, więc nie ma hostowanego API, które można wywołać bez własnego urządzenia użytkownika.