Repository navigation
mcp-s3-v1.3.0
Highlights
Public endpoint for presigned URLs (#109)
Presigned URLs are now signed against an optional public-facing endpoint, separate from the endpoint used for data operations.
Previously the presign client was built from the same s3.Client as all other operations, so presigned URLs were signed against Config.Endpoint. In clustered deployments Endpoint is typically an internal address (for example a SeaweedFS service DNS name reachable only inside the cluster), which means the presigned URLs handed back to a browser or an external client pointed at a host that could not be resolved from outside.
This release adds Config.PresignEndpoint (environment variable S3_PRESIGN_ENDPOINT). When set, presigned URLs are signed against that public host while every data operation continues to use the internal Endpoint. The field carries UsePathStyle over to the presign client, which is correct because the SigV4 query signature on a presigned URL does not cover the host, so swapping the base endpoint still produces a signature that validates against the public host.
PresignEndpoint is wired into FromEnv and Clone, and is covered by TestNew_PresignEndpoint, which asserts the signed URL host is the public endpoint when set and falls back to Endpoint when empty.
Build hardening (#109)
The build toolchain is now pinned to go1.26.4 via the toolchain directive in go.mod. The repository previously had no toolchain directive, so builds floated to whatever Go version was installed. Pinning the patched toolchain clears two reachable Go standard-library govulncheck findings (GO-2026-5039 in net/textproto, GO-2026-5037 in crypto/x509). CI honors the pin through go-version-file: go.mod.
Dependency and CI updates
- AWS SDK for Go v2 group updated, 5 modules (#108)
codecov/codecov-action6.0.1 -> 7.0.0 (#105)github/codeql-action4.36.0 -> 4.36.2 (#106)actions/checkout6.0.2 -> 6.0.3 (#107)
Upgrade notes
This release is backward compatible. With no configuration change, presigning behavior is identical to v1.2.0 because an empty PresignEndpoint falls back to Endpoint.
To return externally reachable presigned URLs, set the public S3 address:
S3_ENDPOINT=http://seaweedfs-s3:8333 # internal, used for data operations
S3_PRESIGN_ENDPOINT=https://s3.example.com # public, used only for presigned URLsChangelog
Features
Others
- 2a061ca: ci: bump actions/checkout from 6.0.2 to 6.0.3 (#107) (@dependabot[bot])
- a34222b: ci: bump codecov/codecov-action from 6.0.1 to 7.0.0 (#105) (@dependabot[bot])
- ba73ff2: ci: bump github/codeql-action from 4.36.0 to 4.36.2 (#106) (@dependabot[bot])
- 673c6db: deps: bump the aws-sdk group with 5 updates (#108) (@dependabot[bot])
Installation
Homebrew (macOS)
brew install txn2/tap/mcp-s3Claude Code CLI
claude mcp add s3 \
-e AWS_REGION=us-east-1 \
-e AWS_ACCESS_KEY_ID=your-key \
-e AWS_SECRET_ACCESS_KEY=your-secret \
-- mcp-s3Docker
docker pull ghcr.io/txn2/mcp-s3:v1.3.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-s3_1.3.0_linux_amd64.tar.gz.sigstore.json \
mcp-s3_1.3.0_linux_amd64.tar.gz