Herramientas EHR con MCP y FHIR
https://youtu.be/K0t6MRyIqZU?si=Mz4d65DcAD3i2YbO
Este proyecto funciona como un servidor especializado que proporciona herramientas para que los Modelos de Lenguaje Grande (LLM) y otros agentes de IA interactúen con los Registros Clínicos Electrónicos (EHR). Utiliza el estándar SMART en FHIR para el acceso seguro a los datos y el Protocolo de Contexto de Modelo (MCP) para exponer las herramientas.
Piense en ello como una puerta de enlace segura y un conjunto de herramientas que permite a la IA acceder y analizar de forma segura los datos de los pacientes de diversos sistemas EHR.
La idea central
El sistema funciona en tres etapas principales:
- Cliente SMART en FHIR (implementado en este proyecto): Se conecta de forma segura a un EHR mediante el marco estándar de lanzamiento de aplicaciones SMART. Extrae una amplia gama de información del paciente, incluyendo datos estructurados (como afecciones, medicamentos y análisis de laboratorio) y notas clínicas no estructuradas o archivos adjuntos.
- Servidor MCP (este proyecto): Toma los datos extraídos del EHR y los pone a disposición mediante un conjunto de potentes herramientas accesibles mediante el Protocolo de Contexto de Modelo. Estas herramientas permiten que sistemas externos (como modelos de IA) consulten y analicen los datos sin necesidad de acceder directamente al EHR.
- Interfaz IA/LLM (consumidor externo): un agente de IA o un modelo de lenguaje grande se conecta al servidor MCP y utiliza las herramientas proporcionadas para "hacer preguntas" sobre el registro del paciente, realizar búsquedas o ejecutar análisis personalizados.
Herramientas disponibles
El servidor MCP ofrece varias herramientas para interactuar con los datos EHR cargados:
grep_record
: Realiza búsquedas de texto o expresiones regulares en todas las partes del registro obtenido (datos FHIR estructurados + texto de notas/adjuntos). Ideal para encontrar palabras clave o menciones específicas (p. ej., "diabetes", "aspirina").query_record
: Ejecuta consultas SQLSELECT
de solo lectura directamente en los datos FHIR estructurados. Útil para búsquedas precisas basadas en estructuras de recursos FHIR conocidas (p. ej., encontrar resultados de laboratorio específicos por código LOINC).eval_record
: Ejecuta código JavaScript personalizado directamente en los datos obtenidos (recursos FHIR + adjuntos). Ofrece máxima flexibilidad para cálculos complejos, la combinación de datos de múltiples fuentes o el formato personalizado.
Esta configuración permite que las herramientas de IA aprovechen datos completos de EHR a través de una interfaz estandarizada y segura.
(Los detalles de configuración y uso del desarrollador se pueden encontrar dentro del código base y la documentación del módulo específico).
Componentes y uso
Este proyecto ofrece diferentes formas de obtener datos de EHR y exponerlos a través de herramientas MCP:
1. SMART independiente en el cliente web FHIR
Este proyecto incluye una aplicación web autónoma que permite a los usuarios conectarse a su EHR a través de SMART en FHIR y obtener sus datos.
- Versión alojada: puede utilizar una versión alojada públicamente en:
https://mcp.fhir.me/ehr-connect#deliver-to-opener:$origin
(Reemplace$origin
con el origen real de la ventana que abre este enlace). - Filtrado de marcas (
?brandTags
): Puede filtrar la lista de proveedores de EHR que se muestra en la página de conexión añadiendo el parámetro de consultabrandTags
a la URL. Proporcione una lista de etiquetas separadas por comas. Solo se mostrarán las marcas que coincidan con todas las etiquetas proporcionadas (de su configuración enbrandFiles
). Admite lógicas OR (separadas por comas) y AND (separadas por signos de intercalación^
), con prioridad AND.?brandTags=epic,sandbox
: Muestra las marcas etiquetadas conepic
Osandbox
.?brandTags=epic^dev
: Muestra las marcas etiquetadas conepic
Ydev
.?brandTags=epic^dev,sandbox^prod
: Muestra las marcas etiquetadas con (epic
ANDdev
) O (sandbox
ANDprod
).- Si se omite el parámetro, el valor predeterminado es mostrar las marcas etiquetadas con
prod
. - Ejemplo:
.../ehr-connect?brandTags=hospital^us
: Muestra las marcas etiquetadas conhospital
Yus
.
- Cómo funciona: Al abrir esta página, el usuario debe seleccionar su proveedor de HCE. A continuación, inicia el flujo estándar de inicio de la aplicación SMART, redirigiendo al usuario a la página de inicio de sesión de su HCE. Tras la autenticación y autorización correctas, el cliente obtiene un conjunto completo de recursos FHIR (Paciente, Afecciones, Observaciones, Medicamentos, Documentos, etc.) e intenta extraer texto sin formato de los archivos adjuntos asociados (como PDF, RTF o HTML, que se encuentran en
DocumentReference
). - Salida de datos (
ClientFullEHR
): Una vez finalizada la obtención, el cliente recopila todos los datos en un objeto JSONClientFullEHR
. Este objeto contiene:fhir
: un diccionario donde las claves son tipos de recursos FHIR (por ejemplo, "Paciente") y los valores son matrices de los recursos FHIR correspondientes.attachments
: una matriz de objetos adjuntos procesados, cada uno de los cuales incluye metadatos (recurso de origen, ruta, tipo de contenido) y el contenido en sí (contentBase64
para datos sin procesar,contentPlaintext
para texto extraído).
- Entrega de datos: si se abre con el hash
#deliver-to-opener:$origin
, el cliente solicitará confirmación al usuario y luego enviará el objetoClientFullEHR
a la ventana que lo abrió usandowindow.opener.postMessage(data, targetOrigin)
.
2. Servidor MCP local a través de Stdio ( src/cli.ts
)
Este modo es ideal para ejecutar el servidor MCP localmente y a menudo se utiliza con herramientas como Cursor u otros clientes de IA de línea de comandos.
- Proceso de dos pasos:
- Obtener datos en la base de datos: Primero, ejecute la interfaz de línea de comandos con los indicadores
--create-db
y--db
. Esto inicia un servidor web temporal y utiliza la misma lógica del cliente web SMART on FHIR descrita anteriormente para obtener los datos. En lugar de enviar los datos mediantepostMessage
, guarda los datos deClientFullEHR
en un archivo de base de datos SQLite local.Siga las instrucciones (abrirá un enlace en su navegador) para conectarse a su EHR. - Ejecutar el servidor MCP: Una vez creado el archivo de base de datos, vuelva a ejecutar la CLI, apuntando únicamente al archivo de base de datos. Esto carga los datos en la memoria e inicia el servidor MCP, que recibe comandos en la entrada/salida estándar.
- Configuración (
config.*.json
): Este proceso se basa en un archivo de configuración (p. ej.,config.epicsandbox.json
) que define las marcas/puntos terminales de EHR disponibles en una matrizbrandFiles
. Cada entrada de esta matriz especifica los detalles de la marca, incluyendo:url
: Ruta/URL al archivo de definición de marca (comostatic/brands/epic-sandbox.json
).tags
: una matriz de cadenas (por ejemplo,["epic", "sandbox"]
) que se utiliza para categorización o filtrado.vendorConfig
: contiene detalles del cliente SMART en FHIR (clientId
,scopes
).
- Obtener datos en la base de datos: Primero, ejecute la interfaz de línea de comandos con los indicadores
- Configuración del cliente (p. ej., Cursor): Configure su cliente MCP para ejecutar este comando. Es fundamental usar rutas absolutas tanto para
src/cli.ts
como para el archivo de base de datos.
3. Servidor MCP completo a través de SSE ( src/sse.ts
/ index.ts
)
Este modo ejecuta un servidor persistente, ideal para escenarios donde varios clientes pueden conectarse a través de la red. Utiliza eventos enviados por el servidor (SSE) para el canal de comunicación MCP.
- Autenticación: La autenticación del cliente se basa en OAuth 2.1, según lo especificado por el Protocolo de Contexto de Modelo. El servidor proporciona puntos finales estándar (
/authorize
,/token
,/register
, etc.). - Obtención de datos: cuando un cliente inicia una conexión OAuth, el servidor maneja el flujo SMART en FHIR, obtiene los datos de
ClientFullEHR
durante el proceso de autorización y los mantiene en la memoria (o en una sesión persistente) mientras dura la conexión del cliente. - Estado: Si bien es funcional, la especificación MCP para la interacción con clientes OAuth 2.1 aún está en desarrollo. La compatibilidad con este método de autenticación es extremadamente limitada actualmente, lo que dificulta probar este modo con clientes estándar sin herramientas especializadas de desarrollo o depuración. Este modo SSE debe considerarse experimental .
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Un servidor de protocolo de contexto modelo que conecta herramientas de IA a registros médicos electrónicos mediante SMART en FHIR, lo que permite la búsqueda, consulta y análisis seguros de datos de pacientes desde registros médicos electrónicos compatibles.
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 -12632TypeScriptMIT 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 -72821JavaScriptMIT 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 -111PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server that enables querying FHIR healthcare data using natural language, allowing doctors to retrieve patient information, medications, observations, and other healthcare records.Last updated -1Python