Smart EHR MCP Server

by jmandel
Verified

hybrid server

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

Integrations

  • Enables complex data analysis on EHR records through JavaScript code evaluation with Lodash utilities.

  • Connects to EHR systems using SMART on FHIR protocol, enabling secure access to patient data from Electronic Health Records. Fetches structured FHIR data and clinical documents.

  • Stores and queries fetched EHR data in a SQLite database, allowing read-only SQL operations against structured FHIR resources.

MCP と FHIR を備えた EHR ツール

このプロジェクトは、大規模言語モデル(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このリンクを開くウィンドウの実際のオリジンに置き換えます)。
  • **動作原理:**このページを開くと、ユーザーは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
  • クライアント設定(例:カーソル):このコマンドを実行するように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. 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
F
license - not found
-
quality - not tested

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

  1. The Core Idea
    1. Available Tools
      1. Components & Usage
        1. 1. Standalone SMART on FHIR Web Client
        2. 2. Local MCP Server via Stdio (src/cli.ts)
        3. 3. Full MCP Server via SSE (src/sse.ts / index.ts)
      ID: fpxg7o4xk3