Skip to main content
Glama

Smart EHR MCP Server

by jmandel

MCP と FHIR を備えた EHR ツール

EHRツールの概要

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

このプロジェクトは、大規模言語モデル(LLM)やその他のAIエージェントが電子医療記録(EHR)と連携するためのツールを提供する専用サーバーとして機能します。安全なデータアクセスを実現するSMART on FHIR標準と、ツールを公開するため**のモデルコンテキストプロトコル(MCP)**を活用しています。

これは、AI がさまざまな EHR システムから患者データに安全にアクセスして分析できるようにする、安全なゲートウェイおよびツールキットと考えてください。

核となるアイデア

このシステムは主に 3 つの段階で動作します。

  1. **SMART on FHIR クライアント(本プロジェクト内で実装):**標準の SMART App Launch フレームワークを使用して EHR に安全に接続します。構造化データ(病状、投薬情報、検査結果など)と非構造化臨床記録や添付ファイルの両方を含む、幅広い患者情報を抽出します。

  2. **MCPサーバー(本プロジェクト):**抽出されたEHRデータを取得し、モデルコンテキストプロトコル(MCP)を介してアクセスできる強力なツールセットを通じて利用できるようにします。これらのツールにより、AIモデルなどの外部システムは、EHR自体に直接アクセスすることなく、データのクエリと分析を行うことができます。

  3. AI / LLM インターフェース (外部コンシューマー): AI エージェントまたは大規模言語モデルは MCP サーバーに接続し、提供されているツールを使用して患者の記録について「質問」したり、検索を実行したり、カスタム分析を実行したりします。

利用可能なツール

MCP サーバーは、ロードされた EHR データと対話するためのいくつかのツールを提供します。

  • grep_record : 取得したレコード(構造化FHIRデータ+メモ/添付ファイルのテキスト)の部分を対象に、テキスト検索または正規表現検索を実行します。キーワードや特定の言及(例:「糖尿病」、「アスピリン」)を見つけるのに最適です。

  • query_record : 構造化されたFHIRデータに対して、読み取り専用のSQL SELECTクエリを直接実行します。既知のFHIRリソース構造に基づく正確な検索(例:LOINCコードによる特定の検査結果の検索)に役立ちます。

  • eval_record : 取得したデータ(FHIRリソースと添付ファイル)に対して、カスタムJavaScriptコードを直接実行します。複雑な計算、複数のソースからのデータの結合、カスタムフォーマットなど、最大限の柔軟性を提供します。

この設定により、AI ツールは標準化された安全なインターフェースを通じて包括的な EHR データを活用できるようになります。

(開発者向けのセットアップと使用方法の詳細は、コードベースと特定のモジュールのドキュメントに記載されています。)


コンポーネントと使用方法

このプロジェクトでは、EHR データを取得し、MCP ツールを介して公開するためのさまざまな方法を提供します。

1. スタンドアロンSMART on FHIR Webクライアント

このプロジェクトには、ユーザーが SMART on FHIR を介して EHR に接続し、データを取得できるようにする自己完結型の Web アプリケーションが含まれています。

  • **ホストバージョン:**次の場所で公開ホストバージョンを使用できます。
    https://mcp.fhir.me/ehr-connect#deliver-to-opener:$origin
    ( $originこのリンクを開くウィンドウの実際のオリジンに置き換えます)。

  • ブランドのフィルタリング ( URL にbrandTagsクエリパラメータを追加することで、接続ページに表示される EHR プロバイダーのリストをフィルタリングできます。カンマ区切りのタグリストを指定してください。指定されたすべてのタグ( brandFilesの設定から)に一致するブランドのみが表示されます。OR (カンマ区切り) と AND (キャレット^区切り) の両方のロジックをサポートしており、AND が優先されます。

    • ?brandTags=epic,sandbox : epicまたはsandboxのタグが付けられたブランドを表示します。

    • ?brandTags=epic^dev : epicdev両方のタグが付けられたブランドを表示します。

    • ?brandTags=epic^dev,sandbox^prod : ( epic AND dev ) OR ( sandbox AND prod ) のタグが付��られたブランドを表示します。

    • パラメータを省略すると、デフォルトでprodタグが付けられたブランドが表示されます。

    • 例: .../ehr-connect?brandTags=hospital^us : hospitalusのタグが付けられたブランドを表示します。

  • **動作原理:**このページを開くと、ユーザーはEHRプロバイダーを選択するよう求められます。その後、標準のSMART App Launchフローが開始され、ユーザーはEHRのログインページにリダイレクトされます。認証と承認に成功すると、クライアントは包括的なFHIRリソースセット(患者、病状、観察、投薬、文書など)を取得し、関連する添付ファイル( DocumentReferenceにあるPDF、RTF、HTMLなど)からプレーンテキストを抽出しようとします。

  • **データ出力( ClientFullEHR ):**取得が完了すると、クライアントはすべてのデータをClientFullEHR JSONオブジェクトに収集します。このオブジェクトには以下が含まれます。

    • fhir : キーが FHIR リソース タイプ (例: 「患者」) であり、値が対応する FHIR リソースの配列である辞書。

    • attachments : 処理済みの添付ファイル オブジェクトの配列。各オブジェクトにはメタデータ (ソース リソース、パス、コンテンツ タイプ) とコンテンツ自体 (生データの場合はcontentBase64 、抽出されたテキストの場合はcontentPlaintext ) が含まれます。

  • データ配信: #deliver-to-opener:$originハッシュで開かれた場合、クライアントはユーザーに確認を求め、 window.opener.postMessage(data, targetOrigin)を使用して、それを開いたウィンドウにClientFullEHRオブジェクトを送り返します。

2. Stdio経由のローカルMCPサーバー( src/cli.ts

このモードは、MCP サーバーをローカルで実行するのに最適で、Cursor やその他のコマンドライン AI クライアントなどのツールでよく使用されます。

  • 2段階のプロセス:

    1. **データベースへのデータ取得:**まず、コマンドラインインターフェースを--create-dbおよび--dbフラグ付きで実行します。これにより一時的なウェブサーバーが起動し、上記と同じSMART on FHIR ウェブクライアントロジックを使用してデータを取得しpostMessage 。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

      指示に従って(ブラウザでリンクを開いて)EHR に接続します。

    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 ):**このプロセスは、利用可能なEHRブランド/エンドポイントをbrandFiles配列に定義する設定ファイル(例: config.epicsandbox.json )に依存します。この配列の各エントリは、ブランドの詳細(以下を含む)を指定します。

      • url : ブランド定義ファイルへのパス/URL ( static/brands/epic-sandbox.jsonなど)。

      • tags : 分類やフィルタリングに使用される文字列の配列 (例: ["epic", "sandbox"] )。

      • vendorConfig : SMART on FHIR クライアントの詳細 ( clientIdscopes ) が含まれます。

  • クライアント設定(例:カーソル):

    { "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. SSE経由の完全なMCPサーバー( src/sse.ts / index.ts

このモードでは、複数のクライアントがネットワーク経由で接続するシナリオに適した永続サーバーを実行します。MCP通信チャネルにはServer-Sent Events(SSE)を使用します。

  • **認証:**クライアント認証は、モデルコンテキストプロトコルで規定されているOAuth 2.1に依存します。サーバーは標準エンドポイント( /authorize/token/registerなど)を提供します。

  • **データ取得:**クライアントが OAuth 接続を開始すると、サーバーは SMART on FHIR フロー自体を処理し、認証プロセス中にClientFullEHRデータを取得し、クライアントの接続期間中はそれをメモリ (または永続セッション) に保持します。

  • ステータス: OAuth 2.1クライアントインタラクションのMCP仕様は機能的にはありますが、まだ進化を続けています。この認証方式に対するクライアントサポートは現時点では非常に限られており、専用の開発ツールやデバッグツール以外では、標準クライアントでこのモードをテストすることは困難です。このSSEモードは試験的なものとしてお考えください。

-
security - not tested
A
license - permissive license
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

SMART on FHIR を使用して AI ツールを電子健康記録に接続し、互換性のある EHR ���らの患者データの安全な検索、クエリ、分析を可能にするモデル コンテキスト プロトコル サーバー。

  1. 核となるアイデア
    1. 利用可能なツール
      1. コンポーネントと使用方法
        1. 1. スタンドアロンSMART on FHIR Webクライアント
        2. 2. Stdio経由のローカルMCPサーバー( src/cli.ts )
        3. 3. SSE経由の完全なMCPサーバー( src/sse.ts / index.ts )

      Related MCP Servers

      • A
        security
        A
        license
        A
        quality
        A 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 -
        12
        263
        38
        MIT License
      • A
        security
        A
        license
        A
        quality
        A 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 -
        7
        22
        41
        MIT License
        • Linux
        • Apple
      • A
        security
        A
        license
        A
        quality
        A Model Context Protocol server that enables standardized interaction with Azure Health Data Services FHIR servers, allowing healthcare data operations through MCP tools.
        Last updated -
        1
        13
        MIT License
        • Apple
        • Linux
      • -
        security
        F
        license
        -
        quality
        A 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 -
        1

      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