|
| 1 | +## 📖 概述 |
| 2 | + |
| 3 | +**RustFS MCP 服务器**是一个高性能的 [模型上下文协议(MCP)](https://spec.modelcontextprotocol.org) 服务器,它为 AI/LLM 工具提供对 S3 兼容对象存储操作的无缝访问。该服务器使用 Rust 构建,以实现最大的性能和安全性,它使像 Claude Desktop 这样的 AI 助手能够通过标准化协议与云存储进行交互。 |
| 4 | + |
| 5 | +### 什么是 MCP? |
| 6 | + |
| 7 | +模型上下文协议是一个开放标准,它使 AI 应用程序能够与外部系统建立安全、受控的连接。该服务器充当 AI 工具和 S3 兼容存储服务之间的桥梁,提供对文件操作的结构化访问,同时保持安全性和可观察性。 |
| 8 | + |
| 9 | + |
| 10 | +## ✨ 特性 |
| 11 | + |
| 12 | +### 支持的 S3 操作 |
| 13 | + |
| 14 | + - **列出存储桶**:列出所有可访问的 S3 存储桶 |
| 15 | + - **列出对象**:通过可选的前缀过滤浏览存储桶内容 |
| 16 | + - **上传文件**:上传本地文件,并自动检测 MIME 类型和缓存控制 |
| 17 | + - **获取对象**:从 S3 存储中检索对象,支持读取或下载模式 |
| 18 | + |
| 19 | + |
| 20 | +## 🔧 安装 |
| 21 | + |
| 22 | +### 先决条件 |
| 23 | + |
| 24 | + - Rust 1.88+(用于从源代码构建) |
| 25 | + - 已配置 AWS 凭据(通过环境变量、AWS CLI 或 IAM 角色) |
| 26 | + - 访问 S3 兼容存储服务 |
| 27 | + |
| 28 | +### 从源代码构建 |
| 29 | + |
| 30 | +```bash |
| 31 | +# 克隆仓库 |
| 32 | +git clone https://github.com/rustfs/rustfs.git |
| 33 | +cd rustfs |
| 34 | + |
| 35 | +# 构建 MCP 服务器 |
| 36 | +cargo build --release -p rustfs-mcp |
| 37 | + |
| 38 | +# 二进制文件将在以下路径可用 |
| 39 | +./target/release/rustfs-mcp |
| 40 | +``` |
| 41 | + |
| 42 | + |
| 43 | +## ⚙️ 配置 |
| 44 | + |
| 45 | +### 环境变量 |
| 46 | + |
| 47 | +```bash |
| 48 | +# AWS 凭据(必填) |
| 49 | +export AWS_ACCESS_KEY_ID=您的访问密钥 |
| 50 | +export AWS_SECRET_ACCESS_KEY=您的密钥 |
| 51 | +export AWS_REGION=us-east-1 # 可选,默认为 us-east-1 |
| 52 | + |
| 53 | +# 可选:自定义 S3 端点(用于 MinIO 等) |
| 54 | +export AWS_ENDPOINT_URL=http://localhost:9000 |
| 55 | + |
| 56 | +# 日志级别(可选) |
| 57 | +export RUST_LOG=info |
| 58 | +``` |
| 59 | + |
| 60 | +### 命令行选项 |
| 61 | + |
| 62 | +```bash |
| 63 | +rustfs-mcp --help |
| 64 | +``` |
| 65 | + |
| 66 | +服务器支持各种命令行选项来定制行为: |
| 67 | + |
| 68 | + - `--access-key-id`:S3 认证的 AWS 访问密钥 ID |
| 69 | + - `--secret-access-key`:S3 认证的 AWS 密钥 |
| 70 | + - `--region`:用于 S3 操作的 AWS 区域(默认:us-east-1) |
| 71 | + - `--endpoint-url`:自定义 S3 端点 URL(用于 MinIO、LocalStack 等) |
| 72 | + - `--log-level`:日志级别配置(默认:rustfs\_mcp\_server=info) |
| 73 | + |
| 74 | +----- |
| 75 | + |
| 76 | +## 🚀 使用 |
| 77 | + |
| 78 | +### 启动服务器 |
| 79 | + |
| 80 | +```bash |
| 81 | +# 启动 MCP 服务器 |
| 82 | +rustfs-mcp |
| 83 | + |
| 84 | +# 或使用自定义选项 |
| 85 | +rustfs-mcp --log-level debug --region us-west-2 |
| 86 | +``` |
| 87 | + |
| 88 | +### 与聊天客户端集成 |
| 89 | + |
| 90 | +#### 选项 1:使用命令行参数 |
| 91 | + |
| 92 | +```json |
| 93 | +{ |
| 94 | + "mcpServers": { |
| 95 | + "rustfs-mcp": { |
| 96 | + "command": "/path/to/rustfs-mcp", |
| 97 | + "args": [ |
| 98 | + "--access-key-id", "您的访问密钥", |
| 99 | + "--secret-access-key", "您的密钥", |
| 100 | + "--region", "us-west-2", |
| 101 | + "--log-level", "info" |
| 102 | + ] |
| 103 | + } |
| 104 | + } |
| 105 | +} |
| 106 | +``` |
| 107 | + |
| 108 | +#### 选项 2:使用环境变量 |
| 109 | + |
| 110 | +```json |
| 111 | +{ |
| 112 | + "mcpServers": { |
| 113 | + "rustfs-mcp": { |
| 114 | + "command": "/path/to/rustfs-mcp", |
| 115 | + "env": { |
| 116 | + "AWS_ACCESS_KEY_ID": "您的访问密钥", |
| 117 | + "AWS_SECRET_ACCESS_KEY": "您的密钥", |
| 118 | + "AWS_REGION": "us-east-1" |
| 119 | + } |
| 120 | + } |
| 121 | + } |
| 122 | +} |
| 123 | +``` |
| 124 | + |
| 125 | + |
| 126 | +## 🛠️ 可用工具 |
| 127 | + |
| 128 | +MCP 服务器公开了 AI 助手可以使用的以下工具: |
| 129 | + |
| 130 | +### `list_buckets` |
| 131 | + |
| 132 | +列出使用已配置凭据可访问的所有 S3 存储桶。 |
| 133 | + |
| 134 | +**参数**:无 |
| 135 | + |
| 136 | +### `list_objects` |
| 137 | + |
| 138 | +列出 S3 存储桶中的对象,支持可选的前缀过滤。 |
| 139 | + |
| 140 | +**参数**: |
| 141 | + |
| 142 | + - `bucket_name` (字符串):S3 存储桶的名称 |
| 143 | + - `prefix` (字符串, 可选):用于过滤对象的前缀 |
| 144 | + |
| 145 | +### `upload_file` |
| 146 | + |
| 147 | +将本地文件上传到 S3,并自动检测 MIME 类型。 |
| 148 | + |
| 149 | +**参数**: |
| 150 | + |
| 151 | + - `local_file_path` (字符串):本地文件路径 |
| 152 | + - `bucket_name` (字符串):目标 S3 存储桶 |
| 153 | + - `object_key` (字符串):S3 对象键(目标路径) |
| 154 | + - `content_type` (字符串, 可选):内容类型(如果未提供则自动检测) |
| 155 | + - `storage_class` (字符串, 可选):S3 存储类别 |
| 156 | + - `cache_control` (字符串, 可选):缓存控制头 |
| 157 | + |
| 158 | +### `get_object` |
| 159 | + |
| 160 | +从 S3 检索对象,有两种操作模式:直接读取内容或下载到文件。 |
| 161 | + |
| 162 | +**参数**: |
| 163 | + |
| 164 | + - `bucket_name` (字符串):源 S3 存储桶 |
| 165 | + - `object_key` (字符串):S3 对象键 |
| 166 | + - `version_id` (字符串, 可选):版本化对象的版本 ID |
| 167 | + - `mode` (字符串, 可选):操作模式 - "read"(默认)直接返回内容,"download" 保存到本地文件 |
| 168 | + - `local_path` (字符串, 可选):本地文件路径(当模式为 "download" 时必填) |
| 169 | + - `max_content_size` (数字, 可选):读取模式的最大内容大小(字节)(默认:1MB) |
| 170 | + |
| 171 | + |
| 172 | +## 架构 |
| 173 | + |
| 174 | +MCP 服务器采用模块化架构构建: |
| 175 | + |
| 176 | +``` |
| 177 | +rustfs-mcp/ |
| 178 | +├── src/ |
| 179 | +│ ├── main.rs # 入口点、CLI 解析和服务器初始化 |
| 180 | +│ ├── server.rs # MCP 服务器实现和工具处理器 |
| 181 | +│ ├── s3_client.rs # 带有异步操作的 S3 客户端包装器 |
| 182 | +│ ├── config.rs # 配置管理和 CLI 选项 |
| 183 | +│ └── lib.rs # 库导出和公共 API |
| 184 | +└── Cargo.toml # 依赖项、元数据和二进制配置 |
| 185 | +``` |
| 186 | + |
0 commit comments