MCP Server × PostgreSQL on MIMIC‑IV について
MIMIC-IVの臨床分析を対象に、直接SQLとMCP経由のPostgreSQL利用を比較する研究プロジェクトです。データ読み込みスクリプトとベンチマークにより、クエリ性能と実装作業量を評価します。
主な機能
- 01MIMIC-IVスキーマ作成とCSV読み込み
- 02直接SQLとMCPのワークロード比較
- 03複数回実行の結果をCSVに集約
- 04Azure PostgreSQLの設定
活用シーン
- 01SQLとMCPのクエリ時間の比較
- 02臨床分析ワークロードの実装工数の測定
MCP 対応
MCPサーバーはAzure Database for PostgreSQLに接続し、同一ワークロードで直接SQLとのベンチマークを行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PostgreSQL on MIMIC‑IV × MCP サーバー
プロジェクトの目標: Azure Database for PostgreSQL 上に構築した Model Context Protocol(MCP)サーバーが、開発者の作業負荷を軽減しながら、大規模な臨床分析において直接 SQL と同等、またはそれ以上の性能を発揮できるかを評価します。
1. 問題の説明
MIMIC‑IV のような臨床データセットには、数千万行、数百の属性が含まれています。このような幅広いデータに対して生の SQL を記述・保守するのは、エラーが発生しやすく、時間もかかります。次の問いを検証します。
MCP ベースの抽象化によって、従来の SQL のみのワークフローと比較して、開発者の生産性を向上させると同時に、実行時の効率を維持(または向上)できますか?
この問いに答えるため、単純な COUNT(*) による mimiciv_hosp.emar_detail(約 87 M 行)の集計から、複数テーブルにまたがるノートの集計まで、同一のワークロードで直接 SQL と MCP サーバー → Postgres の経路を比較します。
2. リポジトリの構成
.
├── mimic-postgres/ # Scripts to create schemas & ingest MIMIC‑IV CSVs
├── src/ # Fork of azure_postgresql_mcp with env configs
└── README.md # This file
3. 前提条件
- Python 3.10+
- Node 18+(追加の MCP ツールを使用する場合は任意)
- Azure Database for PostgreSQL – Flexible Server(Standard_D4s v5 以上)
- MIMIC‑IV の認証情報とデータのダウンロード権限
# core libs
pip install psycopg[binary] rich click pandas matplotlib
# benchmarking
pip install httpx pytest pytest‑benchmark
# MCP server
pip install mcp[cli] azure-identity azure-mgmt-postgresqlflexibleservers
4. データセットの読み込み
cd data-loading
psql "$PGURI" -f 00_create_mimiciv_note_schema.sql
psql "$PGURI" -f 01_create_emar_tables.sql
python 02_bulk_copy.py --csv-root /path/to/mimic-iv
Standard_D4s での取り込み時間の目安:72 GB(ノート 11.7 M 行 + EMAR 87 M 行)で 約 45 分 です。
5. MCP サーバーの起動
cd mcp-server
python azure_postgresql_mcp.py
環境変数(PGHOST、PGUSER、PGPASSWORD、PGDATABASE)を設定するか、Claude Desktop / VS Code の設定で指定する必要があります。
パスワードの代わりに Microsoft Entra 認証を使用するには、次を設定します。
export AZURE_USE_AAD=True
export AZURE_SUBSCRIPTION_ID=...
export AZURE_RESOURCE_GROUP=...
6. ベースラインの実行
6.1 直接 SQL
python benchmarks/run_sql.py --query count_emar_detail
次のような単一行が出力されます。
count=87,371,064 elapsed=101550.2 ms
6.2 MCP サーバー
python benchmarks/run_mcp.py --query count_emar_detail
出力例:
count=87,371,064 elapsed=67560.1 ms
複数回の実行(デフォルトは 30 回)の結果は、benchmarks/results/ 以下の CSV に集約されます。
7. 主な結果(プレビュー)
| クエリ | 直接 SQL | MCP サーバー | Δ(ms) | Δ % |
|---|---|---|---|---|
COUNT(*)(emar_detail) | 101,550 ms | 67,560 ms | −33,990 | −33 % |
| ワークロード #1 の実装に必要な LOC | 68 | 23 | −45 | −66 % |
8. 今後の作業
- Entra ID + RBAC を有効にし、接続レイテンシーを再ベンチマークします。
- カスタム MCP ツールを使用した pgvector のセマンティック検索ベンチマークを追加します。
- MCP+Claude と SQL IDE を比較する臨床医向け UX 試験を実施します。
9. ライセンスと引用
MIT License — LICENSE を参照してください。
このコードまたは結果を使用する場合は、次のように引用してください。
Menon S.K., N. (2025). MCP Server × PostgreSQL on MIMIC‑IV: productivity and performance comparison. Georgia Tech CS 6423 Final Project Report.
10. 謝辞
- MIMIC‑IV データセットへのアクセスを提供してくださった PhysioNet
- Azure Database for PostgreSQL
- MCP 仕様および Claude Desktop ツールを提供してくださった Anthropic
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。