Hubungkan agen ke Marrow
Marrow menyajikan data Apple Health kamu lewat Model Context Protocol, dari iPhone atau server milikmu sendiri. Sembilan tool baca di ponsel, tiga belas di servermu sendiri (empat di antaranya menjawab dengan istilah aplikasi sendiri, dinilai berdasarkan kondisi normalmu), dua belas tool tulis di balik sakelar, autentikasi bearer token, tanpa akun di mana pun. Halaman ini adalah seluruh pengaturannya.
Agen di mesin lain, atau butuh jawaban saat ponsel tidur? Pasangkan mirror self-hosted (pip install marrow-mcp): ia menjawab 24/7 untuk Claude Code, Cursor, dan OpenClaw. Kalau kamu datang ke sini dari konektor bawaan Claude atau ChatGPT, inilah yang dilakukannya yang tidak mereka lakukan.
Pengaturan untuk tiap aplikasi, Claude Code, Cursor, Codex, dan lainnya, ada di halamannya sendiri di bawah koneksi.
Saya ingin menghubungkan data Apple Health saya sendiri ke kamu. Marrow adalah aplikasi iOS gratis yang menyajikannya lewat MCP, tanpa akun dan tanpa langganan untuk ini. Aplikasinya ada di App Store: https://apps.apple.com/app/id6800819435. Pandu saya melalui semuanya: memasang aplikasi, menyalakan server di Ekspor lalu MCP lokal, dan menambahkan URL serta bearer token yang ditampilkannya ke konfigurasi MCP kamu sebagai server Streamable HTTP. Kalau kamu tidak bisa mengedit konfigurasi itu sendiri, beri tahu saya file persisnya dan apa yang harus ditempel. Dokumen pengaturan: https://marrowhealthapp.com/mcp. Setelah terhubung, panggil health_summary untuk 7 hari terakhir dan beri tahu saya apa yang menonjol.
1. Nyalakan servernya
Awalnya mati. Di aplikasi: Ekspor → MCP lokal, lalu aktifkan servernya. Kamu mendapat URL, token, dan kode QR. Server hanya terikat ke jaringan lokalmu, dan aplikasi menampilkan alamat persis yang sedang didengarkannya.
2. Arahkan klien kamu ke sana
Ganti <phone-ip> dan <token> dengan yang ditampilkan aplikasi.
Claude Code
claude mcp add --transport http marrow \ http://<phone-ip>:21212/mcp \ --header "Authorization: Bearer <token>"
Claude Desktop, satu klik
Unduh marrow.mcpb di komputer kamu dan klik dua kali. Claude Desktop memasang ekstensi dan meminta URL serta token di atas. Tanpa terminal.
Claude Desktop (manual), Cursor, atau klien mana pun yang memakai mcp.json
{
"mcpServers": {
"marrow": {
"type": "http",
"url": "http://<phone-ip>:21212/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
Periksa sendiri
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"}'
Tool-nya
Pembacaan selalu ada. Penulisan adalah sakelar kedua. Server di ponsel mencantumkan dua belas tool tulis yang sama dengan MCP Cloud (log_meal, log_water, log_weight, log_workout, log_strength, log_sleep, log_symptom, log_mood, edit_entry, delete_entry, set_targets, undo_entry) setelah kamu mengaktifkan Izinkan AI menulis di bawah MCP lokal, diterapkan seketika di ponsel dan ditulis ke Apple Health, masing-masing bisa dibatalkan. Saat mati, server hanya baca.
| Tool | Mengembalikan |
|---|---|
health_summary | Hari-hari terbaru dari aktivitas, jantung, tidur, dan nutrisi |
list_metrics | Setiap metrik yang dilacak, dengan satuan dan cakupan |
metric_daily | Nilai harian untuk metrik apa pun, hingga 400 hari |
metric_samples | Rekaman mentah dengan timestamp dan perangkat sumber |
workouts | Latihan dari semua sumber. Di ponsel, juga sesi kekuatan Marrow set demi set |
nutrition_log | Buku harian makanan dengan rincian nutrisi lengkap |
strength_log | Setiap set angkat beban dengan jenis set-nya, perkiraan 1RM per latihan, volume per kelompok otot. Pemanasan tidak pernah dihitung ke volume atau rekor |
sleep_log | Satu malam per hari bangun: waktu tidur, waktu bangun, jam tidur, menit per tahap (mirror self-hosted) |
symptoms_and_mood | Gejala dengan tingkat keparahannya, dan entri State of Mind dengan perasaan dan penyebabnya (mirror self-hosted) |
Empat lagi di mirror self-hosted dan di MCP Cloud. Mereka mulai dari tempat bacaan mentah berhenti: setiap nilai dinilai terhadap kondisi normal terkini milikmu sendiri dengan perhitungan yang sama dengan halaman Beranda aplikasi (harinya sendiri dikecualikan), sehingga agen mulai dari bacaan yang sudah benar untukmu, bukan menilai sebuah angka terhadap populasi.
| Tool | Mengembalikan |
|---|---|
daily_brief | Satu hari: setiap metrik utama dengan nilainya dan frasa dari aplikasi sendiri (normal untukmu, di atas normalmu, jauh di bawah normalmu), makanan dan air terhadap targetmu, tidur semalam, latihan yang dilakukan, suasana hati dan gejala, serta penanda yang layak disebut |
baselines | Kondisi normalmu per metrik: rata-rata dan sebaran selama jendela, z dan frasa nilai terbaru, rata-rata 7 hari dan tren 90 hari per bulan |
what_changed | Minggu terakhir dibanding empat minggu sebelumnya: apa yang bergeser dan seberapa menonjol bagimu, pergeseran makanan, latihan, tidur, dan waktu tidur, aliran data yang mulai atau berhenti datang |
data_quality | Apa yang dipegang mirror dan seberapa segar: per metrik hari terakhir, cakupan, ritme, sumber, dan apakah sudah basi, agar agen tidak pernah mengira celah sebagai fakta |
Server di perangkat menyajikan tujuh tool mentah pertama ditambah daily_brief dan baselines (sembilan pembacaan). Mirror self-hosted menyajikan ketiga belasnya, begitu pula salinan MCP Cloud yang di-host. Setiap bacaan di mirror menerima jumlah hari ke belakang atau from dan to menurut kalender ponsel, dan mirror juga menawarkan empat prompt (how_am_i_doing, weekly_review, doctor_prep, log_from_text) dan empat resource ke klien yang menampilkannya. Sampel mentah membawa tahap tidur dan tingkat keparahan gejala.
Ada 172 metrik Apple Health di balik list_metrics, ditambah data buku harian dan kekuatan asli Marrow di balik nutrition_log dan strength_log, mencakup aktivitas, jantung, tidur, tubuh, pernapasan, mobilitas, pendengaran, nutrisi, pikiran, gejala, siklus, dan kebiasaan. Versi dari halaman ini yang bisa dibaca mesin: tools.json.
Tetap berjalan saat ponsel tidak
Server di perangkat menjawab selama aplikasi berjalan. Untuk akses 24/7, pasangkan mirror self-hosted: satu file stdlib Python di Pi, NAS, atau laptop lama. Kiriman latar belakang dari ponsel menjaganya tetap terbaru, dan ia berbicara dengan permukaan MCP yang sama di http://<server-ip>:8800/mcp dengan tokennya sendiri. Tool di ponsel memakai kunci metrik aplikasi (active_energy, heart_rate_variability). Server menerima keduanya dan nama pendek Apple (active_energy_burned), jadi agen bisa berpindah di antara keduanya tanpa belajar ulang. Ia open source dan bisa dipasang:
pip install marrow-mcp marrow-server
Sumber: github.com/MarrowHealth/marrow-mcp. Terdaftar di registri MCP resmi sebagai tech.skeletonarmy/marrow.
Jangan port-forward salah satu server ke internet terbuka. Keduanya dirancang untuk LAN atau tailnet. Kalau kamu butuh akses jarak jauh, taruh tailscale serve atau yang setara di depannya, agar transportnya HTTPS dan perangkat diautentikasi sebelum bearer token terlihat.
Pemecahan masalah
Mulai dengan pengujian di bawah, dijalankan dari komputer tempat AI kamu berjalan. Pengujian itu menunjukkan di sisi mana masalahnya. Pakai alamat dan token dari halaman koneksi di Marrow, dengan Marrow terbuka di ponsel.
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"}'
| Yang kamu dapat | Artinya |
|---|---|
HTTP/1.1 200 OK dan daftar tool | Ponsel berfungsi. Masalahnya ada di pengaturan aplikasimu: alamat, token, atau jenis server selain HTTP (Streamable HTTP). Perbaiki konfigurasi dan mulai ulang aplikasi. |
401 Unauthorized | Token salah, atau koneksi ini mati di Marrow. Setiap koneksi di Koneksi kamu punya token sendiri, dan mematikan satu mengunci aplikasi itu sementara yang lain tetap berfungsi. Nyalakan, atau salin lagi tokennya. |
404 Not Found dengan use POST /mcp | Path salah. Alamat berakhir dengan /mcp. |
| Koneksi ditolak, atau tidak ada jawaban sampai kehabisan waktu | Komputer tidak bisa menjangkau ponsel. Kerjakan daftar di bawah. |
- Marrow harus terbuka. Server di ponsel hanya menjawab selama Marrow terbuka di depan. Saat kamu berpindah aplikasi atau mengunci ponsel, iOS segera menjedanya. Buka Marrow lagi dan ia menjawab lagi. Untuk jawaban saat ponsel tidur, pakai MCP server atau MCP Cloud.
- Wi-Fi atau tailnet yang sama. Komputer dan ponsel harus berbagi jaringan Wi-Fi atau tailnet. MCP lokal tidak pernah menjawab lewat seluler. Kalau Marrow bilang Alamat jaringan tidak ditemukan, sambungkan ke Wi-Fi atau tailnet. Wi-Fi tamu dan hotel sering menghalangi perangkat saling menjangkau.
- Alamat tailnet atau alamat Wi-Fi. Marrow menampilkan salah satu alamat ponsel, biasanya alamat Wi-Fi-nya. Komputer yang menjangkau ponsel lewat Tailscale membutuhkan alamat tailnet ponsel sebagai gantinya. Aplikasi Tailscale menampilkannya (diawali
100.). Taruh di konfigurasimu sebagai ganti alamat Wi-Fi dan pertahankan port dan token yang sama. - Alamatnya berubah. Router bisa memberi ponsel alamat Wi-Fi baru setelah beberapa waktu. Bandingkan alamat di Marrow dengan yang ada di konfigurasimu. Alamat yang direservasi di router menjaganya tetap.
- Akses Jaringan Lokal bukan penyebabnya. iOS menanyakannya saat Marrow menjangkau perangkat di jaringanmu, seperti server yang dipasangkan. Server ponsel yang menjawab komputer tidak membutuhkan izin, jadi menyalakan atau mematikan sakelar itu tidak mengubah MCP lokal.
- VPN di komputer. VPN selain tailnet kamu bisa mengalihkan lalu lintas lokal dari Wi-Fi. Jeda VPN itu dan coba pengujian lagi.
- 405 di log aplikasimu. Ponsel hanya menjawab POST dan tidak membuka aliran, jadi GET mendapat
405. Aplikasi yang berbicara Streamable HTTP lanjut dengan POST, jadi baris ini saja bukan masalahnya. - Aplikasimu hanya menerima perintah (stdio). Jalankan alamat ponsel lewat bridge mcp-remote. Ia membutuhkan
--allow-httpuntuk alamat http biasa yang bukan di komputer itu sendiri:npx -y mcp-remote http://<phone-ip>:21212/mcp --allow-http --header "Authorization: Bearer <token>". Di file konfigurasi untuk Cursor, Codex, atau Claude Desktop di Windows, spasi di dalam args bisa rusak. Tulis header sebagaiAuthorization:${AUTH_HEADER}dan aturAUTH_HEADERkeBearer <token>di env server. - Bisa membaca tapi tidak bisa mencatat. Aktifkan Izinkan AI menulis di bawah MCP lokal. Entri diterapkan seketika di ponsel dan masing-masing bisa dibatalkan.
- Koneksi tidak mau aktif. Gratis menjaga 1 koneksi aktif sekaligus, Marrow Pro hingga 10: AI, server, dan otomatisasi digabung. Nonaktifkan satu di Koneksi kamu terlebih dulu.
Pengaturan dan perbaikan untuk tiap aplikasi, Claude Code, Cursor, VS Code, dan lainnya, ada di bawah koneksi.
Berapa biayanya
Tidak ada biaya. Akses agen ada di tingkat gratis, bersama sinkronisasi latar belakang, ekspor otomatis, ekspor CSV dan JSON, dan pemindaian barcode. Health Auto Export merilis server MCP sebelum Marrow, dan bagus, tetapi milik mereka membutuhkan langganan Premium. Perbedaan itu, bukan siapa yang lebih dulu, adalah klaim yang layak disampaikan.
Persyaratan
- iOS 17 atau lebih baru, dan Apple Health. Tidak ada versi Android atau web.
- Marrow ada di App Store, gratis: apps.apple.com/app/id6800819435.
- Tidak ada akun Marrow, jadi tidak ada API yang di-host yang bisa dipanggil tanpa perangkat milik pengguna sendiri.