返回市场
医普林-MCP

医普林-MCP

作者:rkirkendall12 星标更新:2025-06-10

项目介绍

Medplum MCP 服务器

🚀 项目描述

该项目实现了一个完整的模型上下文协议(MCP)服务器,旨在无缝地与Medplum FHIR服务器交互。MCP服务器提供了一个标准化接口,使大型语言模型(LLMs)能够通过一系列全面的工具对各种FHIR资源执行创建、读取、更新和搜索(CRUDS)操作。这使得用户可以通过任何兼容MCP的客户端(如Claude Desktop、VS Code MCP扩展等)使用自然语言命令来管理存储在Medplum中的医疗数据。

服务器实现了完整的MCP协议规范,提供了33个全面的FHIR资源管理工具,这些工具可以被任何MCP客户端发现并执行。用户可以通过与利用MCP工具执行请求的LLM对话,直观地管理患者信息、从业者、组织、会诊、观察结果等。

✨ 当前状态

🎉 MCP服务器实现完成! 🎉

已实现内容:

  • ✅ 核心FHIR资源管理工具(患者、从业者、组织、会诊、观察结果、药物等)
  • MCP服务器协议实现 - 完整的模型上下文协议服务器,采用标准I/O传输
  • ✅ 全面的工具模式以供LLM交互(33个FHIR工具)
  • 交互式聊天工具 - 带有自然语言界面的完整MCP客户端
  • ✅ 所有工具的Jest集成测试
  • ✅ Medplum FHIR服务器连接和认证
  • ✅ MCP Inspector测试和验证
  • ✅ Claude Desktop集成配置

已准备好使用:

  • 🔄 MCP服务器功能齐全,准备与MCP客户端集成
  • ✅ 所有33个FHIR工具均已正确注册并运行
  • 🔄 服务器成功与Medplum进行身份验证,并执行FHIR操作
  • 🔄 交互式聊天工具可用 - 使用自然语言测试所有工具
  • 🔄 已使用MCP Inspector进行测试 - 所有工具均可发现并执行
  • 🔄 提供了Claude Desktop配置,立即可用

当前能力:

  • 通过自然语言对FHIR资源执行完整的CRUD操作
  • 用于测试和开发的交互式聊天界面
  • 无缝集成到任何兼容MCP的客户端(如Claude Desktop、VS Code MCP扩展等)
  • 全面的错误处理和日志记录
  • 生产就绪的MCP协议实现

🌟 实现的功能

MCP服务器目前支持一套全面的33个工具,用于管理各种FHIR资源:

👥 患者管理(4个工具) - src/tools/patientUtils.ts

  • createPatient: 创建新的患者记录,包括人口统计学信息、标识符和联系方式。
  • getPatientById: 通过唯一ID检索完整的患者详情。
  • updatePatient: 修改现有患者的个人信息,包括人口统计学信息和联系方式。
  • searchPatients: 根据姓名、出生日期、标识符或其他条件查找患者。

👩‍⚕️ 从业者管理(5个工具) - src/tools/practitionerUtils.ts

  • createPractitioner: 注册新的医疗从业者及其专业详情。
  • getPractitionerById: 通过唯一ID获取完整的从业者详情。
  • updatePractitioner: 更新从业者的个人信息,包括资格和联系方式。
  • 通过名字或姓氏搜索从业者。
  • searchPractitioners: 根据多个条件进行高级搜索从业者。

🏥 组织管理(4个工具) - src/tools/organizationUtils.ts

  • createOrganization: 添加新的医疗组织(医院、诊所、部门)。
  • getOrganizationById: 通过唯一ID检索完整的组织详情。
  • updateOrganization: 更新组织信息,包括联系方式和地址。
  • searchOrganizations: 根据名称、类型或其他属性搜索组织。

🏥 会诊管理(4个工具) - src/tools/encounterUtils.ts

  • createEncounter: 创建新的患者会诊(访问、预约、住院)。
  • getEncounterById: 通过唯一ID检索完整的会诊详情。
  • updateEncounter: 更新会诊信息,包括状态、类别和参与者。
  • searchEncounters: 根据患者、从业者、日期、状态或类别搜索会诊。

🔬 观察结果管理(4个工具) - src/tools/observationUtils.ts

  • createObservation: 记录新的观察结果(实验室结果、生命体征、诊断发现)。
  • getObservationById: 通过唯一ID检索完整的观察结果详情。
  • updateObservation: 修改现有的观察结果,包括值、状态和解释。
  • searchObservations: 根据患者、代码、日期或会诊搜索观察结果。

💊 药物请求管理(4个工具) - src/tools/medicationRequestUtils.ts

  • createMedicationRequest: 创建新的药物请求(处方),包括剂量和说明。
  • getMedicationRequestById: 通过唯一ID检索完整的药物请求详情。
  • updateMedicationRequest: 更新处方信息,包括状态、剂量和说明。
  • searchMedicationRequests: 根据患者、药物或开药者搜索药物请求。

💉 药物管理(3个工具) - src/tools/medicationUtils.ts

  • createMedication: 创建新的药物资源,包括代码、名称和配方。
  • getMedicationById: 通过唯一ID检索完整的药物详情。
  • searchMedications: 根据代码、名称或成分搜索药物。

📋 护理过程管理(4个工具) - src/tools/episodeOfCareUtils.ts

  • createEpisodeOfCare: 创建新的护理过程,用于管理患者随时间的护理。
  • getEpisodeOfCareById: 通过唯一ID检索完整的护理过程详情。
  • updateEpisodeOfCare: 更新护理过程信息,包括状态、期间和管理组织。
  • searchEpisodesOfCare: 根据患者、状态或管理组织搜索护理过程。

🔍 通用FHIR操作(1个工具)

  • generalFhirSearch: 使用自定义参数对任何资源类型进行通用FHIR搜索,允许跨所有FHIR资源进行高级查询。

每个工具都通过一个明确定义的JSON模式暴露给LLM,并且可以通过专用的测试工具(src/llm-test-harness.ts)调用,促进强大的测试和集成。

🛠️ 技术栈

  • 运行时:Node.js
  • 语言:TypeScript
  • FHIR服务器交互@medplum/core@medplum/fhirtypes
  • LLM集成:OpenAI API(具体为测试工具中的gpt-4o
  • 测试:Jest(用于集成测试),通过测试工具的手动端到端测试
  • 代码检查和格式化:ESLint,Prettier
  • 环境管理dotenv
  • HTTP客户端(用于Medplum SDK)node-fetch

📁 项目结构

medplum-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

⚙️ 设置和配置

  1. 先决条件

    • Node.js(参考package.json中的引擎特定要求;推荐使用LTS版本)
    • 运行中的Medplum服务器实例(例如,在http://localhost:8103/上的本地Docker化实例)
    • Medplum客户端凭据(客户端ID和客户端密钥)
  2. 安装

    git clone https://github.com/rkirkendall/medplum-mcp.git
    cd medplum-mcp
    npm install
    
  3. 环境变量: 在项目根目录中创建一个.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

特性:

  • 🗣️ 与所有33个FHIR工具进行自然语言交互
  • 🔧 自动工具发现和执行
  • 📋 内置帮助和示例
  • 🔄 会话上下文维护
  • ⚡ 实时工具执行和结果

示例会话:

🏥 您:创建一个新的患者Jane Smith,出生于1985-03-20
🤖 助手:我将为Jane Smith创建一个新的患者记录...

🏥 您:查找所有名为Stevens的医生
🤖 助手:我找到了2位名字为Stevens的从业者...

参见CHAT_HARNESS_USAGE.md以获取详细的使用说明,以及IMPLEMENTATION_PLAN.md以获取开发细节。

▶️ 直接运行MCP服务器

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文件。