Marrow Health
PL
Pobierz

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

  1. Otwórz adres URL do parowania na dowolnym ekranie w pobliżu.
  2. W Marrow: Eksportuj, Serwer MCP, Sparuj z serwerem, zeskanuj kod.
  3. 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

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 dostajeszCo to oznacza
200 OK i lista narzędziSerwer działa. Sprawdź adres, token i typ serwera (HTTP) w konfiguracji agenta, a potem uruchom agenta ponownie.
401 z bad bearer tokenZł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 czasuSerwer nie działa, port jest zły albo zapora na maszynie blokuje port 8800. W Dockerze sprawdź mapowanie portów 8800:8800.

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ć.