DICOMweb MCP Server について
DICOMweb MCP Serverは、AIアシスタントをDICOMweb準拠のアーカイブに接続します。医用画像データを扱うユーザーや開発者向けで、検査の検索から画像フレームの表示、レポートテキストの取得まで行えます。
主な機能
- 01検査、シリーズ、インスタンスの検索
- 02DICOMクエリーキーによる結果の絞り込み
- 03インスタンスメタデータの取得
- 04構造化レポートテキストの抽出
- 05検索可能なPDFレポートテキストの抽出
- 06フレームをJPEGまたはPNGでレンダリング
活用シーン
- 01患者名や日付で画像検査を検索
- 02ピクセルデータを取得せずにDICOM属性を確認
- 03構造化レポートや検索可能なPDFレポートを読む
- 04指定したDICOM画像フレームを表示
MCP 対応
QIDO-RSによるDICOMwebアーカイブ検索と、WADO-RSによるメタデータ、レポートテキスト、レンダリング済みフレームの取得をMCPツールとして提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 桁の 16 進数タグを指定します(例:PatientName=Doe* StudyDate=20200101-20201231 ModalitiesInStudy=CT 00100020=12345)。特殊キー:fuzzymatching=true、limit=N、offset=N。空文字列を渡すと、すべての検査を返します。 |
詳細
dicomweb-mcp-server
DICOMweb準拠のDICOMアーカイブをAIアシスタントに公開する、Model Context Protocol(MCP)サーバーです。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
設定
DICOMwebサーバーへの接続情報を記載した.envファイルを作成します。サーバーの実行場所の隣(または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 | 条件付き | ベアラートークン — 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 の昇順で並べ替えられます。
| Parameter | Type | Description |
|---|---|---|
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 インスタンスを検索します。
| Parameter | Type | Description |
|---|---|---|
studyInstanceUid | string | Study Instance UID — find-studies で取得します |
プロンプトの例
- 「検査 1.2.3.4 内の PDF レポートをすべて検索してください」
- 「この検査に Encapsulated PDF ドキュメントはありますか?」
get-encapsulated-pdf-report-text
Encapsulated PDF DICOM インスタンスを取得し、テキストコンテンツを抽出します。
| Parameter | Type | Description |
|---|---|---|
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 レポートを読んでください」
- 「Encapsulated PDF ドキュメントには何と書かれていますか?」
find-structured-reports
SR モダリティのシリーズを検索し、既知の SR SOP Class UID で絞り込むことで、検査内のすべての Structured Report(SR)インスタンスを検索します。
| Parameter | Type | Description |
|---|---|---|
studyInstanceUid | string | Study Instance UID — find-studies で取得します |
get-structured-report-text
Structured Report インスタンスを取得し、人が読めるテキストに変換します。
| Parameter | Type | Description |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — find-structured-reports で取得します |
get-instance-metadata
単一インスタンスの DICOM 属性をすべて取得し、人が読めるテキストとして整形します。ピクセルデータは取得しません。
| Parameter | Type | Description |
|---|---|---|
studyInstanceUid | string | Study Instance UID |
seriesInstanceUid | string | Series Instance UID |
sopInstanceUid | string | SOP Instance UID — find-instances で取得します |
render-instance-frame
DICOM インスタンスから指定したフレームをレンダリングし、インライン画像(JPEG または PNG)として返します。
| Parameter | Type | Description |
|---|---|---|
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 ペアのリストです。
キーの形式
| Format | Example |
|---|---|
| DICOM キーワード名 | PatientName=DOE* |
| 8 桁の 16 進数タグ | 00100020=12345 |
特殊キー
| Key | Description |
|---|---|
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を実行します。 - シリーズを参照する — 手順 1 で返された Study Instance UID を指定して
find-seriesを実行します。 - インスタンスを一覧表示する — 手順 1~2 の Study UID と Series UID を指定して
find-instancesを実行します。 - 確認またはレンダリングする — DICOM 属性を確認するには
get-instance-metadataを、ピクセルデータを表示するにはrender-instance-frameを実行します。 - SR レポートを読む — SR 文書には
find-structured-reportsを実行してからget-structured-report-textを実行します。 - PDF レポートを読む — Encapsulated PDF 文書には
find-encapsulated-pdf-reportsを実行してからget-encapsulated-pdf-report-textを実行します。
ライセンス
dicomweb-mcp-server は MIT License の下で公開されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。