DICOM MCP Server

DICOM MCP Server

支持人工智能助手查询和分析来自 DICOM 服务器的医学影像元数据,包括患者信息、研究、序列和实例,以及从封装的 PDF 文档中提取文本。

Category
访问服务器

README

dicom-mcp: DICOM 模型上下文协议服务器

此仓库是博客文章的一部分: Agentic Healthcare LLMs

概述

用于 DICOM (医学数字成像和通信) 交互的模型上下文协议服务器。此服务器提供查询和与 DICOM 服务器交互的工具,使大型语言模型能够访问和分析医学影像元数据。

dicom-mcp 允许 AI 助手使用标准 DICOM 网络协议从 DICOM 服务器查询患者信息、研究、序列和实例。它还支持从 DICOM 格式存储的封装 PDF 文档中提取文本,从而可以分析临床报告。它基于 pynetdicom 构建,并遵循模型上下文协议规范。

工具

  1. list_dicom_nodes

    • 列出所有配置的 DICOM 节点和调用 AE 标题
    • 输入: 无
    • 返回: 当前节点、可用节点、当前调用 AE 标题和可用调用 AE 标题
  2. switch_dicom_node

    • 切换到不同的配置 DICOM 节点
    • 输入:
      • node_name (字符串): 要切换到的节点的名称
    • 返回: 成功消息
  3. switch_calling_aet

    • 切换到不同的配置调用 AE 标题
    • 输入:
      • aet_name (字符串): 要切换到的调用 AE 标题的名称
    • 返回: 成功消息
  4. verify_connection

    • 使用 C-ECHO 测试与配置的 DICOM 节点的连接
    • 输入: 无
    • 返回: 带有详细信息的成功或失败消息
  5. query_patients

    • 搜索符合指定条件的患者
    • 输入:
      • name_pattern (字符串, 可选): 患者姓名模式 (可以包含通配符)
      • patient_id (字符串, 可选): 患者 ID
      • birth_date (字符串, 可选): 患者出生日期 (YYYYMMDD)
      • attribute_preset (字符串, 可选): 预设的详细程度 (minimal, standard, extended)
      • additional_attributes (字符串数组, 可选): 要包含的其他 DICOM 属性
      • exclude_attributes (字符串数组, 可选): 要排除的 DICOM 属性
    • 返回: 匹配的患者记录数组
  6. query_studies

    • 搜索符合指定条件的研究
    • 输入:
      • patient_id (字符串, 可选): 患者 ID
      • study_date (字符串, 可选): 研究日期或范围 (YYYYMMDD 或 YYYYMMDD-YYYYMMDD)
      • modality_in_study (字符串, 可选): 研究中的模式
      • study_description (字符串, 可选): 研究描述 (可以包含通配符)
      • accession_number (字符串, 可选): 访问号
      • study_instance_uid (字符串, 可选): 研究实例 UID
      • attribute_preset (字符串, 可选): 预设的详细程度
      • additional_attributes (字符串数组, 可选): 要包含的其他 DICOM 属性
      • exclude_attributes (字符串数组, 可选): 要排除的 DICOM 属性
    • 返回: 匹配的研究记录数组
  7. query_series

    • 搜索研究中的序列
    • 输入:
      • study_instance_uid (字符串): 研究实例 UID (必需)
      • modality (字符串, 可选): 模式 (例如, "CT", "MR")
      • series_number (字符串, 可选): 序列号
      • series_description (字符串, 可选): 序列描述
      • series_instance_uid (字符串, 可选): 序列实例 UID
      • attribute_preset (字符串, 可选): 预设的详细程度
      • additional_attributes (字符串数组, 可选): 要包含的其他 DICOM 属性
      • exclude_attributes (字符串数组, 可选): 要排除的 DICOM 属性
    • 返回: 匹配的序列记录数组
  8. query_instances

    • 搜索序列中的实例
    • 输入:
      • series_instance_uid (字符串): 序列实例 UID (必需)
      • instance_number (字符串, 可选): 实例号
      • sop_instance_uid (字符串, 可选): SOP 实例 UID
      • attribute_preset (字符串, 可选): 预设的详细程度
      • additional_attributes (字符串数组, 可选): 要包含的其他 DICOM 属性
      • exclude_attributes (字符串数组, 可选): 要排除的 DICOM 属性
    • 返回: 匹配的实例记录数组
  9. get_attribute_presets

    • 列出可用于查询的属性预设
    • 输入: 无
    • 返回: 按级别划分的可用预设及其属性的字典
  10. retrieve_instance

    • 检索特定的 DICOM 实例并将其保存到本地文件系统
    • 输入:
      • study_instance_uid (字符串): 研究实例 UID
      • series_instance_uid (字符串): 序列实例 UID
      • sop_instance_uid (字符串): SOP 实例 UID
      • output_directory (字符串, 可选): 保存检索到的实例的目录 (默认: "./retrieved_files")
    • 返回: 包含有关检索操作信息的字典
  11. extract_pdf_text_from_dicom

    • 检索包含封装 PDF 的 DICOM 实例并提取其文本内容
    • 输入:
      • study_instance_uid (字符串): 研究实例 UID
      • series_instance_uid (字符串): 序列实例 UID
      • sop_instance_uid (字符串): SOP 实例 UID
    • 返回: 包含提取的文本信息和状态的字典

安装

前提条件

  • Python 3.12 或更高版本
  • 要连接的 DICOM 服务器 (例如, Orthanc, dcm4chee 等)

使用 pip

通过 pip 安装:

pip install dicom-mcp

配置

dicom-mcp 需要一个 YAML 配置文件,用于定义 DICOM 节点和调用 AE 标题。创建一个具有以下结构的配置文件:

# DICOM 节点配置
nodes:
  orthanc:
    host: "localhost"
    port: 4242
    ae_title: "ORTHANC"
    description: "本地 Orthanc DICOM 服务器"
  
  clinical:
    host: "pacs.hospital.org"
    port: 11112
    ae_title: "CLIN_PACS"
    description: "临床 PACS 服务器"

# 本地调用 AE 标题
calling_aets:
  default:
    ae_title: "MCPSCU"
    description: "默认调用 AE 标题"
  
  modality:
    ae_title: "MODALITY"
    description: "模拟模式"

# 当前选择的节点
current_node: "orthanc"

# 当前选择的调用 AE 标题
current_calling_aet: "default"

用法

命令行

使用脚本入口点运行服务器:

dicom-mcp /path/to/configuration.yaml

如果使用 uv:

uv run dicom-mcp /path/to/configuration.yaml

使用 Claude Desktop 配置

将其添加到您的 claude_desktop_config.json:

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

与 Zed 一起使用

添加到您的 Zed settings.json:

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

示例查询

列出可用的 DICOM 节点

list_dicom_nodes()

切换到不同的节点

switch_dicom_node(node_name="clinical")

切换到不同的调用 AE 标题

switch_calling_aet(aet_name="modality")

验证连接

verify_connection()

搜索患者

# 按姓名模式搜索 (使用通配符)
patients = query_patients(name_pattern="SMITH*")

# 按患者 ID 搜索
patients = query_patients(patient_id="12345678")

# 获取详细信息
patients = query_patients(patient_id="12345678", attribute_preset="extended")

搜索研究

# 查找患者的所有研究
studies = query_studies(patient_id="12345678")

# 查找日期范围内的研究
studies = query_studies(study_date="20230101-20231231")

# 按模式查找研究
studies = query_studies(modality_in_study="CT")

搜索研究中的序列

# 查找研究中的所有序列
series = query_series(study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1")

# 按模式和描述查找序列
series = query_series(
    study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1",
    modality="CT",
    series_description="CHEST*"
)

搜索序列中的实例

# 查找序列中的所有实例
instances = query_instances(series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2")

# 按编号查找特定实例
instances = query_instances(
    series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2",
    instance_number="1"
)

检索 DICOM 实例

# 检索特定实例
result = retrieve_instance(
    study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1",
    series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2",
    sop_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.3",
    output_directory="./dicom_files"
)

从 DICOM 封装的 PDF 中提取文本

# 从封装的 PDF 中提取文本
result = extract_pdf_text_from_dicom(
    study_instance_uid="1.2.840.10008.5.1.4.1.1.104.1.1",
    series_instance_uid="1.2.840.10008.5.1.4.1.1.104.1.2",
    sop_instance_uid="1.2.840.10008.5.1.4.1.1.104.1.3"
)

调试

您可以使用 MCP 检查器来调试服务器:

npx @modelcontextprotocol/inspector uv --directory /path/to/dicom-mcp run dicom-mcp /path/to/configuration.yaml

开发

设置开发环境

  1. 克隆存储库:

    git clone https://github.com/yourusername/dicom-mcp.git
    cd dicom-mcp
    
  2. 创建一个虚拟环境:

    python -m venv .venv
    source .venv/bin/activate  # 在 Windows 上: .venv\Scripts\activate
    
  3. 安装依赖项:

    pip install -e .
    

运行测试

测试需要运行 Orthanc 服务器。您可以使用 Docker 启动一个:

cd tests
docker-compose up -d

然后运行测试:

pytest tests/test_dicom_mcp.py

要测试 PDF 提取功能:

pytest tests/test_dicom_pdf.py

项目结构

  • src/dicom_mcp/: 主包
    • __init__.py: 包初始化
    • __main__.py: 入口点
    • server.py: MCP 服务器实现
    • dicom_client.py: DICOM 客户端实现
    • attributes.py: DICOM 属性预设
    • config.py: 使用 Pydantic 进行配置管理

许可证

此项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。

鸣谢

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选