返回市场
开源ehr-mcp服务器

开源ehr-mcp服务器

作者:code24-nl2 星标更新:2025-09-09

项目介绍

openEHR MCP Server (PHP)

这是一个使用PHP 8.4编写的模型上下文协议(MCP)服务器,用于连接AI助手与openEHR REST API。

  • 支持如Claude Desktop和LibreChat.ai等MCP客户端
  • 提供模板、EHR、组合、原型和AQL工具
  • 可选引导提示帮助协调多步骤工作流程

参考:openEHR REST规范 — https://specifications.openehr.org/releases/ITS-REST/development/overview.html

注意:对于生产级EHR集成,请确保您的AI模型和部署符合组织的数据隐私和合规要求。

特性

  • PHP 8.4;符合PSR标准的代码库
  • 基于属性的MCP工具发现(通过https://github.com/php-mcp/server)
  • 生产和开发用的Docker镜像
  • 运输方式:可流式传输的HTTP和标准I/O
  • 使用Monolog进行结构化日志记录
  • 简单的环境驱动配置

可用的MCP元素

工具

CKM(临床知识管理器)

  • ckm_archetype_list — 列出CKM服务器中的原型
  • ckm_archetype_get — 根据CID标识符获取CKM原型

openEHR类型规范

  • openehr_type_specification_list — 使用名称模式(使用*通配符)和可选关键字(按类型规范内容过滤)列出捆绑的openEHR类型规范。返回类型、描述、目录和相对文件路径
  • openehr_type_specification_get — 根据相对文件路径或openEEHR类型名称检索openEHR类型规范(作为BMM JSON)。注意:这些是BMM类型定义,不是JSON Schema

模板定义

  • openehr_template_list — 列出模板(支持ADL 1.4/ADL2过滤)
  • openehr_template_get — 根据ID获取模板(格式:json|xml)
  • openehr_template_upload — 上传模板(格式:json|xml)
  • openehr_template_example_get — 获取模板示例组合(格式:json|flat|xml)

存储查询定义

  • openehr_stored_query_upload — 上传存储的AQL查询(可选版本)
  • openehr_stored_query_list — 列出存储的查询(名称过滤支持namespace::name
  • openehr_stored_query_get — 根据名称和版本获取存储查询定义

查询执行

  • openehr_query_adhoc — 执行AQL(支持偏移量/获取)
  • openehr_stored_query_execute — 根据名称/版本和参数执行存储的AQL

EHR管理

  • openehr_ehr_create — 创建EHR(可选主题id/命名空间)
  • openehr_ehr_get — 根据ehr_id获取EHR
  • openehr_ehr_get_by_subject — 根据主题id/命名空间获取EHR
  • openehr_ehr_status_get — 获取EHR的状态
  • openehr_ehr_contribution_create — 为EHR创建贡献
  • openehr_ehr_contribution_get — 获取EHR的贡献

组合管理

  • openehr_composition_create — 创建组合(格式:json|flat|xml)
  • openehr_composition_get — 根据UID获取组合(格式:json|flat|xml)
  • openehr_composition_update — 更新组合(使用If-Match与前一版本)
  • openehr_composition_delete — 删除组合(版本删除)
  • openehr_composition_revision_history — 获取组合修订历史

提示

可选提示,指导AI助手使用上述工具完成常见的openEHR和CKM工作流程。

  • vital_sign_capture — 捕获生命体征:获取选定模板的扁平JSON示例,填充值(使用UCUM单位),然后创建COMPOSITION。
  • patient_assessment — 一般临床评估:选择一个模板,可选地获取示例,然后记录观察结果作为COMPOSITION。
  • medication_review — 审查或更新药物列表:选择一个模板,可选地获取示例,然后提交药物更改作为COMPOSITION。
  • aql_query_runner — 编写并执行AQL查询(即时或存储)并管理存储查询。
  • template_management — 管理模板(列表/获取/上传)并获取示例组合。
  • ehr_management — 创建/查找EHR并检查EHR状态;可选地管理贡献。
  • composition_management — 创建、获取、更新、删除COMPOSITION;查看修订历史;在需要时获取模板示例。
  • ckm_archetype_explorer — 通过列表和获取定义(ADL/XML/Mindmap)来探索CKM原型(根据CID)。
  • openehr_type_specification_explorer — 发现并获取openEHR类型规范(作为BMM JSON)使用openehr_type_specification_listopenehr_type_specification_get

运输方式

  • stdio:适用于基于进程的MCP客户端
  • streamable-http(默认):端口8242上的HTTP服务器,MCP位于/mcp_openehr

启动选项:向server.php传递--transport=stdio--transport=streamable-http;如果跳过--transport,默认为streamable-http

使用Docker快速开始

前提条件

  • Docker和Docker Compose
  • Git
  1. 克隆
git clone https://github.com/code24-nl/openehr-mcp-server.git
cd openehr-mcp-server
  1. 运行MCP服务器(生产镜像)
cp .env.example .env
# 根据需要编辑.env(参见变量部分)
docker compose up -d mcp

服务器监听端口8242,使用流式HTTP传输。

或者,构建MCP服务器镜像并在Clause Desktop中运行(作为stdio)(参见下面的配置):

docker compose build mcp
  1. 可选:启动EHRbase堆栈以进行测试目的
docker compose --profile ehrbase up -d

EHRbase在http://localhost:8080。

开发

前提条件

  • Docker和Docker Compose
  1. 启动开发容器
docker compose --profile dev up -d mcp-dev
  1. 配置环境
cp .env.example .env
# 根据需要编辑.env(参见变量部分)
  1. 安装依赖项(在容器内)
docker compose exec mcp-dev composer install
  1. 运行MCP服务器(在容器内)
docker compose exec mcp-dev php server.php --transport=stdio
# 或者
docker compose exec mcp-dev php server.php --transport=streamable-http

环境变量

  • APP_ENV:应用环境(development/production)。默认:development
  • LOG_LEVEL:Monolog级别(debuginfowarningerror等)。默认:info
  • OPENEHR_API_BASE_URL:您的openEHR REST服务器的基础URL(例如,EHRbase:http://localhost:8080/ehrbase/rest/openehr)。这是如何在EHRbase和其他openEHR服务器之间切换的方法。
  • CKM_API_BASE_URL:openEHR CKM REST API的基础URL。默认:https://ckm.openehr.org/ckm/rest
  • HTTP_TIMEOUT:HTTP客户端超时时间(秒)。默认:2.0
  • HTTP_SSL_VERIFY:设置为false以禁用验证或提供CA捆绑包路径。默认:true

注意:默认情况下未配置授权头。如果您的openEHR服务器需要认证,请扩展server.php以向Guzzle添加Authorization头。

集成(Claude Desktop和LibreChat)

Claude Desktop mcpServers示例

标准I/O示例(使用Docker)

{
  "mcpServers": {
    "openehr": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--network=host",
        "-e", "OPENEHR_API_BASE_URL=http://localhost:8080/ehrbase/rest/openehr",
        "-e", "CKM_API_BASE_URL=https://ckm.openehr.org/ckm/rest",
        "code24-nl/openehr-mcp-server:latest",
        "php", "server.php", "--transport=stdio"
      ]
    }
  }
}

在LibreChat中使用流式HTTP

LibreChat.ai MCP示例

mcpServers:
    openehr-mcp-server:
        type: streamable-http
        url: http://host.docker.internal:8242/mcp_openehr

测试和质量保证

  • 单元测试:docker compose exec mcp-dev composer test(PHPUnit 12)
  • 覆盖测试:docker compose exec mcp-dev composer test:coverage
  • 静态分析:docker compose exec mcp-dev composer check:phpstan

项目结构

  • server.php:MCP服务器入口点
  • src/
    • Tools/:MCP工具(定义、EHR、组合、查询)
    • Prompts/:MCP提示
    • Helpers/:内部辅助程序(例如,内容类型和ADL映射)
    • Client/:内部API客户端
    • constants.php:加载环境变量和默认值
  • docker-compose.yml:服务(mcpmcp-dev,可选的ehrbase堆栈)
  • Dockerfile:多阶段构建(开发,生产)
  • tests/:PHPUnit和PHPStan配置和测试

致谢

本项目受到启发并感谢以下内容:

贡献

我们欢迎贡献!请阅读CONTRIBUTING.md以了解设置环境、编码风格、测试以及如何提出更改的指南。

参见CHANGELOG.md以了解重要变更,并在每次发布时更新它。

许可证

MIT许可证 — 详见LICENSE