Skip to main content
Glama

extract-dicom-metadata

Extract detailed metadata from DICOM files to analyze medical imaging data. Utilize the DICOM-MCP server for efficient processing and storage.

Instructions

Extract detailed metadata from a DICOM file

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dicom_fileYesPath to a DICOM file

Implementation Reference

  • Core implementation of the tool: reads DICOM file with pydicom.dcmread(stop_before_pixels=True) and extracts structured metadata for patient, study, series, image, and equipment sections.
    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 MCP server's list_tools(): defines name, description, and input schema requiring '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 dispatching handler: validates 'dicom_file' argument, calls the core extract_dicom_metadata function, and returns metadata as formatted JSON 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 for tool input: requires a 'dicom_file' string property (path to DICOM file).
    inputSchema={ "type": "object", "properties": { "dicom_file": {"type": "string", "description": "Path to a DICOM file"}, }, "required": ["dicom_file"], },

Other Tools

Related Tools

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