Skip to main content
Glama
eyasu11321238a

Secure Clinical LLM Access via MCP

Secure Clinical LLM Access via MCP

オープンウェイト大規模言語モデルとModel Context Protocol (MCP)を使用して、構造化された臨床データへの安全なアクセスを実現するための研究指向フレームワーク。

Python MCP Ollama SQLite Synthea

概要

大規模言語モデルは複雑なデータを探索するための直感的なインターフェースを提供できますが、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つの制御されたツールを公開しています。

ツール

目的

get_patient_summary

制限された患者サマリーを取得する

get_conditions

患者の状態を取得する

get_medications

投薬を取得する

get_lab_trends

検査観察を分析する

get_encounters

診察情報を取得する

各ツールはデータベースにアクセスする前に引数を検証します。


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-mcp

2. Python依存関係をインストールする

pip install -r requirements.txt

3. Syntheaをダウンロードする

Syntheaはリポジトリに含まれていません。

最新のリリースをダウンロードしてください:

cd synthea

curl -L -o synthea-with-dependencies.jar \
  https://github.com/synthetichealth/synthea/releases/download/master-branch-latest/synthea-with-dependencies.jar

Java 17以降が必要です。

4. 合成臨床データを生成する

java -jar synthea-with-dependencies.jar \
  -p 25 \
  -c synthea.properties \
  Massachusetts

5. リレーショナルデータベースを構築する

cd ../pipeline

python ingest.py \
  --csv-dir ../synthea/output/csv \
  --db ../data/clinical.db

6. MCPサーバーを起動する

cd ../mcp_server

python server.py

7. セキュリティテストを実行する

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

中心的な目的は、言語モデルが構造化された臨床データへの自然言語インターフェースを提供できる方法を調査することです。モデルに基盤となるデータソースへの無制限のアクセスを与えることなく


F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    A 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.

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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