使用说明
S3 MCP服务器
Amazon S3模型上下文协议(MCP)服务器,提供与S3存储桶和对象交互的工具。
https://github.com/user-attachments/assets/d05ff0f1-e2bf-43b9-8d0c-82605abfb666
特性
🚀 MCP传输支持
- ✅ STDIO传输 -Claude Desktop的直接进程通信
- ✅ HTTP传输 -用于web客户端的带有服务器端事件的REST API
- ✅ 流式HTTP -实时流媒体,实现响应式交互
🛠️ 可用工具
- ✅ 列出bucket -列出可访问的S3存储桶并进行筛选
- ✅ 列出对象 -使用前缀过滤浏览bucket中的对象
- ✅ 获取对象 -检索对象内容(文本/二进制支持)
🐳 部署选项
- ✅ 本地Node.js -使用npm/node直接执行
- ✅ Docker命令行界面 -具有自定义配置的容器化部署
- ✅ Docker Compose -全栈MinIO用于本地测试
- ✅ MCP检查员 -内置调试测试界面
概述
此MCP服务器允许像Claude这样的大型语言模型(LLM)与AWS S3存储进行交互。它提供了以下工具:
- 列出可用的S3存储桶
- 列出bucket中的对象
- 检索对象内容
该服务器使用TypeScript和MCP SDK构建,为LLM与S3的接口提供了一种安全和标准化的方式。
安装
先决条件
- Node.js 18或更高版本
- npm或纱线
- 配置AWS凭据(通过环境变量或AWS凭据文件)
- Docker(可选,用于容器化设置)
设置
- 通过npm安装:
# Install globally via npm
npm install -g aws-s3-mcp
# Or as a dependency in your project
npm install aws-s3-mcp
- 如果从源构建:
# Clone the repository
git clone https://github.com/samuraikun/aws-s3-mcp.git
cd aws-s3-mcp
# Install dependencies and build
npm install
npm run build
- 配置AWS凭据和S3访问权限:
创建一个 .env 使用您的AWS配置文件:
AWS_REGION=us-east-1
S3_BUCKETS=bucket1,bucket2,bucket3
S3_MAX_BUCKETS=5
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
或者将这些设置为环境变量。
配置
可以使用以下环境变量配置服务器:
| 变量 | 描述 | 默认值 |
|---|---|---|
AWS_REGION |
S3存储桶所在的AWS区域 | us-east-1 |
S3_BUCKETS |
允许的S3存储桶名称的逗号分隔列表 | (空) |
S3_MAX_BUCKETS |
列表中要返回的最大桶数 | 5 |
AWS_ACCESS_KEY_ID |
AWS访问密钥(如果不使用默认凭据) | (来自AWS配置) |
AWS_SECRET_ACCESS_KEY |
AWS密钥(如果不使用默认凭据) | (来自AWS配置) |
运行服务器
直接执行Node.js
服务器运行时 默认情况下为HTTP传输,使测试和调试变得容易:
# Using npx (HTTP transport by default)
npx aws-s3-mcp
# If installed globally (HTTP transport)
npm install -g aws-s3-mcp
aws-s3-mcp
# If running from cloned repository (HTTP transport)
npm start
# Or directly (HTTP transport)
node dist/index.js
# Explicit HTTP transport
node dist/index.js --http
# STDIO transport (for Claude Desktop integration)
node dist/index.js --stdio
当使用HTTP传输(默认)运行时,服务器将在端口3000上启动并提供:
- 健康检查端点:
http://localhost:3000/health - MCP端点:
http://localhost:3000/mcp - SSE 端点 :
http://localhost:3000/sse
Docker设置🐳
您可以使用Docker CLI或Docker Compose将S3 MCP服务器作为Docker容器运行。
使用Docker CLI
- 构建Docker镜像:
docker build -t aws-s3-mcp .
- 使用环境变量运行容器:
# Option 1: Pass environment variables directly
docker run -d \
-e AWS_REGION=us-east-1 \
-e S3_BUCKETS=bucket1,bucket2 \
-e S3_MAX_BUCKETS=5 \
-e AWS_ACCESS_KEY_ID=your-access-key \
-e AWS_SECRET_ACCESS_KEY=your-secret-key \
--name aws-s3-mcp-server \
aws-s3-mcp
# Option 2: Use environment variables from .env file
docker run -d \
--env-file .env \
--name aws-s3-mcp-server \
aws-s3-mcp
- 检查容器日志:
docker logs aws-s3-mcp-server
- 停止并移除容器:
docker stop aws-s3-mcp-server
docker rm aws-s3-mcp-server
注意:对于HTTP传输(默认),添加 -p 3000:3000 暴露HTTP端口。对于STDIO传输(Claude Desktop),不需要端口映射,因为它使用Docker exec进行直接通信。
使用Docker Compose
- 构建并启动Docker容器:
# Build and start the container
docker compose up -d s3-mcp
# View logs
docker compose logs -f s3-mcp
- 要停止容器:
docker compose down
使用Docker和MinIO进行测试
Docker Compose设置包括一个用于本地测试的MinIO服务:
# Start MinIO and the MCP server
docker compose up -d
# Access MinIO console at http://localhost:9001
# Default credentials: minioadmin/minioadmin
MinIO服务自动创建两个测试桶(test-bucket-1 和 test-bucket-2)并上传样本文件进行测试。
使用MCP检查器进行调试🔍
这 run-inspector.sh 该脚本提供了一种使用MCP检查器测试和调试S3 MCP服务器的简单方法。它支持多种传输类型和部署模式。
快速开始
# Show all available options
./run-inspector.sh --help
# Run locally with HTTP transport (default)
./run-inspector.sh
# Run with Docker Compose and MinIO for testing
./run-inspector.sh --docker-compose
运输类型
服务器支持两种传输协议:
HTTP传输
- 最适合:基于Web的调试,外部客户端连接
- 提供:REST API端点,服务器端事件(SSE)
- 港口:3000(HTTP),3001+(检查器UI)
STDIO传输
- 最适合:直接流程通信,Claude Desktop集成
- 提供:标准输入/输出通信
- 港口:无(直接过程沟通)
使用示例
1.本地开发(HTTP)
# Default: HTTP transport for local debugging
./run-inspector.sh
# Explicit HTTP transport
./run-inspector.sh --http
这将:
- 如果需要,构建项目
- 通过端口3000上的HTTP传输启动MCP服务器
- 在浏览器中启动MCP检查器
- 提供端点:
- 健康检查:
http://localhost:3000/health - MCP端点:
http://localhost:3000/mcp - SSE 端点 :
http://localhost:3000/sse
- 健康检查:
2.地方发展(STDIO)
# STDIO transport for local debugging
./run-inspector.sh --stdio
此模式使用标准输入/输出将MCP检查器直接连接到服务器进程。
3.Docker与真实AWS(STDIO)
# Create .env file with your AWS credentials
cp .env.example .env
# Edit .env with your AWS credentials
# Run with Docker using STDIO transport (default for Docker)
./run-inspector.sh --docker
这将:
- 如果需要,构建Docker镜像
- 使用您的AWS凭据启动容器
- 通过Docker exec连接MCP检查器
4.Docker与真正的AWS(HTTP)
# Run with Docker using HTTP transport
./run-inspector.sh --docker --http
这将:
- 在端口3000上启动容器化HTTP服务器
- 将MCP检查器连接到HTTP端点
- 可用于测试基于HTTP的集成
5.使用MinIO编写Docker(测试)
# Run with MinIO for local testing (no AWS credentials needed)
./run-inspector.sh --docker-compose
这将:
- 启动MinIO S3兼容存储
- 创建测试桶:
test-bucket-1,test-bucket-2 - 上传示例文件进行测试
- 启动连接到MinIO的S3 MCP服务器
- 启动MCP检查器
- 在以下位置提供MinIO Web UI
http://localhost:9001(登录:迷你显示器/迷你显示器)
高级选项
强制重建
# Force Docker image rebuild
./run-inspector.sh --docker --force-rebuild
./run-inspector.sh --docker-compose --force-rebuild
调试提示
-
检查容器日志:
# For Docker CLI mode docker logs aws-s3-mcp-server # For Docker Compose mode docker compose logs s3-mcp -
手动测试端点:
# Health check curl http://localhost:3000/health # MinIO health (Docker Compose) curl http://localhost:9000/minio/health/live -
访问MinIO Web UI (仅限Docker Compose):
- 网址:
http://localhost:9001 - 用户名:
minioadmin - 密码:
minioadmin
- 网址:
清理
# Stop and remove Docker containers
docker stop aws-s3-mcp-server && docker rm aws-s3-mcp-server
# Stop Docker Compose services
docker compose down
# Stop specific HTTP server container
docker stop aws-s3-mcp-http-server && docker rm aws-s3-mcp-http-server
故障排除
- 端口冲突:如果端口3000正在使用中,请停止其他服务或更改端口
- AWS凭据:确保您的
.env文件具有适用于Docker模式的有效AWS凭据 - 构建错误:使用
--force-rebuild重建Docker镜像 - 连接问题:检查容器是否正在运行
docker ps
快速参考
| 命令 | 运输 | 环境 | 描述 |
|---|---|---|---|
./run-inspector.sh |
HTTP | 本地 | 使用HTTP传输进行本地开发 |
./run-inspector.sh --stdio |
STDIO | 本地 | 通过STDIO传输进行本地开发 |
./run-inspector.sh --docker |
STDIO | Docker+AWS | 带有AWS凭据的Docker容器 |
./run-inspector.sh --docker --http |
HTTP | Docker+AWS | 带HTTP传输的Docker容器 |
./run-inspector.sh --docker-compose |
STDIO | Docker+MinIO | 使用MinIO进行本地测试(无需AWS) |
连接到克劳德桌面
要将此服务器与Claude Desktop一起使用,您需要使用 STDIO传输 (不是默认的HTTP传输)用于直接进程通信:
-
编辑您的Claude Desktop配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
将S3 MCP服务器添加到配置中:
{
"mcpServers": {
"s3": {
"command": "npx",
"args": ["aws-s3-mcp", "--stdio"],
"env": {
"AWS_REGION": "us-east-1",
"S3_BUCKETS": "bucket1,bucket2,bucket3",
"S3_MAX_BUCKETS": "5",
"AWS_ACCESS_KEY_ID": "your-access-key",
"AWS_SECRET_ACCESS_KEY": "your-secret-key"
}
}
}
}
Claude桌面版的Docker选项🐳
您还可以配置Claude Desktop为MCP服务器使用正在运行的Docker容器:
{
"mcpServers": {
"s3": {
"command": "docker",
"args": ["exec", "-i", "aws-s3-mcp-server", "node", "dist/index.js"],
"env": {}
}
}
}
⚠️ 重要先决条件:要使此Docker配置工作,您 必须 首先构建并运行Docker容器 之前 启动克劳德桌面:
# 1. First, build the Docker image (only needed once or after changes) docker build -t aws-s3-mcp . # 2. Then start the container (required each time before using with Claude) # Using Docker Compose (recommended) docker compose up -d s3-mcp # Or using Docker CLI docker run -d --name aws-s3-mcp-server --env-file .env aws-s3-mcp如果没有正在运行的容器,Claude Desktop在尝试使用S3工具时将显示错误。
上面的Docker配置使用
exec将MCP请求直接发送到正在运行的容器。不需要端口映射,因为Claude直接与容器通信,而不是通过网络端口。
备注:确保配置中的容器名称(
aws-s3-mcp-server)与正在运行的容器的名称匹配。
重要:使用上述配置时,请注意以下事项
- 替换
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY使用您的真实凭证S3_BUCKETS应包含一个逗号分隔的桶列表,其中包含您要允许访问的桶AWS_REGION应设置为存储桶所在的区域
💣 如果克劳德桌面发生错误
如果您在Claude Desktop中遇到上述配置错误,请尝试使用以下绝对路径:
# Get the path of node and aws-s3-mcp
which node
which aws-s3-mcp
{
"globalShortcut": "",
"mcpServers": {
"s3": {
"command": "your-absolute-path-to-node",
"args": ["your-absolute-path-to-aws-s3-mcp/dist/index.js", "--stdio"],
"env": {
"AWS_REGION": "your-aws-region",
"S3_BUCKETS": "your-s3-buckets",
"S3_MAX_BUCKETS": "your-max-buckets",
"AWS_ACCESS_KEY_ID": "your-access-key",
"AWS_SECRET_ACCESS_KEY": "your-secret-key"
}
}
}
}
可用工具
列出bucket
列出服务器有权访问的可用S3存储桶。此工具尊重 S3_BUCKETS 限制显示哪些桶的配置。
参数: 无
输出示例:
[
{
"Name": "my-images-bucket",
"CreationDate": "2022-03-15T10:30:00.000Z"
},
{
"Name": "my-documents-bucket",
"CreationDate": "2023-05-20T14:45:00.000Z"
}
]
列出对象
列出指定S3存储桶中的对象。
参数:
bucket(必填):用于列出对象的S3存储桶的名称prefix(可选):过滤对象的前缀(如文件夹路径)maxKeys(可选):要返回的最大对象数
输出示例:
[
{
"Key": "sample.pdf",
"LastModified": "2023-10-10T08:12:15.000Z",
"Size": 2048576,
"StorageClass": "STANDARD"
},
{
"Key": "sample.md",
"LastModified": "2023-10-12T15:30:45.000Z",
"Size": 1536000,
"StorageClass": "STANDARD"
}
]
获取对象
从指定的S3存储桶中检索对象。文本文件以纯文本形式返回,而二进制文件返回的细节有限。
参数:
bucket(必填):S3存储桶的名称key(必填):要检索的对象的键(路径)
示例文本输出:
This is the content of a text file stored in S3.
It could be JSON, TXT, CSV or other text-based formats.
二进制输出示例:
Binary content (image/jpeg): base64 data is /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof...
安全考虑
- 服务器将仅访问
S3_BUCKETS环境变量 - AWS凭据必须具有对存储桶的适当权限
- 配置AWS权限时使用最小权限原则
- 对于生产用途,考虑使用具有特定S3权限的IAM角色
与Claude一起使用
在桌面应用程序中与Claude交互时,您可以要求它执行S3操作,例如:
- “列出我的所有S3存储桶”
- “汇总我的文档桶中的PDF文件”
- “从我的文档桶中获取README.txt文件”
Claude将使用适当的MCP工具执行请求并向您展示结果。
许可证
麻省理工学院