Secure Clinical LLM Access via MCP
Secure Clinical LLM Access via MCP
オープンウェイト大規模言語モデルとModel Context Protocol (MCP)を使用して、構造化された臨床データへの安全なアクセスを実現するための研究指向フレームワーク。
概要
大規模言語モデルは複雑なデータを探索するための直感的なインターフェースを提供できますが、LLMを臨床データベースに直接接続することは、データアクセス、セキュリティ、信頼性、制御に関する重要な課題を引き起こします。
このプロジェクトは、制御された代替手段を調査します。つまり、Model Context Protocol (MCP) を使用した狭い範囲に限定され、検証され、監査可能なツールのセットを通じて、構造化された臨床データをLLMに公開します。
モデルが任意のSQLを生成して実行することを許可する代わりに、システムは臨床情報にアクセスするための目的特化型ツールを提供します。これにより、言語モデルと基盤となるデータベースの間に明示的なセキュリティ境界が作成されます。
このプロジェクトは以下を組み合わせます:
オープンウェイトLLM
Model Context Protocol (MCP)
構造化されたリレーショナル臨床データ
Pythonベースのデータ変換パイプライン
ツールスコープのデータベースアクセス
入力検証と結果サイズ制限
監査ログ
セキュリティテスト
LLMベースの臨床質問応答
このプロジェクトで使用されるすべての臨床データは合成です。実際の患者データは保存も処理もされません。
Related MCP server: atlas_mcp
研究動機
このプロジェクトは次の質問を探求します:
オープンウェイト言語モデルは、制御され監査可能なデータアクセス境界を維持しながら、構造化された臨床データにアクセスして分析するにはどうすればよいでしょうか?
これは、医療専門家が複雑なデータセットへの自然言語アクセスを必要とする一方で、LLMに基盤となるデータベースへの無制限のアクセスを与えたくない臨床研究環境に特に関連します。
したがって、システムは次の間のインターフェースに焦点を当てています:
Human
│
│ Natural-language question
▼
Open-weight LLM
│
│ Tool selection
▼
MCP Interface
│
│ Validated, scoped request
▼
Clinical Database
│
▼
Synthetic Clinical Dataシステムアーキテクチャ
┌──────────────────────────┐
│ User / Clinician │
└────────────┬─────────────┘
│
Natural-language
question
│
▼
┌──────────────────────────┐
│ Open-weight LLM │
│ (Ollama) │
└────────────┬─────────────┘
│
Tool selection
│
▼
┌──────────────────────────┐
│ MCP Client │
│ Clinical Agent │
└────────────┬─────────────┘
│
MCP protocol
│
▼
┌──────────────────────────┐
│ MCP Server │
│ │
│ • Input validation │
│ • Tool scoping │
│ • Result limits │
│ • PII exclusion │
│ • Audit logging │
└────────────┬─────────────┘
│
Controlled tools
│
▼
┌──────────────────────────┐
│ Relational Database │
│ SQLite │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ Synthetic Clinical │
│ Data │
│ Synthea │
└──────────────────────────┘データパイプライン
臨床データは、現実的だが識別不可能な医療記録を生成するように設計された合成患者ジェネレータである Synthea を使用して生成されます。
生成された異種CSVファイルは、リンクされたリレーショナルデータベースに変換されます:
Synthea
│
├── Patients
├── Encounters
├── Conditions
├── Observations
└── Medications
│
▼
Ingestion Pipeline
│
▼
Relational SQLite DB取り込みパイプラインはPythonで実装されており、患者、診察、診断、観察、投薬の間の関係を確立します。
直接SQLではなくMCPを使う理由
中心的な設計上の決定は、言語モデルに汎用SQL実行ツールを公開しないことです。
単純なアーキテクチャは次のようになるかもしれません:
LLM → Generate SQL → Execute SQL → Databaseこのアプローチは、モデルにデータベースに対するかなりの制御を与え、不要なセキュリティリスクを生み出します。
このプロジェクトは代わりに以下を使用します:
LLM
│
▼
MCP Tool
│
├── Validate parameters
├── Restrict operation
├── Limit result size
├── Exclude identifying fields
└── Record audit event
│
▼
Database各ツールは狭く定義された目的を持っています。
例えば:
get_patient_summary()
get_conditions()
get_medications()
get_lab_trends()
get_encounters()モデルはこれらのツールを選択してパラメータ化できますが、任意にSQLを実行することはできません。
これにより、モデルがシステムプロンプトに従う能力とは独立したツールレベルのセキュリティ境界が作成されます。
セキュリティモデル
このプロジェクトはLLMを信頼されていないコンポーネントとして扱います。
したがって、セキュリティ制御は可能な限りモデルの外部に実装されます。
実装された制御
ツールスコープのデータベースアクセス
入力検証
読み取り専用操作
結果サイズ制限
識別フィールドの除外
監査ログ
プロトコルレベルのテスト
セキュリティテストスイート
設計目標は次のとおりです:
アプリケーション層で強制できるセキュリティポリシーをLLMに依存しないでください。
これは、言語モデルが機密データソースに接続されている場合に特に重要です。
MCPツール
MCPサーバーは現在、5つの制御されたツールを公開しています。
ツール | 目的 |
| 制限された患者サマリーを取得する |
| 患者の状態を取得する |
| 投薬を取得する |
| 検査観察を分析する |
| 診察情報を取得する |
各ツールはデータベースにアクセスする前に引数を検証します。
LLM統合
このプロジェクトは、Ollamaを通じたローカルなオープンウェイト言語モデルで動作するように設計されています。
例:
User:
Find a female patient and summarize her conditions.
↓
Open-weight LLM
↓
MCP tool selection
↓
get_patient_summary(...)
↓
Validated database query
↓
Structured result
↓
LLM-generated responseこのアーキテクチャは、患者データを外部のLLM APIに送信する必要なく、臨床データベースをローカルに保ちます。
評価
このプロジェクトには、セキュリティとユーザビリティの両方をカバーする評価フレームワークが含まれています。
セキュリティ評価
セキュリティテストスイートは、MCPレイヤーが不正または安全でない操作を正しく防止するかどうかをチェックします。
例には以下が含まれます:
無効なツールパラメータ
過剰な結果リクエスト
不正なフィールドアクセス
安全でないデータベース操作
ツール境界の違反
監査ログの動作
現在のセキュリティテストステータス:
7 / 7 security tests passingユーザビリティ評価
評価フレームワークは以下を測定するように設計されています:
質問応答の正確性
ツール選択の正確性
応答レイテンシ
臨床クエリの正常な完了
失敗ケース
目標は、システムが機能するかどうかだけでなく、制約されたツールを通じてLLMが構造化された臨床データとどの程度確実に相互作用できるかを評価することです。
プロジェクト構造
secure-clinical-llm-mcp/
│
├── agent/
│ ├── __init__.py
│ └── clinical_agent.py
│
├── eval/
│ ├── security_tests.py
│ ├── usability_benchmark.py
│ └── EVALUATION_REPORT.md
│
├── mcp_server/
│ └── server.py
│
├── pipeline/
│ └── ingest.py
│
├── synthea/
│ └── synthea.properties
│
├── requirements.txt
├── README.md
└── .gitignoreインストール
1. リポジトリをクローンする
git clone https://github.com/eyasu11321238a/secure-clinical-llm-mcp.git
cd secure-clinical-llm-mcp2. Python依存関係をインストールする
pip install -r requirements.txt3. Syntheaをダウンロードする
Syntheaはリポジトリに含まれていません。
最新のリリースをダウンロードしてください:
cd synthea
curl -L -o synthea-with-dependencies.jar \
https://github.com/synthetichealth/synthea/releases/download/master-branch-latest/synthea-with-dependencies.jarJava 17以降が必要です。
4. 合成臨床データを生成する
java -jar synthea-with-dependencies.jar \
-p 25 \
-c synthea.properties \
Massachusetts5. リレーショナルデータベースを構築する
cd ../pipeline
python ingest.py \
--csv-dir ../synthea/output/csv \
--db ../data/clinical.db6. MCPサーバーを起動する
cd ../mcp_server
python server.py7. セキュリティテストを実行する
cd ../eval
python security_tests.pyローカルLLM
エージェントは、Ollamaを通じてローカルで実行されているオープンウェイトモデルに接続できます。
例えば:
ollama pull llama3.2:3b次に実行します:
python agent/clinical_agent.py \
"Find a female patient and summarize her conditions"エージェントはデータベースに直接アクセスするのではなく、MCPサーバーと通信します。
現在のステータス
完了
Syntheaによる合成臨床データ生成
異種臨床データ取り込みパイプライン
リレーショナルSQLite臨床データベース
MCPサーバー
5つのスコープ付き臨床データツール
入力検証
結果サイズ制限
識別フィールドの除外
監査ログ
MCPプロトコルレベルのテスト
ローカルOllamaエージェント統合
セキュリティテストスイート
7/7のセキュリティテストが合格
進行中
スキーマ対応の臨床クエリレイヤー
拡張された臨床質問ベンチマーク
ツール選択精度の評価
レイテンシ評価
プロンプトインジェクション評価
拡張されたセキュリティ分析
研究評価レポート
将来の作業
プロトタイプをより包括的な研究フレームワークに移行するために、いくつかの拡張が計画されています。
1. スキーマ対応の推論
LLMにリレーショナルスキーマの構造化された説明を提供し、適切なツールとパラメータを選択する効果を調査します。
2. 拡張された臨床ベンチマーク
単純なルックアップから複数テーブルの分析クエリまで、臨床質問を含むベンチマークを開発します。
3. セキュリティ評価
以下に対する堅牢性を評価します:
プロンプトインジェクション
悪意のある臨床テキスト
不正なデータリクエスト
ツール操作
過剰なデータ取得
アクセス制御をバイパスする試み
4. 異種医療データ
FHIRリソースを含む追加のヘルスケアデータ表現をサポートするようにパイプラインを拡張します。
5. モデル比較
複数のオープンウェイトLLMを以下に関して比較します:
ツール選択精度
臨床クエリ精度
レイテンシ
失敗率
セキュリティ堅牢性
制限事項
このプロジェクトは研究プロトタイプであり、臨床意思決定支援システムではありません。
データは完全に合成であり、実際の病院データの複雑さ、ノイズ、欠損、分布を表していません。
このシステムは、医学的診断、治療決定、または実際の患者ケアに使用されるべきではありません。
実際の臨床環境にアプローチを適用する前に、さらなる検証が必要です。
研究の関連性
このプロジェクトは、以下の交差点に位置しています:
Large Language Models
+
Structured Data
+
Medical Informatics
+
MCP / Tool Calling
+
Data Engineering
+
AI Security
+
Evaluation中心的な目的は、言語モデルが構造化された臨床データへの自然言語インターフェースを提供できる方法を調査することです。モデルに基盤となるデータソースへの無制限のアクセスを与えることなく。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA production-grade MCP server that enables AI assistants to securely manage healthcare data through clinical tools for patient vitals, lab results, and medication ordering. It prioritizes security and compliance with features like HIPAA-ready audit logging, PII redaction, and role-based access control.
- AlicenseNot gradedqualityDmaintenanceAn MCP server that brings AI-powered search and conversation to your FHIR clinical documents.1MIT
- AlicenseAqualityBmaintenanceA Claude-compatible MCP server that exposes health-domain tools over 100% synthetic data, built with security and compliance in mind.4MIT
- FlicenseNot gradedqualityCmaintenanceA healthcare MCP demo server exposing clinical resources, tools, and prompts over SSE with authentication, integrated with Pydantic AI and Gemini for natural language patient record updates.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/eyasu11321238a/secure-clinical-llm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server