🚀 LangCare MCP FHIR Server
エンタープライズグレードのMCPサーバーで、FHIRベースの電子カルテシステムに最適。エージェント型AIプラットフォームでの堅牢なデプロイを実現します。

このサーバーは、FHIRベースの電子カルテシステム向けのエンタープライズグレードのMCPサーバーで、エージェント型AIプラットフォームでの堅牢なデプロイに設計されています。Go言語で完全に記述され、エンタープライズグレードのセキュリティと、任意のFHIR R4リソースタイプで動作する汎用的なFHIR操作を備えています。また、40以上の臨床スキルライブラリ が付属しており、薬剤管理、検査結果の解釈、臨床判断支援、文書作成、集団医療など、エージェントに依存しないワークフローガイドが提供されます。
⭐ 新機能: LangCareは現在、MCPアプリをサポートしています — サーバーに直接埋め込まれたインタラクティブな臨床UIです。詳細を学ぶ。
⭐ 新機能: ヘルスケアボイスエージェント — 患者が自分の健康記録について質問し、電子カルテから音声で回答を得ることができるリアルタイムボイスAIで、PipeCat + LangCare MCPによって動作します。
⭐ 新機能: LangCare CLI — Python CLIで、HTTPを介してFHIRツール (fhir_search, fhir_read, fhir_create, fhir_update) をラップし、MCPをネイティブにサポートしていないAIエージェントフレームワーク (LangChain, smolagents, CrewAI, AutoGen) 用に設計されています。内部でMCPセッションのハンドシェイクを処理し、標準出力にクリーンなJSONを出力します。
langcare.ai
🚀 クイックスタート
📦 インストール
npmを使ってインストールするには、以下のコマンドを実行します。
npm install -g @langcare/langcare-mcp-fhir
または、インストールせずに直接使用することもできます。
npx @langcare/langcare-mcp-fhir -config /path/to/config.yaml
🔧 クイック設定
LangCare MCP FHIRは、ClaudeをFHIRベースの電子カルテシステムに接続します。バックエンドを指すYAML設定ファイルが必要です。
1. 設定テンプレートの取得
バックエンドを選択します。
2. Claude Desktopの設定
Claude Desktopの設定ファイル (~/.config/Claude/claude_desktop_config.json) に以下を追加します。
{
"mcpServers": {
"langcare-mcp-fhir": {
"command": "langcare-mcp-fhir",
"args": ["-config", "/path/to/your/config.yaml"]
}
}
}
macOSでは、設定ファイルは通常以下の場所にあります。
~/Library/Application\ Support/Claude/claude_desktop_config.json
3. Claude Desktopの再起動
Claude Desktopを閉じて再度開きます。FHIRツールが利用可能になります。
詳細なセットアップヘルプが必要な場合は、 ローカルテストガイド を参照してください。
✨ 主な機能
- エージェント型AIプラットフォームでの堅牢なデプロイに最適
- 任意のFHIR R4リソースタイプで動作する汎用的なFHIR操作
- 40以上の臨床スキルライブラリによるエージェントに依存しないワークフローガイド
- MCPアプリによるインタラクティブな臨床UI
- ヘルスケアボイスエージェントによるリアルタイム音声対応
- LangCare CLIによるFHIRツールの簡単な使用
💻 使用例
基本的な使用法
1. fhir_read
FHIRリソースをタイプとIDで読み取ります。
{
"resourceType": "Patient",
"id": "example-123"
}
2. fhir_search
クエリパラメータでFHIRリソースを検索します。
{
"resourceType": "Patient",
"queryParams": "name=John&birthdate=gt1990-01-01"
}
3. fhir_create
新しいFHIRリソースを作成します。
{
"resourceType": "Observation",
"resource": {
"resourceType": "Observation",
"status": "final",
"code": { ... },
"subject": { "reference": "Patient/123" }
}
}
4. fhir_update
既存のFHIRリソースを更新します。
{
"resourceType": "Patient",
"id": "example-123",
"resource": {
"resourceType": "Patient",
"id": "example-123",
"name": [{ "family": "Smith" }]
}
}
📚 ドキュメント
はじめに
エージェント統合
- 🤖 エージェントプロンプトガイド - LangCare MCP FHIRを使用するAIエージェントの完全なガイド (ツールの例、ワークフロー、ベストプラクティス)
セキュリティと認証
デプロイメント
開発とテスト
- 🧪 テスト方法 - Claude Desktop、MCPインスペクター、手動テスト、および自動化
- 📦 プロジェクト構造 - ディレクトリ構成とアーキテクチャ
- 🔧 ビルドコマンド - 開発ワークフロー
🔧 技術詳細
アーキテクチャ
このMCPサーバーは、AIエージェントとFHIR R4サーバーの間のインテリジェントなプロキシとして機能します。Model Context Protocol (MCP) を介して4つの汎用的なFHIR操作を公開し、任意のFHIRリソースタイプに対するAIベースのワークフローを可能にします。
主要な設計:
- MCP SDK: 公式
github.com/modelcontextprotocol/go-sdk (Anthropic/Googleによるメンテナンス)
- FHIRクライアント: 任意のFHIR R4サーバーと動作する汎用的なHTTPクライアント
- トランスポート: stdioとStreamable HTTP
- バックエンド: 既存のFHIRサーバーへのプロキシ (データベースなし)
- 言語: 高性能と信頼性のために100% Go
セキュリティアーキテクチャ
LangCare MCP FHIRは、HIPAAコンプライアントな医療データアクセスのための2層セキュリティモデルを実装しています。
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Claude │ Auth1 │ MCP Server │ Auth2 │ FHIR API │
│ Client │────────▶│ (Go) │────────▶│ (EMR) │
└─────────────┘ └──────────────┘ └─────────────┘
Auth1: MCPクライアント認証 (ベアラートークン/APIキー)
Auth2: FHIRバックエンド認証 (ベアラー/OAuth2/SMART on FHIR)
セキュリティ機能
- ✅ TLS 1.3 HTTPトランスポートの暗号化
- ✅ PHIスクラビング ログでのPHIスクラビング (デフォルトで有効)
- ✅ HIPAAコンプライアント 監査ログ
- ✅ 永続的なPHIの保存なし (ステートレスプロキシ)
- ✅ 環境変数を通じたシークレット管理 (設定ファイルには保存しない)
- ✅ OAuth 2.0 自動トークン更新付き
- ✅ mTLS サービス間通信のサポート
- ✅ クライアントごとのレート制限
サポートされる認証方法
- ベアラートークン - シンプルなAPIキー認証
- OAuth2 - トークン更新付きの完全なOAuth2フロー
- SMART on FHIR - EPIC、Cerner、およびその他の電子カルテ標準
- 基本認証 - ユーザー名/パスワード認証
- カスタム - 追加の認証方法の拡張性
完全なセキュリティドキュメントについては、 セキュリティガイド を参照してください。
- HIPAAコンプライアンスチェックリスト
- EPIC/Cerner/GCPのOAuth設定
- Kubernetesセキュリティマニフェスト
- 資格情報管理手順
- 監査ログの実装
MCPアプリ (インタラクティブUI)
LangCare MCP FHIRには、組み込みのMCPアプリが付属しています。これは、Claude DesktopなどのMCP対応ホスト内で直接実行されるインタラクティブでリッチなUIビューです。従来のチャットベースのツール出力とは異なり、MCPアプリはチャート、テーブル、およびインタラクティブなコントロールを備えた完全なReactベースのインターフェイスをレンダリングし、同じ基礎となるFHIRツールを使用します。
動作原理: 各アプリは、go:embed を介してコンパイル時にGoバイナリに埋め込まれる単一ファイルのHTMLバンドル (React + TypeScript、Viteでコンパイル) です。実行時に、MCPサーバーは各アプリをMCPリソース (text/html;profile=mcp-app) として登録し、_meta.ui.resourceUri を介して関連付けられた専用のMCPツールとして登録します。MCPホストがツールを呼び出すと、リソースを取得してUIをレンダリングします。アプリは app.callServerTool() を通じてサーバーの汎用的なFHIRツール (fhir_search, fhir_read など) を呼び出します。データ取得にはLLMのラウンドトリップは必要ありません。
通常のツール出力に比べた利点:
- リッチなビジュアライゼーション — SVGチャート、色分けされたカード、展開可能な詳細パネル
- インタラクティブなコントロール — 検索フィールド、日付範囲ピッカー、クリックで展開する行
- 決定的なデータ取得 — アプリは直接FHIRツールを呼び出し、データ取得にはLLMの関与がない
- 外部依存関係なし — すべてが単一のHTMLファイルにインライン化され、バイナリに埋め込まれる
- オフラインで動作 — CDN、外部スクリプト、FHIR API呼び出し以外のネットワーク要求なし
組み込みアプリ
| アプリ |
ツール |
説明 |
| FHIRエクスプローラー |
fhir_explorer |
インタラクティブなFHIRリソースブラウザー。任意のFHIR R4リソースタイプをJSON詳細ビューで検索、読み取り、作成、および更新します。 |
| 患者カルテレビュー |
patient_chart_review |
患者の人口統計情報、アクティブな病状、薬剤、バイタルサイン、検査結果、およびバイタルサインのトレンドチャート (時間経過に伴う血圧と体重) を表示する臨床ダッシュボード。 |
両方のアプリは、MCPアプリパターンを示す参照実装です。アーキテクチャの詳細と新しいアプリの構築方法については、apps/README.md を参照してください。
Claude Desktop内で実行される患者カルテレビュー
エージェントの使用
AIエージェントは、LangCare MCP FHIRサーバーを使用して、医療関係者が4つのFHIRツールを通じて患者の健康記録にアクセスし管理するのを支援します。サーバーは電子カルテの認証を処理し、エージェントは厳格なプライバシーと精度の基準を維持しながら臨床ワークフローに集中することができます。
エージェントの機能:
- 検索、読み取り、作成、更新 - 任意のFHIR R4リソース (患者、観察、薬剤など)
- 患者のプライバシー - 部分的な識別子を使用し、更新前に身元を確認する
- 臨床的な精度 - データを検証し、標準コード (LOINC、SNOMED、RxNorm) を使用する
- 専門的なコミュニケーション - コンテキスト、所見、および次のステップを含む構造化されたレスポンスを提供する
一般的なワークフロー:
- 患者の検索: 名前/生年月日で検索 → 身元を確認 → 完全な詳細を読み取る
- 臨床レビュー: 検査結果、バイタルサイン、薬剤を取得 → 参照範囲とともに提示する
- 文書作成: 構造化されたデータを抽出 → FHIRリソースにマッピング → 確認 → 作成
- 更新: 既存のリソースを検証 → 変更 → 変更を確認 → 更新
システムサポート:
- 任意のFHIR R4リソースタイプ (DocumentReference、Binary、Mediaを含む60以上のタイプ) で動作する
- EPIC、Cerner、GCP Healthcare APIへの自動認証とトークン更新
- HIPAAコンプライアントなPHI処理と監査ログ
- 臨床データアクセスのための包括的なOAuth2スコープ
📖 完全なガイド: エージェントプロンプトガイド - システムプロンプト、ツールの例、ワークフロー、およびエラーハンドリング
臨床スキルライブラリ (オプション)
40以上のエージェントに依存しない臨床ワークフローガイド があり、AIエージェントがMCPサーバーの4つのFHIRツール (fhir_search, fhir_read, fhir_create, fhir_update) を使用して複雑な医療タスクを実行する方法を教えます。
- オプション - MCPサーバーはこれらなしでも動作します
- ポータブル - Claude、ChatGPT、Gemini、または任意のAIエージェントと連携します
- エビデンスベース - USPSTF、ADA、ACC/AHA、CDC、ACOG、KDIGO、およびその他の学会ガイドラインに基づいて構築されています
- コピーアンドペースト可能 - スキルの
SKILL.md をエージェントのシステムプロンプトまたはカスタム指示に追加します
スキルカテゴリ (40のスキル)
| カテゴリ |
スキル数 |
例 |
| 患者データと要約 |
5 |
人口統計情報、臨床要約 (CCD形式)、問題リストの監査、アレルギーレビュー、保険適用範囲 |
| 薬剤管理 |
5 |
薬剤の調整、薬物相互作用 (CYP450)、服薬遵守 (MPR/PDC)、ビアーズ基準、オピオイドリスク (ORT/MME) |
| 検査と診断 |
5 |
検査結果の解釈、重要値 (CAP/CLIA)、手術前検査、糖尿病パネル (ADA)、腎機能 (KDIGO) |
| 臨床判断支援 |
5 |
敗血症 (qSOFA/SOFA)、心血管リスク (ASCVD/HEART)、静脈血栓塞栓症 (Wells/Caprini)、転倒リスク (Morse)、肺炎 (CURB-65) |
| ケアコーディネーション |
5 |
退院計画 (LACE)、紹介、ケアギャップ (USPSTF)、ケア移行 (I-PASS)、フォローアップタスク |
| 文書作成 |
5 |
SOAPノート、病歴と身体所見、経過記録、退院要約、手術記録 |
| 集団医療 |
5 |
パネル概要、品質指標 (HEDIS)、慢性疾患レジストリ、予防接種状況 (CDC)、予防医療の遵守 |
| 専門領域 |
5 |
産前 (ACOG)、小児成長 (WHO/CDC)、メンタルヘルス (PHQ-9/GAD-7)、腫瘍学 (TNM/RECIST)、慢性疼痛 |
リンク付きの完全なカタログ: skills/README.md
スキルの使用方法
- 閲覧 skills/core/ ディレクトリを閲覧し、スキルを選択します。
- コピー スキルの
SKILL.md の内容をAIエージェントのシステムプロンプトまたはカスタム指示にコピーします。
- 参照ファイル 各スキルの
references/ サブディレクトリ内のファイルには、詳細な臨床知識 (スコアリング基準、コードテーブル、閾値) が含まれており、より深い臨床的な精度のためにオプションで含めることができます。
# 例: 薬剤調整スキルをエージェントに追加する
skills/core/medication-management/medication-reconciliation/
├── SKILL.md # これをエージェントの指示にコピーする
└── references/
├── reconciliation-process.md # 合同委員会の基準
└── high-risk-medications.md # ISMPの高アラート薬剤リスト
統合ガイド: Claude | ChatGPT | Gemini
コミュニティの貢献を歓迎します - ガイドラインについては、CONTRIBUTING.md を参照してください。
開発とテスト
ソースからビルド
make build
ローカルで実行 (stdioモード)
make run
./bin/langcare-mcp-fhir -config configs/config.local.yaml
HTTPモードで実行 (Streamable HTTP)
make run-http
./bin/langcare-mcp-fhir -http -port 8080 -config configs/config.yaml
/mcp でStreamable HTTPトランスポートを使用してサーバーを起動し、/health でヘルスチェックを行います。
テストの実行
make test
コードのリント
make lint
Fly.ioにデプロイ (リモートStreamable HTTP)
Streamable HTTPトランスポートを使用してリモートMCPサーバーとしてデプロイし、どこからでもMCP互換のAIエージェントがアクセスできるようにします。
brew install flyctl
fly auth login
fly apps create --name langcare-mcp-dev
fly secrets set \
EPIC_BASE_URL="https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4" \
EPIC_CLIENT_ID="your-client-id" \
EPIC_TOKEN_URL="https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token" \
EPIC_PRIVATE_KEY_B64="$(base64 < keys/epic/private-key.pem)" \
MCP_AUTH_TOKENS="your-token" \
--app langcare-mcp-dev
fly deploy -c fly/fly.dev.toml --app langcare-mcp-dev
curl https://langcare-mcp-dev.fly.dev/health
任意のMCPクライアントを以下に接続します。
URL: https://langcare-mcp-dev.fly.dev/mcp
Auth: Authorization: Bearer your-token
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"langcare-fhir": {
"url": "https://langcare-mcp-dev.fly.dev/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
}
}
}
EPICとGCP Healthcare APIプロバイダーをサポートしています。プロバイダーの設定、シークレット、および完全なデプロイメントガイドについては、fly/README.md を参照してください。
EPICを使用したローカルテスト
EPICの資格情報を設定し、ローカルでテストするための手順については、以下を参照してください。
📖 ローカルテストガイド
このガイドには以下が含まれています。
- RSAキーとJWKSの生成
- EPICの資格情報の設定
- サーバーのローカル実行
- Claude Desktopを使用したテスト
- 一般的な問題のトラブルシューティング
資格情報のクイックテスト:
go run test/test_epic_token.go "your-client-id" "/path/to/private-key.pem"
プロジェクト構造
langcare-mcp-fhir/
├── cmd/
│ └── server/
│ └── main.go # エントリーポイント
├── internal/
│ ├── apps/ # MCPアプリ (埋め込みUI)
│ │ ├── embed.go # HTMLバンドルのgo:embedディレクティブ
│ │ ├── registry.go # アプリのメタデータ、ツール名、リソースURI
│ │ └── dist/ # ビルドされたHTMLバンドル (ビルドによってコピーされる)
│ │ ├── fhir-explorer.html # FHIRエクスプローラーの単一ファイルバンドル
│ │ └── patient-chart-review.html # 患者カルテレビューの単一ファイルバンドル
│ ├── audit/
│ │ └── logger.go # HIPAA監査ログ
│ ├── config/
│ │ └── config.go # YAML設定の読み込み
│ ├── fhir/
│ │ ├── client.go # FHIR HTTPクライアントインターフェース
│ │ ├── types.go # FHIRクライアントの型
│ │ └── providers/ # バックエンドの実装
│ │ ├── base.go # 基本的なHTTPプロバイダー
│ │ ├── epic.go # EPIC OAuth2プロバイダー
│ │ ├── cerner.go # Cerner OAuth2プロバイダー
│ │ └── gcp.go # GCP Healthcare APIプロバイダー
│ ├── mcp/
│ │ └── server.go # MCPサーバー + アプリ登録
│ ├── middleware/
│ │ ├── auth.go # MCP認証
│ │ └── rate_limit.go # レート制限
│ ├── tools/ # MCPツールの実装
│ │ ├── registry.go # ツールの登録
│ │ ├── fhir_read.go # FHIRリソースの読み取り
│ │ ├── fhir_search.go # FHIRリソースの検索
│ │ ├── fhir_create.go # FHIRリソースの作成
│ │ └── fhir_update.go # FHIRリソースの更新
│ └── transport/
│ ├── stdio.go # stdioトランスポート (Claude Desktop)
│ └── http.go # Streamable HTTPトランスポート (本番環境)
├── apps/ # MCPアプリのソースコード (React + TypeScript)
│ ├── README.md # アプリ開発ガイド
│ ├── package.json # 共有依存関係 (React 19、MCPアプリSDK)
│ ├── vite.config.ts # Viteビルド設定 (単一ファイル出力)
│ ├── tsconfig.json # TypeScript設定
│ ├── fhir-explorer/ # FHIRエクスプローラーアプリ
│ │ ├── index.html
│ │ └── src/
│ │ ├── app.tsx
│ │ └── global.css
│ └── patient-chart-review/ # 患者カルテレビューアプリ
│ ├── index.html
│ └── src/
│ ├── app.tsx
│ └── global.css
├── scripts/
│ ├── build-apps.sh # すべてのアプリをビルド → internal/apps/dist/
│ └── create_jwks.sh # 公開キーからJWKSを生成 (EPIC)
├── pkg/
│ └── types/
│ └── errors.go # カスタムエラー型
├── configs/
│ ├── config.epic.example.yaml # EPICの例の設定
│ ├── config.cerner.example.yaml # Cernerの例の設定
│ ├── config.gcp.example.yaml # GCPの例の設定
│ └── config.base.example.yaml # 任意のFHIR R4サーバーの例の設定
├── docs/
│ ├── AGENT_PROMPT.md # AIエージェントのシステムプロンプト
│ ├── EPIC-APP-SECURITY.md # EPIC認証の設定
│ ├── EPIC-SCOPES.md # OAuth2スコープの参照
│ ├── LOCAL-TESTING.md # ローカル開発ガイド
│ └── SECURITY.md # 本番環境のセキュリティガイド
├── test/
│ ├── README.md # テストドキュメント
│ └── test_epic_token.go # EPIC OAuth2トークンテスター
├── fly/
│ ├── Dockerfile # Fly.io用のマルチステージGoビルド
│ ├── docker-entrypoint.sh # キーの実体化 + サーバーの起動
│ ├── fly.dev.toml # Fly.ioの開発デプロイメント設定
│ ├── config.fly.epic.yaml # Fly.ioのEPICプロバイダー設定
│ ├── config.fly.gcp.yaml # Fly.ioのGCPプロバイダー設定
│ └── README.md # Fly.ioのデプロイメントガイド
├── bin/ # ビルド出力 (gitignored)
│ └── langcare-mcp-fhir # コンパイルされたバイナリ
├── go.mod # Goモジュールの定義
├── go.sum # Goモジュールのチェックサム
├── Makefile # ビルドコマンド
└── README.md # このファイル
注: 以下はgitignoredでコミットされません。
keys/ - 秘密鍵と資格情報
config.local.*.yaml - ローカル設定ファイル
bin/ - コンパイルされたバイナリ
.env - 環境変数
apps/node_modules/, apps/dist/, apps/dist-tmp/ - アプリのビルドアーティファクト
ヘルスケアボイスエージェント
患者が自分の健康記録について質問し、電子カルテから直接引き出された音声回答を得ることができるリアルタイムボイスAIです。
スタック: PipeCat (オープンソース、Daily.co) をボイスパイプラインに使用します — STT、LLMオーケストレーション、3秒未満のレイテンシーでのTTS。臨床推論とツール呼び出しにはClaudeを使用します。LangCare MCP FHIRサーバー (オープンソース、Go) を任意のFHIR R4電子カルテへのステートレスプロキシとして使用します — Epic、Cerner、GCP Healthcare API。
MCPがつなぐ役割を果たします。 PipeCatのネイティブMCPクライアントは、起動時にFHIRツールを自動検出します。患者が「私はどの薬を服用していますか?」と質問すると、Claudeが fhir_search を呼び出し、PipeCatがそれをMCPサーバーにルーティングし、データが返され、Claudeが自然な音声で回答します。手動でのツールスキーマは必要ありません。
3層のHIPAA認証: セッション開始前に呼び出し元の身元を検証し、MCPにはベアラートークン、電子カルテにはOAuth2/SMART on FHIRを使用します。PHIの保存は一切行いません。
すべてが交換可能です。 ClaudeをGeminiに、DeepGramをGoogle STTに、DailyをWebSocketに置き換えることができます。MCP FHIR層と臨床プロンプトは同じままです。
完全なドキュメントとセットアップガイド
LangCare CLI
4つのFHIR MCPツール (fhir_search, fhir_read, fhir_create, fhir_update) をHTTPを介してCLIサブコマンドとしてラップするコマンドラインインターフェースです。MCPをネイティブにサポートしていないAIエージェントフレームワーク — LangChain、smolagents、CrewAI、AutoGen、およびサブプロセスを呼び出すことができる任意のフレームワーク — 用に設計されています。CLIは内部でMCPセッションのハンドシェイクを処理するため、エージェントはプロトコルの知識なしに標準出力にクリーンなJSONを取得できます。
pip install "langcare-cli @ git+https://github.com/langcare/langcare-mcp-fhir.git#subdirectory=cli"
langcare fhir search Patient --query "name=John"
langcare fhir read Patient 123
langcare fhir create Observation --data @obs.json
langcare fhir update Patient 123 --data @patient.json
スキルライブラリ の40以上の臨床スキルはそのまま機能します — スキルは抽象的なツール名を参照し、トランスポートに依存しません。CLIをエージェントフレームワークのサブプロセスツールとして登録すると、スキルは変更なしで実行されます。
完全なドキュメントとセットアップガイド
📄 ライセンス
詳細は LICENSE ファイルを参照してください。
LangCareチームと貢献者によって愛情を込めて作成されました。
より良いAIインフラストラクチャによる医療の改善