Skip to main content
Glama
eyasu11321238a

Secure Clinical LLM Access via MCP

Безопасный доступ к клиническим данным LLM через MCP

Исследовательская платформа для безопасного доступа к структурированным клиническим данным с использованием открытых языковых моделей и протокола контекста модели (MCP).

Python MCP Ollama SQLite Synthea

Обзор

Большие языковые модели могут обеспечить интуитивно понятный интерфейс для изучения сложных данных, но прямое подключение LLM к клинической базе данных создает серьезные проблемы, связанные с доступом к данным, безопасностью, надежностью и контролем.

В этом проекте исследуется контролируемая альтернатива: предоставление структурированных клинических данных LLM через набор узко ограниченных, проверенных и аудируемых инструментов с использованием протокола контекста модели (MCP).

Вместо того чтобы позволять модели генерировать и выполнять произвольные SQL-запросы, система предоставляет специализированные инструменты для доступа к клинической информации. Это создает явную границу безопасности между языковой моделью и базовой базой данных.

Проект объединяет:

  • Открытые LLM

  • Протокол контекста модели (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 и устанавливает связи между пациентами, посещениями, диагнозами, наблюдениями и лекарствами.


Почему MCP вместо прямого SQL?

Ключевое проектное решение — не предоставлять языковой модели универсальный инструмент выполнения 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 в настоящее время предоставляет пять контролируемых инструментов.

Инструмент

Назначение

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

Архитектура сохраняет клиническую базу данных локальной, а не требует отправки данных пациентов во внешний API LLM.


Оценка

Проект включает структуру оценки, охватывающую как безопасность, так и удобство использования.

Оценка безопасности

Набор тестов безопасности проверяет, правильно ли уровень 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

  • Пять ограниченных инструментов для клинических данных

  • Проверка входных данных

  • Ограничения размера результатов

  • Исключение идентифицирующих полей

  • Журналирование аудита

  • Тестирование на уровне протокола 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