EHR-Tools mit MCP und FHIR
https://youtu.be/K0t6MRyIqZU?si=Mz4d65DcAD3i2YbO
Dieses Projekt fungiert als spezialisierter Server und stellt Tools für Large Language Models (LLMs) und andere KI-Agenten zur Interaktion mit elektronischen Patientenakten (EHRs) bereit. Es nutzt den SMART on FHIR -Standard für sicheren Datenzugriff und das Model Context Protocol (MCP) zur Bereitstellung der Tools.
Stellen Sie es sich als sicheres Gateway und Toolkit vor, das KI den sicheren Zugriff auf Patientendaten aus verschiedenen EHR-Systemen und deren Analyse ermöglicht.
Die Kernidee
Das System funktioniert in drei Hauptphasen:
- SMART on FHIR Client (Implementiert im Rahmen dieses Projekts): Stellt eine sichere Verbindung zu einer elektronischen Patientenakte (EHR) über das standardmäßige SMART App Launch Framework her. Es extrahiert eine breite Palette von Patienteninformationen, darunter sowohl strukturierte Daten (wie Erkrankungen, Medikamente, Laborwerte) als auch unstrukturierte klinische Notizen oder Anhänge.
- MCP-Server (Dieses Projekt): Nimmt die extrahierten EHR-Daten entgegen und stellt sie über eine Reihe leistungsstarker Tools bereit, die über das Model Context Protocol zugänglich sind. Diese Tools ermöglichen es externen Systemen (wie KI-Modellen), die Daten abzufragen und zu analysieren, ohne direkten Zugriff auf die EHR selbst zu benötigen.
- KI-/LLM-Schnittstelle (externer Verbraucher): Ein KI-Agent oder ein Large Language Model stellt eine Verbindung zum MCP-Server her und verwendet die bereitgestellten Tools, um „Fragen“ zur Patientenakte zu stellen, Suchvorgänge durchzuführen oder benutzerdefinierte Analysen auszuführen.
Verfügbare Tools
Der MCP-Server bietet mehrere Tools zur Interaktion mit den geladenen EHR-Daten:
grep_record
: Führt Text- oder reguläre Ausdruckssuchen in allen Teilen des abgerufenen Datensatzes durch (strukturierte FHIR-Daten + Text aus Notizen/Anhängen). Ideal für die Suche nach Schlüsselwörtern oder spezifischen Erwähnungen (z. B. „Diabetes“, „Aspirin“).query_record
: Führt schreibgeschützte SQL-SELECT
Abfragen direkt auf den strukturierten FHIR-Daten aus. Nützlich für präzise Suchvorgänge basierend auf bekannten FHIR-Ressourcenstrukturen (z. B. das Auffinden spezifischer Laborergebnisse anhand des LOINC-Codes).eval_record
: Führt benutzerdefinierten JavaScript-Code direkt auf den abgerufenen Daten (FHIR-Ressourcen + Anhänge) aus. Bietet maximale Flexibilität für komplexe Berechnungen, die Kombination von Daten aus mehreren Quellen oder benutzerdefinierte Formatierungen.
Dieses Setup ermöglicht es KI-Tools, umfassende EHR-Daten über eine standardisierte und sichere Schnittstelle zu nutzen.
(Details zur Einrichtung und Verwendung durch Entwickler finden Sie in der Codebasis und der spezifischen Moduldokumentation.)
Komponenten und Verwendung
Dieses Projekt bietet verschiedene Möglichkeiten, EHR-Daten abzurufen und über MCP-Tools verfügbar zu machen:
1. Eigenständiger SMART on FHIR-Webclient
Dieses Projekt umfasst eine eigenständige Webanwendung, die es Benutzern ermöglicht, über SMART auf FHIR eine Verbindung zu ihrer EHR herzustellen und ihre Daten abzurufen.
- Gehostete Version: Sie können eine öffentlich gehostete Version verwenden unter:
https://mcp.fhir.me/ehr-connect#deliver-to-opener:$origin
(Ersetzen Sie$origin
durch den tatsächlichen Ursprung des Fensters, das diesen Link öffnet). - Marken filtern (
?brandTags
): Sie können die Liste der EHR-Anbieter auf der Verbindungsseite filtern, indem Sie der URL den AbfrageparameterbrandTags
hinzufügen. Geben Sie eine kommagetrennte Liste von Tags an. Es werden nur Marken angezeigt, die allen angegebenen Tags (aus ihrer Konfiguration inbrandFiles
) entsprechen. Die Logik unterstützt sowohl ODER (Komma-getrennt) als auch UND (Caret-Zeichen^
getrennt), wobei UND Vorrang hat.?brandTags=epic,sandbox
: Zeigt Marken an, die mitepic
ODERsandbox
getaggt sind.?brandTags=epic^dev
: Zeigt Marken an, die sowohl mitepic
ALS AUCH mitdev
getaggt sind.?brandTags=epic^dev,sandbox^prod
: Zeigt Marken an, die mit (epic
UNDdev
) ODER (sandbox
UNDprod
) markiert sind.- Wenn der Parameter weggelassen wird, werden standardmäßig Marken angezeigt, die mit
prod
markiert sind. - Beispiel:
.../ehr-connect?brandTags=hospital^us
: Zeigt Marken an, die mithospital
UNDus
getaggt sind.
- Funktionsweise: Beim Öffnen dieser Seite wird der Benutzer aufgefordert, seinen EHR-Anbieter auszuwählen. Anschließend wird der standardmäßige Startablauf der SMART App gestartet und der Benutzer wird zur Anmeldeseite seiner EHR weitergeleitet. Nach erfolgreicher Authentifizierung und Autorisierung ruft der Client einen umfassenden Satz von FHIR-Ressourcen (Patienten, Erkrankungen, Beobachtungen, Medikamente, Dokumente usw.) ab und versucht, Klartext aus zugehörigen Anhängen (wie PDFs, RTF, HTML in
DocumentReference
) zu extrahieren. - Datenausgabe (
ClientFullEHR
): Sobald der Abruf abgeschlossen ist, sammelt der Client alle Daten in einemClientFullEHR
JSON-Objekt. Dieses Objekt enthält:fhir
: Ein Wörterbuch, in dem die Schlüssel FHIR-Ressourcentypen (z. B. „Patient“) und die Werte Arrays der entsprechenden FHIR-Ressourcen sind.attachments
: Ein Array verarbeiteter Anhangsobjekte, jedes mit Metadaten (Quellressource, Pfad, Inhaltstyp) und dem Inhalt selbst (contentBase64
für Rohdaten,contentPlaintext
für extrahierten Text).
- Datenübermittlung: Wenn mit dem Hash
#deliver-to-opener:$origin
geöffnet, fordert der Client den Benutzer zur Bestätigung auf und sendet dann dasClientFullEHR
-Objekt mitwindow.opener.postMessage(data, targetOrigin)
an das Fenster zurück, das es geöffnet hat.
2. Lokaler MCP-Server über Stdio ( src/cli.ts
)
Dieser Modus ist ideal für die lokale Ausführung des MCP-Servers und wird häufig mit Tools wie Cursor oder anderen KI-Clients für die Befehlszeile verwendet.
- Zweistufiger Prozess:
- Daten in die Datenbank holen: Führen Sie zunächst die Kommandozeilenschnittstelle mit den Flags
--create-db
und--db
aus. Dadurch wird ein temporärer Webserver gestartet und die oben beschriebene SMART on FHIR-Webclient-Logik zum Datenabruf verwendet. Anstatt die Daten perpostMessage
zu senden, werden dieClientFullEHR
Daten in einer lokalen SQLite-Datenbankdatei gespeichert.Folgen Sie den Anweisungen (öffnen Sie einen Link in Ihrem Browser), um eine Verbindung zu Ihrer EHR herzustellen. - MCP-Server ausführen: Sobald die Datenbankdatei erstellt ist, führen Sie die CLI erneut aus und verweisen Sie dabei nur auf die Datenbankdatei. Dadurch werden die Daten in den Speicher geladen und der MCP-Server gestartet. Er wartet auf Befehle auf der Standard-Ein-/Ausgabe.
- Konfiguration (
config.*.json
): Dieser Prozess basiert auf einer Konfigurationsdatei (z. B.config.epicsandbox.json
), die die verfügbaren EHR-Marken/Endpunkte in einembrandFiles
Array definiert. Jeder Eintrag in diesem Array gibt die Details der Marke an, darunter:url
: Pfad/URL zur Markendefinitionsdatei (wiestatic/brands/epic-sandbox.json
).tags
: Ein Array von Zeichenfolgen (z. B.["epic", "sandbox"]
), die zur Kategorisierung oder Filterung verwendet werden.vendorConfig
: Enthält SMART on FHIR-Clientdetails (clientId
,scopes
).
- Daten in die Datenbank holen: Führen Sie zunächst die Kommandozeilenschnittstelle mit den Flags
- Client-Konfiguration (z. B. Cursor): Konfigurieren Sie Ihren MCP-Client so, dass dieser Befehl ausgeführt wird. Verwenden Sie unbedingt absolute Pfade sowohl für
src/cli.ts
als auch für die Datenbankdatei.
3. Vollständiger MCP-Server über SSE ( src/sse.ts
/ index.ts
)
In diesem Modus wird ein persistenter Server ausgeführt, der für Szenarien geeignet ist, in denen mehrere Clients über das Netzwerk eine Verbindung herstellen. Er verwendet Server-Sent Events (SSE) für den MCP-Kommunikationskanal.
- Authentifizierung: Die Client-Authentifizierung basiert auf OAuth 2.1, wie im Model Context Protocol spezifiziert. Der Server stellt Standardendpunkte bereit (
/authorize
,/token
,/register
usw.). - Datenabruf: Wenn ein Client eine OAuth-Verbindung initiiert, verarbeitet der Server den SMART-on-FHIR-Flow selbst , ruft die
ClientFullEHR
Daten während des Autorisierungsvorgangs ab und behält sie für die Dauer der Verbindung des Clients im Speicher (oder in einer dauerhaften Sitzung). - Status: Die MCP-Spezifikation für die OAuth 2.1-Client-Interaktion ist zwar funktionsfähig, befindet sich aber noch in der Entwicklung. Die Client-Unterstützung für diese Authentifizierungsmethode ist derzeit äußerst eingeschränkt , was das Testen dieses Modus mit Standardclients ohne spezielle Entwickler- oder Debugging-Tools erschwert. Dieser SSE-Modus sollte als experimentell betrachtet werden.
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Ein Model Context Protocol-Server, der KI-Tools mithilfe von SMART auf FHIR mit elektronischen Gesundheitsakten verbindet und so die sichere Suche, Abfrage und Analyse von Patientendaten aus kompatiblen EHRs ermöglicht.
Related MCP Servers
- -securityFlicense-qualityA Model Context Protocol server for tracking personal health and well-being, offering tools for workout logging, nutrition management, and daily journaling with AI-assisted analysis integration.Last updated -2Python
- -securityAlicense-qualityA Model Context Protocol server that provides health data from the Senechal API to LLM applications, enabling AI assistants to access, analyze, and respond to personal health information.Last updated -PythonGPL 3.0
- -securityAlicense-qualityA Model Context Protocol server that provides seamless interaction with Workato's API through custom AI tools, enabling management of recipes, connections, connectors, folders, and activity logs.Last updated -TypeScriptMIT License
- -securityAlicense-qualityA specialized Model Context Protocol server that enhances AI-assisted medical learning by connecting Claude Desktop to PubMed, NCBI Bookshelf, and user documents for searching, retrieving, and analyzing medical education content.Last updated -PythonMIT License