Dynamic Connection Management
This release adds runtime connection management to mcp-s3, enabling downstream projects like mcp-data-platform to dynamically add and remove S3 connections without restarting the server. This matches the pattern established by mcp-trino v1.2.0.
Highlights
Runtime Add/Remove Connections (#71)
The multiserver.Manager now supports fully thread-safe dynamic connection management:
// Add a new connection at runtime
err := manager.AddConnection(multiserver.ConnectionConfig{
Name: "data-lake",
Region: "eu-west-1",
Endpoint: "https://s3.eu-west-1.amazonaws.com",
}, false)
// Replace an existing connection (closes old client, updates config)
err = manager.AddConnection(multiserver.ConnectionConfig{
Name: "data-lake",
Region: "us-west-2", // updated region
}, false)
// Remove a connection (closes client, removes config)
err = manager.RemoveConnection("data-lake")New Public API
| Addition | Package | Description |
|---|---|---|
ConnectionManager interface |
pkg/tools |
Abstraction for dynamic connection management; satisfied by multiserver.Manager |
WithConnectionManager() option |
pkg/tools |
Configures a Toolkit with a connection manager |
Toolkit.RemoveClient() |
pkg/tools |
Removes a locally-added client by name |
Thread Safety Improvements
All Manager read methods (ListConnections, HasConnection, DefaultConnectionName) now acquire RLock for safe concurrent access. The Toolkit delegates to the provider on each GetClient call (no stale client cache), so Manager.RemoveConnection takes immediate effect across all tool invocations.
Default Connection Protection
The default/primary connection is protected from both replacement and removal via AddConnection/RemoveConnection, preventing accidental disconnection of the bootstrap connection.
Behavioral Changes
| Operation | v1.0.0 | v1.1.0 |
|---|---|---|
AddConnection with existing name |
Returns error | Replaces config, closes old client |
AddConnection on default connection |
Allowed | Returns error |
RemoveConnection on default connection |
Silently removes | Returns error |
RemoveConnection on non-existent name |
Silent no-op | Returns error |
Manager read methods |
No locking | RLock protected |
Toolkit.GetClient via provider |
Cached permanently in Toolkit | Delegated to provider each call |
Dependency Updates
github.com/modelcontextprotocol/go-sdkv1.3.1 → v1.4.1github.com/aws/aws-sdk-go-v2group updated (multiple patches)golangci-lintupdated- CI action bumps: codecov, cosign-installer, codeql-action, deploy-pages, sbom-action, docker actions, setup-go
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.1.0Verification
All release artifacts are signed with Cosign:
cosign verify-blob --bundle mcp-s3_1.1.0_linux_amd64.tar.gz.sigstore.json \
mcp-s3_1.1.0_linux_amd64.tar.gzFull Changelog: v1.0.0...v1.1.0