Smart EHR MCP Server
Инструменты 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 и использует предоставленные инструменты, чтобы «задавать вопросы» о записях пациента, выполнять поиск или запускать индивидуальные анализы.
Related MCP server: Healthcare MCP Server
Доступные инструменты
Сервер 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фактическим источником окна, открывающего эту ссылку).Фильтрация брендов (
?brandTags): Вы можете отфильтровать список поставщиков 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).Вывод данных (
ClientFullEHR): После завершения выборки клиент собирает все данные в объект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.*.json): этот процесс опирается на файл конфигурации (например,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
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/jmandel/health-record-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server