SAP CC Object Storage (Swift)
Inspect Swift containers and objects: list containers, browse object listings, check object metadata.
MCP Tools
Read Tools
| Tool | Purpose | Key Parameters |
|---|---|---|
swift_list_containers |
List containers in account | prefix, limit (default 100) |
swift_list_objects |
List objects in a container | container (required), prefix, delimiter (e.g., / for pseudo-dirs), limit |
swift_get_object_metadata |
Get object metadata (not content) | container (required), object (required) |
Write Tools (requires MCP_READ_ONLY=false)
| Tool | Purpose | Key Parameters |
|---|---|---|
swift_upload_object* |
Upload text content to a container | container (required), object (required), content (required), content_type, safe_write (bool, If-None-Match), confirmed |
swift_delete_object* |
Delete an object from a container | container (required), object (required), confirmed |
Guardrails
- Path segment validation: Container and object names validated to prevent path traversal
- safe_write mode: When
safe_write=true, upload fails if object already exists (prevents accidental overwrites) - Confirmation required: Write tools return preview unless
confirmed=true - Text-only uploads: Only text content can be uploaded via MCP (binary files require CLI)
- No container create/delete: Container lifecycle management not available via MCP
Gotchas
This tool returns metadata only, never object content.
swift_get_object_metadatareturns content_type, content_length, etag, and last_modified. It does NOT download or display the object body. You cannot read file contents through MCP tools.Container names are strings, not UUIDs. Unlike most OpenStack resources, containers are identified by name, not UUID. Names are case-sensitive and URL-encoded.
Delimiter creates pseudo-directories. Setting
delimiter=/causes Swift to group objects by prefix and returnsubdirentries. This simulates directory browsing but Swift is a flat namespace internally.Default limit is 100, not all objects. Both list tools default to 100 results. Large containers may have thousands of objects. If you need to verify an object exists, use
prefixto narrow results rather than paginating.Etag is MD5, not SHA. The
etag(hash) field in object listings and metadata is an MD5 digest. For large objects uploaded via SLO/DLO, the etag is an MD5 of the concatenated segment etags, not of the full content.Bytes are raw bytes, not human-readable. Container
bytesand objectbytes/content_lengthare in raw bytes. Divide by appropriate power of 1024 for KiB/MiB/GiB.
Common Workflows
Browse Container Contents
swift_list_containers— get an overview of all containers and their sizes.swift_list_objectswithcontainer=<name>anddelimiter=/— browse top-level pseudo-directories.swift_list_objectswithcontainer=<name>andprefix=subdir/anddelimiter=/— drill into a subdirectory.
Check if a Specific Object Exists
swift_list_objectswithcontainer=<name>andprefix=<exact-object-name>.- If the object appears in results, it exists. If empty results, it does not.
swift_get_object_metadatato confirm and get details (size, type, last modified).
Assess Storage Usage
swift_list_containers— sum thebytesfield across all containers for total usage.- Compare against quota from
limes_get_project_quota(service=object-store). - Identify large containers by
bytesvalue and investigate withswift_list_objects.
Cross-Service References
| Need | Service | Tool |
|---|---|---|
| Object storage quota | Limes | limes_get_project_quota(service=object-store) |
| Who modified containers/objects | Hermes | hermes_list_events(target_type=container) |
| Block storage (volumes) instead | Cinder | cinder_list_volumes |
| S3 compatibility endpoint | Keystone | keystone_list_services (look for s3 type) |