Skip to main content

AWS HealthImaging MCP Server

A comprehensive Model Context Protocol (MCP) server for AWS HealthImaging operations. Provides 39 tools for complete medical imaging data lifecycle management with automatic datastore discovery.

Table of Contents

Features

  • 39 Comprehensive HealthImaging Tools: Complete medical imaging data lifecycle management
  • Delete Operations: Patient data removal and study deletion tools support "right to be forgotten/right to erasure" objectives
  • Automatic Datastore Discovery: Seamlessly find and work with existing datastores
  • DICOM Metadata Operations: Extract and analyze medical imaging metadata
  • Image Frame Management: Retrieve and process individual image frames
  • Search Capabilities: Advanced search across image sets and studies
  • Bulk Operations: Efficient patient metadata updates and deletions
  • DICOM Hierarchy: Manipulate series and instances within image sets
  • Error Handling: Comprehensive error handling with detailed feedback
  • Type Safety: Full type annotations and validation

Quick Start

uvx awslabs.healthimaging-mcp-server@latest

Option 2: uv install

uv add awslabs.healthimaging-mcp-server

Option 3: Docker

docker run -it --rm \
-e AWS_REGION=us-east-1 \
-e AWS_PROFILE=your-profile \
-v ~/.aws:/root/.aws:ro \
public.ecr.aws/awslabs/healthimaging-mcp-server:latest

MCP Client Configuration

Amazon Q Developer CLI

{
"mcpServers": {
"healthimaging": {
"command": "uvx",
"args": ["awslabs.healthimaging-mcp-server@latest"],
"env": {
"AWS_REGION": "us-east-1",
"AWS_PROFILE": "your-profile",
"FASTMCP_LOG_LEVEL": "WARNING"
}
}
}
}

Other MCP Clients

For other MCP clients like Claude Desktop, add this to your configuration:

{
"mcpServers": {
"healthimaging": {
"command": "uvx",
"args": ["awslabs.healthimaging-mcp-server@latest"],
"env": {
"AWS_REGION": "us-east-1",
"AWS_PROFILE": "your-profile"
}
}
}
}

Available Tools

Datastore Management

  • list_datastores - List all HealthImaging datastores with optional filtering
  • get_datastore - Get detailed information about a specific datastore
  • create_datastore - Create a new HealthImaging datastore
  • delete_datastore - Delete a datastore (with safety checks)

Image Set Operations

  • search_image_sets - Advanced search across image sets with DICOM criteria
  • get_image_set - Get detailed information about a specific image set
  • get_image_set_metadata - Retrieve complete DICOM metadata for an image set
  • list_image_set_versions - List all versions of an image set
  • update_image_set_metadata - Update DICOM metadata for an image set
  • delete_image_set - Delete an image set (with safety checks)
  • copy_image_set - Copy an image set to another datastore

DICOM Job Management

  • start_dicom_import_job - Start a new DICOM import job from S3
  • get_dicom_import_job - Get status and details of an import job
  • list_dicom_import_jobs - List all DICOM import jobs with filtering
  • start_dicom_export_job - Start a new DICOM export job to S3
  • get_dicom_export_job - Get status and details of an export job
  • list_dicom_export_jobs - List all DICOM export jobs with filtering

Metadata & Frame Operations

  • get_image_frame - Retrieve individual image frames with pixel data

Tagging Operations

  • list_tags_for_resource - List all tags for a HealthImaging resource
  • tag_resource - Add tags to a HealthImaging resource
  • untag_resource - Remove tags from a HealthImaging resource

Advanced DICOM Operations

  • delete_patient_studies - Delete all studies for a specific patient (GDPR compliance)
  • delete_study - Delete all image sets for a specific study
  • search_by_patient_id - Search for all image sets by patient ID
  • search_by_study_uid - Search for image sets by study instance UID
  • search_by_series_uid - Search for image sets by series instance UID
  • get_patient_studies - Get all studies for a specific patient
  • get_patient_series - Get all series for a specific patient
  • get_study_primary_image_sets - Get primary image sets for a study
  • delete_series_by_uid - Delete a specific series by series instance UID
  • get_series_primary_image_set - Get the primary image set for a series
  • get_patient_dicomweb_studies - Get DICOMweb study-level information for a patient
  • delete_instance_in_study - Delete a specific instance within a study
  • delete_instance_in_series - Delete a specific instance within a series
  • update_patient_study_metadata - Update patient and study metadata for an entire study

Bulk Operations

  • bulk_update_patient_metadata - Update patient metadata across all studies for a patient
  • bulk_delete_by_criteria - Delete multiple image sets matching specified criteria

DICOM Hierarchy Operations

  • remove_series_from_image_set - Remove a specific series from an image set
  • remove_instance_from_image_set - Remove a specific instance from an image set

Usage Examples

Basic Operations

# List all datastores
datastores = await list_datastores()

# Get specific datastore
datastore = await get_datastore(datastore_id="12345678901234567890123456789012")

# Search for image sets
results = await search_image_sets(
datastore_id="12345678901234567890123456789012",
search_criteria={
"filters": [
{
"values": [{"DICOMPatientId": "PATIENT123"}],
"operator": "EQUAL"
}
]
}
)
# Complex search with multiple filters
results = await search_image_sets(
datastore_id="12345678901234567890123456789012",
search_criteria={
"filters": [
{
"values": [{"DICOMStudyDate": "20240101"}],
"operator": "EQUAL"
},
{
"values": [{"DICOMModality": "CT"}],
"operator": "EQUAL"
}
]
},
max_results=50
)

DICOM Metadata

# Get DICOM metadata for an image set
metadata = await get_image_set_metadata(
datastore_id="12345678901234567890123456789012",
image_set_id="98765432109876543210987654321098"
)

# Get specific image frame
frame = await get_image_frame(
datastore_id="12345678901234567890123456789012",
image_set_id="98765432109876543210987654321098",
image_frame_information={
"imageFrameId": "frame123"
}
)

Authentication

Required Permissions

Your AWS credentials need the following permissions:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"medical-imaging:ListDatastores",
"medical-imaging:GetDatastore",
"medical-imaging:CreateDatastore",
"medical-imaging:DeleteDatastore",
"medical-imaging:ListImageSets",
"medical-imaging:GetImageSet",
"medical-imaging:SearchImageSets",
"medical-imaging:CopyImageSet",
"medical-imaging:UpdateImageSetMetadata",
"medical-imaging:DeleteImageSet",
"medical-imaging:GetImageFrame",
"medical-imaging:GetImageSetMetadata",
"medical-imaging:ListDICOMImportJobs",
"medical-imaging:GetDICOMImportJob",
"medical-imaging:StartDICOMImportJob"
],
"Resource": "*"
}
]
}

Error Handling

The server provides comprehensive error handling:

  • Validation Errors: Input validation with detailed error messages
  • AWS Service Errors: Proper handling of AWS API errors
  • Resource Not Found: Clear messages for missing resources
  • Permission Errors: Helpful guidance for access issues
  • Rate Limiting: Automatic retry with exponential backoff

Troubleshooting

Common Issues

  1. Authentication Errors

    • Verify AWS credentials are configured
    • Check IAM permissions
    • Ensure correct AWS region
  2. Resource Not Found

    • Verify datastore/image set IDs
    • Check resource exists in specified region
    • Confirm access permissions
  3. Import Job Failures

    • Check S3 bucket permissions
    • Verify DICOM file format
    • Review import job logs

Debug Mode

Enable debug logging:

export FASTMCP_LOG_LEVEL=DEBUG
uvx awslabs.healthimaging-mcp-server@latest

Development

Local Development Setup

  1. Clone the repository:
git clone https://github.com/awslabs/mcp-server-collection.git
cd mcp-server-collection/src/healthimaging-mcp-server
  1. Install dependencies:
uv sync --dev
  1. Run tests:
uv run python -m pytest tests/ -v
  1. Run the server locally:
uv run python -m awslabs.healthimaging_mcp_server

Testing

The server includes comprehensive tests with 99% coverage:

# Run all tests
uv run python -m pytest tests/ -v

# Run with coverage
uv run python -m pytest tests/ -v --cov=awslabs.healthimaging_mcp_server --cov-report=html

Contributing

We welcome contributions! Please see our Contributing Guide for details.

License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

Support

For support, please:

  1. Check the troubleshooting section
  2. Review AWS HealthImaging documentation
  3. Open an issue in the GitHub repository