Samodzielnie hostowana kopia lustrzana
Mały serwer na sprzęcie, który należy do Ciebie, trzymający kompletną, aktualną kopię Twoich danych z Marrow i odpowiadający agentom, gdy telefon śpi, jest w kieszeni albo po drugiej stronie świata.
Konfiguracja dla poszczególnych aplikacji jest na osobnej stronie w sekcji połączenia.
Wszystkie poradniki Marrow: MCP · Samodzielnie hostowana kopia lustrzana · Automatyzacje · Pliki · Wsparcie
Co to jest
Mały serwer o otwartym kodzie, który uruchamiasz na własnym sprzęcie: Raspberry Pi, NAS, stary laptop, VPS za $5. Twój telefon paruje się z nim raz przez zeskanowanie kodu QR, a potem wysyła każdą zmianę w tle, przy zamkniętej aplikacji. Serwer trzyma kompletną kopię SQLite Twoich danych z Marrow i udostępnia trzynaście narzędzi MCP do odczytu: siedem z telefonu, sleep_log i symptoms_and_mood oraz cztery, które odpowiadają językiem samej aplikacji (daily_brief, baselines, what_changed, data_quality), więc agent może zapytać „jak mi się spało w tym tygodniu” o 3 w nocy, gdy telefon leży w szufladzie. Licencja MIT: github.com/MarrowHealth/marrow-mcp.
Instalacja
Jeden plik Pythona, tylko biblioteka standardowa, Python 3.10 lub nowszy:
pip install marrow-mcp marrow-server # or: python3 marrow_server.py
Albo z Dockerem:
git clone https://github.com/MarrowHealth/marrow-mcp cd marrow-mcp docker compose up -d
Przy pierwszym uruchomieniu wypisuje adres URL do parowania i pokazuje kod QR w dowolnej przeglądarce w Twojej sieci.
Sparuj telefon
- Otwórz adres URL do parowania na dowolnym ekranie w pobliżu.
- W Marrow: Eksportuj, Serwer MCP, Sparuj z serwerem, zeskanuj kod.
- Gotowe. Telefon zaczyna wysyłać dane, a strona Serwer pokazuje czas ostatniego wysłania i liczbę oczekujących rekordów.
Parowanie tworzy dwa tokeny w katalogu danych serwera: jeden, którego telefon używa do wysyłania, i jeden, którego agenci używają do odczytu. Usuń plik tokena, aby go zmienić.
Skieruj na niego agenta
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Trzynaście narzędzi, wszystkie do odczytu. Dziewięć surowych: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. I cztery, które zaczynają tam, gdzie kończą się surowe, oceniane względem Twojej własnej bieżącej normy tym samym rachunkiem, którego używa ekran główny aplikacji: daily_brief (jeden dzień: każdy kluczowy wskaźnik z jego wartością i własną frazą aplikacji, jedzenie i woda na tle celów, sen z ostatniej nocy, wykonany trening, flagi warte wspomnienia), baselines (Twoja własna norma dla każdego wskaźnika, z najnowszej wartości i trend z 90 dni), what_changed (ostatni tydzień na tle czterech poprzednich: co się zmieniło, jak istotne jest to dla Ciebie, zmiany snu i pory kładzenia się spać, strumienie, które zaczęły lub przestały przychodzić) i data_quality (co jest świeże, nieaktualne lub brakuje, aby agent nigdy nie wziął luki za fakt). Każdy odczyt przyjmuje liczbę dni wstecz albo od i do w kalendarzu telefonu. Serwer wymienia też cztery prompty (how_am_i_doing, weekly_review, doctor_prep, log_from_text) i cztery zasoby dla klientów, które je pokazują. Ma także dwanaście narzędzi zapisu, wymienianych, gdy telefon na nie pozwoli. Od Marrow 1.5 włącz Zezwalaj na zapis przez AI dla swojego serwera w Eksportuj, Twoje połączenia, a AI będzie mogło przez niego zapisywać posiłki, wodę, wagę, treningi, sen, objawy, nastrój i cele, bezpłatnie. Serwer kolejkuje każdy wpis, a telefon stosuje go, gdy Marrow się otworzy lub obudzi, i każdy można cofnąć. Konfiguracja dla Claude Desktop, Cursor i innych jest na stronie MCP. Zmienia się tylko adres URL.
Dostęp spoza Twojej sieci lokalnej
Serwer mówi zwykłym HTTP i nie ma własnego TLS. Nie przekierowuj do niego portów w surowej postaci. Zainstaluj Tailscale na maszynie i na telefonie i użyj tailscale serve albo postaw przed nim Cloudflare Tunnel lub dowolny reverse proxy kończący HTTPS. Kod QR do parowania niesie adres, który serwer ogłasza: jego własny adres w sieci lokalnej albo ten, który podasz przez --url. Uruchom go z adresem, którego faktycznie użyjesz, na przykład marrow-server --url https://pi.your-tailnet.ts.net, a potem sparuj.
Co ląduje na dysku
- Baza SQLite z każdą serią dzienną, próbką, wpisem w dzienniku i serią siłową, utrzymywana aktualną przez dane wysyłane z telefonu.
- Każda surowa paczka danych z telefonu zapisana obok jako JSONL, aby bazę można było odbudować, gdyby kiedyś uległa uszkodzeniu.
- Zaplanuj od 50 do 150 MB na rok historii w pełnej wierności.
Jednostki: wskaźniki zdrowia przychodzą w zapisanych jednostkach SI z podpisami. Serie siłowe przychodzą w funtach z "unit": "lb" niezależnie od ustawienia wyświetlania w telefonie, więc kopia lustrzana nigdy nie miesza jednostek. Skieruj Grafana, DuckDB lub zadanie cron prosto na plik bazy danych.
Rozwiązywanie problemów
Dwa testy z komputera, na którym działa Twoje AI, pokażą, gdzie leży problem. Najpierw, czy serwer działa? Ten nie wymaga tokena:
curl http://<server-ip>:8800/health
Odpowiada {"server": "marrow", "ok": true}. Potem, czy token agenta działa?
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"}'
| Co dostajesz | Co to oznacza |
|---|---|
200 OK i lista narzędzi | Serwer działa. Sprawdź adres, token i typ serwera (HTTP) w konfiguracji agenta, a potem uruchom agenta ponownie. |
401 z bad bearer token | Zły token. Agenci używają tokena mcp, a nie tego, z którym paruje się telefon. Zobacz niżej. |
| Połączenie odrzucone lub przekroczenie limitu czasu | Serwer nie działa, port jest zły albo zapora na maszynie blokuje port 8800. W Dockerze sprawdź mapowanie portów 8800:8800. |
- Który token. Serwer wypisuje token agentów przy uruchomieniu, w wierszu zaczynającym się od
agents:. Jest też w pliku.mcp-tokenw folderze danych (./data, chyba że podano--data,/dataw Dockerze). Telefon używa innego tokena, z.app-token. Aby zmienić token agentów, usuń.mcp-token, uruchom serwer ponownie i zaktualizuj każdego agenta. - Strona parowania mówi o złym lub brakującym tokenie. Otwórz link do parowania dokładnie tak, jak wypisał go serwer, z jego częścią
?token=. - Strona parowania pokazuje tekst, a nie kod QR. Kod QR wymaga opcjonalnego pakietu
segno:pip install "marrow-mcp[qr]". Albo w Marrow wybierz Wprowadź ręcznie i wpiszurloraztokenz tego tekstu. - Parowanie nie powiodło się na telefonie. Telefon nie mógł dotrzeć do adresu z kodu QR. W Dockerze serwer widzi tylko adres własnego kontenera, więc podaj mu swój: dodaj
--url http://<your-computer-ip>:8800do jego polecenia. Poza domową siecią Wi-Fi użyj adresu HTTPS ztailscale servelub tunelu. - Dostęp do sieci lokalnej. Aby dotrzeć do serwera w sieci domowej, Marrow potrzebuje dostępu do sieci lokalnej. iOS pyta przy pierwszym parowaniu. Jeśli odmówiono dostępu, włącz Marrow w Ustawienia, Prywatność i ochrona, Sieć lokalna, a potem sparuj ponownie przy otwartym Marrow.
- Ten kod QR nie jest kodem parowania Marrow. Aparat odczytał inny kod. Zeskanuj ten ze strony parowania serwera.
- Stare dane albo „Nie dostarcza” w Marrow. Telefon nie może wysłać danych do serwera. Strona Serwer MCP w Marrow pokazuje ostatnie wysłanie i liczbę oczekujących rekordów. Sprawdź, czy serwer działa, a potem otwórz Marrow, aby wysłać to, co czeka. Wysyłanie w tle działa, gdy iOS na to pozwala.
- Ten serwer wymaga aktualizacji, zanim będzie mógł zapisywać. Zaktualizuj go poleceniem
pip install -U marrow-mcpi uruchom ponownie. W Dockerze uruchomgit pullidocker compose up -d --buildw sklonowanym repozytorium. - Wpisy od AI się nie pokazują. Włącz Zezwalaj na zapis przez AI dla serwera w Eksportuj, Twoje połączenia. Narzędzia zapisu pojawiają się na serwerze dopiero potem. Każdy wpis czeka na serwerze i trafia do Marrow, gdy ten następnym razem się otworzy lub obudzi.
- 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.
Kiedy wybrać to zamiast innych
Wybierz kopię lustrzaną, gdy agent potrzebuje danych, kiedy telefon śpi lub jest daleko, albo gdy chcesz mieć bazę danych do odpytywania zamiast plików. Wybierz serwer MCP na telefonie, gdy agent działa blisko telefonu i nie chcesz niczego innego utrzymywać. Wybierz automatyzacje, gdy masz już miejsce, w którym dane powinny wylądować.