health-os について
health-osは、Postgresを基盤とするローカル優先の個人健康記録システムで、MCPクライアントから健康データを読み書きできます。安全チェックは決定的なコードで行い、新たな検査結果は明示的に承認されるまで保留されます。
主な機能
- 01検査、診断、服薬、食事の記録
- 02Apple HealthのエクスポートとGarminデータの取り込み
- 03傾向、個人基準値、検診予定の追跡
- 04決定的な安全チェックとアラート
- 05抽出した検査結果の承認前レビュー
- 06栄養レポートと受診用要約の生成
活用シーン
- 01個人の健康記録をローカルDBに保存
- 02レポートから抽出した検査結果の確認
- 03栄養と健康の傾向を継続的に追跡
- 04診察用の要約を準備
MCP 対応
MCPクライアントに36個の読み書きツールとサーバー指示を提供します。stdioで通信し、データは利用者自身のPostgresデータベースに保存されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e DATABASE_URL -e READONLY_DATABASE_URL ghcr.io/andronaft/health-os:0.3.0DATABASE_URLシークレットPostgreSQL 16 + pgvector connection string, e.g. postgresql+psycopg://health:[email protected]:5432/health_os. Run migrations and seed first (see README).READONLY_DATABASE_URLシークレットRecommended: connection as the restricted health_readonly login (scripts/setup_readonly.py). Gives DB-level read isolation; sql_query runs only with it.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/andronaft/health-os:0.3.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
health-os
ローカルファーストの個人健康記録を、MCP 経由で公開します。 検査結果、診断、服薬、ウェアラブルデータ、食事記録は、ご自身の Postgres に保存されます。ローカルモデルを実行するものでもクラウドアシスタントを使うものでも、あらゆる MCP クライアントが、保護されたツールを通じてデータを読み取り、更新できます。重大な値、薬剤の安全性ルール、検診スケジュールは、LLM の判断ではなく、決定論的なコードで処理されます。
医療に関する免責事項。 これは医療機器ではなく、医療上の助言を提供するものではありません。 重大値のアラートと検診リマインダーは、医師に相談するための合図にすぎません。 診断ではなく、受診を遅らせる理由にもなりません。ご自身の責任でご利用ください。
できること
- 検査結果 — PDF や写真を MCP クライアントに渡すと、モデルが値を抽出し、health-os が名称(uk/ru/en/ラテン文字の同義語)と単位を標準化して、検査パネルを pending として登録します。承認するまでは、事実として扱われません。
- コードによる安全網 — 重大値は即時に通知されます(ログ、macOS 通知、オプションで Telegram)。報告書の文章に含まれる重大な所見にはフラグが付きます。薬物相互作用に関する質問には回答せず、医師または薬剤師への相談を案内します(実行するのは決定論的なチェックのみです:複数製品に含まれるパラセタモールの1日総量、検査前のビオチン)。危機対応ツールは、モデルに依存せず、相談窓口を記載した固定の応答を返します。
- 推移と分析 — マン・ケンドール検定による傾向、個人の基準値と異常値、年齢条件付きリスク計算ツール、検診カレンダー、週間レポート、医師の診察用概要。
- 食事記録 — 41 種類の栄養素プロファイル、%RDA、欠乏/過剰フラグ、食事テンプレートを含む食事記録。
- デバイス — Apple Health からのエクスポートと Garmin からのインポート。
- 36 個の MCP ツールとサーバーの指示 — 接続時にすべてのクライアントへ安全ルールを送信します。mcp_server/README.md をご覧ください。
1 つのコマンドで試す
必要なのは Docker だけです。架空の患者データを含む使い捨てデータベースが起動します。検査結果(2 年分、上昇傾向の LDL)、血圧、服薬、食事記録、承認待ちの検査パネルが含まれます。
git clone https://github.com/andronaft/health-os && cd health-os
make demo # or: cd demo && docker compose up -d --build
MCP クライアントの接続先を指定します。
{
"mcpServers": {
"health-os-demo": {
"command": "docker",
"args": ["run", "-i", "--rm", "--network", "health-os-demo",
"-e", "DATABASE_URL=postgresql+psycopg://health:demo@db:5432/health_os",
"-e", "READONLY_DATABASE_URL=postgresql+psycopg://health_readonly:demo_ro@db:5432/health_os",
"health-os:local"]
}
}
}
"健康状態の概要を表示して"、"LDL は上昇傾向?"、"レビュー待ちは何?"、"栄養面で不足しているものは?"* と尋ねてみてください。make demo-down ですべて削除できます。
自分のデータでインストールする
Docker と Python 3.12+ が必要です。
git clone https://github.com/andronaft/health-os && cd health-os
cp .env.example .env # set the passwords
docker compose up -d db # Postgres 16 + pgvector
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/alembic upgrade head # schema
.venv/bin/python -m seed.load # marker catalog, synonyms, units, nutrients
.venv/bin/python -m seed.demo # optional: a fictional demo patient to play with
次に MCP クライアントを接続します。LM Studio、Open WebUI、Ollama CLI、Claude の設定は mcp_server/README.md にあります。"健康状態の概要を表示して"、"LDL の推移"、"今週、栄養面で不足しているものは?" と尋ねてみてください。
ローカルモデル: サーバーは標準の MCP over stdio で通信するため、ローカルモデルを実行する MCP クライアントであれば利用できます。これまでに動作を確認したのは、公式 MCP Python クライアントを使ったサーバー自体(CI と Docker デモ)です。ローカルモデルとのエンドツーエンドの動作は、まだ確認できていません。詳しくは #9 をご覧ください。報告をお待ちしています。
仕組み
ステージングされたパネルのすべての行は保留中になります。明示的に承認されない限り、確定データにはなりません。カタログで分類できない行も破棄せずに保持されます。
マッピングされていない行と保留中の行は、list_pending_reviews とヘルスサマリーの「レビュー待ち」ブロックに表示されます。名前を学習すると、次のパネルから自動的にマッピングされます。
| ディレクトリ | 内容 |
|---|---|
core/ | 設定、DB、正規化、サービス、重複排除、ヘルスサマリー |
mcp_server/ | MCP サーバー、読み取り・書き込みツール |
safety/ | 決定論的な安全ルールとアラート配信 |
analytics/ | 傾向、ベースライン、計算ツール、スクリーニング、栄養、レポート |
ingestion/ | 抽出スキーマ、信頼度スコアリング、デバイスインポーター、エンベディング |
migrations/ | Alembic スキーマ |
seed/ | 参照カタログとデモ用患者 |
evals/ | レッドチームシナリオ(インジェクション、隠れた重大値、単位のトリック) |
scripts/ | バックアップ/復元(restic。install_launchd.sh は macOS でスケジュール設定)、読み取り専用ロールの設定、インポーター |
プライバシー/ローカルファースト
- データはご自身のデータベース内に保持されます。 Postgres は Docker でローカル実行され、
data/と.envは Git の対象外です。health-os 自体からデータが外部に送信されることはありません。 - 端末外に送信されるデータは、接続する MCP クライアントによって異なります。 ローカルモデル(LM Studio、Open WebUI + Ollama、…)なら、データは送信されません。クラウドアシスタントを使う場合、ツールが返した内容はそのプロバイダーに送信されます。医療データに適した利用規約(データを学習に使用しないこと、保持期間がない、または短いこと)を持つサービスをお使いください。
- 目標は完全なローカル運用です。 チャットと抽出にはローカルモデルを、検索にはローカルエンベディングを使用します(fastembed 経由で対応済み)。クラウドクライアントの利用は任意です。
- オプションのアラートチャネル(Telegram)では、「ヘルスシステムを確認してください」という一般的なテキストのみを送信し、数値は送信しません。
- ディスクを暗号化してください(FileVault/LUKS/BitLocker)。データベースファイルは保存時に平文です。
- issue、PR、テストには実際の医療データを絶対に含めないでください。合成データのみを使用してください。
テスト
make test # everything (needs Postgres for the integration part)
make test-unit # pure unit tests — no database needed
make test-integration # only tests marked `integration`
統合テストが作業用データベースに触れることはありません。tests/conftest.py は実行のたびに同じサーバー上の <POSTGRES_DB>_test を削除して再作成します(マイグレーション + シード)。TEST_DATABASE_URL で変更できます(データベース名は _test で終わる必要があります)。Postgres がない場合、ローカルでは統合テストがスキップされます。CI では REQUIRE_DB=1 が設定されるため、テストは失敗します。
開発履歴:PROGRESS.md。
ライセンス
AGPL-3.0-or-later。health-os の使用、変更、フォークが可能です。配布する場合、または変更版をネットワークサービスとして実行する場合は、同じライセンスの下でソースコードを公開する必要があります。
これらの義務なしに、クローズドソースまたは商用製品で使用したい場合は、作者から別途商用ライセンスを入手できます。GitHub(@andronaft)からお問い合わせください。
貢献を歓迎します。CONTRIBUTING.md をご覧ください(簡単な CLA が含まれています)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。