Skip to main content
Glama
jk-hazel-996

RustFS File Management MCP Server

by jk-hazel-996

FS MCP Server

基于FastMCP构建的文件上传/下载MCP服务,集成RustFS SDK实现AI自动调用文件存储和下载功能。

功能特性

  • 文件上传: 支持上传本地文件到RustFS存储服务

  • 文件下载: 支持从任意HTTP/HTTPS URL下载文件到本地

  • 异步处理: 基于asyncio的异步文件操作

  • 错误处理: 完善的错误处理和异常管理

  • 配置验证: 启动时验证必需的环境变量配置

安装

1. 克隆项目

git clone <repository-url>
cd fs_mcp

2. 安装依赖

pip install -e .

或安装开发依赖:

pip install -e ".[dev]"

3. 配置环境变量

复制环境变量模板并配置:

cp .env.example .env

编辑 .env 文件:

# RustFS配置
FS_URL=https://your-rustfs-endpoint.com
FS_AK=your-access-key
FS_SK=your-secret-key

# 可选配置
TIMEOUT=30

使用方法

启动服务

# 直接运行
python -m src.server

# 或使用模块方式
python -m src

MCP工具

1. upload_file

上传本地文件到RustFS存储服务。

参数:

  • file_path (string): 本地文件的绝对路径

返回值:

{
  "success": true,
  "filename": "example.txt",
  "size": 1024,
  "content_type": "text/plain",
  "access_url": "https://fs.example.com/files/example.txt",
  "file_id": "example.txt",
  "message": "文件 'example.txt' 上传成功"
}

2. download_file

从指定URL下载文件到本地路径。

参数:

  • url (string): 要下载的文件URL

  • download_path (string): 本地保存路径

返回值:

{
  "success": true,
  "url": "https://example.com/file.pdf",
  "file_path": "/path/to/save/file.pdf",
  "filename": "file.pdf",
  "size": 2048000,
  "content_type": "application/pdf",
  "message": "文件 'file.pdf' 下载成功"
}

使用示例

文件上传示例

# 通过MCP客户端调用上传工具
result = await mcp_client.call_tool("upload_file", {
    "file_path": "/home/user/documents/report.pdf"
})

文件下载示例

# 下载文件到指定目录
result = await mcp_client.call_tool("download_file", {
    "url": "https://example.com/data.csv",
    "download_path": "/home/user/downloads/"
})

# 下载文件到指定路径
result = await mcp_client.call_tool("download_file", {
    "url": "https://example.com/image.png",
    "download_path": "/home/user/downloads/saved_image.png"
})

错误处理

服务提供详细的错误信息:

常见错误类型

  • FileNotFoundError: 文件不存在

  • ValueError: 参数无效或URL格式错误

  • RuntimeError: 上传/下载操作失败

  • ConfigurationError: 环境变量配置错误

错误示例

# 文件不存在
try:
    await mcp_client.call_tool("upload_file", {
        "file_path": "/nonexistent/file.txt"
    })
except FileNotFoundError as e:
    print(f"错误: {e}")

# URL无效
try:
    await mcp_client.call_tool("download_file", {
        "url": "invalid-url",
        "download_path": "/tmp/"
    })
except ValueError as e:
    print(f"错误: {e}")

开发

项目结构

fs_mcp/
├── src/
│   ├── __init__.py          # 包初始化
│   ├── __main__.py          # 命令行入口
│   ├── server.py            # MCP服务器主程序
│   ├── config.py            # 配置管理
│   ├── rustfs_client.py     # RustFS客户端
│   ├── upload_tool.py       # 上传工具
│   ├── download_tool.py     # 下载工具
│   ├── exceptions.py        # 自定义异常
│   └── utils.py             # 工具函数
├── pyproject.toml           # 项目配置
├── .env.example             # 环境变量模板
└── README.md               # 项目文档

运行测试

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest

代码格式化

# 使用black格式化代码
black src/

# 使用ruff检查代码质量
ruff check src/

配置说明

必需环境变量

  • FS_URL: RustFS服务端点URL

  • FS_AK: RustFS访问密钥

  • FS_SK: RustFS密钥

可选环境变量

  • TIMEOUT: 请求超时时间(秒),默认30

RustFS API要求

本服务假设RustFS提供以下API端点:

  • POST /api/upload: 文件上传

  • GET /api/files/{file_id}: 获取文件信息

上传请求格式:

  • Method: POST

  • Content-Type: multipart/form-data

  • Headers: Authorization: Bearer {access_key}:{secret_key}

  • Files: file (文件内容)

  • Data: filename (文件名), size (文件大小)

许可证

MIT License

贡献

欢迎提交Issue和Pull Request来改进这个项目。

-
security - not tested
-
license - not tested
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jk-hazel-996/RustFS_Simple_MCPServer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server