MCP server for Amazon S3 and S3-compatible endpoints (LocalStack, MinIO). Single Go binary.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Talk to Amazon S3 β or LocalStack, MinIO, any S3-compatible store β from an MCP-speaking agent.
A single static Go binary that speaks the Model Context Protocol and exposes 8 tools for working with S3: list buckets, list/read/write/delete objects, create/delete buckets. Point it at real AWS or at a local LocalStack/MinIO instance with one environment variable β same binary, same tools, zero code changes.
No Python, no uv, no runtime dependency to install β just a binary and
an .mcp.json.
An agent that can only talk about your S3 buckets isn't that useful. This gives it hands: it can look inside a bucket, read a config file out of it, drop a report back in, or clean up a stale prefix β safely, with guardrails on size and destructive actions built in.
| Tool | What it does | Write? |
|---|---|---|
s3_list_buckets | List buckets visible to the credentials | |
s3_list_objects | List objects in a bucket, optional prefix, paginated | |
s3_head_object | Object metadata (size, type, ETag) without downloading | |
s3_get_object | Read an object's content β text or base64, size-capped | |
s3_put_object | Write a small text/base64 object (β€ 5 MB) | βοΈ |
s3_delete_object | Delete one object | ποΈ destructive |
s3_create_bucket | Create a bucket | βοΈ |
s3_delete_bucket | Delete an empty bucket | ποΈ destructive |
Every tool accepts an optional response_format: markdown (default,
pretty tables for a chat UI) or json (for programmatic use).
s3_get_object auto-detects text vs. binary content and caps output at
200,000 bytes by default (raise via max_bytes, hard cap
5,000,000) β it's built for reading configs, logs, and small data
files, not bulk transfer. Reach for the AWS CLI or SDK directly for large
objects.
Fastest path: grab a prebuilt bundle from the latest release β
download s3-mcp-connector-plugin-<version>-<os>-<arch>.zip, unzip it,
and point Cowork/Claude at the plugin/ folder inside (see step 4 of
SETUP.md). No Go toolchain required.
From source:
Or make build && make localstack-up β see the Makefile for
every shortcut (test, vet, fmt, lint, tidy, localstack-down).
Full walkthrough β including wiring this up as a Claude/Cowork plugin and switching from LocalStack to real AWS β is in SETUP.md.
Everything is environment variables, passed through by the plugin's
.mcp.json:
| Variable | Purpose | Default |
|---|---|---|
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY | AWS credentials. Any non-empty values work against LocalStack. | β |
AWS_REGION | Region to use. | us-east-1 |
S3_ENDPOINT_URL | Custom endpoint. Leave unset for real AWS. | (unset) |
S3_FORCE_PATH_STYLE | true for LocalStack/MinIO (path-style addressing). | false |
This isn't a toy script β it's got the same checks you'd expect from a production Go service:
go test ./...)go vet + gofmt cleanAll of it runs in CI on every push and PR.
Versions follow semver and are cut automatically by
release-please from
Conventional Commits on main:
fix: ... β patch (v0.1.0 β v0.1.1)feat: ... β minor (v0.1.1 β v0.2.0)feat!: ... / BREAKING CHANGE: footer β major (v0.2.0 β v1.0.0)Every merged PR updates a standing "chore(main): release vX.Y.Z" PR with an auto-generated CHANGELOG.md. Merging that PR:
server.json from those exact assets (fresh version +
SHA-256 hashes) and publishes it to the
official MCP Registry via
mcp-publisher, authenticated with GitHub OIDC β no stored secretsSee .github/workflows/release-please.yml
and .github/workflows/publish-mcp-registry.yml
(also runnable by hand for an existing tag via workflow_dispatch).
PRs and issues are very welcome β see CONTRIBUTING.md for the full guide (setup, coding conventions, how to add a new tool) and the Code of Conduct.
main is protected: every change, including the maintainer's, lands via
pull request with CI green. PR titles must follow
Conventional Commits β that's what
drives the automatic versioning above.
Found a security issue? Please follow SECURITY.md instead of opening a public issue.
MIT Β© Ferhat Dundar
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/s3-mcp-connector)<a href="https://allmcps.com/mcp/s3-mcp-connector"><img src="https://allmcps.com/api/badge/s3-mcp-connector?style=directory" alt="S3 Mcp Connector on AllMCPs" /></a>