DICOM MCP Server

by ChristianHinge
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Supports integration with Docker for running Orthanc server in development and testing environments.

  • Uses Pydantic for configuration management, providing type validation and settings management for the DICOM MCP server.

  • Provides test suite integration for validating DICOM MCP functionality.

dicom-mcp: DICOM モデルコンテキストプロトコルサーバー

このリポジトリはブログ記事の一部です: Agentic Healthcare LLMs

概要

DICOM(Digital Imaging and Communications in Medicine)とのやり取りのためのモデルコンテキストプロトコルサーバー。このサーバーは、DICOMサーバーへのクエリとやり取りを行うツールを提供し、大規模言語モデルによる医用画像メタデータへのアクセスと分析を可能にします。

dicom-mcp は、AIアシスタントが標準のDICOMネットワークプロトコルを用いてDICOMサーバーから患者情報、検査、シリーズ、インスタンスを照会することを可能にします。また、DICOM形式で保存されたカプセル化されたPDF文書からのテキスト抽出もサポートしており、臨床レポートの分析を可能にします。pynetdicom をベースに構築されており、Model Context Protocol仕様に準拠しています。

ツール

  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 (文字列、オプション): プリセットの詳細レベル (最小、標準、拡張)
      • 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")
  • 戻り値: 取得操作に関する情報を含む辞書
  1. 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 には、DICOM ノードと呼び出し元の AE タイトルを定義する YAML 設定ファイルが必要です。以下の構造の設定ファイルを作成してください。

# DICOM nodes configuration nodes: orthanc: host: "localhost" port: 4242 ae_title: "ORTHANC" description: "Local Orthanc DICOM server" clinical: host: "pacs.hospital.org" port: 11112 ae_title: "CLIN_PACS" description: "Clinical PACS server" # Local calling AE titles calling_aets: default: ae_title: "MCPSCU" description: "Default calling AE title" modality: ae_title: "MODALITY" description: "Simulating a modality" # Currently selected node current_node: "orthanc" # Currently selected calling AE title 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()

患者を検索する

# Search by name pattern (using wildcard) patients = query_patients(name_pattern="SMITH*") # Search by patient ID patients = query_patients(patient_id="12345678") # Get detailed information patients = query_patients(patient_id="12345678", attribute_preset="extended")

研究を検索

# Find all studies for a patient studies = query_studies(patient_id="12345678") # Find studies within a date range studies = query_studies(study_date="20230101-20231231") # Find studies by modality studies = query_studies(modality_in_study="CT")

研究内のシリーズを検索する

# Find all series in a study series = query_series(study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1") # Find series by modality and description series = query_series( study_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.1", modality="CT", series_description="CHEST*" )

一連のインスタンスを検索する

# Find all instances in a series instances = query_instances(series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2") # Find a specific instance by number instances = query_instances( series_instance_uid="1.2.840.10008.5.1.4.1.1.2.1.2", instance_number="1" )

DICOMインスタンスを取得する

# Retrieve a specific instance 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 からテキストを抽出する

# Extract text from an encapsulated 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 # On 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 ファイルを参照してください。

謝辞

-
security - not tested
F
license - not found
-
quality - not tested

AI アシスタントが、患者情報、研究、シリーズ、インスタンスなどの DICOM サーバーからの医用画像メタデータを照会および分析したり、カプセル化された PDF ドキュメントからテキストを抽出したりできるようになります。

  1. Overview
    1. Tools
  2. Installation
    1. Prerequisites
    2. Using pip
  3. Configuration
    1. Usage
      1. Command Line
      2. Configuration with Claude Desktop
      3. Usage with Zed
    2. Example Queries
      1. List available DICOM nodes
      2. Switch to a different node
      3. Switch to a different calling AE title
      4. Verify connection
      5. Search for patients
      6. Search for studies
      7. Search for series in a study
      8. Search for instances in a series
      9. Retrieve a DICOM instance
      10. Extract text from a DICOM encapsulated PDF
    3. Debugging
      1. Development
        1. Setup Development Environment
        2. Running Tests
        3. Project Structure
      2. License
        1. Acknowledgments
          ID: h5p8xkjx92