FHIR Careplan是一套全面的FHIR(快速医疗互操作性资源)服务器与工具集,专为医疗数据集成、患者护理规划和临床决策支持而设计。本项目提供了一个通用接口,可连接多个FHIR服务器,并具备先进的人工智能临床分析能力。
克隆仓库
git clone https://github.com/Kushagra-Dutta/Fhir-MCP.git
cd FHIR-MCP
安装依赖
pip install -r requirements.txt
# 或者使用uv
uv sync
配置环境变量
# 创建.env文件
echo "OPENAI_API_KEY=your_openai_api_key" > .env
运行FHIR MCP服务器
python fhir_server.py
获取Firely服务器许可证密钥
firelyserver-license.json使用Docker进行设置
# 拉取Firely服务器镜像
docker pull firely/server
# 运行容器
# 对于Windows CMD:
docker run -d -p 9090:4080 --name firely.server -v %CD%/firelyserver-license.json:/app/firelyserver-license.json firely/server
# 对于PowerShell或macOS/Linux:
docker run -d -p 9090:4080 --name firely.server -v ${PWD}/firelyserver-license.json:/app/firelyserver-license.json firely/server
# 验证容器是否正在运行
docker ps
加载测试数据
完成这些步骤后,您将拥有一个可在 http://localhost:9090 访问的测试数据库。
您可以通过分叉仓库或使用Docker来搭建MCP聊天机器人客户端。该聊天机器人将作为与FHIR服务器交互的前端界面。
获取聊天机器人设置
# 克隆仓库
git clone https://github.com/cgoinglove/mcp-client-chatbot.git
cd mcp-client-chatbot
安装PNPM(如果未安装)
npm install -g pnpm
选择设置方法
# 安装依赖
pnpm i
# 配置环境变量
# 编辑.env文件,添加您的API密钥(在pnpm i后自动创建)
# 启动包括PostgreSQL在内的所有服务
pnpm docker-compose:up
# 安装依赖
pnpm i
# 设置环境变量
pnpm initial:env
# 启动PostgreSQL(如果已经运行则跳过)
pnpm docker:pg
# 运行数据库迁移
pnpm db:migrate
# 启动开发服务器
pnpm dev
# 可选:构建并启动以进行类似生产环境的测试
pnpm build:local && pnpm start
配置环境变量
创建或编辑 .env 文件,添加所需的API密钥:
# LLM提供商API密钥(添加您计划使用的密钥)
OPENAI_API_KEY=****
GOOGLE_GENERATIVE_AI_API_KEY=****
ANTHROPIC_API_KEY=****
XAI_API_KEY=****
OPENROUTER_API_KEY=****
OLLAMA_BASE_URL=http://localhost:11434/api
# 认证配置
BETTER_AUTH_SECRET=**** # 使用:npx @better-auth/cli@latest secret生成
BETTER_AUTH_URL= # 可选:您访问应用的URL
# 数据库配置
POSTGRES_URL=postgres://your_username:your_password@localhost:5432/your_database_name
# MCP配置
FILE_BASED_MCP_CONFIG=false
# 可选的OAuth设置(用于Google/GitHub登录)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
将MCP服务器连接到聊天机器人
.chatbot-config.json 配置配置系统提示
src/app/prompts.ts 文件system_prompt.txt 中的自定义提示替换默认系统提示export const defaultSystemPrompt = `您是一个强大的智能AI编码助手。
您可以使用一组工具来回答用户的问题。
1. 对话要专业且友好。
2. 用第二人称称呼用户,用第一人称称呼自己。
3. 以Markdown格式格式化您的回复。
4. 绝不撒谎或编造信息。
遵循以下关于工具调用的规则:
1. 始终严格按照工具调用模式执行。
2. 绝不调用未明确提供的工具。
3. 仅在必要时调用工具。
4. 在调用每个工具之前,先向用户解释调用原因。
进行代码更改时:
1. 添加所有必要的导入语句和依赖项。
2. 除非用户要求,否则绝不向用户输出代码。
3. 使用适当的代码编辑工具进行实现。
`;
:定义AI的交互方式:指定使用工具的规则:设置代码修改的准则完成这些步骤后,您的聊天机器人将连接到MCP服务器,并准备好与FHIR数据库进行交互。
克隆仓库
git clone https://github.com/Kushagra-Dutta/Fhir-MCP.git
cd FHIR-MCP
安装依赖
pip install -r requirements.txt
# 或者使用uv
uv sync
配置环境变量
# 创建.env文件
echo "OPENAI_API_KEY=your_openai_api_key" > .env
运行FHIR MCP服务器
python fhir_server.py
获取Firely服务器许可证密钥
firelyserver-license.json使用Docker进行设置
# 拉取Firely服务器镜像
docker pull firely/server
# 运行容器
# 对于Windows CMD:
docker run -d -p 9090:4080 --name firely.server -v %CD%/firelyserver-license.json:/app/firelyserver-license.json firely/server
# 对于PowerShell或macOS/Linux:
docker run -d -p 9090:4080 --name firely.server -v ${PWD}/firelyserver-license.json:/app/firelyserver-license.json firely/server
# 验证容器是否正在运行
docker ps
加载测试数据
完成这些步骤后,您将拥有一个可在 http://localhost:9090 访问的测试数据库。
您可以通过分叉仓库或使用Docker来搭建MCP聊天机器人客户端。该聊天机器人将作为与FHIR服务器交互的前端界面。
获取聊天机器人设置
# 克隆仓库
git clone https://github.com/cgoinglove/mcp-client-chatbot.git
cd mcp-client-chatbot
安装PNPM(如果未安装)
npm install -g pnpm
选择设置方法
# 安装依赖
pnpm i
# 配置环境变量
# 编辑.env文件,添加您的API密钥(在pnpm i后自动创建)
# 启动包括PostgreSQL在内的所有服务
pnpm docker-compose:up
# 安装依赖
pnpm i
# 设置环境变量
pnpm initial:env
# 启动PostgreSQL(如果已经运行则跳过)
pnpm docker:pg
# 运行数据库迁移
pnpm db:migrate
# 启动开发服务器
pnpm dev
# 可选:构建并启动以进行类似生产环境的测试
pnpm build:local && pnpm start
配置环境变量
创建或编辑 .env 文件,添加所需的API密钥:
# LLM提供商API密钥(添加您计划使用的密钥)
OPENAI_API_KEY=****
GOOGLE_GENERATIVE_AI_API_KEY=****
ANTHROPIC_API_KEY=****
XAI_API_KEY=****
OPENROUTER_API_KEY=****
OLLAMA_BASE_URL=http://localhost:11434/api
# 认证配置
BETTER_AUTH_SECRET=**** # 使用:npx @better-auth/cli@latest secret生成
BETTER_AUTH_URL= # 可选:您访问应用的URL
# 数据库配置
POSTGRES_URL=postgres://your_username:your_password@localhost:5432/your_database_name
# MCP配置
FILE_BASED_MCP_CONFIG=false
# 可选的OAuth设置(用于Google/GitHub登录)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
将MCP服务器连接到聊天机器人
.chatbot-config.json 配置配置系统提示
src/app/prompts.ts 文件system_prompt.txt 中的自定义提示替换默认系统提示export const defaultSystemPrompt = `您是一个强大的智能AI编码助手。
您可以使用一组工具来回答用户的问题。
1. 对话要专业且友好。
2. 用第二人称称呼用户,用第一人称称呼自己。
3. 以Markdown格式格式化您的回复。
4. 绝不撒谎或编造信息。
遵循以下关于工具调用的规则:
1. 始终严格按照工具调用模式执行。
2. 绝不调用未明确提供的工具。
3. 仅在必要时调用工具。
4. 在调用每个工具之前,先向用户解释调用原因。
进行代码更改时:
1. 添加所有必要的导入语句和依赖项。
2. 除非用户要求,否则绝不向用户输出代码。
3. 使用适当的代码编辑工具进行实现。
`;
:定义AI的交互方式:指定使用工具的规则:设置代码修改的准则完成这些步骤后,您的聊天机器人将连接到MCP服务器,并准备好与FHIR数据库进行交互。
from fhir_tools import UniversalFhirMcpServer
# 初始化服务器
fhir_server = UniversalFhirMcpServer()
await fhir_server.initialize()
# 测试服务器连接
result = await fhir_server.test_server_connectivity("firely_local")
print(result)
# 切换到不同服务器
await fhir_server.switch_server("hapi_r4")
# 搜索患者
search_criteria = {
"family": "Smith",
"given": "John",
"birthdate": "1990-01-01"
}
patients = await fhir_server.find_patient(search_criteria)
# 获取全面的患者信息
patient_info = await fhir_server.get_comprehensive_patient_info("patient-123")
# 获取特定数据类型
conditions = await fhir_server.get_patient_conditions("patient-123")
medications = await fhir_server.get_patient_medications("patient-123")
vital_signs = await fhir_server.get_vital_signs("patient-123")
lab_results = await fhir_server.get_lab_results("patient-123")
# 从自由文本中提取临床关键词
clinical_note = "45岁女性,患有HER2阳性浸润性导管癌,III A期"
keywords = await fhir_server.extract_clinical_keywords(clinical_note)
# 将临床术语映射到FHIR代码
clinical_data = {
"conditions": ["乳腺癌", "糖尿病"],
"age": 45,
"gender": "女性"
}
fhir_codes = await fhir_server.map_to_fhir_codes_fast(clinical_data)
# 查找具有相似临床特征的患者
criteria = {
"age": 45,
"gender": "女性",
"conditions": ["乳腺癌"]
}
similar_patients = await fhir_server.find_similar_patients_simple(criteria)
FHIR服务器可用作MCP服务器,与AI助手集成:
{
"mcpServers": {
"fhir-server": {
"command": "python",
"args": ["fhir_server.py"],
"env": {
"OPENAI_API_KEY": "your-key-here"
}
}
}
}
graph TD
A[FHIR Server] --> B[Universal FHIR MCP Server]
B --> C[FHIR Tools Library]
C --> D[Multiple FHIR Servers]
C --> E[OpenAI Integration]
C --> F[Caching Layer]
D --> G[Firely Local]
D --> H[HAPI R4]
D --> I[Epic Systems]
D --> J[Cerner]
E --> K[Clinical Text Analysis]
E --> L[Code Mapping]
E --> M[Patient Matching]
系统维护了一个全面的FHIR服务器注册表:
http://localhost:9090) - 本地开发服务器http://hapi.fhir.org/baseR4) - 公共测试服务器系统支持在 fhir_tools.py 中配置多个FHIR服务器:
servers = {
"firely_local": {
"name": "Firely Server Local",
"base_url": "http://localhost:9090",
"version": "R4",
"vendor": "Firely",
"auth_type": "none"
},
"hapi_r4": {
"name": "HAPI FHIR R4 Public",
"base_url": "http://hapi.fhir.org/baseR4",
"version": "R4",
"vendor": "HAPI",
"auth_type": "none"
}
}
# 必需
OPENAI_API_KEY=your_openai_api_key
# 可选
FHIR_SERVER_URL=http://localhost:9090
FHIR_SERVER_AUTH_TOKEN=your_auth_token
switch_server(server_name) - 在FHIR服务器之间切换test_server_connectivity(server_name) - 测试服务器连接find_patient(search_criteria) - 搜索患者get_comprehensive_patient_info(patient_id) - 获取完整的患者数据get_patient_observations(patient_id) - 获取患者观察结果get_patient_conditions(patient_id) - 获取患者病情get_patient_medications(patient_id) - 获取患者药物信息get_vital_signs(patient_id) - 获取生命体征get_lab_results(patient_id) - 获取实验室结果get_patient_encounters(patient_id) - 获取患者就诊记录get_patient_allergies(patient_id) - 获取患者过敏信息get_patient_procedures(patient_id) - 获取患者手术记录extract_clinical_keywords(text) - 从文本中提取临床信息map_to_fhir_codes_fast(clinical_data) - 将术语映射到FHIR代码find_similar_patients_simple(criteria) - 查找相似患者extract_condition_codes_from_fhir() - 提取所有条件代码list_available_servers() - 列出所有配置的服务器get_server_registry() - 获取完整的服务器注册表diagnose_fhir_server(server_name) - 诊断服务器功能clear_condition_cache() - 清除条件代码缓存get_condition_cache_stats() - 获取缓存性能统计信息MCP(模型上下文协议)检查器是一个强大的开发和测试工具,可帮助调试和验证FHIR服务器交互。它提供了对服务器行为和API响应的实时检查。
# 在特定文件上运行MCP检查器
mcp dev fhir_server.py
# 这将:
# 1. 以开发模式启动检查器
# 2. 监控所有FHIR服务器交互
# 3. 将详细信息记录到logs/mcp_dev_inspector.log
检查器将详细日志写入:
logs/mcp_dev_inspector.log
该工具集可支持自动化医院参与平台:
患者护理协调
临床决策支持
资源优化
质量改进
# 运行基本连接测试
python -c "
import asyncio
from fhir_tools import UniversalFhirMcpServer
async def test():
server = UniversalFhirMcpServer()
await server.initialize()
result = await server.test_server_connectivity('firely_local')
print(result)
asyncio.run(test())
"
# 全面的服务器诊断
diagnostics = await fhir_server.diagnose_fhir_server("firely_local")
print(diagnostics)
系统提供全面的日志记录:
import logging
# 配置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# 日志自动写入logs/mcp_dev_inspector.log
# 以交互式聊天界面模式运行
python fhir_timeline_agent.py
# 以演示模式运行,使用示例查询
python fhir_timeline_agent.py --demo
• "45岁男性,患有胰腺癌"
• "62岁女性,患有HER2阳性乳腺癌"
• "58岁男性,患有IIIA期肺腺癌"
查询处理
FHIR代码映射
相似患者搜索
数据聚合
时间线生成
代理生成丰富的格式化输出,包括:
代理硬编码使用:
http://localhost:9090).env 文件中设置)openai>=1.86.0
rich>=13.7.0
python-dotenv>=1.0.0
aiohttp>=3.8.0
代理包括强大的错误处理机制,用于处理:
每个错误都会显示有用的解决建议。
系统采用异步操作,通过非阻塞I/O实现高性能数据访问。在 fhir_tools.py 中,许多函数使用 async 和 await 关键字,确保在等待I/O操作时不会阻塞其他任务。例如,在服务器连接测试和数据检索过程中,异步操作可以显著提高系统的响应速度和吞吐量。
为了提高性能,系统实现了智能缓存机制。缓存条件代码和频繁访问的数据,减少了对FHIR服务器的重复请求。在 fhir_tools.py 中,有专门的函数用于管理缓存,如 clear_condition_cache() 和 get_condition_cache_stats(),可以方便地清除缓存和查看缓存性能统计信息。
系统通过 UniversalFhirMcpServer 类提供了一个通用接口,可连接多个FHIR服务器。该类实现了服务器管理、连接测试、切换服务器等功能。在 fhir_tools.py 中,服务器配置信息存储在 servers 字典中,通过标准化的API实现了供应商无关的访问。
系统集成了OpenAI,用于临床文本分析、代码映射和患者匹配。在 fhir_tools.py 中,通过调用OpenAI的API,从自由文本中提取临床关键词和概念,并将临床术语映射到标准化FHIR代码。同时,利用OpenAI的能力进行相似患者匹配和预测分析。
本项目采用MIT许可证 - 详情请参阅 LICENSE 文件。
如果您需要支持或有任何问题:
为医疗互操作性和改善患者护理而精心打造 ❤️