Инструменты EHR с MCP и FHIR

https://youtu.be/K0t6MRyIqZU?si=Mz4d65DcAD3i2YbO
Этот проект действует как специализированный сервер, предоставляющий инструменты для больших языковых моделей (LLM) и других агентов ИИ для взаимодействия с электронными медицинскими картами (EHR). Он использует стандарт SMART на FHIR для безопасного доступа к данным и протокол контекста модели (MCP) для предоставления инструментов.
Думайте об этом как о защищенном шлюзе и наборе инструментов, позволяющих ИИ безопасно получать доступ к данным пациентов из различных систем электронных медицинских карт и анализировать их.
Основная идея
Система работает в три основных этапа:
SMART на FHIR Client (реализовано в рамках этого проекта): безопасно подключается к EHR с использованием стандартной среды запуска приложений SMART. Извлекает широкий спектр информации о пациентах, включая как структурированные данные (например, состояния, лекарства, анализы), так и неструктурированные клинические заметки или вложения.
MCP Server (Этот проект): берет извлеченные данные EHR и делает их доступными через набор мощных инструментов, доступных через Model Context Protocol. Эти инструменты позволяют внешним системам (например, моделям ИИ) запрашивать и анализировать данные без необходимости прямого доступа к самой EHR.
Интерфейс AI/LLM (внешний потребитель): агент AI или большая языковая модель подключается к серверу MCP и использует предоставленные инструменты, чтобы «задавать вопросы» о записях пациента, выполнять поиск или запускать индивидуальные анализы.
Доступные инструменты
Сервер MCP предлагает несколько инструментов для взаимодействия с загруженными данными EHR:
grep_record: Выполняет поиск текста или регулярных выражений по всем частям извлеченной записи (структурированные данные FHIR + текст из заметок/вложений). Идеально подходит для поиска ключевых слов или конкретных упоминаний (например, «диабет», «аспирин»).query_record: Выполняет запросы SQLSELECTтолько для чтения непосредственно по структурированным данным FHIR. Полезно для точного поиска на основе известных структур ресурсов FHIR (например, поиск определенных лабораторных результатов по коду LOINC).eval_record: Выполняет пользовательский код JavaScript непосредственно на извлеченных данных (ресурсы FHIR + вложения). Обеспечивает максимальную гибкость для сложных вычислений, объединения данных из нескольких источников или пользовательского форматирования.
Такая настройка позволяет инструментам ИИ использовать комплексные данные электронных медицинских карт через стандартизированный и безопасный интерфейс.
(Подробности настройки и использования для разработчиков можно найти в кодовой базе и документации по конкретному модулю.)
Компоненты и использование
Этот проект предлагает различные способы извлечения данных EHR и их предоставления с помощью инструментов MCP:
1. Автономный SMART на веб-клиенте FHIR
Этот проект включает в себя автономное веб-приложение, которое позволяет пользователям подключаться к своим электронным медицинским картам через SMART на FHIR и извлекать свои данные.
Размещенная версия: Вы можете использовать публично размещенную версию по адресу:
https://mcp.fhir.me/ehr-connect#deliver-to-opener:$origin
(Замените$originфактическим источником окна, открывающего эту ссылку).Фильтрация брендов ( Вы можете отфильтровать список поставщиков EHR, отображаемых на странице подключения, добавив параметр запроса
brandTagsк URL-адресу. Укажите список тегов, разделенных запятыми. Будут отображаться только бренды, соответствующие всем предоставленным тегам (из их конфигурации вbrandFiles). Он поддерживает как логику OR (разделенные запятыми), так и логику AND (разделенные символом вставки^), причем AND имеет приоритет.?brandTags=epic,sandbox: Показывает бренды с тегамиepicИЛИsandbox.?brandTags=epic^dev: Показывает бренды, отмеченные какepicтак иdev.?brandTags=epic^dev,sandbox^prod: Показывает бренды, отмеченные тегами (epicИdev) ИЛИ (sandboxИprod).Если параметр пропущен, по умолчанию отображаются бренды с тегом
prod.Пример:
.../ehr-connect?brandTags=hospital^us: Показывает бренды, отмеченные тегамиhospitalиus.
Как это работает: при открытии эта страница предлагает пользователю выбрать своего поставщика EHR. Затем она инициирует стандартный поток запуска приложения SMART, перенаправляя пользователя на страницу входа в EHR. После успешной аутентификации и авторизации клиент извлекает полный набор ресурсов FHIR (пациент, состояния, наблюдения, лекарства, документы и т. д.) и пытается извлечь открытый текст из любых связанных вложений (например, PDF, RTF, HTML, найденных в
DocumentReference).Вывод данных ( После завершения выборки клиент собирает все данные в объект
ClientFullEHRJSON. Этот объект содержит:fhir: словарь, в котором ключами являются типы ресурсов FHIR (например, «Пациент»), а значениями — массивы соответствующих ресурсов FHIR.attachments: массив обработанных объектов вложений, каждый из которых включает метаданные (исходный ресурс, путь, тип контента) и сам контент (contentBase64для необработанных данных,contentPlaintextдля извлеченного текста).
Доставка данных: если открыть с помощью хеша
#deliver-to-opener:$origin, клиент запросит у пользователя подтверждение, а затем отправит объектClientFullEHRобратно в открывшее его окно с помощьюwindow.opener.postMessage(data, targetOrigin).
2. Локальный сервер MCP через Stdio ( src/cli.ts )
Этот режим идеально подходит для локального запуска сервера MCP, часто используется с такими инструментами, как Cursor или другими клиентами ИИ с интерфейсом командной строки.
Двухэтапный процесс:
Извлечение данных в базу данных: Сначала запустите интерфейс командной строки с флагами
--create-dbи--db. Это запустит временный веб-сервер и использует ту же логику веб-клиента SMART на FHIR, описанную выше, для извлечения данных. Вместо отправки данных черезpostMessageон сохраняет данныеClientFullEHRв локальном файле базы данных SQLite.# Example: Fetch data and save to data/my_record.sqlite bun run src/cli.ts --create-db --db ./data/my_record.sqliteСледуйте инструкциям (открыв ссылку в браузере), чтобы подключиться к своей электронной медицинской карте.
Запустите сервер MCP: После создания файла базы данных снова запустите CLI, указав только файл базы данных. Это загрузит данные в память и запустит сервер MCP, прослушивающий команды на стандартном вводе/выводе.
# Example: Start the MCP server using the saved data bun run src/cli.ts --db ./data/my_record.sqlite
Конфигурация ( этот процесс опирается на файл конфигурации (например,
config.epicsandbox.json), который определяет доступные бренды/конечные точки EHR в массивеbrandFiles. Каждая запись в этом массиве указывает данные бренда, включая:url: Путь/URL к файлу определения бренда (например,static/brands/epic-sandbox.json).tags: массив строк (например,["epic", "sandbox"]), используемый для категоризации или фильтрации.vendorConfig: Содержит сведения о клиенте SMART на FHIR (clientId,scopes).
Конфигурация клиента (например, курсор): Настройте клиент MCP для выполнения этой команды. Важно использовать абсолютные пути как для
src/cli.ts, так и для файла базы данных.{ "mcpServers": { "local-ehr": { "name": "Local EHR Search", "command": "bun", // Or the absolute path to bun "args": [ "/home/user/projects/smart-mcp/src/cli.ts", // Absolute path to cli.ts "--db", "/home/user/projects/smart-mcp/data/my_record.sqlite" // Absolute path to DB file ] } } }
3. Полный сервер MCP через SSE ( src/sse.ts / index.ts )
Этот режим запускает постоянный сервер, подходящий для сценариев, где несколько клиентов могут подключаться по сети. Он использует Server-Sent Events (SSE) для канала связи MCP.
Аутентификация: Аутентификация клиента основана на OAuth 2.1, как указано в Model Context Protocol. Сервер предоставляет стандартные конечные точки (
/authorize,/token,/registerи т. д.).Извлечение данных: когда клиент инициирует соединение OAuth, сервер сам обрабатывает поток SMART на FHIR, извлекает данные
ClientFullEHRво время процесса авторизации и сохраняет их в памяти (или в постоянном сеансе) на время подключения клиента.Статус: Несмотря на свою функциональность, спецификация MCP для клиентского взаимодействия OAuth 2.1 все еще развивается. Поддержка этого метода аутентификации клиентами в настоящее время крайне ограничена , что затрудняет тестирование этого режима со стандартными клиентами за пределами специализированных инструментов разработчика или отладки. Этот режим SSE следует считать экспериментальным .
This server cannot be installed
Related Resources
Related MCP Servers
- AsecurityAlicenseAqualityA Model Context Protocol server that enables AI assistants to interact with the HackMD API for managing notes, including creating, reading, updating, and deleting notes.Last updated -123643MIT License
- AsecurityAlicenseAqualityA Model Context Protocol server providing AI assistants with access to healthcare data tools, including FDA drug information, PubMed research, health topics, clinical trials, and medical terminology lookup.Last updated -71150MIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables standardized interaction with Azure Health Data Services FHIR servers, allowing healthcare data operations through MCP tools.Last updated -116MIT License