关于 DICOMweb MCP Server
DICOMweb MCP Server 将 AI 助手连接到符合 DICOMweb 标准的档案,面向处理医学影像数据的用户和开发者。它支持从检索检查到查看图像帧、读取报告文本的操作。
主要功能
- 01搜索检查、序列和实例
- 02使用 DICOM 查询键筛选结果
- 03读取实例元数据
- 04提取结构化报告文本
- 05提取可搜索 PDF 报告文本
- 06将图像帧渲染为 JPEG 或 PNG
适用场景
- 01按患者或日期查找影像检查
- 02在不读取像素数据时检查 DICOM 属性
- 03读取结构化报告或可搜索 PDF 报告
- 04查看指定的 DICOM 图像帧
MCP 相关
它向 MCP 客户端提供工具,通过 QIDO-RS 搜索 DICOMweb 档案,并通过 WADO-RS 获取元数据、报告文本和渲染后的图像帧。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y dicomweb-mcp-serverDICOMWEB_HOSTBase URL of the DICOMweb server (used for both QIDO-RS and WADO-RS requests).DICOMWEB_AUTH密钥Authentication type: 'basic' or 'bearer'. Omit for unauthenticated access.DICOMWEB_USERUsername for Basic authentication. Required when DICOMWEB_AUTH=basic.DICOMWEB_PASS密钥Password for Basic authentication. Required when DICOMWEB_AUTH=basic.DICOMWEB_TOKEN密钥Bearer token for authentication. Required when DICOMWEB_AUTH=bearer.DICOMWEB_TIMEOUTFetch request timeout in milliseconds. Omit to disable timeout.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是 | 以空格分隔的 DICOM key=value 搜索筛选条件。键可以是 DICOM 关键字名称或 8 位十六进制标签(例如,PatientName=Doe* StudyDate=20200101-20201231 ModalitiesInStudy=CT 00100020=12345)。特殊键:fuzzymatching=true、limit=N、offset=N。传入空字符串可返回所有检查。 |
详细介绍
dicomweb-mcp-server
一个符合 Model Context Protocol (MCP) 的 MCP 服务,可向 AI 助手提供 DICOMweb 兼容的 DICOM 归档。任何支持 MCP 的客户端都可以通过自然语言搜索检查、序列和实例,查看元数据,读取结构化报告和封装的 PDF 报告,并渲染图像帧。
要求
- Node.js 20 或更高版本
- 正在运行且支持 QIDO-RS 和 WADO-RS 的 DICOMweb 服务(例如 orthanc)
DICOMweb 服务必须支持以下端点:
| 端点 | 服务 | 用途 |
|---|---|---|
GET /studies | QIDO-RS | 搜索检查 |
GET /studies/{study}/series | QIDO-RS | 搜索序列 |
GET /studies/{study}/series/{series}/instances | QIDO-RS | 搜索实例、搜索结构化报告、搜索封装的 PDF 报告 |
GET /studies/{study}/series/{series}/instances/{instance}/metadata | WADO-RS | 获取实例元数据、获取结构化报告文本、获取封装的 PDF 报告文本 |
GET /studies/{study}/series/{series}/instances/{instance}/frames/{frame}/rendered | WADO-RS | 渲染实例帧 |
安装
使用 npx(推荐——无需本地安装)
npx dicomweb-mcp-server
服务会从与脚本位于同一目录的 .env 文件中读取配置(见下方配置)。
全局安装
npm install -g dicomweb-mcp-server
dicomweb-mcp-server
配置
创建一个 .env 文件,填写 DICOMweb 服务的连接详情。将该文件放在运行服务的位置旁边(或放在你为 MCP 客户端配置的工作目录中)。
# Required
DICOMWEB_HOST=https://your-dicomweb-server/dicomweb
# Optional — authentication
DICOMWEB_AUTH=basic # basic | bearer
DICOMWEB_USER=username # required when DICOMWEB_AUTH=basic
DICOMWEB_PASS=password # required when DICOMWEB_AUTH=basic
DICOMWEB_TOKEN=your-token # required when DICOMWEB_AUTH=bearer
# Optional — request timeout (milliseconds)
DICOMWEB_TIMEOUT=30000
| 变量 | 必需 | 描述 |
|---|---|---|
DICOMWEB_HOST | 是 | DICOMweb 服务的基础 URL(用于 QIDO-RS 和 WADO-RS 请求) |
DICOMWEB_AUTH | 否 | 身份验证类型:basic 或 bearer |
DICOMWEB_USER | 有条件 | 用户名——当 DICOMWEB_AUTH=basic 时必需 |
DICOMWEB_PASS | 有条件 | 密码——当 DICOMWEB_AUTH=basic 时必需 |
DICOMWEB_TOKEN | 有条件 | Bearer 令牌——当 DICOMWEB_AUTH=bearer 时必需 |
DICOMWEB_TIMEOUT | 否 | 获取超时时间,单位为毫秒。省略则禁用。 |
MCP 客户端设置
Claude Desktop
将服务添加到 claude_desktop_config.json:
{
"mcpServers": {
"dicomweb": {
"command": "npx",
"args": ["-y", "dicomweb-mcp-server"],
"env": {
"DICOMWEB_HOST": "https://your-dicomweb-server/dicomweb"
}
}
}
}
你可以直接在 env 块中提供所有环境变量,无需使用 .env 文件。
VS Code(GitHub Copilot Agent Mode)
添加到 VS Code 的 settings.json 或工作区的 .vscode/mcp.json:
{
"servers": {
"dicomweb": {
"type": "stdio",
"command": "npx",
"args": ["-y", "dicomweb-mcp-server"],
"env": {
"DICOMWEB_HOST": "https://your-dicomweb-server/dicomweb"
}
}
}
}
Cursor
添加到项目根目录下的 .cursor/mcp.json,或全局配置文件 ~/.cursor/mcp.json:
{
"mcpServers": {
"dicomweb": {
"command": "npx",
"args": ["-y", "dicomweb-mcp-server"],
"env": {
"DICOMWEB_HOST": "https://your-dicomweb-server/dicomweb"
}
}
}
}
可用工具
find-studies
在配置的 DICOMweb 服务上搜索 DICOM 检查。结果按检查日期排序,最新的排在最前。
| 参数 | 类型 | 描述 |
|---|---|---|
query | string | 以空格分隔的 key=value 筛选字符串(见查询语法)。传入 "" 可返回所有检查。 |
提示词示例
- “查找患者 John Doe 的所有 CT 检查”
- “搜索 2024 年 1 月的检查”
find-series
在单个检查中搜索 DICOM 序列。结果按序列日期排序,最新的排在最前。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | 检查实例 UID——从 find-studies 获取 |
query | string | 以空格分隔的 key=value 筛选字符串。传入 "" 可返回所有序列。 |
find-instances
搜索单个序列中的 DICOM 实例。结果按 Instance Number 升序排列。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID — 从 find-studies 获取 |
seriesInstanceUid | string | Series Instance UID — 从 find-series 获取 |
query | string | 以空格分隔的 key=value 筛选字符串。传入 "" 可返回所有实例。 |
find-encapsulated-pdf-reports
通过查找 DOC 模态序列并按 Encapsulated PDF SOP Class UID(1.2.840.10008.5.1.4.1.1.104.1)筛选,查找研究中的所有 Encapsulated PDF 实例。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID — 从 find-studies 获取 |
提示词示例
- “查找研究 1.2.3.4 中的所有 PDF 报告”
- “此研究中是否有任何封装的 PDF 文档?”
get-encapsulated-pdf-report-text
检索 Encapsulated PDF DICOM 实例并提取其文本内容。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — 从 find-encapsulated-pdf-reports 获取 |
注意: 文本提取仅适用于可搜索(基于文本)的 PDF。完全由扫描页面图像组成且不含嵌入文本层的 PDF,提取出的文本很少或没有文本。在这些情况下,不会执行 OCR。
提示词示例
- “读取 SOP 实例 1.2.3.4.5 的 PDF 报告”
- “封装的 PDF 文档写了什么?”
find-structured-reports
通过查找 SR 模态序列并按已知的 SR SOP Class UID 筛选,查找研究中的所有结构化报告(SR)实例。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID — 从 find-studies 获取 |
get-structured-report-text
检索结构化报告实例并将其转换为便于阅读的文本。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — 从 find-structured-reports 获取 |
get-instance-metadata
检索单个实例的所有 DICOM 属性,并将其格式化为便于阅读的文本。不检索像素数据。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — 从 find-instances 获取 |
render-instance-frame
渲染 DICOM 实例中的指定帧,并以嵌入式图像(JPEG 或 PNG)形式返回。
| 参数 | 类型 | 描述 |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — 从 find-instances 获取 |
frame | integer | 从 1 开始计数的帧索引(对于单帧实例,使用 1) |
outputFormat | enum | image/jpeg 或 image/png |
提示词示例
- “将 SOP 实例 1.2.3.4.5 的第一帧显示为 JPEG”
查询语法
搜索工具接受的 query 参数是以空格分隔的 key=value 键值对列表。
键格式
| 格式 | 示例 |
|---|---|
| DICOM 关键字名称 | PatientName=DOE* |
| 8 位十六进制标签 | 00100020=12345 |
特殊键
| 键 | 描述 |
|---|---|
limit=N | 返回结果的最大数量 |
offset=N | 跳过前 N 条结果(用于分页) |
fuzzymatching=true | 启用模糊(语音)姓名匹配 |
includefield=all | 请求所有可用的 DICOM 属性 |
示例
PatientName=DOE*
StudyDate=20240101-20241231 ModalitiesInStudy=CT
00100020=ABC123 limit=10
fuzzymatching=true PatientName=Smith
在 DICOMweb 服务支持的情况下,字符串值支持通配符 *。
典型工作流
与 MCP 服务进行自然对话时,通常会按以下顺序操作:
- 搜索检查 — 使用
find-studies和患者姓名或日期范围进行搜索。 - 浏览序列 — 使用
find-series和步骤 1 返回的 Study Instance UID 进行搜索。 - 列出实例 — 使用
find-instances和步骤 1–2 中的 Study 和 Series UID 进行搜索。 - 检查或渲染 — 使用
get-instance-metadata查看 DICOM 属性,或使用render-instance-frame查看像素数据。 - 读取 SR 报告 — 使用
find-structured-reports查找 SR 文档,然后使用get-structured-report-text读取。 - 读取 PDF 报告 — 使用
find-encapsulated-pdf-reports查找 Encapsulated PDF 文档,然后使用get-encapsulated-pdf-report-text读取。
许可证
dicomweb-mcp-server 基于 MIT 许可证发布。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。