
AWS S3 MCP Server
A Model Context Protocol (MCP) server that gives AI assistants (Claude, Cursor, etc.) direct access to AWS S3 โ enabling them to list, upload, download, and manage S3 buckets and objects through natural language.
Why This Exists
When building AI agent pipelines, you often need agents to read from or write to S3 โ whether that's fetching documents for RAG, persisting outputs, or managing files dynamically. This MCP server bridges that gap by exposing S3 operations as MCP tools, so any MCP-compatible AI client can interact with S3 without custom integration work.
Available Tools
Tool Description
list_buckets List all S3 buckets in the account
create_bucket Create a new S3 bucket
delete_bucket Delete an empty S3 bucket
list_objects List objects in a bucket (with optional prefix filter)
upload_object Upload a file or string content to a bucket
download_object Download an object from a bucket
delete_object Delete an object from a bucket
get_bucket_policy Get the policy attached to a bucket
set_bucket_policy Set or update a bucket policy
Tool Reference
list_buckets
Lists all S3 buckets in the AWS account.
Parameters: None
Response:
{
"success": true,
"buckets": [
{ "name": "my-bucket", "creationDate": "2023-01-15T00:00:00.000Z" }
],
"count": 1
}
create_bucket
Creates a new S3 bucket.
Parameters:
Name Type Required Description
bucketName string โ
Name of the bucket to create
region string โ AWS region (defaults to configured region)
Response:
{
"success": true,
"bucketName": "my-new-bucket",
"location": "http://my-new-bucket.s3.amazonaws.com/"
}
list_objects
Lists objects in a bucket with optional prefix filtering.
Parameters:
Name Type Required Description
bucketName string โ
Bucket to list objects from
prefix string โ Filter by prefix (folder path)
maxKeys number โ Max results (default: 1000)
continuationToken string โ Pagination token
upload_object
Uploads a file or string content to S3.
Parameters:
Name Type Required Description
bucketName string โ
Target bucket
key string โ
Object key (path) in the bucket
filePath string โ Local file path to upload
content string โ String content to upload directly
contentType string โ MIME type of the content
download_object
Downloads an object from S3.
Parameters:
Name Type Required Description
bucketName string โ
Source bucket
key string โ
Object key (path) to download
outputPath string โ Local path to save the file
returnContent boolean โ Return content inline in response
delete_object
Deletes an object from a bucket.
Parameters:
Name Type Required Description
bucketName string โ
Bucket containing the object
key string โ
Object key to delete
get_bucket_policy / set_bucket_policy
Get or set the IAM policy for a bucket.
Parameters for set_bucket_policy:
Name Type Required Description
bucketName string โ
Target bucket
policy string/object โ
Policy document (JSON string or object)
AWS Authentication
The server uses the AWS SDK credential resolution chain in this order:
-
Environment variables โ
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY -
Shared credentials file โ
~/.aws/credentials(configured viaaws configure) -
EC2 Instance Metadata โ if running on an EC2 instance with an IAM role
For production, IAM roles are recommended over static credentials.
Contributing
Contributions are welcome! If you'd like to add a new S3 operation or improve existing ones:
-
Fork the repository
-
Create a feature branch:
git checkout -b feature/my-new-tool -
Commit your changes:
git commit -m 'Add: new S3 tool' -
Push and open a Pull Request
License
MIT โ see LICENSE for details.
Built with the MCP TypeScript SDK and AWS SDK v3.
Prerequisites
-
Node.js 18+
-
AWS account with S3 access
-
AWS credentials (Access Key ID + Secret, or IAM role)
-
An MCP-compatible client (Claude Desktop, Cursor, etc.)
Quick Start
1. Install via npx (no installation needed)
{
"mcpServers": {
"aws-s3": {
"command": "npx",
"args": ["@gangadharrr/aws-s3"],
"env": {
"AWS_REGION": "us-east-1",
"AWS_ACCESS_KEY_ID": "your-access-key-id",
"AWS_SECRET_ACCESS_KEY": "your-secret-access-key"
},
"autoApprove": ["list_buckets", "list_objects", "get_bucket_policy"]
}
}
}
Add this to your MCP client config file:
-
Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json -
Cursor:
.cursor/mcp.jsonin your project root
2. Using AWS CLI credentials (recommended for local dev)
If you've already configured the AWS CLI (aws configure), you can omit the key env vars:
{
"mcpServers": {
"aws-s3": {
"command": "npx",
"args": ["@gangadharrr/aws-s3"],
"env": {
"AWS_REGION": "us-east-1"
}
}
}
}
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.