io.github.FerhatDundar/s3-mcp-connector

Registre officiel Autres

MCP server for Amazon S3 and S3-compatible endpoints (LocalStack, MinIO). Single Go binary.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-darwin-arm64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.
MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-darwin-amd64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.
MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-linux-amd64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.
MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-linux-arm64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.
MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-windows-amd64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.
MCPB package https://github.com/FerhatDundar/s3-mcp-connector/releases/download/v0.2.0/s3-mcp-connector-plugin-v0.2.0-windows-arm64.zip

Variables d'environnement

  • AWS_ACCESS_KEY_ID obligatoire secret AWS access key ID
  • AWS_SECRET_ACCESS_KEY obligatoire secret AWS secret access key
  • AWS_REGION AWS region (default us-east-1)
  • S3_ENDPOINT_URL Custom S3 endpoint, e.g. http://localhost:4566 for LocalStack. Leave unset for real AWS.
  • S3_FORCE_PATH_STYLE Set to true for LocalStack/MinIO path-style addressing.

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. 🪣 s3-mcp-connector
  2. ✨ Why this exists
  3. 🧰 Tools
  4. 🚀 Quickstart
  5. 🔐 Configuration
  6. 🧪 Quality bar
  7. 🏷️ Releases & versioning
  8. 📁 Layout
  9. 🤝 Contributing
  10. 📄 License

🪣 s3-mcp-connector

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.

✨ Why this exists

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.

🧰 Tools

ToolWhat it doesWrite?
s3_list_bucketsList buckets visible to the credentials
s3_list_objectsList objects in a bucket, optional prefix, paginated
s3_head_objectObject metadata (size, type, ETag) without downloading
s3_get_objectRead an object's content — text or base64, size-capped
s3_put_objectWrite a small text/base64 object (≤ 5 MB)✍️
s3_delete_objectDelete one object🗑️ destructive
s3_create_bucketCreate a bucket✍️
s3_delete_bucketDelete 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.

🚀 Quickstart

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:

# 1. Build
cd go-server
go mod tidy
go build -o s3-connector-server .
cp s3-connector-server ../plugin/servers/go/

# 2. Spin up LocalStack to test against (no AWS account needed)
cd ..
docker compose up -d

# 3. Point the connector at it
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1
export S3_ENDPOINT_URL=http://localhost:4566
export S3_FORCE_PATH_STYLE=true

./go-server/s3-connector-server   # serves MCP over stdio

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.

🔐 Configuration

Everything is environment variables, passed through by the plugin's .mcp.json:

VariablePurposeDefault
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEYAWS credentials. Any non-empty values work against LocalStack.—
AWS_REGIONRegion to use.us-east-1
S3_ENDPOINT_URLCustom endpoint. Leave unset for real AWS.(unset)
S3_FORCE_PATH_STYLEtrue for LocalStack/MinIO (path-style addressing).false

🧪 Quality bar

This isn't a toy script — it's got the same checks you'd expect from a production Go service:

  • ✅ Unit tests for every input-validation path (go test ./...)
  • ✅ go vet + gofmt clean
  • ✅ golangci-lint (govet, staticcheck, errcheck, gosec, and more)
  • ✅ govulncheck — no known vulnerabilities in the dependency graph
  • ✅ CodeQL static security analysis on every push
  • ✅ End-to-end verified against real LocalStack — every tool (create/delete bucket, put/get/head/list/delete object, and the 404 error path) was exercised against a live S3-compatible service, not mocks
  • ✅ Dependabot keeps Go modules and Actions current

All of it runs in CI on every push and PR.

🏷️ Releases & versioning

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:

  1. tags the release and publishes it on GitHub
  2. builds and attaches zipped, ready-to-install plugin bundles for linux/darwin/windows × amd64/arm64
  3. regenerates 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 secrets

See .github/workflows/release-please.yml and .github/workflows/publish-mcp-registry.yml (also runnable by hand for an existing tag via workflow_dispatch).

📁 Layout

s3-mcp-connector/
├── README.md                  ← you are here
├── SETUP.md                   ← step-by-step setup guide (LocalStack + real AWS)
├── CONTRIBUTING.md             ← how to contribute
├── CODE_OF_CONDUCT.md
├── SECURITY.md                 ← vulnerability reporting
├── CODEOWNERS
├── LICENSE                     ← MIT
├── Makefile                    ← build / test / lint / localstack shortcuts
├── docker-compose.yml          ← LocalStack, for local testing
├── .golangci.yml                ← lint rules
├── release-please-config.json  ← semver/changelog automation config
├── .release-please-manifest.json
├── server.json                  ← MCP Registry manifest (regenerated fresh per release by CI)
├── scripts/
│   └── render-server-json.sh    ← rebuilds server.json from a release's zip assets
├── .github/
│   ├── workflows/
│   │   ├── ci.yml                     ← build, vet, test, lint, govulncheck
│   │   ├── codeql.yml                 ← security scanning
│   │   ├── pr-title.yml               ← Conventional Commits PR title check
│   │   ├── release-please.yml         ← version PRs, tagging, GitHub releases
│   │   ├── publish-mcp-registry.yml   ← publishes server.json to the MCP Registry
│   │   └── rebuild-release-assets.yml ← manual re-attach fallback
│   ├── ISSUE_TEMPLATE/
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── dependabot.yml
├── go-server/                  ← the MCP server source
│   ├── main.go
│   ├── main_test.go
│   ├── go.mod / go.sum
│   └── README.md
└── plugin/                     ← installable Cowork/Claude plugin
    ├── .claude-plugin/plugin.json
    ├── .mcp.json                ← holds credentials locally — never commit real ones
    └── servers/go/              ← compiled binary goes here

🤝 Contributing

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.

📄 License

MIT © Ferhat Dundar

Questions fréquentes

Qu'est-ce que io.github.FerhatDundar/s3-mcp-connector ?

MCP server for Amazon S3 and S3-compatible endpoints (LocalStack, MinIO). Single Go binary.

Comment installer io.github.FerhatDundar/s3-mcp-connector ?

Suivez les étapes d'installation de sa documentation, affichée sur cette page et dans son dépôt.

Faut-il une clé API pour io.github.FerhatDundar/s3-mcp-connector ?

Oui. Il attend AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, à renseigner dans sa configuration.

io.github.FerhatDundar/s3-mcp-connector est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient io.github.FerhatDundar/s3-mcp-connector ?

Il est publié par FerhatDundar. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.