Skip to main content
Glama
jmandel

Smart EHR MCP Server

by jmandel

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

Обзор инструментов EHR

https://youtu.be/K0t6MRyIqZU?si=Mz4d65DcAD3i2YbO

Этот проект действует как специализированный сервер, предоставляющий инструменты для больших языковых моделей (LLM) и других агентов ИИ для взаимодействия с электронными медицинскими картами (EHR). Он использует стандарт SMART на FHIR для безопасного доступа к данным и протокол контекста модели (MCP) для предоставления инструментов.

Думайте об этом как о защищенном шлюзе и наборе инструментов, позволяющих ИИ безопасно получать доступ к данным пациентов из различных систем электронных медицинских карт и анализировать их.

Основная идея

Система работает в три основных этапа:

  1. SMART на FHIR Client (реализовано в рамках этого проекта): безопасно подключается к EHR с использованием стандартной среды запуска приложений SMART. Извлекает широкий спектр информации о пациентах, включая как структурированные данные (например, состояния, лекарства, анализы), так и неструктурированные клинические заметки или вложения.

  2. MCP Server (Этот проект): берет извлеченные данные EHR и делает их доступными через набор мощных инструментов, доступных через Model Context Protocol. Эти инструменты позволяют внешним системам (например, моделям ИИ) запрашивать и анализировать данные без необходимости прямого доступа к самой EHR.

  3. Интерфейс AI/LLM (внешний потребитель): агент AI или большая языковая модель подключается к серверу MCP и использует предоставленные инструменты, чтобы «задавать вопросы» о записях пациента, выполнять поиск или запускать индивидуальные анализы.

Related MCP server: Healthcare MCP Server

Доступные инструменты

Сервер MCP предлагает несколько инструментов для взаимодействия с загруженными данными EHR:

  • grep_record : Выполняет поиск текста или регулярных выражений по всем частям извлеченной записи (структурированные данные FHIR + текст из заметок/вложений). Идеально подходит для поиска ключевых слов или конкретных упоминаний (например, «диабет», «аспирин»).

  • query_record : Выполняет запросы SQL SELECT только для чтения непосредственно по структурированным данным 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 ): После завершения выборки клиент собирает все данные в объект ClientFullEHR JSON. Этот объект содержит:

    • fhir : словарь, в котором ключами являются типы ресурсов FHIR (например, «Пациент»), а значениями — массивы соответствующих ресурсов FHIR.

    • attachments : массив обработанных объектов вложений, каждый из которых включает метаданные (исходный ресурс, путь, тип контента) и сам контент ( contentBase64 для необработанных данных, contentPlaintext для извлеченного текста).

  • Доставка данных: если открыть с помощью хеша #deliver-to-opener:$origin , клиент запросит у пользователя подтверждение, а затем отправит объект ClientFullEHR обратно в открывшее его окно с помощью window.opener.postMessage(data, targetOrigin) .

2. Локальный сервер MCP через Stdio ( src/cli.ts )

Этот режим идеально подходит для локального запуска сервера MCP, часто используется с такими инструментами, как Cursor или другими клиентами ИИ с интерфейсом командной строки.

  • Двухэтапный процесс:

    1. Извлечение данных в базу данных: Сначала запустите интерфейс командной строки с флагами --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

      Следуйте инструкциям (открыв ссылку в браузере), чтобы подключиться к своей электронной медицинской карте.

    2. Запустите сервер 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 следует считать экспериментальным .

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Issues opened vs closed

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