项目简介

DICOM MCP Server 是一个实现了 Model Context Protocol (MCP) 的服务器,专注于医学影像领域。它允许大型语言模型(LLM)通过标准化的 MCP 协议,安全、高效地访问和查询 DICOM (医学数字成像和通信) 服务器中的医学影像数据和元数据。此服务器提供了一系列工具,使 LLM 能够理解和利用医学影像信息,从而在医疗 AI 应用中发挥更大的作用。

主要功能点

  • DICOM 节点管理: 支持配置和管理多个 DICOM 服务器节点,允许 LLM 客户端切换连接不同的 DICOM 资源。
  • 调用 AE 标题管理: 支持配置和切换不同的 DICOM 调用应用实体标题 (Calling AE Title),以适应不同的 DICOM 通信场景。
  • 连接验证: 提供工具验证与配置的 DICOM 节点的连接性,确保服务可用。
  • 患者信息查询: 允许 LLM 客户端根据多种条件(如姓名、ID、出生日期等)查询患者信息。
  • 研究信息查询: 支持根据患者 ID、研究日期、影像模态等条件查询医学研究 (Study) 信息。
  • 序列信息查询: 支持在特定研究下,根据模态、序列号等条件查询影像序列 (Series) 信息。
  • 实例信息查询: 支持在特定序列下,根据实例号等条件查询影像实例 (Instance) 信息。
  • 属性预设: 提供多种预设的 DICOM 属性级别(minimal, standard, extended),方便用户控制查询结果的详细程度。
  • 自定义属性: 允许用户在查询时指定额外的 DICOM 属性,或排除不需要的属性,以定制化查询结果。

安装步骤

  1. 环境准备: 确保已安装 Python 3.12 或更高版本,并可以访问目标 DICOM 服务器。
  2. 安装 dicom-mcp: 使用 pip 包管理器进行安装:
    pip install dicom-mcp

服务器配置

DICOM MCP Server 需要一个 YAML 配置文件来定义 DICOM 节点和调用 AE 标题等信息。以下是一个配置示例,您需要根据您的 DICOM 服务器环境修改配置文件路径。

MCP 客户端配置 (JSON 格式)

为了让 MCP 客户端(例如 Claude Desktop, Zed 等)连接到 DICOM MCP Server,您需要在客户端的配置文件中添加服务器配置信息。以下是针对不同客户端的配置示例:

Claude Desktop 配置示例 (claude_desktop_config.json):

"mcpServers": {
  "dicom": {
    "command": "uv",
    "args": ["--directory", "/path/to/dicom-mcp", "run", "dicom-mcp", "/path/to/configuration.yaml"]
  }
}

Zed 配置示例 (settings.json):

"context_servers": [
  "dicom-mcp": {
    "command": {
      "path": "uv",
      "args": ["--directory", "/path/to/dicom-mcp", "run", "dicom-mcp", "/path/to/configuration.yaml"]
    }
  }
],

配置参数说明:

  • '"server name":' 您可以自定义服务器名称,例如 "dicom"。
  • '"command":' 启动 DICOM MCP Server 的命令,通常是您安装 Python 包后的可执行脚本 'dicom-mcp'。
  • '"args":' 传递给 'dicom-mcp' 命令的参数列表:
    • '"--directory", "/path/to/dicom-mcp"': 如果您的配置文件不在当前工作目录,需要指定 dicom-mcp 包所在的目录。通常在安装后可以省略此参数。
    • '"run", "dicom-mcp"': 固定参数,用于运行 dicom-mcp 服务。
    • '"/path/to/configuration.yaml"': 请务必替换为您的实际配置文件路径,指向您创建的 YAML 配置文件。

YAML 配置文件 (configuration.yaml 示例):

您需要创建类似以下的 YAML 配置文件,并根据您的 DICOM 服务器信息进行修改。

# DICOM 节点配置
nodes:
  orthanc: # 节点名称,可以自定义
    host: "localhost"      # DICOM 服务器主机名或 IP 地址
    port: 4242           # DICOM 服务器端口
    ae_title: "ORTHANC"    # DICOM 服务器应用实体标题 (AE Title)
    description: "本地 Orthanc DICOM 服务器" # 节点描述,可选

  clinical: # 另一个 DICOM 节点配置示例
    host: "pacs.hospital.org"
    port: 11112
    ae_title: "CLIN_PACS"
    description: "临床 PACS 服务器"

# 本地调用 AE 标题配置
calling_aets:
  default: # 调用 AE 标题名称,可以自定义
    ae_title: "MCPSCU"    # 本地 DICOM 客户端的应用实体标题 (AE Title)
    description: "默认调用 AE 标题" # 标题描述,可选

  modality: # 另一个调用 AE 标题配置示例
    ae_title: "MODALITY"
    description: "模拟模态设备"

# 当前选定的节点
current_node: "orthanc" # 默认使用的 DICOM 节点名称,需与 nodes 下的节点名称一致

# 当前选定的调用 AE 标题
current_calling_aet: "default" # 默认使用的调用 AE 标题名称,需与 calling_aets 下的标题名称一致

基本使用方法

启动 DICOM MCP Server 后,您可以使用 MCP 客户端(如 Claude Desktop, Zed 等)通过工具调用来与 DICOM 服务器进行交互。

常用工具调用示例:

  • 列出可用 DICOM 节点:

    list_dicom_nodes()
  • 切换 DICOM 节点:

    switch_dicom_node(node_name="clinical")
  • 查询患者信息 (按姓名模式):

    patients = query_patients(name_pattern="SMITH*")
  • 查询研究信息 (按患者 ID 和研究日期范围):

    studies = query_studies(patient_id="12345678", study_date="20230101-20231231")
  • 查询序列信息 (按研究 UID 和模态):

    series = query_series(study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1", modality="CT")
  • 查询实例信息 (按序列 UID):

    instances = query_instances(series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2")

更多工具和参数的详细信息,请参考仓库的 README 文档或工具的 docstring。

信息

分类

数据库与文件