Skip to main content
Glama
jmandel

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 サーバーに接続し、提供されているツールを使用して患者の記録について「質問」したり、検索を実行したり、カスタム分析を実行したりします。

Related MCP server: HAPI-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このリンクを開くウィンドウの実際のオリジンに置き換えます)。

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

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

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

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

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

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

  • **動作原理:**このページを開くと、ユーザーは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 クライアントの詳細 ( clientId 、 scopes ) が含まれます。

  • クライアント設定(例:カーソル):このコマンドを実行するように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モードは試験的なものとしてお考えください。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    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.
    GPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    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.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol server that provides universal access to multiple FHIR servers with AI-powered clinical analysis capabilities for healthcare data integration and patient care planning.
    3
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A comprehensive MCP server that bridges AI applications with FHIR healthcare data systems, enabling patient data access, clinical data retrieval, and data quality assessment.
    4
    -