🚀 FHIR MCP Server
FHIR MCP Server 实现了一个完整的模型上下文协议(MCP)服务器,旨在促进基于大语言模型(LLM)的代理与符合 FHIR 标准的后端之间的无缝交互。它提供了一个标准化接口,通过一套全面的工具实现对 FHIR 资源的完整 CRUD 操作,兼容 MCP 的客户端(如 Claude Desktop)可通过自然语言提示查询和操作临床数据。
🚀 快速开始
前提条件
- Docker(推荐)或 uv:用于依赖管理。
👉 uv 安装指南
- FHIR 服务器账户:具备访问 FHIR API 的权限(例如 Medplum)。
- Pinecone API 密钥(文档搜索必需):支持对处理后的文档进行基于向量的搜索。若无此密钥,语义检索功能将无法使用。
👉 创建 Pinecone 账户
- LOINC 账户(可选):可从官方 API 获取最新的 LOINC 代码。若无此账户,系统将依赖静态或语言模型推断的代码,这些代码可能过时或不准确。
👉 创建 LOINC 账户
安装与设置
- 克隆仓库:
git clone https://github.com/the-momentum/fhir-mcp-server
cd fhir-mcp-server
- 设置环境变量:
cp config/.env.example config/.env
编辑 config/.env
文件,填入你的凭证和配置。详情见环境变量。
3. 安装依赖
make build
make uv
- 更新 MCP 客户端配置
{
"mcpServers": {
"docker-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"--mount",
"type=bind,source=<your-project-path>/app,target=/root_project/app",
"--mount",
"type=bind,source=<your-project-path>/config/.env,target=/root_project/config/.env",
"mcp-server:latest"
]
}
}
}
确保将 <your-project-path>
替换为你实际的安装路径。
(Get-Command uv).Path
- MacOS/Linux:
which uv
然后,更新配置文件:
{
"mcpServers": {
"uv-mcp-server": {
"command": "uv",
"args": [
"run",
"--frozen",
"--directory",
"<your-project-path>",
"start"
],
"env": {
"PATH": "<uv-bin-folder-path>"
}
}
}
}
确保将 <uv-bin-folder-path>
替换为实际的 uv 路径(到 bin 文件夹)。
5. 重启 MCP 客户端
完成上述所有步骤后,重启 MCP 客户端以应用更改。在某些情况下,你可能需要使用任务管理器或系统的进程管理器终止所有相关进程。这可确保:
- 正确加载更新后的配置。
- 正确应用环境变量。
- FHIR MCP 客户端以正确的设置初始化。
(返回顶部)
✨ 主要特性
- 🚀 FastMCP 框架:基于 FastMCP 构建,具备高性能 MCP 服务器能力。
- 🏥 FHIR 资源管理:对所有主要 FHIR 资源进行完整的 CRUD 操作。
- 📄 智能文档处理:由人工智能驱动,支持 TXT、CSV、JSON 和 PDF 等多种格式的文档摄取和分块。
- 🔍 语义搜索:使用向量嵌入(通过 Pinecone)进行高级文档搜索。
- 🧠 支持 RAG:具备检索增强生成(RAG)管道,支持上下文感知的文档查询。
- 🔐 安全认证:通过 OAuth2 令牌管理实现 FHIR API 集成。
- 📊 LOINC 集成:支持标准化医学术语查找和验证。
- 🐳 支持容器化:支持 Docker,便于部署和扩展。
- 🔧 可配置:基于
.env
文件提供广泛的配置选项。
🏗️ 架构
服务器采用模块化架构构建:
- MCP 工具:为选定的 FHIR 资源类型提供专用工具,其他资源由通用工具处理。
- Fhir 服务器客户端:处理 FHIR API 通信和认证(OAuth2 等,更多认证方式计划中)。
- RAG 服务:基于嵌入的文档处理和语义检索。
- 向量存储:集成 Pinecone 实现基于相似度的搜索。
- LOINC 客户端:与 LOINC API 集成,实现术语解析和验证。
(返回顶部)
💡 演示
此演示展示了 Claude 如何使用 fhir-mcp-server
与 FHIR 服务器(此处为 Medplum)通信以回答问题。你将看到:
- 使用
request_patient_resource
工具检索患者基本信息。
- 使用
request_condition_resource
工具回答先前诊断的疾病是否会导致患者当前抱怨的症状。
- 使用
request_medication_resource
、request_encounter_resource
和 request_generic_resource
工具回答患者是否已接受高血压治疗。
你可以观察到 Claude 如何根据用户查询自动选择合适的工具来回答问题。
演示视频链接
实验室历史分析
在此你可以观察到,Claude 首先使用工具搜索血脂检查特定代码的 LOINC 代码,但在 FHIR 服务器中未找到相关观察结果后,它会对构成该检查的单个生物标志物进行重复搜索。
实验室历史分析演示视频链接
FHIR 合成数据生成器
使用 FHIR 进行开发的人员通常需要生成特定的测试数据来验证 FHIR 服务器的功能,例如搜索能力和数据关系。虽然你可以使用 Synthea 生成合成数据,然后手动将生成的数据包导入服务器,但 fhir-mcp-server
简化了这一过程,允许你直接通过 Claude 生成和部署测试数据。
这消除了分别运行 synthea、下载数据包并手动导入 FHIR 服务器的典型工作流程。相反,你可以在 Claude 的界面内创建有针对性的测试场景、生成合适的合成数据并填充服务器。
FHIR 合成数据生成器演示视频链接
注意:fhir-mcp-server
并非为此用例设计,因此在演示中你会看到它并非完美运行。不过,你可以观察到大型语言模型如何通过试错来纠正错误选择。
🔧 配置
环境变量
变量 |
描述 |
示例值 |
FHIR_SERVER_HOST |
FHIR API 主机 URL |
https://api.medplum.com |
FHIR_BASE_URL |
FHIR 基础路径 |
/fhir/R4 |
FHIR_SERVER_CLIENT_ID |
FHIR 的 OAuth2 客户端 ID |
019720e7... |
FHIR_SERVER_CLIENT_SECRET |
FHIR 的 OAuth2 客户端密钥 |
9e2ee73... |
LOINC_ENDPOINT |
LOINC API 搜索端点 |
https://loinc.regenstrief.org/searchapi/loincs |
LOINC_USERNAME |
LOINC 账户用户名 |
loinc-user |
LOINC_PASSWORD |
LOINC 账户密码 |
my-loinc-password |
PINECONE_API_KEY |
Pinecone API 密钥 |
pcsk_... |
EMBEDDING_MODEL |
Hugging Face 嵌入模型名称 |
NeuML/pubmedbert-base-embeddings |
(返回顶部)
🛠️ MCP 工具
FHIR MCP 服务器提供了一套全面的工具,用于与 FHIR 资源进行交互和文档管理:
FHIR 资源工具
工具 |
资源类型 |
描述 |
request_patient_resource |
患者 |
管理患者的人口统计和行政信息 |
request_observation_resource |
观察 |
处理临床测量和评估 |
request_condition_resource |
病情 |
管理患者的问题和诊断 |
request_medication_resource |
药物 |
处理药物信息和订单 |
request_immunization_resource |
免疫接种 |
管理疫苗接种记录 |
request_encounter_resource |
就诊 |
处理患者就诊和交互 |
request_allergy_intolerance_resource |
过敏不耐受 |
管理患者的过敏信息 |
request_family_member_history_resource |
家族成员病史 |
处理家族健康史 |
request_generic_resource |
任何 FHIR 资源 |
对特定工具未涵盖的任何 FHIR 资源进行操作 |
文档管理工具
工具 |
描述 |
request_document_reference_resource |
管理 FHIR 文档引用资源 |
add_document_to_pinecone |
将文档导入向量数据库以进行语义搜索 |
search_pinecone |
使用向量嵌入对索引文档进行语义搜索 |
LOINC 术语工具
工具 |
描述 |
get_loinc_codes |
检索医学观察和实验室测试的标准化 LOINC 代码 |
工具特性
- 全面的资源管理:所有 FHIR 资源工具支持创建、读取、更新和删除操作。
- 数据验证:工具强制执行 FHIR 资源验证,防止数据损坏。
- 错误处理:提供全面的错误响应,包含详细的失败信息。
- 安全保障:所有操作均支持 OAuth2 认证和适当的访问控制。
- 语义搜索:使用向量嵌入实现人工智能驱动的文档搜索。
- 多格式支持:文档摄取支持 TXT、PDF、CSV 和 JSON 格式。
(返回顶部)
🗺️ 路线图
我们正在不断为 FHIR MCP 服务器添加新功能。以下是即将推出的功能:
- [ ] 扩展认证选项:除了已支持的 OAuth2 之外,计划添加对其他连接 FHIR 服务器的认证方法的支持。
- [ ] 扩展 RAG 文件格式支持:扩展文档摄取功能,支持更多格式。
- [ ] 支持表格感知的文档分块:改进文档分块流程,检测文档中的表格并将其作为独立的原子块处理。
- [ ] 支持扫描文档的 OCR:实现光学字符识别(OCR)功能,以便在分块和索引之前从扫描的 PDF 和图像文件中提取文本。
如果你有建议,欢迎与我们联系或直接贡献代码!
👥 贡献者
(返回顶部)
📄 许可证
本项目采用 MIT 许可证进行分发。详情请参阅 MIT 许可证。