extract-dicom-metadata
Extract detailed metadata from DICOM medical image files to access structured information about patient data, imaging parameters, and study details.
Instructions
Extract detailed metadata from a DICOM file
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dicom_file | Yes | Path to a DICOM file |
Implementation Reference
- src/dicom_mcp/dicom_tools.py:195-253 (handler)Core handler function that implements the logic to extract structured metadata from a single DICOM file using pydicom.def extract_dicom_metadata(dicom_file: str) -> Dict[str, Any]: """Extract comprehensive metadata from a DICOM file""" try: ds = pydicom.dcmread(dicom_file, stop_before_pixels=True) # Create a clean dictionary of metadata metadata = {} # Patient information metadata["patient"] = { "id": getattr(ds, "PatientID", None), "name": str(getattr(ds, "PatientName", "")), "birth_date": getattr(ds, "PatientBirthDate", None), "sex": getattr(ds, "PatientSex", None) } # Study information metadata["study"] = { "instance_uid": getattr(ds, "StudyInstanceUID", None), "id": getattr(ds, "StudyID", None), "date": getattr(ds, "StudyDate", None), "time": getattr(ds, "StudyTime", None), "description": getattr(ds, "StudyDescription", None) } # Series information metadata["series"] = { "instance_uid": getattr(ds, "SeriesInstanceUID", None), "number": getattr(ds, "SeriesNumber", None), "date": getattr(ds, "SeriesDate", None), "time": getattr(ds, "SeriesTime", None), "description": getattr(ds, "SeriesDescription", None), "modality": getattr(ds, "Modality", None) } # Image information metadata["image"] = { "sop_instance_uid": getattr(ds, "SOPInstanceUID", None), "sop_class_uid": getattr(ds, "SOPClassUID", None), "instance_number": getattr(ds, "InstanceNumber", None), "rows": getattr(ds, "Rows", None), "columns": getattr(ds, "Columns", None), "pixel_spacing": getattr(ds, "PixelSpacing", None), "slice_thickness": getattr(ds, "SliceThickness", None), "slice_location": getattr(ds, "SliceLocation", None), "window_center": getattr(ds, "WindowCenter", None), "window_width": getattr(ds, "WindowWidth", None) } # Equipment information metadata["equipment"] = { "manufacturer": getattr(ds, "Manufacturer", None), "model": getattr(ds, "ManufacturerModelName", None), "software_versions": getattr(ds, "SoftwareVersions", None) } return metadata except Exception as e: raise RuntimeError(f"Failed to extract DICOM metadata: {e}")
- src/dicom_mcp/server.py:177-187 (registration)Tool registration in list_tools(), including name, description, and input schema for 'dicom_file' path.types.Tool( name="extract-dicom-metadata", description="Extract detailed metadata from a DICOM file", inputSchema={ "type": "object", "properties": { "dicom_file": {"type": "string", "description": "Path to a DICOM file"}, }, "required": ["dicom_file"], }, ),
- src/dicom_mcp/server.py:281-294 (handler)MCP call_tool handler dispatch for the tool: validates input file, calls extract_dicom_metadata, and returns JSON-formatted metadata as text content.elif name == "extract-dicom-metadata": dicom_file = arguments.get("dicom_file") if not dicom_file or not os.path.isfile(dicom_file): raise ValueError(f"Invalid DICOM file: {dicom_file}") # Extract metadata metadata = extract_dicom_metadata(dicom_file) return [ types.TextContent( type="text", text=json.dumps(metadata, indent=2, default=str) ) ]
- src/dicom_mcp/server.py:180-186 (schema)JSON schema defining the input: object with required 'dicom_file' string path.inputSchema={ "type": "object", "properties": { "dicom_file": {"type": "string", "description": "Path to a DICOM file"}, }, "required": ["dicom_file"], },