s3-mcp
Provides S3-compatible storage operations (list, get, put, delete, copy, presign) against Backblaze B2.
Provides S3-compatible storage operations against Cloudflare R2, including reading, writing, and managing objects and buckets.
Provides S3-compatible storage operations (list, get, put, delete, copy, presign, bucket management) against MinIO.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@s3-mcp list all files in the 'reports' bucket"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
s3-mcp
A generic S3-protocol MCP server (stdio) that works against any S3-compatible endpoint — RustFS, MinIO, Cloudflare R2, Backblaze B2, AWS S3 — not just AWS.
Single Python package, one boto3 client created at startup, configuration via
environment variables only. Built on the official mcp
SDK (high-level server API) and boto3.
Configuration (environment variables)
Variable | Required | Default | Description |
| no | (unset) | S3-compatible endpoint; omit to target real AWS |
| no |
| Region for signing and bucket creation |
| yes | — | Access key |
| yes | — | Secret key |
| no |
| Path-style addressing ( |
| no |
|
|
Booleans accept true/false/1/0/yes/no (case-insensitive). Missing credentials
or invalid booleans abort startup with a clear error.
Related MCP server: MinIO MCP Server
Tools
Tool | Read-only hint |
| yes |
| yes |
| yes |
| yes |
| yes |
| no |
| no |
| no |
| no |
| no |
| no |
Tool errors are raised as short RuntimeError messages and surfaced by MCP as
error results. Presigned URLs are capped at 7 days (604800 s), per SigV4.
Example configurations
RustFS with a self-signed certificate
{
"mcpServers": {
"s3-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "S3_ENDPOINT_URL=https://rustfs.local:9000",
"-e", "S3_TLS_INSECURE=true",
"-e", "AWS_REGION=us-east-1",
"-e", "AWS_ACCESS_KEY_ID",
"-e", "AWS_SECRET_ACCESS_KEY",
"ghcr.io/jakeperalta7/s3-mcp:latest"
]
}
}
}-e VAR without a value passes the variable through from your shell, so
credentials never appear in the config file.
MinIO
{
"mcpServers": {
"s3-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "S3_ENDPOINT_URL=http://localhost:9000",
"-e", "AWS_REGION=us-east-1",
"-e", "AWS_ACCESS_KEY_ID",
"-e", "AWS_SECRET_ACCESS_KEY",
"ghcr.io/jakeperalta7/s3-mcp:latest"
]
}
}
}AWS S3
Omit S3_ENDPOINT_URL; standard AWS credential/region resolution applies:
{
"mcpServers": {
"s3-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "AWS_REGION",
"-e", "AWS_ACCESS_KEY_ID",
"-e", "AWS_SECRET_ACCESS_KEY",
"ghcr.io/jakeperalta7/s3-mcp:latest"
]
}
}
}Without Docker (uv)
uvx --from git+https://github.com/JakePeralta7/s3-mcp s3-mcp{
"mcpServers": {
"s3-mcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/JakePeralta7/s3-mcp", "s3-mcp"],
"env": {
"S3_ENDPOINT_URL": "http://localhost:9000",
"AWS_ACCESS_KEY_ID": "...",
"AWS_SECRET_ACCESS_KEY": "..."
}
}
}
}Development
uv sync --group dev # install deps into .venv
uv run pytest -q # unit tests (boto3 mocked, no network)
docker build -t s3-mcp:dev .Entrypoint: python -m s3_mcp (stdio transport only).
Releasing
Every push to main runs tests, then publishes
ghcr.io/<owner>/<repo>:<version> + :latest, where <version> is read from
version in pyproject.toml. To release, bump the version and merge to main.
Git tags are not used.
License
Available Tools
11 toolscopy_objectC
Copy an object within or across buckets on the same endpoint.
Inputs: dst_key (required), src_key (required), dst_bucket (required), src_bucket (required). Returns: object
create_bucketC
Create a bucket in the configured region.
Inputs: bucket (required). Returns: object
delete_bucketA
Delete a bucket (must be empty).
Inputs: bucket (required). Returns: object
delete_objectC
Delete an object from a bucket.
Inputs: key (required), bucket (required). Returns: object
get_objectARead-only
Read an object. UTF-8 content returns as text; anything else as base64.
Inputs: key (required), bucket (required). Returns: object
list_bucketsARead-only
List all buckets accessible with the configured credentials.
Inputs: no named parameters. Returns: result
list_objectsARead-only
List objects in a bucket (single page, up to max_keys).
Returns objects with key/size/last_modified plus a truncated flag when more results exist.
Inputs: bucket (required), prefix, max_keys. Returns: object
presign_getBRead-only
Generate a pre-signed GET URL valid for expires_s seconds (max 604800).
Inputs: key (required), bucket (required), expires_s. Returns: result
presign_putC
Generate a pre-signed PUT URL valid for expires_s seconds (max 604800).
Inputs: key (required), bucket (required), expires_s. Returns: result
put_objectC
Write an object. Set base64=true when body is base64-encoded binary.
Inputs: key (required), body (required), bucket (required), base64. Returns: object
stat_objectARead-only
Get object metadata (size, etag, content type, last modified).
Inputs: key (required), bucket (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Every tool maps to a distinct S3 operation: bucket listing/creation/deletion, object listing/read/metadata/write/delete/copy, and presigned URL generation for GET vs PUT. There is no functional overlap that would cause an agent to select the wrong tool.
All tool names follow the same snake_case verb_noun pattern (list_buckets, get_object, presign_put, create_bucket, etc.). The naming is predictable and consistent across the entire surface.
With 11 tools, the set is well-scoped for an S3-focused server. Each tool covers a core operation without extraneous additions or redundant convenience wrappers.
The server covers bucket lifecycle and object CRUD, including copying and presigned URLs, so common workflows are fully supported. Minor gaps exist around pagination for large object listings and advanced operations like multipart uploads, but these are not severe for typical usage.
Maintenance
Related MCP Connectors
An MCP server for the STRG.com s3-compatible object storage network for all management operations. Full documentation access, ask questions, create buckets, configure scoped access keys, CORS rules, lifecycle policies and perform any S3 operation.
Browse, upload, download, and share files in your S3-compatible buckets with delegated roles.
Browse, upload, download, copy, move and share files in your own S3-compatible buckets.
Create a free sandbox object storage bucket; upload, download, list, inspect, and delete objects.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables interaction with AWS S3 through MCP, supporting bucket and object management, lifecycle configurations, tagging, policies, CORS settings, presigned URLs, and file uploads/downloads.3MIT
- FlicenseAqualityDmaintenanceProvides tools for interacting with MinIO and S3-compatible object storage through MCP clients like Claude. It enables comprehensive bucket and object management, including listing, creating, uploading, and generating presigned URLs.132-
- AlicenseAqualityDmaintenanceEnables MCP clients to connect to AWS S3 buckets, list, upload, and read objects in various formats, supporting public and private buckets with multiple transport modes.4MIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for AWS S3 and S3-compatible storage, enabling file upload, download, listing, deletion, and temporary remote file staging via natural language.BSD 3-Clause