医学影像AI集成服务器

DICOM MCP服务器是一个基于标准模型上下文协议(MCP)的医学影像AI集成平台,支持DICOM查询、FHIR集成和放射学报告生成,适用于医学影像开发与测试场景。

  • by sscotti
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 sscotti/dicom-mcp

使用说明

DICOM MCP服务器-医学成像AI集成🏥

此版本使用 MCP堵塞 专门用于开发、测试和LLM集成。请注意,如果您使用的是Cursor IDE或其他IDE,则可以在某些情况下配置IDE以访问服务器,例如 ~/.cursor/mcp.json等等。看 https://cursor.com/docs/context/mcp#what-is-mcp 了解详情。

使AI助手能够使用标准模型上下文协议(MCP)在PACS上查询、读取和移动数据,Orthanc作为参考实现。您可以使用自己的APIKEY(例如用于ChatGPT),并在本地运行它,以使用ChatGPT作为LLM进行开发。还集成了kubectl和迷你RIS数据库。

✨ 核心能力

dicom-mcp 提供工具以:

  • 🔍 查询DICOM:使用各种标准搜索患者、研究、系列和实例
  • 📄 阅读DICOM报告(PDF):检索包含封装PDF的DICOM实例(如临床报告)并提取文本内容
  • 📄 创建放射学报告:生成PDF格式的放射学报告并附加到PACS
  • ➡️ 发送DICOM图像:将系列或研究发送到其他DICOM目的地,例如用于图像分割、分类等的AI端点。
  • ⚙️ Contoso集成:查询和管理Contoso资源(患者、影像研究、服务请求等)
  • ⚙️ 迷你RIS:管理放射科医嘱、工作列表和报告工作流
  • ⚙️ MWL/MPPS:模态工作表和模态执行程序步骤服务
  • ⚙️ 公用事业:管理连接、切换服务器并了解查询选项

🚀 快速开始

📥 安装

通过克隆存储库使用pip进行安装:

# Clone and set up development environment
gh repo clone sscotti/dicom-mcp
cd dicom-mcp

# Create and activate virtual environment
python3 -m venv venv
source venv/bin/activate

# Install with dependencies
pip install -e ".[dev]"

⚙️ 配置

dicom-mcp 需要一个YAML配置文件(configuration.yaml 或类似)定义DICOM节点并调用AE标题。调整配置或保持原样,以与示例Orthanc服务器兼容。

# DICOM nodes configuration
nodes:
  main:
    host: "localhost"
    port: 4242
    ae_title: "ORTHANC"
    description: "Local Orthanc DICOM server (Primary)"
  
  secondary:
    host: "localhost"
    port: 4243
    ae_title: "ORTHANC2"
    description: "Local Orthanc DICOM server (Secondary)"

current_node: "main"
calling_aet: "MCPSCU"

# FHIR server configuration (optional)
# You can configure multiple FHIR servers and switch between them
fhir_servers:
  firely:
    base_url: "https://server.fire.ly"
    description: "Firely FHIR Test Server (public, no API key needed)"
  
  siim:
    base_url: "https://hackathon.siim.org/fhir"
    api_key: "${SIIM_API_KEY}"  # Set in .env file
    description: "SIIM Hackathon FHIR server"
  
  # Uncomment to use a local HAPI FHIR server
  hapi_local:
    base_url: "http://localhost:8080/fhir"
    description: "Local HAPI FHIR server"

current_fhir: "hapi_local"  # Active FHIR server: firely, siim, or hapi_local, make sure to start the local hapi fhir server before starting the MCP server

# The server will expose all DICOM tools and FHIR tools via standard MCP protocol

# Mini-RIS MySQL database configuration (optional)
mini_ris:
  host: "localhost"
  port: 3306
  user: "orthanc_ris_app"
  password: "${MINI_RIS_DB_PASSWORD}"
  database: "orthanc_ris"
  pool_size: 5

[!警告] DICOM-MCP不适用于临床使用,也不应与实时医院数据库或包含患者敏感数据的数据库连接。这样做可能会导致患者数据丢失,以及患者数据泄露到互联网上。DICOM-MCP可以与本地托管的开放权重LLM一起使用,以实现完全的数据隐私。

[!注意] 此项目使用 MCP堵塞 用于开发、测试和LLM集成需求。这 mcp-config.example.json 文件以模板的形式提供,其中包含可以根据设置进行调整的相对路径。可以将其作为JSON导入MCPJAM以配置接口。

Docker容器设置(Orthancs、kubectl、PostGres和MySQL)

docker-compose up -d
dotenv run -- pytest # uploads dummy pdf data to ORTHANC server

UI位于 https://localhost:8042 和 https://localhost:8043,请注意,仓库配置了TLS证书,因此是https。

HAPI kubectl将在 http://localhost:8080/fhir

看 Contoso服务器指南 详细的配置选项,包括Firely测试服务器和SIIM集成。

🔌 与MCP Jam一起使用(推荐)

MCP堵塞 是测试和探索DICOM MCP服务器的替代工具。它提供了一个web界面 访客模式 无需任何设置即可立即进行测试。对于自包含的解决方案,请使用上面的自定义Web UI!

备注:MCP Jam Guest Mode可能对某些功能(如资源面板)有限制。资源仍然可以通过 list_saved_resources 和 get_saved_resource 在访客模式下工作的工具。要获得完整的资源面板支持,您可能需要使用一个帐户。

启动MCP堵塞:

# Navigate to your dicom-mcp directory
cd /path/to/dicom-mcp

# Activate your virtual environment
source venv/bin/activate

# Start MCP Jam (use latest or beta)
npx -y @mcpjam/inspector@latest
# or
npx -y @mcpjam/inspector@beta

在MCP Jam中设置服务器:

  1. 点击“访客模式” 在MCP Jam界面中(无需帐户)
  2. 手动添加服务器 使用这些设置,或导入 mcp-config.example.json 作为模板:
    • 服务器名称: DICOM MCP
    • 命令: {path_to_venv}/bin/python (例如。, venv/bin/python 或绝对路径)
    • 参数: -m dicom_mcp configuration.yaml --transport stdio
    • 环境变量:
      • 姓名: PYTHONPATH
      • 价值: src (相对)或绝对路径 src 目录
    • 工作目录:指向dicom mcp项目根目录的路径

示例配置(macOS/Linux):

  • 命令: /absolute/path/to/dicom-mcp/venv/bin/python
  • 参数: -m dicom_mcp configuration.yaml --transport stdio
  • 环境变量: PYTHONPATH = /absolute/path/to/dicom-mcp/src

MCP干扰接口:

在MCP Jam中配置LLM:

  1. 去 设置 标签
  2. 为LLM提供程序添加API密钥:
    • 开放人工智能 -适用于GPT-4、GPT-4o、o1等。
    • Anthropic -克劳德3.5十四行诗、克劳德·奥普等。
    • 谷歌双子座 -适用于Gemini 2.5 Pro、Flash等。
    • 深度求索 -对于Deepseek聊天,Reasoner
    • 奥拉玛 -自动检测本地模型(不需要API密钥)
  3. 去 操场 选项卡开始与DICOM服务器聊天

在光标IDE中使用OpenAI API键:

备注:对于MCP服务器的开发和测试, 建议使用MCP堵塞Cursor更适合使用上下文中可用的MCP工具进行通用代码开发。

如果您想将Cursor IDE与ChatGPT一起用于编码任务:

  1. 从获取API密钥 .env (如果存储在那里):

    grep OPENAI_API_KEY .env
    
  2. 在游标中配置:

    • 打开光标设置(Cmd+Shift+J/Ctrl+Shift+J)
    • 引导到 模型 部分
    • 粘贴您的OpenAI API密钥并验证
    • 选择您喜欢的GPT型号(GPT-4、GPT-4 Turbo等)

备注:Cursor要求在其设置UI中输入API键-它不会自动从 .env 文件夹。从您的 .env 文件并将其粘贴到Cursor的设置中。

这为Cursor中的ChatGPT驱动的AI提供了持久的系统提示和完整的代码库集成。看 CURSOR_SETUP.md 有关完整的设置说明。

系统提示:

为了更好的LLM交互,您可以配置系统提示:

  • 在MCP堵塞中:从以下位置复制内容 system_prompt.txt 在启动新会话时,将其添加到Playground选项卡中的系统提示字段中。
  • 在游标IDE中:在Cursor的设置中设置系统提示(在会话之间持续)-请参阅 CURSOR_SETUP.md 了解详情。
  • 通过工具:使用 get_system_prompt 工具在任一界面中自动检索提示文本。

备注:MCP Jam Guest模式可能无法在会话之间持续显示系统提示。游标IDE设置保持不变。保持 system_prompt.txt 方便或使用 get_system_prompt 快速访问工具。

MCP堵塞特征:

  • ✅ 访客模式:无需帐户-立即开始测试
  • ✅ 漂亮的UI:带有AI提供商徽标的现代界面
  • ✅ 轻松设置:简单的服务器配置,表单清晰
  • ✅ 实时测试:交互式工具执行,立即见效
  • ✅ 全部功能:访问所有DICOM、Contoso、RIS和报告工具
  • ✅ LLM 游乐场:使用各种LLM测试DICOM服务器
  • ✅ 社区驱动:积极开发,定期更新

资源说明:资源已在FastMCP注册,可通过以下方式访问:

  • 工具 (在访客模式下工作):使用 list_saved_resources 和 get_saved_resource 访问资源的工具
  • 资源面板 (可能需要帐户):本机MCP资源协议-如果您的MCP Jam模式支持,则在资源选项卡中可见

MCP堵塞选项卡:

  • 服务器选项卡:管理并连接到DICOM MCP服务器
  • 工具选项卡:以交互方式浏览和测试所有可用工具
  • 游乐场选项卡:使用配置的LLM与DICOM服务器聊天
  • 设置标签:配置API密钥和LLM提供程序

可用的DICOM工具:

  • verify_connection -测试DICOM连接
  • list_dicom_nodes -显示已配置的服务器
  • query_patients -寻找患者
  • query_studies -按标准查找研究
  • query_series -在研究中查找系列
  • query_instances -查找单个DICOM图像
  • extract_pdf_text_from_dicom -从DICOM PDF中提取文本
  • move_series / move_study -传输DICOM数据
  • switch_dicom_node -更改活动服务器
  • get_attribute_presets -显示查询详细级别

可用的kubectl工具(当配置了kubectl时):

  • verify_fhir_connection -测试Contoso服务器连接
  • list_fhir_servers -列出已配置的Contoso服务器
  • switch_fhir_server -在不重新启动的情况下切换到不同的Contoso服务器
  • fhir_search_patient -搜索患者资源
  • fhir_search_imaging_study -搜索Imaging学习资源
  • fhir_read_resource -按类型和ID读取任何Contoso资源
  • fhir_create_resource -创建新的Contoso资源(患者、想象研究、服务请求等)
  • fhir_update_resource -更新现有的Contoso资源

看 FHIR_SERVERS.md 有关配置详细信息。

迷你RIS工具(配置MySQL时):

  • list_mini_ris_patients -浏览存储在迷你RIS模式中的患者人口统计信息(按MRN或姓名过滤)
  • create_mwl_from_order -从现有的迷你RIS订单创建DICOM模态工作表条目
  • create_synthetic_cr_study -生成合成CR DICOM图像并发送到PACS(虚拟模态)

放射科报告工具(配置MySQL时):

  • get_study_for_report -检索放射学报告的完整研究信息
  • list_radiologists -列出有资质的放射科医生
  • create_radiology_report -创建包含发现和印象的结构化放射学报告
  • generate_report_pdf -从报告生成专业PDF(base64编码)
  • attach_report_to_pacs -将报告PDF作为DICOM封装PDF上传到PACS

迷你RIS数据库架构:

这 mini_ris.sql schema提供了一个完整的放射学信息系统,包括:

  • 核心实体:患者、提供者、遭遇、订单、影像学研究、报告
  • 参考表格:
    • dicom_tags -用于MWL/MPPS验证的50个基本DICOM标签定义
    • procedures -14个CR/XR程序代码,带有典型视图和图像计数
    • modalities -标准DICOM模态代码
    • body_parts -用于成像的解剖区域
  • MWL/MPPS支持:模态工作表和模态执行程序步骤跟踪表

MCP命名方案:

迷你RIS中的所有数据都使用一致的“MCP-”前缀/后缀命名方案,以清楚地将其标记为 开发/合成数据:

  • MRN: MCP-MRN-0001
  • 登录号: MCP-ACC-2025-0001
  • 患者姓名: Johnson-MCP^Alex (DICOM格式)
  • 医生姓名: MCP-Emily^Chen (DICOM格式)

看 MCP_NAMING_SCHEME.md 了解完整细节。

设置:

  1. 启动MySQL服务:

    docker compose up -d mysql
    
  2. 初始化数据库(首次启动时自动或手动):

    docker exec -i dicom-mcp-mysql-1 mysql -uorthanc_ris_app -porthanc_ris_app orthanc_ris < mysql/mini_ris.sql
    
  3. 在中配置环境变量 .env:

    MINI_RIS_DB_PASSWORD=orthanc_ris_app
    
  4. 验证 configuration.yaml 包含 mini_ris 块。

包括CR程序:

该数据库包括14种针对单图像研究工作流程优化的常见计算机射线照相(CR)程序:

  • 胸部(1或2次浏览)
  • 腹部(1或2次浏览)
  • 骨盆、颈椎/腰椎
  • 上肢:手、手腕、肩膀
  • 下肢:膝盖、脚踝、脚
  • 颅骨

每个程序都包括典型的视图投影(AP、PA、横向、斜向)和用于生成真实测试数据的预期图像计数。

MWL/MPPS服务:

该项目包括用于管理成像工作流程的集成模态工作表(MWL)和模态执行程序步骤(MPPS)服务:

  • mwl mpps (端口4104)-用于MWL查询和MPPS N-CREATE/N-SET操作的DICOM SCP
  • mwl api (端口8000)-FastAPI REST接口,用于创建和管理来自迷你RIS订单的MWL条目

环境变量:

这两个服务通过以下方式共享相同的MySQL数据库配置:

MINI_RIS_DB_PASSWORD=orthanc_ris_app  # Default password for orthanc_ris_app user

用途:

  1. 启动MWL/MPPS服务:

    docker compose up -d mwl-mpps mwl-api
    
  2. 通过DICOM C-FIND查询工作列表:

    # Use -W for Modality Worklist queries (not -P for Patient Root)
    findscu -v -W -k 0008,0050="" -k 0010,0020="" localhost 4104
    
    # Or query by specific accession number:
    findscu -v -W -k 0008,0050="ACC-2025-0001" localhost 4104
    
  3. 通过REST API创建MWL条目:

    curl -X POST http://localhost:8000/mwl/create_from_json \
      -H "Content-Type: application/json" \
      -d @mwl_payload.json
    
  4. 在web仪表板中查看MWL记录:

    open http://localhost:8000/mwl
    # Or visit http://localhost:8000 for the main dashboard
    

MWL/MPPS表格(mwl, mpps, mwl_tasks)在迷你RIS数据库中存储所有工作列表项和程序步骤状态,实现从订单到完成检查的完全可追溯性。

从订单创建MWL(通过MCP工具):

这 create_mwl_from_order 该工具自动从迷你RIS订单创建MWL:

# Example: Patient arrives, technician creates MWL from order
# In MCP Jam or via LLM:
create_mwl_from_order(
    order_id=1,
    scheduled_station_aet="ORTHANC"
)

# Returns:
{
  "success": true,
  "message": "MWL created successfully for order 1",
  "accession_number": "ACC-2025-0001",
  "patient_name": "Alex Johnson",
  "patient_id": "MRN1001",
  "procedure": "Chest X-Ray 2 Views",
  "modality": "CR",
  "scheduled_time": "2025-06-01 09:15:00",
  "mwl_id": 42
}

这支持LLM驱动的工作流,如:

  • “为订单1创建工作列表条目”
  • “患者MRN1001已经到达,正在进行胸部x光检查”
  • “列出所有预定订单,并为今天的患者创建MWL”

虚拟CR设备 🆕

该项目包括一个虚拟CR(计算机射线照相)设备,可生成合成DICOM图像以进行完整的工作流程演示:

# Example: Complete imaging workflow
# 1. Create MWL from order
create_mwl_from_order(order_id=1)

# 2. Simulate CR device acquiring images
create_synthetic_cr_study(
    accession_number="ACC-2025-0001",
    image_mode="simple",  # or "ai" with OpenAI key
    send_to_pacs=True
)

# Result: 2 CR images created and sent to Orthanc!

图像生成模式:

  1. simple (无需API密钥)-具有解剖轮廓的基本合成图像
  2. ai (需要 OPENAI_API_KEY)-通过OpenAI生成逼真的AI图像 gpt-image-1 模型
  3. auto (默认)-如果密钥可用,则使用AI,回退到简单
  4. sample -使用库中预先制作的示例图像

⚠️ 重要:

  • 合成图像仅用于开发/测试/培训。不用于临床。
  • AI模式使用OpenAI gpt-image-1 模型(每张图像约30-40秒)
  • 多视图研究(2+幅图像)可能会在MCP客户端中超时,但 仍然成功完成
    • 即使您看到超时错误,也会创建图像并将其发送到PACS
    • 检查Orthanc以验证收到的图像
  • 为了更快的生成或可靠的测试,请使用 image_mode="simple" 而不是“自动”

配置:

添加到 .env (AI模式可选):

OPENAI_API_KEY=sk-proj-xxxxx  # Optional - enables AI-generated images

LLM驱动的工作流示例:

User: "Patient Johnson completed their chest x-ray, create the study"
LLM: Calls create_synthetic_cr_study(accession_number="MCP-ACC-2025-0001", image_mode="simple")
Result: 2-view chest study appears in Orthanc instantly!

User: "Generate a realistic chest x-ray showing pneumonia in the right lung"
LLM: Calls with image_mode="ai", image_description="pneumonia right lower lobe"
Result: gpt-image-1 generates photorealistic pneumonia appearance (~40 seconds)
Note: May show timeout error but images still arrive in PACS

基于订单提示的工作流一致性 🆕

订单现在可以包括图像生成和报告创建的提示,从而创建闭环工作流:

  1. 图像生成提示 (image_generation_prompt):描述图像应显示的内容
  2. 报告发现描述 (report_findings_description):描述报告的预期结果

这可以在以下情况下实现一致的工作流程:

  • 图像是根据订单生成的 image_generation_prompt
  • 报告可以使用订单的 report_findings_description 作为一个起点
  • 整个工作流程(订单→ 图像→ 报告)内部一致
# Example: Order with prompts
# Order MCP-ORD-2025-0001 has:
#   image_generation_prompt: "Chest X-ray showing subtle patchy opacity in right lower lobe"
#   report_findings_description: "Subtle patchy opacity in right lower lobe consistent with early pneumonia"

# 1. Generate images using order prompt (automatically used if available)
create_synthetic_cr_study(
    accession_number="MCP-ACC-2025-0001",
    image_mode="ai"  # Will use order's image_generation_prompt
)

# 2. Create report using order findings (optional)
create_radiology_report(
    accession_number="MCP-ACC-2025-0001",
    findings="",  # Empty - will use order's report_findings_description
    impression="Early pneumonia",
    use_order_findings=True  # Use order's report_findings_description
)

优点:

  • 一致性:图像和报告与原始订单意图相匹配
  • 自动化:订单中存储的提示可实现全自动工作流程
  • 测试:易于测试人工智能生成的图像与预期结果的匹配程度
  • 可追溯性:从订单中完成审计跟踪→ 图像→ 报告

这完成了完整的RIS/PACS工作流程:

Order → MWL → Virtual Device → DICOM Images → PACS Storage → Viewing → Reporting

放射学报告 🆕

创建专业放射学报告,并将其作为DICOM封装的PDF附加到PACS中的研究中:

# Complete reporting workflow
# 1. Get study information for reporting
study_info = get_study_for_report(accession_number="MCP-ACC-2025-0001")

# 2. List available radiologists
radiologists = list_radiologists()

# 3. Create a radiology report
# Option A: Manual findings
report = create_radiology_report(
    accession_number="MCP-ACC-2025-0001",
    findings="""
    The heart is normal in size. The mediastinum is unremarkable.
    Both lungs are clear without focal consolidation, pleural effusion, or pneumothorax.
    No acute bony abnormality is identified.
    """,
    impression="Normal chest radiograph. No acute cardiopulmonary process.",
    author_provider_id=3,  # Dr. MCP-Casey Wells (from list_radiologists)
    report_status="Final"
)

# Option B: Use order's report_findings_description (if available)
report = create_radiology_report(
    accession_number="MCP-ACC-2025-0001",
    findings="",  # Empty - will use order's report_findings_description
    impression="Early pneumonia",
    author_provider_id=3,
    report_status="Final",
    use_order_findings=True  # Use order's report_findings_description
)

# 4. Generate PDF preview (optional)
pdf_data = generate_report_pdf(report_id=report['report_id'])
# Returns base64 encoded PDF for preview/download

# 5. Attach report to PACS as DICOM Encapsulated PDF
result = attach_report_to_pacs(report_id=report['report_id'])
# Report PDF now appears as a DOC series in Orthanc!

报告工作流功能:

  • 数据库存储:报告保存在迷你RIS中 reports 带有完整审计跟踪的表格
  • 专业PDF:使用ReportLab生成(默认)-机构标题、人口统计、调查结果、印象、签名
  • 备选PDF库:WeasyPrint也作为基于HTML/CSS的PDF生成选项安装(适用于基于web的报告模板)
  • DICOM标准:封装PDF(SOP类: 1.2.840.10008.5.1.4.1.1.104.1)
  • PACS集成:PDF作为新系列附在原始研究中(形式:DOC,系列号9999)
  • 状态跟踪:初步→ 最终→ 修正的→ 已取消
  • 提供者归因:迷你RIS提供者表中的放射科医生链接

LLM驱动的报告示例:

User: "Create a final report for accession ACC-2025-0001. Normal chest x-ray."
LLM: → get_study_for_report() to fetch patient/study data
     → list_radiologists() to get available radiologists
     → create_radiology_report() with structured findings/impression
     → attach_report_to_pacs() to send PDF to PACS
Result: Complete report in database + PDF in PACS!

User: "Generate a preliminary report for the knee study showing a tibial fracture"
LLM: → Creates report with report_status="Preliminary"
     → Structures findings describing the fracture
     → Generates and attaches PDF to PACS
Result: Preliminary report available for review

User: "Show me the PDF for report ID 5"
LLM: → generate_report_pdf(report_id=5)
     → Returns base64 PDF for display/download

报告状态工作流:

Preliminary → Final → [Amended] → [Cancelled]

每次状态更改都会创建一个带有时间戳的新审计跟踪条目。

数据库架构:

reports:
  - report_id (PK)
  - imaging_study_id (FK to imaging_studies)
  - report_number (unique, e.g., "RPT-ACC-2025-0001-20250601120000")
  - author_provider_id (FK to providers - radiologist)
  - report_status (enum: Preliminary, Final, Amended, Cancelled)
  - report_datetime (timestamp)
  - report_text (LONGTEXT - findings)
  - impression (TEXT - clinical impression)
  - dicom_sop_instance_uid (populated after PACS attachment)
  - dicom_series_instance_uid (populated after PACS attachment)

完整的成像+报告工作流程:

┌─────────────────────────────────────────────────────────┐
│ 1. Order Management (Mini-RIS)                          │
│    create_mwl_from_order(order_id=1)                    │
└────────────────┬────────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────────┐
│ 2. Image Acquisition (Virtual CR Device)                │
│    create_synthetic_cr_study(accession="ACC-2025-0001") │
└────────────────┬────────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────────┐
│ 3. PACS Storage (Orthanc)                               │
│    Images viewable at http://localhost:8042             │
└────────────────┬────────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────────┐
│ 4. Radiology Reporting                                  │
│    create_radiology_report(...)                         │
│    attach_report_to_pacs(report_id=1)                   │
└────────────────┬────────────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────────────┐
│ 5. Complete Study in PACS                               │
│    - CR Images (Series 1, 2)                            │
│    - Report PDF (Series 9999, Modality DOC)             │
└─────────────────────────────────────────────────────────┘

🧪 测试综合数据

要测试编排工作流程,请用合成数据填充本地HAPI Contoso服务器:

# Populate synthetic data
python tests/populate_synthetic_fhir_data.py

这将创建:

  • 5名具有真实人口统计特征的测试患者
  • 影像学研究的服务请求(订单)
  • 与患者相关的想象研究
  • 诊断报告及发现

🔄 编排工作流

MCP服务器实现了结合Contoso和DICOM的端到端放射学工作流程:

  • 订单录入:在kubectl中创建服务请求
  • 研究获取:将DICOM研究链接到HttpClientImaging研究
  • 报告:从DICOM PDF生成诊断报告
  • 工作流管理:跟踪订单完成情况

🔧 开发与调试

MCP堵塞 是开发、测试和调试DICOM MCP服务器的推荐工具。

开发工作流程:

  1. 启动Docker: docker-compose up -d
  2. 负载测试数据: dotenv run -- pytest (上传样本DICOM数据)
  3. 启动MCP堵塞: npx -y @mcpjam/inspector@latest 或 npx -y @mcpjam/inspector@beta
  4. 测试工具:使用“工具”选项卡以交互方式测试所有DICOM操作
  5. LLM测试:使用Playground选项卡测试自然语言交互
  6. 调试问题:检查服务器通知中的错误和详细日志记录

MCP果酱对开发的好处:

  • ✅ 访客模式 -无需帐户,立即工作
  • ✅ 实时测试 所有DICOM工具都有即时反馈
  • ✅ 交互界面 用于探索DICOM数据和响应
  • ✅ LLM集成 -测试AI助手如何与服务器交互
  • ✅ 调试记录 -查看详细的服务器通知和错误
  • ✅ 工具浏览器 -轻松发现和测试所有可用工具

🎨 自定义Web UI(独立的,实验性的!)

您自己的自定义web界面 -所有这些都在这个仓库中,没有外部依赖!

# Activate virtual environment
source venv/bin/activate

# Start the custom web UI, experimental !!
python start_web_ui.py

# Or directly with uvicorn
uvicorn dicom_mcp.web_ui:app --host 127.0.0.1 --port 8080

web UI将在 http://127.0.0.1:8080

特征:

  • ✅ LLM技术聊天 -与OpenAI集成的智能聊天,用于自然语言查询
  • ✅ 工具浏览器 -浏览并探索所有28个可用的DICOM/QUIPL/RIS工具
  • ✅ 及时管理 -编辑并保存针对医学成像优化的系统提示
  • ✅ 工具执行 -直接从聊天或UI执行工具
  • ✅ 医学影像焦点 -为DICOM和Contoso工作流程定制
  • ✅ 独立 -存储库中的所有内容,无需外部服务
  • ✅ 深色主题 -美观、现代的深色用户界面
  • ✅ 节省的资源 -整理好的参考文件(例如Orthanc OpenAPI)位于 resources/manifest.yaml,可通过资源面板访问或新建 list_saved_resources / get_saved_resource MCP工具。

LLM集成:

通过设置API密钥启用OpenAI支持的聊天:

export OPENAI_API_KEY="your-api-key-here"

法学硕士将:

  • 了解有关医学影像的自然语言查询
  • 自动选择并执行适当的DICOM/QUE工具
  • 将结果格式化为临床可读格式
  • 使用医学成像系统提示进行上下文感知响应

查询示例:

  • “列出所有可用的DICOM节点”
  • “找到姓史密斯的病人”
  • “给我看看上周的学习”
  • “验证与PACS的连接”
  • “有哪些工具可用于Contoso?”

🙏 致谢

  • 使用 FastMCP -构建MCP服务器的快速Python方法
  • 使用 Pynetdicom 用于DICOM网络通信
  • 用途 pypdf 用于PDF文本提取