项目简介

'MCP FHIR Patient Index' 是一个专注于患者数据管理的后端应用。它实现了患者主索引(Master Patient Index, MPI)的核心功能,允许存储和管理患者的详细信息。该项目不仅提供了符合FHIR R4(Fast Healthcare Interoperability Resources)标准的API接口,还深度集成了Model Context Protocol (MCP) 服务器,旨在为大型语言模型(LLM)客户端提供标准化的上下文信息访问和功能调用能力。

主要功能点

  • 内置MCP服务器: 以标准化的JSON-RPC协议,通过HTTP或Stdio向LLM客户端提供患者数据和功能。
  • FHIR API支持: 提供符合FHIR R4规范的API,允许外部系统对患者资源进行创建、读取、更新和删除(CRUD)操作。
  • 患者记录管理: 管理患者的基本人口统计信息、联系方式、地址、以及重要的身份识别号码等。
  • 患者关联: 支持建立患者记录间的关联关系,如“拥有相同身份”。
  • 数据快照: 能够为患者记录及其关联数据创建快照,便于版本管理和审计。
  • 用户界面 (UI): 提供一个基础的Web界面,便于人工管理患者信息。

安装步骤

该项目推荐使用Docker进行快速部署和运行。

  1. 确保Docker已运行: 在您的系统上安装并启动Docker Desktop或Docker Engine。
  2. 创建Rails主密钥 (如果首次运行): 在项目根目录下执行 'bin/rails credentials:edit'。您无需进行任何编辑,直接退出编辑器即可自动创建 'config/master.key' 文件。这个密钥对于应用程序的运行至关重要。
  3. 构建Docker镜像: 在项目根目录下执行以下命令构建Docker镜像:
    docker build -t mcp_fhir_patient_index .
  4. 运行Docker容器: 执行以下命令启动Docker容器。请注意,这里的端口映射假定您希望通过宿主机的'3000'端口访问MCP服务,并且需要将'<config/master.key中的值>'替换为上一步骤中生成的实际密钥。
    docker run -d -p 3000:3000 -e RAILS_MASTER_KEY=<config/master.key中的值> --name mcp_fhir_patient_index_runtime mcp_fhir_patient_index
    • '-d': 后台运行容器。
    • '-p 3000:3000': 将容器内部的 '3000' 端口映射到宿主机的 '3000' 端口。
    • '-e RAILS_MASTER_KEY=<值>': 设置Rails主密钥环境变量。
    • '--name mcp_fhir_patient_index_runtime': 为容器指定一个名称。
    • 'mcp_fhir_patient_index': 使用您之前构建的镜像名称。

服务器配置 (MCP客户端使用)

MCP服务器在Docker容器内部的 '3000' 端口上运行,并在 'http://localhost:3000/mcp/v20250618' 路径提供Streamable HTTP传输协议服务。MCP客户端可以按照以下配置连接到此服务器:

{
  "serverName": "mcp_fhir_patient_index",
  "command": "docker",
  "args": [
    "run",
    "--rm",
    "--network", "host",
    "-p", "3000:3000",
    "-e", "RAILS_MASTER_KEY=<请替换为实际的Rails主密钥>",
    "mcp_fhir_patient_index"
  ],
  "transport": "streamable_http",
  "baseUrl": "http://localhost:3000/mcp/v20250618"
}

参数说明:

  • 'serverName': 服务器的标识名称,此处为 'mcp_fhir_patient_index'。
  • 'command': 启动MCP服务器所使用的命令,这里是 'docker'。如果MCP客户端需要自行启动服务器进程,它会执行此命令。
  • 'args': 传递给 'command' 的参数列表。这些参数用于启动 'mcp_fhir_patient_index' Docker容器,并确保它能在宿主机的网络中通过'3000'端口访问。
    • '--rm': 容器停止后自动删除。
    • '--network host': 允许容器共享宿主机的网络命名空间,方便通过 'localhost' 访问。
    • '-p 3000:3000': 将容器内部的 '3000' 端口映射到宿主机的 '3000' 端口。
    • '-e RAILS_MASTER_KEY=<请替换为实际的Rails主密钥>': 设置Rails应用程序所需的主密钥。
    • 'mcp_fhir_patient_index': 要启动的Docker镜像的名称。
  • 'transport': 客户端与服务器通信所使用的传输协议。此处配置为 'streamable_http'。
  • 'baseUrl': 当使用 'streamable_http' 传输协议时,MCP服务器的HTTP接口地址。

基本使用方法

  1. 启动服务器: 按照“安装步骤”中的说明运行Docker容器,确保MCP服务器正在监听 'http://localhost:3000/mcp/v20250618'。
  2. 连接MCP客户端: 使用上述“服务器配置”信息,在您的MCP客户端应用中建立与服务器的连接。
  3. 获取服务器能力: 连接后,LLM客户端可以发送标准的MCP 'initialize' 请求,以获取服务器支持的协议版本和声明的能力(如可用的资源)。例如,一个 'initialize' 请求可能看起来像:
    {
      "jsonrpc": "2.0",
      "id": "init-1",
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-06-18",
        "capabilities": {},
        "clientInfo": { "name": "MyLLMClient", "version": "1.0" }
      }
    }
  4. 访问MCP资源:
    • 获取服务器信息: 发送 'resources/read' 请求,URI为 'master-patient-index://info',以获取关于MCP服务器的简介。
    • 获取所有患者摘要: 发送 'resources/read' 请求,URI为 'master-patient-index://all',以获取所有患者记录的纯文本摘要列表。
    • 读取特定患者记录: 发送 'resources/read' 请求,URI为 'master-patient-index://patientrecord/{患者UUID}',其中 '{患者UUID}' 是患者的唯一标识符,以获取该患者的详细纯文本信息。

(请注意:目前该MCP服务器主要提供了资源访问能力,尚未实现可供LLM调用的工具和Prompt模板。)

信息

分类

商业系统