该项目实现了一个完整的模型上下文协议(MCP)服务器,旨在无缝地与Medplum FHIR服务器交互。MCP服务器提供了一个标准化接口,使大型语言模型(LLMs)能够通过一系列全面的工具对各种FHIR资源执行创建、读取、更新和搜索(CRUDS)操作。这使得用户可以通过任何兼容MCP的客户端(如Claude Desktop、VS Code MCP扩展等)使用自然语言命令来管理存储在Medplum中的医疗数据。
服务器实现了完整的MCP协议规范,提供了33个全面的FHIR资源管理工具,这些工具可以被任何MCP客户端发现并执行。用户可以通过与利用MCP工具执行请求的LLM对话,直观地管理患者信息、从业者、组织、会诊、观察结果等。
🎉 MCP服务器实现完成! 🎉
已实现内容:
已准备好使用:
当前能力:
MCP服务器目前支持一套全面的33个工具,用于管理各种FHIR资源:
src/tools/patientUtils.tscreatePatient: 创建新的患者记录,包括人口统计学信息、标识符和联系方式。getPatientById: 通过唯一ID检索完整的患者详情。updatePatient: 修改现有患者的个人信息,包括人口统计学信息和联系方式。searchPatients: 根据姓名、出生日期、标识符或其他条件查找患者。src/tools/practitionerUtils.tscreatePractitioner: 注册新的医疗从业者及其专业详情。getPractitionerById: 通过唯一ID获取完整的从业者详情。updatePractitioner: 更新从业者的个人信息,包括资格和联系方式。searchPractitioners: 根据多个条件进行高级搜索从业者。src/tools/organizationUtils.tscreateOrganization: 添加新的医疗组织(医院、诊所、部门)。getOrganizationById: 通过唯一ID检索完整的组织详情。updateOrganization: 更新组织信息,包括联系方式和地址。searchOrganizations: 根据名称、类型或其他属性搜索组织。src/tools/encounterUtils.tscreateEncounter: 创建新的患者会诊(访问、预约、住院)。getEncounterById: 通过唯一ID检索完整的会诊详情。updateEncounter: 更新会诊信息,包括状态、类别和参与者。searchEncounters: 根据患者、从业者、日期、状态或类别搜索会诊。src/tools/observationUtils.tscreateObservation: 记录新的观察结果(实验室结果、生命体征、诊断发现)。getObservationById: 通过唯一ID检索完整的观察结果详情。updateObservation: 修改现有的观察结果,包括值、状态和解释。searchObservations: 根据患者、代码、日期或会诊搜索观察结果。src/tools/medicationRequestUtils.tscreateMedicationRequest: 创建新的药物请求(处方),包括剂量和说明。getMedicationRequestById: 通过唯一ID检索完整的药物请求详情。updateMedicationRequest: 更新处方信息,包括状态、剂量和说明。searchMedicationRequests: 根据患者、药物或开药者搜索药物请求。src/tools/medicationUtils.tscreateMedication: 创建新的药物资源,包括代码、名称和配方。getMedicationById: 通过唯一ID检索完整的药物详情。searchMedications: 根据代码、名称或成分搜索药物。src/tools/episodeOfCareUtils.tscreateEpisodeOfCare: 创建新的护理过程,用于管理患者随时间的护理。getEpisodeOfCareById: 通过唯一ID检索完整的护理过程详情。updateEpisodeOfCare: 更新护理过程信息,包括状态、期间和管理组织。searchEpisodesOfCare: 根据患者、状态或管理组织搜索护理过程。generalFhirSearch: 使用自定义参数对任何资源类型进行通用FHIR搜索,允许跨所有FHIR资源进行高级查询。每个工具都通过一个明确定义的JSON模式暴露给LLM,并且可以通过专用的测试工具(src/llm-test-harness.ts)调用,促进强大的测试和集成。
@medplum/core,@medplum/fhirtypesgpt-4o)dotenvnode-fetchmedplum-mcp/
├── src/ # 源代码
│ ├── config/ # Medplum客户端配置(medplumClient.ts)
│ ├── tools/ # FHIR资源实用函数(patientUtils.ts等)
│ ├── lib/ # 共享库(目前未使用)
│ ├── index.ts # 主应用程序入口点
│ ├── llm-test-harness.ts # 测试LLM工具调用的脚本
│ └── test-connection.ts # 基本Medplum连接测试的脚本
├── tests/ # 测试套件
│ └── integration/ # 工具的Jest集成测试
├── .eslintrc.js
├── .gitignore
├── .prettierrc.js
├── .prettierignore
├── package.json
├── tsconfig.json
└── README.md
先决条件:
package.json中的引擎特定要求;推荐使用LTS版本)http://localhost:8103/上的本地Docker化实例)安装:
git clone https://github.com/rkirkendall/medplum-mcp.git
cd medplum-mcp
npm install
环境变量:
在项目根目录中创建一个.env文件,包含您的特定Medplum服务器详细信息和API密钥:
MEDPLUM_BASE_URL=http://your-medplum-server-url/
MEDPLUM_CLIENT_ID=your_client_id
MEDPLUM_CLIENT_SECRET=your_client_secret
OPENAI_API_KEY=your_openai_api_key # 对于llm-test-harness.ts是必需的
测试您的MCP服务器最用户友好的方式是通过交互式聊天界面:
# 构建并运行聊天工具
npm run chat
# 或在开发模式下
npx ts-node src/llm-test-harness.ts
特性:
示例会话:
🏥 您:创建一个新的患者Jane Smith,出生于1985-03-20
🤖 助手:我将为Jane Smith创建一个新的患者记录...
🏥 您:查找所有名为Stevens的医生
🤖 助手:我找到了2位名字为Stevens的从业者...
参见CHAT_HARNESS_USAGE.md以获取详细的使用说明,以及IMPLEMENTATION_PLAN.md以获取开发细节。
npm start # 使用标准I/O传输运行MCP服务器
npm run dev # 开发模式,带有实时重新加载
# MCP Inspector(基于Web的工具测试)
npx @modelcontextprotocol/inspector node dist/index.js
# 遗留的OpenAI集成(已弃用)
npm run test:harness
集成测试使用Jest并与一个实时的Medplum实例交互(通过.env配置)。
要运行所有集成测试:
npx jest tests/integration
要运行特定的集成测试文件:
npx jest tests/integration/patient.integration.test.ts
npx jest tests/integration/practitioner.integration.test.ts
n
px jest tests/integration/organization.integration.test.ts
# 根据需要添加其他特定测试文件
本项目根据MIT许可证发布 - 详情请参阅LICENSE文件。