如何用 Rust 对 RustFS MCP Server 进行扩展?

RustFS 是用 Rust 编写的新一代高性能对象存储,完全兼容 S3,是 MinIO 的国产平替。RustFS 是开源的,采用 Apache 2.0 许可证。目前在 GitHub 上开源不到两个月,已经收获 7.5k Star。根据官方发布的性能测评,在 2 Core、4GB RAM、15Gbp 以及 4x40GB 驱动的情况下,RustFS 的性能是大幅度优于 MinIO 的,目前 RustFS 还处于 1.0.0-alpha 阶段,预计未来会对在大规模使用场景下的性能进行提升。本文分享 RustFS MCP Server 的扩展并在 Codebuddy IDE 中进行测试。

RustFS 的安装

RustFS 支持二进制或 Docker 安装,可以在 Linux、macOS、Windows 上运行。本文采用 Docker 的方式安装,根据RustFS 官方安装指南,执行如下命令即可快速部署一个 RustFS 实例:

bash 复制代码
docker pull rustfs/rustfs:latest
docker run -d \
  --name rustfs \
  -p 9000:9000 \
  -v /data:/data \
  rustfs/rustfs:latest

安装完成后,可通过 localhost:9000 访问 RustFS,如下图所示:

使用默认用户名 rustfsadmin 和密码 rustfsadmin 登录即可。

RustFS MCP

RustFS MCP 是官方提供的 MCP Server,以实现通过自然语言对 RustFS 进行操作,比如 Bucket 的创建删除、Object 的上传下载等。RustFS MCP 是用 Rust 编写的,目前支持的 Tools 有:

  • list_buckets:列出所有 Bucket;
  • list_objects:列出 S3 存储桶中的对象,支持可选的前缀过滤;
  • upload_file:将本地文件上传到 RustFS 存储桶;
  • get_object:获取对象内容或下载到本地;

RustFS MCP 的代码存放在 MCP 目录下,目录结构为:

bash 复制代码
rustfs-mcp/
├── src/
│   ├── main.rs          # Entry point, CLI parsing, and server initialization
│   ├── server.rs        # MCP server implementation and tool handlers
│   ├── s3_client.rs     # S3 client wrapper with async operations
│   ├── config.rs        # Configuration management and CLI options
│   └── lib.rs           # Library exports and public API
└── Cargo.toml           # Dependencies, metadata, and binary configuration

下面对 RustFS MCP 的 tool 进行扩展,增加 Bucket 创建和删除。

RustFS MCP 扩展实践

主要修改的文件是 server.rss3_client.rs。其中 server.rs 是 MCP Server 的入口,s3_client.rs 通过对 S3 Rust SDK 封装实现了一个 S3 客户端。

以下是 RustFS MCP Server 在 server.rs 中的主要实现部分:

rust 复制代码
#[tool_router(router = tool_router)]
impl RustfsMcpServer {
    pub async fn new(config: Config) -> Result<Self> {
        info!("Creating RustFS MCP Server");

        let s3_client = S3Client::new(&config).await?;

        Ok(Self {
            s3_client,
            _config: config,
            tool_router: Self::tool_router(),
        })
    }

其中 RustfsMcpServer 是一个结构体:

rust 复制代码
pub struct RustfsMcpServer {
    s3_client: S3Client,
    _config: Config,
    tool_router: ToolRouter<Self>,
}

因此,要扩展 tool,就需要在 RustfsMcpServer 中添加一个新的方法。比如对于 Bucket 的创建,可以添加如下方法:

rust 复制代码
    #[tool(description = "Create a new S3 bucket with the specified name")]
    pub async fn create_bucket(&self, Parameters(req): Parameters<CreateBucketReqeust>) -> String {
        info!("Executing create_bucket tool for bucket: {}", req.bucket_name);

        match self.s3_client.create_bucket(&req.bucket_name).await {
            Ok(_) => {
                format!("Successfully created bucket: {}", req.bucket_name)
            }
            Err(e) => {
                format!("Failed to create bucket '{}': {:?}", req.bucket_name, e)
            }
        }
    }

输入参数就是 Bucket 名称。整个过程会去调用 s3_client 中的 create_bucket 方法。前面说了,s3_client 是对 S3 Rust SDK 的封装,因此,需要在 s3_client.rs 中添加如下方法:

rust 复制代码
    pub async fn create_bucket(&self, bucket_name: &str) -> Result<BucketInfo> {
        info!("Creating S3 bucket: {}", bucket_name);

        self.client
            .create_bucket()
            .bucket(bucket_name)
            .send()
            .await
            .context(format!("Failed to create S3 bucket: {bucket_name}"))?;

        info!("Bucket '{}' created successfully", bucket_name);
        Ok(BucketInfo {
            name: bucket_name.to_string(),
            creation_date: None, // Creation date not returned by create_bucket
        })
    }

其中的 self.client 就是 S3 Rust SDK 的客户端,因此,只需要调用 S3 Rust SDK 的 create_bucket 方法即可。

可以用相同的扩展方法对 Bucket 的删除进行扩展,增加一个 bucket_delete 的 tool。

RustFS MCP 扩展测试

RustFS MCP 支持通过二进制或 Docker 进行部署。本文使用 Docker 方式。根据官方提供的 Dockerfile 和构建命令,构建一个 RustFS MCP Docker 镜像:

bash 复制代码
# clone rustfs repo
git clone https://github.com/rustfs/rustfs.git
cd rustfs

# build rustfs-mcp docker image
docker build -f crates/mcp/Dockerfile -t rustfs/rustfs-mcp .

上面是在 rustfs 代码仓库根目录下进行,如果在 crates/mcp 目录下进行,构建命令变为:

bash 复制代码
docker build -f Dockerfile -t rustfs/rustfs-mcp ../../

在支持 MCP 的 AI 应用中(比如 Claude、Cursor、Trae 等),找到 MCP 配置,添加如下配置:

json 复制代码
{
  "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",
        "-e",
        "RUST_LOG",
        "rustfs/rustfs-mcp"
      ],
      "env": {
        "AWS_ACCESS_KEY_ID": "YOUR_RUSTFS_ACCESS_KEY_ID",
        "AWS_SECRET_ACCESS_KEY": "YOUR_RUSTFS_SECRET_ACCESS_KEY",
        "AWS_REGION": "cn-east-1",
        "RUST_LOG": "info",
        "AWS_ENDPOINT_URL": "YOUR_RUSTFS_ENDPOINT_URL"
      }
    }
  }
}

过程中会用到 RustFS 访问密钥。登录 RustFS 控制台,在左侧导航栏选择 访问密钥 ,然后选择右上角的 添加访问密钥,输入响应的信息即可创建成功访问密钥。

保存 MCP 配置文件后,可以在 AI 应用上看到 RustFS MCP Server 已经处于运行状态,而且还可以看到可用的 tool:

在对话框中,输入如下提示词:

vbscript 复制代码
请帮我创建一个名为 rustfs-mcp-server 的存储桶,谢谢!

返回如下:

在 RustFS 控制台上,可以看到 rustfs-mcp-server 存储桶被创建成功:

如果要删除这个存储桶,可以输入如下提示词:

vbscript 复制代码
请帮我删除 rustfs-mcp-server 存储桶,谢谢!

返回如下:

从测试看,扩展的两个 tool:create_bucketdelete_bucket 符合预期。

当然,RustFS MCP 的扩展远不止这些,对于想学习 Rust、研究 MCP 的开发者来讲,RustFS 是一个不错的开源项目。感兴趣的可以自行研究。

相关推荐
m0_480502642 小时前
Rust 入门 泛型和特征-特征对象 (十四)
开发语言·后端·rust
我是前端小学生2 天前
一文梳理Rust语言中的可变结构体实例
rust
Source.Liu2 天前
【unitrix数间混合计算】2.21 二进制整数加法计算(bin_add.rs)
rust
Include everything3 天前
Rust学习笔记(二)|变量、函数与控制流
笔记·学习·rust
Source.Liu3 天前
【unitrix数间混合计算】2.20 比较计算(cmp.rs)
rust
许野平3 天前
Rust:构造函数 new() 如何进行错误处理?
开发语言·后端·rust
许野平3 天前
Rust:专业级错误处理工具 thiserror 详解
rust·error·错误处理·result·thiserror
蒋星熠3 天前
Rust 异步生态实战:Tokio 调度、Pin/Unpin 与零拷贝 I/O
人工智能·后端·python·深度学习·rust