AI 编程助手现在能读代码、跑命令,但让它直接管你的对象存储桶,过去得先写一坨 SDK 胶水代码:配 endpoint、塞 AK/SK、包一层函数,再想办法把结果喂回对话。每次换个客户端都得重来一遍,凭据管理也散落在各处。
2026 年 RustFS 给出的解法是官方 MCP Server。它把对象存储操作做成一组标准 MCP 工具,任何支持 Model Context Protocol 的 AI 客户端都能直接列桶、列对象、上传、下载,不用你再写适配层。下面把它接起来,给一份能直接粘进 AI IDE 的配置。
MCP 是什么,为什么它合适
MCP(Model Context Protocol)是 Anthropic 开源的开放标准,作用是给 AI 应用和外部系统之间建一条标准化、可控的连接。以前每个工具都要在 prompt 里塞一段使用说明,又长又容易占满上下文;MCP 让服务端用机器可读的 schema 声明"我是谁、能做什么、参数长什么样",模型照着调用就行。
对对象存储来说,这套协议刚好对口:存储操作本来就是一小撮标准化动作,非常适合做成工具让 Agent 按需调用。RustFS 的 MCP Server 用 Rust 写,和存储引擎同源,跑在 AI 客户端和 RustFS 实例之间做桥。
RustFS MCP Server 暴露哪些工具
官方文档列出的核心工具是四个,覆盖了 Agent 管存储最常见的高频动作:
- list_buckets:列出当前凭证可访问的所有桶。
- list_objects:浏览某个桶的内容,支持按前缀(prefix)过滤,方便 Agent 精准定位。
- upload_file:把本地文件上传到指定桶,自动识别 MIME 类型并设置缓存控制。
- get_object:读取对象内容,或下载到本地。
日常让 Agent"帮我看看备份桶里最新的快照""把这个生成的报告传到 results 桶"这类事,这四个工具已经够用。工具列表会随版本更新,接之前以官方文档当前列出的为准。
接入实战:客户端配置
整条链路是:AI 客户端通过标准 MCP 协议调到 RustFS MCP Server,再由它用 S3 协议访问 RustFS 实例上的桶与对象。
RustFS MCP Server 的鉴权复用 S3 那套:给它 RustFS 的 access key / secret,再告诉它 endpoint 指向你的 RustFS 实例。需要的是标准 AWS 系列环境变量:
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY:RustFS 的访问密钥(在控制台"访问密钥"里创建)。AWS_REGION:区域标识,自建实例填一个约定的值即可(如us-east-1)。AWS_ENDPOINT_URL:关键项,指向你的 RustFS 实例地址(如https://rustfs-host:9000),不是 AWS 默认端点。
如果用命令行直接起,也有对应选项:--access-key-id、--secret-access-key、--region、--endpoint-url、--log-level。这两种传参方式等价,客户端配置里用环境变量更清爽。
构建提醒:官方文档注明
rustfs-mcpcrate 已不在当前rustfs/rustfs主分支,源码构建的cargo build --release -p rustfs-mcp命令可能已过时。优先用官方发布的镜像或包;要从源码构建,先去 RustFS GitHub 组织确认 MCP server 的当前位置。
接 MCP 之前,先用 aws-cli 拿同一组密钥和 endpoint 打通一次,把故障面隔离开:CLI 通了说明凭据和网络没问题,后面 MCP 调不通就只需排查客户端配置。
exportAWS_ACCESS_KEY_ID=your_keyexportAWS_SECRET_ACCESS_KEY=your_secretexportAWS_REGION=us-east-1exportAWS_ENDPOINT_URL=https://rustfs-host:9000 aws s3lsaws s3lss3://your-bucket/--recursive|head一个能直接用的 mcpServers 配置
主流 AI IDE(Claude Desktop、Cursor、Windsurf、Trae 等)都支持在 MCP 配置里加一段mcpServers。下面用 Docker 方式跑 RustFS MCP,凭据走环境变量,endpoint 指向你的实例:
{"mcpServers":{"rustfs-mcp":{"command":"docker","args":["run","--rm","-i","-e","AWS_ACCESS_KEY_ID","-e","AWS_SECRET_ACCESS_KEY","-e","AWS_REGION","-e","AWS_ENDPOINT_URL","rustfs/rustfs-mcp"],"env":{"AWS_ACCESS_KEY_ID":"your_rustfs_access_key","AWS_SECRET_ACCESS_KEY":"your_rustfs_secret","AWS_REGION":"us-east-1","AWS_ENDPOINT_URL":"https://rustfs-host:9000"}}}}把这段加进对应客户端的 MCP 配置后,客户端会列出rustfs-mcp提供的工具。接下来在对话里直接说"列出所有桶"“把 report.pdf 传到 results 桶”,Agent 就会通过 MCP 调 RustFS,不用你再切到终端敲aws-cli。
如果你更习惯直接跑二进制而不是 Docker,把command换成rustfs-mcp、args换成["--access-key-id", "...", "--secret-access-key", "...", "--region", "us-east-1", "--endpoint-url", "https://rustfs-host:9000"]即可,效果一样。
三个最常见的接不通原因
MCP 客户端报错时,先按这三条对一遍,能省掉大部分排查时间:
- endpoint 指到了控制台端口。RustFS 的 S3 API 在
:9000,Web 控制台在:9001。AWS_ENDPOINT_URL必须写 S3 API 端口,写成控制台端口会一路 404 或连接被拒。 - 容器里访问宿主机。Docker 起 MCP 时,容器内的
localhost是它自己。RustFS 跑在宿主机上就用host.docker.internal,必要时给docker run加--add-host=host.docker.internal:host-gateway。 - 自签 TLS 证书没被信任。用 https 接自建实例时,MCP 容器里要能看到并信任你的 CA,否则会卡在证书校验。测试阶段可以先验 http 连通性,再把证书装全。
安全边界与下一步
MCP 把"Agent 管存储"的门槛实实在在降下来了,接之前有几点要想清楚:
- 凭据粒度:给 MCP 用的 access key 单独建一个,只授需要的桶。下面这份策略只给列桶、读对象、写指定前缀,够 Agent 干日常活:
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:ListBucket"],"Resource":["arn:aws:s3:::your-bucket"]},{"Effect":"Allow","Action":["s3:GetObject"],"Resource":["arn:aws:s3:::your-bucket/*"]},{"Effect":"Allow","Action":["s3:PutObject"],"Resource":["arn:aws:s3:::your-bucket/agent-uploads/*"]}]}- 构建来源:优先官方镜像/发布包,源码构建先核对当前仓库位置,别照着过时的 cargo 命令硬跑。
- 能力边界:当前核心工具是列桶、列对象、上传、下载,复杂运维(生命周期、复制、IAM 策略)还是走控制台或
rcCLI,MCP 不替代它们。
下一步最实在:建一个只读的测试 key,按上面的 JSON 接进你常用的 AI IDE,让它"列出所有桶"验证连通,再试着传一个小文件到指定前缀。通了这一条,你的对象存储就成了 Agent 能直接动手的那块外部记忆。
仓库在这里:https://github.com/rustfs/rustfs