Skip to main content
Glama

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
NameRequiredDescriptionDefault
dicom_fileYesPath to a DICOM file

Implementation Reference

  • 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}")
  • 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"], }, ),
  • 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) ) ]
  • 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"], },

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shaunporwal/DICOM-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server