DICOM Model Context Protocol Server for medical imaging workflows, providing tools for DICOM C-FIND/C-MOVE queries, FHIR integration, MWL (Modality Worklist) and MPPS (Modality Performed Procedure Step) management, and radiology report generation.
Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
The DICOM MCP server presents significant definition quality gaps. Of 13 tools evaluated, naming is moderately good (verb-first conventions mostly followed), but descriptions are generic and lack depth, parameter schemas are incomplete or absent, and output schemas are entirely undocumented. Most tools lack descriptions exceeding the minimum viable threshold, and critical parameters lack type information or constraints. This server falls into the 'fair but incomplete' category typical of community DICOM integrations that prioritize feature breadth over agent-usable clarity.
Tools (13)
dicom_findread onlyauth48/100
Perform DICOM C-FIND query to search for studies, series, and images on a DICOM server
dicom_getread onlyauth43/100
Perform DICOM C-GET to retrieve studies, series, or images from a DICOM server
dicom_movewriteauth42/100
Perform DICOM C-MOVE to retrieve studies, series, or images from a DICOM server to a destination AE
fhir_diagnostic_report_searchread onlyauth50/100
Search for diagnostic reports in FHIR server by patient or date
fhir_imaging_study_searchread onlyauth50/100
Search for imaging studies in FHIR server by patient or date
fhir_patient_searchread onlyauth50/100
Search for patients in FHIR server by demographics or identifiers
generate_radiology_reportwrite50/100
Generate a radiology report as PDF from study data and findings
Object parameters with empty 'properties' (dicom_find, dicom_move, dicom_get, mwl_find, mpps_set) leave LLM unable to construct valid inputs. These are DICOM query objects where valid attributes are domain-specific (PatientID, StudyInstanceUID, etc.) but completely undocumented in schemas.
No output schemas documented for any tool. LLM does not know what fields to expect in responses, making downstream tool chaining impossible and forcing re-discovery of available data after each call.
Add full JSON Schema definitions for query_params objects. For dicom_find, define properties for PatientID (string), StudyInstanceUID (string), SeriesInstanceUID (string), etc. For mwl_find, document AccessionNumber, PatientID, PatientName, ScheduledProcedureStepStartDate as valid keys with types.
Document output schemas for all tools. Example for dicom_find: {type: 'object', properties: {studies: {type: 'array', items: {type: 'object', properties: {study_instance_uid: string, patient_id: string, ...}}}}}. This enables LLM to extract needed fields for downstream calls.
Expand tool descriptions to 100-200 characters with explicit WHEN and WHY context. Example: 'Search for patient records in FHIR server by demographics (name, DOB, MRN). Returns FHIR Patient IDs needed for subsequent diagnostic report and imaging study searches. Use after obtaining patient identifiers from chat context.'
Replace string examples with formal enum constraints in schemas. For fhir_imaging_study_search modality, add enum: ['CT', 'MR', 'XC', 'US', 'ECHO', 'PT', 'NM', 'OT'] to schema instead of relying on description. For fhir_diagnostic_report_search status, add enum: ['final', 'preliminary', 'draft', 'amended', 'entered-in-error'].
Add regex pattern constraints for date parameters. For birth_date and date_from/date_to, add pattern: '^\d{4}-\d{2}-\d{2}$' to enforce ISO 8601 format in schema, not just description.
Add error handling guidance to each tool description. Template: 'If the DICOM server is unreachable, the tool returns a timeout error. Retry after verifying server connectivity via list_dicom_nodes. If query returns no results, refine parameters and search again.' Similarly for FHIR tools: 'If no patients match the query, try broader search parameters (last name only, or DOB range).'
Spec posture evidence
Inferred effective spec: 2025-06-18+.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
Score history
Overall score trend
↑ 42 points across a rubric change (v1 → v2)
42/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
42
2025-06-18+
v2
2026-03-09
F
0
-
v1
read only
50/100
Get predefined DICOM attribute sets for common query types
list_dicom_nodesread onlysource verified45/100
List configured DICOM nodes and their connection parameters
mpps_createwriteauth50/100
Create a Modality Performed Procedure Step (MPPS) N-CREATE to notify procedure start
mpps_setwriteauth50/100
Update a Modality Performed Procedure Step (MPPS) N-SET to notify procedure completion
mwl_findread onlyauth42/100
Query Modality Worklist (MWL) to find scheduled procedures
switch_dicom_nodewritesource verified50/100
Switch the active DICOM node for subsequent queries
Descriptions are generic and lack context for LLM tool selection. Most descriptions under 50 characters (e.g., 'List configured DICOM nodes', 'Switch the active DICOM node'). Rubric baseline for good descriptions is 194 chars; this server averages ~50 chars. Missing WHEN to use each tool and HOW it differs from similar tools.
String parameters without enum constraints (modality in fhir_imaging_study_search, preset_type in get_dicom_attribute_presets, status in fhir_diagnostic_report_search) force LLM to guess or hallucinate valid values. Should replace examples in descriptions with formal enum constraints.
Date format parameters (birth_date, date_from, date_to) documented in descriptions ('YYYY-MM-DD') but not enforced in schema with regex patterns. LLM may pass invalid formats and encounter runtime errors.
No error handling guidance in tool descriptions. LLM has no instruction on what to do if a DICOM server is unreachable, a patient is not found, or a FHIR search returns no results. No recovery paths or fallback suggestions.
generate_radiology_report lacks confirmation or dry-run capability for a WRITE operation on sensitive medical documents. No guidance on error recovery if PDF generation fails or study data is missing.
Tool dependencies are not documented. mpps_create must be called before mpps_set (state machine), switch_dicom_node affects all subsequent tool calls, fhir_* tools assume patient_id from fhir_patient_search. LLM has no explicit hint for multi-step workflows.
Implement dry-run or confirmation step for generate_radiology_report. Require a 'confirm' parameter or offer a separate 'preview_radiology_report' tool that shows the report content before generation. Document that PDF generation is irreversible.
Add dependency hints in descriptions. For mpps_set, note: 'Update an MPPS created by mpps_create. SOP Instance UID is returned from the create call.' For fhir_* tools, note: 'Patient ID is obtained from fhir_patient_search; use it to query reports or imaging studies.'
Add pagination support to list_dicom_nodes and document result limits. Specify 'Returns up to 50 configured nodes. For large deployments, paginate via limit and offset parameters.' Currently no pagination is mentioned.
Clarify tool distinctions. Add to dicom_find: 'For scheduled procedures, use mwl_find instead.' Add to mpps_create/mpps_set: 'dicom_move and dicom_get retrieve existing images; use mpps_* to report on newly acquired studies.' This prevents LLM confusion.
Document AE Title format. For switch_dicom_node and dicom_move, clarify: 'AE Title is 1-16 alphanumeric characters, e.g. "DICOM_SERVER" or "WORKSTATION_1". Use list_dicom_nodes to see valid titles.'
Add server-side validation and return actionable error messages. If query_params contains invalid DICOM attributes, return: 'Invalid DICOM attribute "InvalidAttr". Valid attributes: PatientID, StudyInstanceUID, SeriesInstanceUID, Modality, ...' rather than a generic 400 error.