Skip to main content
Glama
scollard001

fhir-patient-consent-mcp-server

by scollard001

fhir-patient-consent-mcp-server

Сервер MCP, который позволяет модели задавать вопросы о пациенте, его инсулиновой помпе и том, кому предоставлено согласие на просмотр этих данных, — всё это получается в реальном времени из хранилища FHIR (R4). Никакие данные на сервере не хранятся; каждый ответ — это прямой запрос к FHIR REST в реальном времени.

Он является сопутствующим сервисом к fhir-consent-service (Spring Boot API для записи Patient/Device/Consent в FHIR), но не имеет от него программной зависимости: этот сервер зависит только от формата обмена FHIR, поэтому работает с любой FHIR R4 конечной точкой.

Инструменты

Инструмент

Назначение

find_patient

Найти пациента по номеру MRN и/или фамилии

get_patient

Получить демографические данные одного пациента по FHIR-идентификатору

get_patient_devices

Перечислить устройства пациента (помечает инсулиновые помпы по коду SNOMED CT 469756000)

get_patient_consents

Перечислить согласия на передачу данных (партнёр, цель, категории данных, период)

check_partner_consent

Проверка прав: есть ли у партнёра X активное согласие на доступ к данным пациента Y?

Related MCP server: FHIR MCP Server

Ресурс

fhir-chart://{patientId} — консолидированная JSON-«карта» (демография + устройства + активные согласия) пациента, предназначенная для непосредственного прикрепления к контексту приложением-хостом, а не для сборки моделью через несколько вызовов инструментов. См. docs/architecture.md о том, почему это ресурс, а не шестой инструмент.

Настройка

npm install
npm run build

Подключение к FHIR-серверу

export FHIR_BASE_URL=http://localhost:8081/fhir   # default shown
export FHIR_AUTH_TOKEN=...                         # optional bearer token

Самый простой способ получить данные для запросов: выполните docker compose up -d в каталоге fhir-consent-service (запустится локальный HAPI FHIR JPA-сервер на :8081), создайте пациента, устройство и согласие через его REST API, а затем запрашивайте эти же данные здесь, в этом хранилище.

Запуск напрямую (для тестирования через stdio)

npm run dev

Регистрация в MCP-клиенте

Для Claude Desktop / Claude Code добавьте в свою конфигурацию MCP:

{
  "mcpServers": {
    "fhir-patient-consent": {
      "command": "node",
      "args": ["/absolute/path/to/fhir-patient-consent-mcp-server/dist/index.js"],
      "env": {
        "FHIR_BASE_URL": "http://localhost:8081/fhir"
      }
    }
  }
}

Сначала выполните npm run build, чтобы появился файл dist/index.js.

Примеры вопросов после подключения

  • «Найдите пациента с MRN MRN-778001.»

  • «Какая инсулиновая помпа есть у пациента 123 и какой у неё серийный номер?»

  • «Было ли предоставлено GlucoVue Remote Monitoring согласие на просмотр данных об устройствах пациента 123?»

  • «Покажите полную карту пациента 123.» (использует ресурс fhir-chart://)

Тестирование

npm test

Модульные тесты покрывают работы слой мапперов (src/mappers/*.ts), в том числе логику авторизации по согласия в isConsentActiveForPartner — в частности, обработку отозванных согласий, ещё не начавшихся и истёкших периодов, а также открытых периодов без параметра end, поскольку именно здесь чаще всего возникают трудно заметные ошибки.

В этом репозитории нет интеграционного теста против живого FHIR-сервера (в отличие от fhir-consent-service, в котором используется Testcontainers), потому что у этого сервера нет пути записи, чтобы подготовить тестовые данные: ему пришлось бы зависеть от того репозитория (или дублировать его логику создания ресурсов) только ради тестовых фикстур. Если в репозитории появится скрипт заполнения данных, добавьте такой тест.

Примечание: код написан в песочнице без доступа к npm-реестру, поэтому npm install, npm run build и npm test здесь фактически не выполнялись. Код рассчитан на server.tool / server.resource из @modelcontextprotocol/sdk@^1.12; если в вашей версии SDK эти сигнатуры изменены на registerTool / registerResource, это механическое исправление — сверьтесь с README/CHANGELOG самого SDK.

Структура проекта

src/
├── index.ts              Server entry point, registers all tools/resources
├── fhirClient.ts          Thin fetch-based FHIR REST client
├── tools/                 One file per MCP tool
├── resources/             One file per MCP resource
├── mappers/                FHIR JSON -> summary objects + consent auth logic
└── util/results.ts        Shared tool-result formatting helpers

Замечание о безопасности

Этот сервер не выполняет редактирование PHI и передаёт всё, что возвращает FHIR-конечная точка. При развёртывании на реальных данных о пациентах разместите контроль доступа перед самим FHIR-сервером (этот сервер передаёт FHIR_AUTH_TOKEN как bearer-токен, но он не управляет получением и обновлением токена) и подумайте, какие данные вообще стоит раскрывать MCP-клиенту.

Лицензия

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM-based agents and MCP-compatible clients to query and manipulate clinical data through natural-language prompts by providing full CRUD operations on FHIR resources, document ingestion, semantic search, and LOINC terminology lookup.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM-based agents and MCP-compatible clients to query and manipulate FHIR-compliant clinical data through natural-language prompts, with CRUD operations, document ingestion, semantic search, and terminology lookup.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM-based agents and MCP-compatible clients to query and manipulate clinical data on a FHIR-compliant backend using natural-language prompts, with full CRUD operations, document ingestion, semantic search, and LOINC terminology support.
    -