Prepare the DICOM P10 instances to be uploaded and construct a multipart/related HTTP POST request to [base]/studies with each DICOM instance as a separate part with Content-Type: application/dicom
Set the correct multipart boundary in the Content-Type header and ensure each part includes the appropriate Content-Type and optionally Content-Length headers before the binary DICOM data
POST the multipart request to the STOW-RS endpoint with appropriate authorization headers, and parse the response XML (application/dicom+xml) or JSON to identify which instances were stored successfully and which failed
Verify storage by sending a QIDO-RS GET request to [base]/studies?StudyInstanceUID=[uid] to retrieve the study-level metadata and confirm the study exists in the server
Retrieve series and instance metadata using the hierarchical QIDO-RS endpoints [base]/studies/[uid]/series and [base]/studies/[uid]/series/[uid]/instances to validate all uploaded instances are indexed
Known gotchas
STOW-RS uploads for large studies can exceed default HTTP client timeouts and server-side request size limits; chunk large studies into smaller batches by series and implement retry logic for individual series failures
Some DICOMweb servers perform asynchronous indexing after accepting the STOW-RS request; QIDO-RS queries immediately after upload may return empty results until indexing completes
DICOM Transfer Syntax negotiation does not exist in STOW-RS the way it does in DIMSE C-STORE; the server either accepts or rejects the Transfer Syntax of the uploaded instance, so transcode before upload if the server has Transfer Syntax restrictions
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp