Marrow Health
JA
ダウンロード

セルフホスト版ミラー

自分のハードウェアで動く小さなサーバーで、Marrowのデータの完全なライブコピーを保持し、iPhoneがスリープ中でも、ポケットの中でも、地球の反対側にあっても、エージェントに答えます。

アプリごとのセットアップは、接続の中の専用ページにあります.

Marrowのガイド一覧: MCP · セルフホスト版ミラー · オートメーション · ファイル · サポート

内容

自分のハードウェア(Raspberry Pi、NAS、古いノートパソコン、$5のVPS)で動かす、小さなオープンソースのサーバーです。iPhoneは、QRコードをスキャンして一度ペアリングすれば、あとはアプリを閉じたままでも、すべての変更をバックグラウンドで送ります。サーバーはMarrowのデータの完全なSQLiteコピーを保持し、読み取り用の13個のMCPツールを提供します。iPhone版の7つ、sleep_logとsymptoms_and_mood、そしてアプリ自身の言葉で答える4つ(daily_brief、baselines、what_changed、data_quality)です。そのため、エージェントは、iPhoneが引き出しの中にあっても、午前3時に「今週の睡眠はどうだった?」と尋ねられます。MITライセンス:github.com/MarrowHealth/marrow-mcp.

インストール

Pythonのファイル1つ、標準ライブラリのみ、Python 3.10以降:

pip install marrow-mcp
marrow-server         # or: python3 marrow_server.py

またはDockerで:

git clone https://github.com/MarrowHealth/marrow-mcp
cd marrow-mcp
docker compose up -d

初回の起動時に、ペアリング用のURLが表示され、ネットワーク内の任意のブラウザでQRコードが表示されます。

iPhoneをペアリングする

  1. 近くにある画面で、ペアリング用のURLを開きます。
  2. Marrowでエクスポート、サーバーMCP、サーバーとペアリングの順に進み、コードをスキャンします。
  3. 完了です。iPhoneが送信を始め、サーバーのページに、最後に送信した時刻と、待機中のレコード数が表示されます。

ペアリングすると、サーバーのデータディレクトリに2つのトークンができます。iPhoneが送信に使うものと、エージェントが読み取りに使うものです。トークンのファイルを削除すると、新しいものに切り替わります。

エージェントを接続する

claude mcp add --transport http marrow http://<server-ip>:8800/mcp \
  --header "Authorization: Bearer <mcp token>"

13個のツールで、すべて読み取りです。生データの9個:health_summary、list_metrics、metric_daily、metric_samples、workouts、nutrition_log、strength_log、sleep_log、symptoms_and_mood。そして、生データのツールが終わるところから始まる4つで、アプリのホームと同じ計算で、あなた自身の直近の普段の値と比べて評価します:daily_brief(1日分:主要な各指標の値とアプリ自身の言葉、目標に対する食事と水分、昨夜の睡眠、行ったトレーニング、触れておく価値のあるフラグ)、baselines(指標ごとのあなたの普段の値、最新の値のz、90日間の傾向)、what_changed(直近1週間と、その前の4週間との比較:何が動いたか、あなたにとってどれだけ注目に値するか、睡眠と就寝時刻の変化、始まったり止まったりしたデータの流れ)、data_quality(何が新しく、何が古く、何が欠けているか。エージェントが欠けた部分を事実と取り違えないようにします)。すべての読み取りは、iPhoneのカレンダーに沿った、さかのぼる日数、またはfromとtoを受け付けます。サーバーは、表示に対応するクライアント向けに、4つのプロンプト(how_am_i_doing、weekly_review、doctor_prep、log_from_text)と4つのリソースも一覧に出します。12個の書き込みツールもあり、iPhoneが許可すると一覧に出ます。Marrow 1.5以降では、エクスポート、あなたの接続でサーバーのAIの書き込みを許可をオンにすると、AIがそれを通じて、食事、水分、体重、ワークアウト、睡眠、症状、気分、目標を、無料で記録できます。サーバーは各エントリを待機させ、Marrowが開いたとき、またはスリープから復帰したときに、iPhoneが適用し、どれも元に戻せます。Claude Desktop、Cursorなどのセットアップは、MCPのページにあります。変わるのはURLだけです。

LANの外から接続する

サーバーは平文のHTTPで通信し、TLSは備えていません。そのままポートフォワードしないでください。サーバー機とiPhoneにTailscaleを入れてtailscale serveを使うか、Cloudflare Tunnel、またはHTTPSを終端する任意のリバースプロキシを前に置いてください。ペアリング用のQRには、サーバーが公開するアドレス、つまりサーバー自身のLANアドレス、または--urlで渡したアドレスが入っています。実際に使うアドレスを指定して起動し、たとえばmarrow-server --url https://pi.your-tailnet.ts.netのようにしてから、ペアリングしてください。

ディスクに残るもの

単位:健康指標は、保存されたSI単位のまま、ラベルつきで届きます。筋トレのセットは、iPhoneの表示設定にかかわらず、"unit": "lb"のポンド単位で届くので、ミラーで単位が混ざることはありません。Grafana、DuckDB、cronジョブを、データベースファイルに直接向けられます。

トラブルシューティング

AIが動いているパソコンからできる2つのテストで、問題のある場所がわかります。まず、サーバーが起動しているかを確認します。これにはトークンは要りません:

curl http://<server-ip>:8800/health

{"server": "marrow", "ok": true}が返ります。次に、エージェントのトークンが使えるかを確認します:

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"}'
結果意味
200 OKとツールの一覧サーバーは動いています。エージェントの設定で、アドレス、トークン、サーバータイプ(HTTP)を確認し、エージェントを再起動してください。
401とbad bearer tokenトークンが違います。エージェントが使うのはmcpトークンで、iPhoneのペアリングに使うものではありません。下をご覧ください。
接続が拒否される、またはタイムアウトサーバーが動いていない、ポートが違う、またはサーバー機のファイアウォールがポート8800を塞いでいます。Dockerの場合は、8800:8800のポートマッピングを確認してください。

ほかの方法ではなく、これを選ぶとき

iPhoneがスリープ中や外出中でもエージェントがデータを必要とするとき、またはファイルではなくクエリできるデータベースが欲しいときは、ミラーを選びます。エージェントがiPhoneの近くで動いていて、ほかに保守するものを増やしたくないときは、iPhone上のMCPサーバーを選びます。データの届け先がすでにあるときは、オートメーションを選びます。