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このリンクを開くウィンドウの実際のオリジンに置き換えます)。
  • ブランドのフィルタリング ( ?brandTags ): 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 ) が含まれます。
  • クライアント設定(例:カーソル):このコマンドを実行するように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

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. スタンドアロンSMART on FHIR Webクライアント
        2. Stdio経由のローカルMCPサーバー( src/cli.ts )
        3. SSE経由の完全なMCPサーバー( 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