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