Mirror self-hosted
Server kecil di perangkat keras milikmu yang menyimpan salinan lengkap dan langsung dari data Marrow kamu dan menjawab agen saat ponselmu tidur, ada di saku, atau berada di belahan dunia lain.
Pengaturan per aplikasi ada di halamannya sendiri di bawah koneksi.
Semua panduan Marrow: MCP · Mirror self-hosted · Otomatisasi · File · Dukungan
Apa itu
Server sumber terbuka kecil yang kamu jalankan di perangkat keras milikmu: Raspberry Pi, NAS, laptop lama, VPS $5. Ponselmu dipasangkan sekali dengan memindai kode QR, lalu mengirim setiap perubahan di latar belakang, dengan aplikasi tertutup. Server menyimpan salinan SQLite lengkap dari data Marrow kamu dan menyajikan tiga belas tool MCP untuk membaca: tujuh milik ponsel, sleep_log dan symptoms_and_mood, serta empat yang menjawab dengan istilah aplikasi sendiri (daily_brief, baselines, what_changed, data_quality), sehingga agen bisa bertanya "bagaimana tidur saya minggu ini" pukul 3 pagi dengan ponselmu di dalam laci. Berlisensi MIT: github.com/MarrowHealth/marrow-mcp.
Pasang
Satu file Python, hanya pustaka standar, Python 3.10 atau lebih baru:
pip install marrow-mcp marrow-server # or: python3 marrow_server.py
Atau dengan Docker:
git clone https://github.com/MarrowHealth/marrow-mcp cd marrow-mcp docker compose up -d
Saat pertama dijalankan, ia mencetak URL penyandingan dan menampilkan kode QR di browser mana pun di jaringanmu.
Pasangkan ponsel
- Buka URL penyandingan di layar mana pun di dekatmu.
- Di Marrow: Ekspor, MCP server, Pasangkan dengan server, pindai kodenya.
- Selesai. Ponsel mulai mengirim, dan halaman Server menampilkan waktu pengiriman terakhir dan berapa banyak catatan yang menunggu.
Penyandingan membuat dua token di direktori data server: satu dipakai ponsel untuk mengirim, satu dipakai agen untuk membaca. Hapus file token untuk menggantinya.
Arahkan agen ke sana
claude mcp add --transport http marrow http://<server-ip>:8800/mcp \ --header "Authorization: Bearer <mcp token>"
Tiga belas tool, semuanya hanya baca. Sembilan yang mentah: health_summary, list_metrics, metric_daily, metric_samples, workouts, nutrition_log, strength_log, sleep_log, symptoms_and_mood. Dan empat yang mulai dari tempat yang mentah berhenti, dinilai terhadap kondisi normal terkini milikmu sendiri dengan perhitungan yang sama dengan halaman Beranda aplikasi: daily_brief (satu hari: setiap metrik utama dengan nilainya dan frasa dari aplikasi sendiri, makanan dan air terhadap targetmu, tidur semalam, latihan yang dilakukan, tanda-tanda yang layak disebut), baselines (kondisi normalmu sendiri per metrik, z dari nilai terbaru, dan tren 90 hari), what_changed (minggu terakhir dibandingkan empat minggu sebelumnya: apa yang bergerak, seberapa penting bagimu, pergeseran tidur dan jam tidur, aliran data yang mulai atau berhenti) dan data_quality (apa yang segar, basi, atau hilang, agar agen tidak pernah keliru menganggap celah sebagai fakta). Setiap bacaan menerima jumlah hari ke belakang atau from dan to menurut kalender ponsel. Server juga mencantumkan empat prompt (how_am_i_doing, weekly_review, doctor_prep, log_from_text) dan empat resource untuk klien yang menampilkannya. Server ini juga membawa dua belas tool tulis, yang dicantumkan begitu ponselmu mengizinkannya. Mulai Marrow 1.5, nyalakan Izinkan AI menulis untuk servermu di Ekspor, Koneksi kamu dan sebuah AI bisa mencatat makanan, air, berat badan, latihan, tidur, gejala, suasana hati, dan target lewat server itu, gratis. Server mengantrekan setiap entri dan ponsel menerapkannya saat Marrow dibuka atau bangun, dan setiap entri bisa dibatalkan. Pengaturan untuk Claude Desktop, Cursor, dan lainnya ada di halaman MCP. Hanya URL-nya yang berubah.
Menjangkaunya dari luar LAN-mu
Server berbicara HTTP biasa dan tidak punya TLS sendiri. Jangan lakukan port-forward mentah-mentah. Pasang Tailscale di perangkat itu dan di ponsel lalu pakai tailscale serve, atau taruh Cloudflare Tunnel atau reverse proxy mana pun yang mengakhiri HTTPS di depannya. QR penyandingan membawa alamat yang diumumkan server: alamat LAN-nya sendiri, atau yang kamu berikan dengan --url. Mulai server dengan alamat yang benar-benar akan kamu pakai, misalnya marrow-server --url https://pi.your-tailnet.ts.net, lalu pasangkan.
Apa yang tersimpan di disk
- Database SQLite dengan setiap seri harian, sampel, entri buku harian, dan set kekuatan, dijaga tetap terbaru oleh kiriman dari ponsel.
- Setiap kiriman mentah disimpan sebagai JSONL di sebelahnya, sehingga database bisa dibangun ulang kalau suatu saat rusak.
- Siapkan 50 sampai 150 MB per tahun untuk riwayat dengan kualitas penuh.
Satuan: metrik Kesehatan datang dalam satuan SI yang tersimpan beserta labelnya. Set kekuatan datang dalam pon dengan "unit": "lb" apa pun pengaturan tampilan ponsel, jadi mirror tidak pernah mencampur satuan. Arahkan Grafana, DuckDB, atau cron job langsung ke file database.
Pemecahan masalah
Dua uji dari komputer tempat AI kamu berjalan akan menunjukkan di mana masalahnya. Pertama, apakah server menyala? Ini tidak membutuhkan token:
curl http://<server-ip>:8800/health
Ia menjawab {"server": "marrow", "ok": true}. Lalu, apakah token agenmu berfungsi?
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"}'
| Yang kamu dapat | Artinya |
|---|---|
200 OK dan daftar tool | Servernya berfungsi. Periksa alamat, token, dan jenis server (HTTP) di konfigurasi agenmu, lalu mulai ulang agennya. |
401 dengan bad bearer token | Token salah. Agen memakai token mcp, bukan yang dipasangkan dengan ponsel. Lihat di bawah. |
| Koneksi ditolak atau timeout | Server tidak berjalan, port salah, atau firewall di perangkat itu memblokir port 8800. Dengan Docker, periksa pemetaan port 8800:8800. |
- Token yang mana. Server mencetak token agen saat dimulai, di baris yang diawali
agents:. Token itu juga ada di file.mcp-tokendi folder data (./datakecuali kamu memberikan--data,/datadi Docker). Ponsel memakai token yang berbeda, dari.app-token. Untuk mengganti token agen, hapus.mcp-token, mulai ulang server, dan perbarui setiap agen. - Halaman penyandingan bilang token salah atau hilang. Buka tautan penyandingan persis seperti yang dicetak server, lengkap dengan bagian
?token=. - Halaman penyandingan menampilkan teks, bukan kode QR. QR membutuhkan paket opsional
segno:pip install "marrow-mcp[qr]". Atau, di Marrow, pilih Masukkan secara manual lalu ketikurldantokendari teks itu. - Penyandingan gagal di ponsel. Ponsel tidak bisa menjangkau alamat di QR. Di Docker, server hanya melihat alamat kontainernya sendiri, jadi berikan alamatmu: tambahkan
--url http://<your-computer-ip>:8800ke perintahnya. Di luar Wi-Fi rumahmu, pakai alamat HTTPS daritailscale serveatau tunnel. - Akses Jaringan Lokal. Untuk menjangkau server di jaringan rumahmu, Marrow membutuhkan akses Jaringan Lokal. iOS menanyakannya saat pertama kali kamu memasangkan. Kalau kamu menjawab tidak, nyalakan Marrow di Pengaturan, Privasi dan Keamanan, Jaringan Lokal, lalu pasangkan lagi dengan Marrow terbuka.
- Kode QR itu bukan kode penyandingan Marrow. Kamera membaca kode lain. Pindai yang ada di halaman penyandingan server.
- Data lama, atau Tidak menerima data di Marrow. Ponsel tidak bisa mengirim ke server. Halaman MCP server di Marrow menampilkan pengiriman terakhir dan berapa banyak catatan yang menunggu. Pastikan server berjalan, lalu buka Marrow untuk mengirim yang menunggu. Pengiriman latar belakang berjalan saat iOS mengizinkan.
- Server ini perlu diperbarui sebelum bisa mencatat. Perbarui dengan
pip install -U marrow-mcpdan mulai ulang. Dengan Docker, jalankangit pulldandocker compose up -d --builddi clone-nya. - Entri dari AI tidak muncul. Nyalakan Izinkan AI menulis untuk server di Ekspor, Koneksi kamu. Tool tulis baru muncul di server setelah itu. Setiap entri menunggu di server dan masuk saat Marrow berikutnya dibuka atau bangun.
- Koneksi tidak mau menyala. Paket gratis menjaga 1 koneksi aktif sekaligus, Marrow Pro hingga 10: AI, server, dan otomatisasi digabung.
Kapan memilih ini dibanding yang lain
Pilih mirror kalau agenmu butuh data saat ponselmu tidur atau jauh, atau kalau kamu ingin database yang bisa di-query, bukan file. Pilih server MCP di ponsel kalau agenmu berjalan di dekat ponsel dan kamu tidak ingin ada lagi yang dirawat. Pilih otomatisasi kalau kamu sudah punya tempat tujuan data.