Skip to main content
Glama

Smart EHR MCP Server

by jmandel

EHR-Tools mit MCP und FHIR

Übersicht über EHR-Tools

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:

  1. 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.
  2. 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.
  3. 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 Abfrageparameter brandTags hinzufügen. Geben Sie eine kommagetrennte Liste von Tags an. Es werden nur Marken angezeigt, die allen angegebenen Tags (aus ihrer Konfiguration in brandFiles ) 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 mit epic ODER sandbox getaggt sind.
    • ?brandTags=epic^dev : Zeigt Marken an, die sowohl mit epic ALS AUCH mit dev getaggt sind.
    • ?brandTags=epic^dev,sandbox^prod : Zeigt Marken an, die mit ( epic UND dev ) ODER ( sandbox UND prod ) 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 mit hospital UND us 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 einem ClientFullEHR 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 das ClientFullEHR -Objekt mit window.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:
    1. 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 per postMessage zu senden, werden die ClientFullEHR Daten in einer lokalen SQLite-Datenbankdatei gespeichert.
      # Example: Fetch data and save to data/my_record.sqlite bun run src/cli.ts --create-db --db ./data/my_record.sqlite
      Folgen Sie den Anweisungen (öffnen Sie einen Link in Ihrem Browser), um eine Verbindung zu Ihrer EHR herzustellen.
    2. 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.
      # Example: Start the MCP server using the saved data bun run src/cli.ts --db ./data/my_record.sqlite
    • Konfiguration ( config.*.json ): Dieser Prozess basiert auf einer Konfigurationsdatei (z. B. config.epicsandbox.json ), die die verfügbaren EHR-Marken/Endpunkte in einem brandFiles Array definiert. Jeder Eintrag in diesem Array gibt die Details der Marke an, darunter:
      • url : Pfad/URL zur Markendefinitionsdatei (wie static/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 ).
  • 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.
    { "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. 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.
-
security - not tested
F
license - not found
-
quality - not tested

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.

  1. Die Kernidee
    1. Verfügbare Tools
      1. Komponenten und Verwendung
        1. Eigenständiger SMART on FHIR-Webclient
        2. Lokaler MCP-Server über Stdio ( src/cli.ts )
        3. Vollständiger MCP-Server über SSE ( src/sse.ts / index.ts )

      Related MCP Servers

      • -
        security
        F
        license
        -
        quality
        A 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 -
        2
        Python
      • -
        security
        A
        license
        -
        quality
        A 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 -
        Python
        GPL 3.0
        • Linux
        • Apple
      • -
        security
        A
        license
        -
        quality
        A 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 -
        TypeScript
        MIT License
        • Apple
        • Linux
      • -
        security
        A
        license
        -
        quality
        A 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 -
        Python
        MIT License
        • Apple

      View all related MCP servers

      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