S3对象存储管理工具

一款用于管理AWS S3及兼容对象存储的工具,提供列表、读取、上传、删除和复制对象的功能,适用于网站托管维护和页面管理。

  • by chenchiwei
  • JavaScript
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 chenchiwei/s3-mcp-server

使用说明

s3 mcp服务器

用于AWS S3(和S3兼容)对象存储的MCP服务器。提供列出、读取、上传、删除和复制对象的工具,专为网站托管维护和页面管理而设计。

特性

  • 默认只读 --写入/删除工具被禁用,除非 ALLOW_WRITE=true 已设置
  • S3兼容 --通过以下方式与AWS S3、MinIO、Cloudflare R2、Backblaze B2和其他S3兼容服务配合使用 AWS_ENDPOINT_URL
  • 默认存储桶 --通过配置一次 S3_BUCKET,或通过 bucket 每次工具调用

工具

只读(始终可用)

工具 说明
s3_list_buckets 列出所有可访问的存储桶
s3_list_objects 使用前缀过滤器、分隔符和光标分页列出对象
s3_head_object 无需下载即可获取对象元数据(大小、内容类型、ETag)
s3_get_object 下载对象内容(文本文件为UTF-8,二进制文件为base64)
s3_get_object_url 返回对象的直接S3访问URL
s3_get_object_cdn_url 返回对象的CDN URL(需要 CDN_DOMAIN)

写(必填 ALLOW_WRITE=true)

工具 说明
s3_put_object 上传或覆盖对象;自动从扩展中检测内容类型
s3_upload_file 以二进制格式上传本地文件(支持图像、字体、PDF等)
s3_delete_object 删除单个对象
s3_delete_objects 在一个请求中批量删除多达1000个对象
s3_copy_object 在桶内或桶之间复制对象(重命名、复制)

配置

所有敏感配置都是通过MCP客户端配置中的环境变量提供的,而不是硬编码的。

变量 必填 默认 描述
AWS_ACCESS_KEY_ID 是 -- AWS访问密钥ID
AWS_SECRET_ACCESS_KEY 是 -- AWS秘密访问密钥
AWS_REGION 没有 us-east-1 AWS区域
AWS_ENDPOINT_URL 否 -- S3兼容服务的自定义端点
S3_BUCKET 否 -- 默认存储桶(接受工具 bucket 参数作为覆盖)
ALLOW_WRITE 没有 false 设置为 "true" 启用写入/删除工具
CDN_DOMAIN 没有 -- CDN域 s3_get_object_cdn_url (例如。 cdn.example.com)

用法

安装和构建

npm install
npm run build

Claude桌面配置(claude_desktop_config.json)

只读模式(默认):

{
  "mcpServers": {
    "s3": {
      "command": "node",
      "args": ["/path/to/s3-mcp-server/dist/index.js"],
      "env": {
        "AWS_ACCESS_KEY_ID": "AKIAIOSFODNN7EXAMPLE",
        "AWS_SECRET_ACCESS_KEY": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
        "AWS_REGION": "us-east-1",
        "S3_BUCKET": "my-website-bucket"
      }
    }
  }
}

读写模式:

{
  "mcpServers": {
    "s3": {
      "command": "node",
      "args": ["/path/to/s3-mcp-server/dist/index.js"],
      "env": {
        "AWS_ACCESS_KEY_ID": "AKIAIOSFODNN7EXAMPLE",
        "AWS_SECRET_ACCESS_KEY": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
        "AWS_REGION": "us-east-1",
        "S3_BUCKET": "my-website-bucket",
        "ALLOW_WRITE": "true",
        "CDN_DOMAIN": "cdn.example.com"
      }
    }
  }
}

S3兼容服务(例如Cloudflare R2):

{
  "mcpServers": {
    "s3": {
      "command": "node",
      "args": ["/path/to/s3-mcp-server/dist/index.js"],
      "env": {
        "AWS_ACCESS_KEY_ID": "<R2 Access Key ID>",
        "AWS_SECRET_ACCESS_KEY": "<R2 Secret Access Key>",
        "AWS_REGION": "auto",
        "AWS_ENDPOINT_URL": "https://<account-id>.r2.cloudflarestorage.com",
        "S3_BUCKET": "my-site",
        "ALLOW_WRITE": "true"
      }
    }
  }
}

发展

npm run dev    # watch mode with tsx
npm run build  # compile to dist/
npm start      # run compiled server

安全说明

  • IAM凭据是从MCP客户端注入的环境变量中读取的,它们从不存储在签入版本控制的代码或配置文件中
  • 编写工具(s3_put_object, s3_delete_object, s3_delete_objects, s3_copy_object)仅在以下情况下注册 ALLOW_WRITE=true;它们在只读模式下完全不在工具列表中
  • 对于生产使用,将IAM策略范围限定为所需的最低权限(s3:GetObject, s3:ListBucket,加 s3:PutObject, s3:DeleteObject 仅当需要写入时)