├── .DS_Store ├── .env.example ├── .gitignore ├── README.md ├── requirements.txt └── server.py /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joeseesun/qiniu-mcp-joe/130edcda48fa2391c48ab5e8151def3d2398ed04/.DS_Store -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # Qiniu Cloud Storage Configuration 2 | QINIU_ACCESS_KEY=your_access_key_here 3 | QINIU_SECRET_KEY=your_secret_key_here 4 | QINIU_BUCKET_NAME=your_bucket_name 5 | QINIU_DOMAIN=https://your.domain 6 | QINIU_UPLOAD_EXPIRES=3600 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Python 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | *.so 6 | .Python 7 | build/ 8 | develop-eggs/ 9 | dist/ 10 | downloads/ 11 | eggs/ 12 | .eggs/ 13 | lib/ 14 | lib64/ 15 | parts/ 16 | sdist/ 17 | var/ 18 | wheels/ 19 | *.egg-info/ 20 | .installed.cfg 21 | *.egg 22 | MANIFEST 23 | 24 | # Virtual Environment 25 | venv/ 26 | ENV/ 27 | 28 | # Sensitive files 29 | config.py 30 | cline_config.json 31 | .env 32 | 33 | # IDE 34 | .vscode/ 35 | .idea/ 36 | *.swp 37 | *.swo 38 | 39 | # Logs 40 | *.log 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 七牛云存储 MCP 服务 2 | 3 | 用于上传文件到七牛云存储的MCP服务 4 | 5 | ## 安装指南 6 | 7 | 1. 克隆仓库 8 | 2. 创建并激活虚拟环境: 9 | ```bash 10 | python3 -m venv venv 11 | source venv/bin/activate 12 | ``` 13 | 3. 安装依赖: 14 | ```bash 15 | pip install -r requirements.txt 16 | ``` 17 | 4. 配置环境变量: 18 | ```bash 19 | export QINIU_ACCESS_KEY="你的AccessKey" 20 | export QINIU_SECRET_KEY="你的SecretKey" 21 | export QINIU_BUCKET_NAME="joemarkdown" 22 | export QINIU_DOMAIN="https://img.t5t6.com" 23 | ``` 24 | 5. 启动服务: 25 | ```bash 26 | python server.py 27 | ``` 28 | 29 | ## 配置说明 30 | 31 | 1. 复制示例配置文件: 32 | ```bash 33 | cp .env.example .env 34 | ``` 35 | 2. 编辑`.env`文件填写你的七牛云凭证 36 | 3. 切勿将`.env`文件提交到版本控制 37 | 38 | 示例`.env`内容: 39 | ``` 40 | QINIU_ACCESS_KEY=你的AccessKey 41 | QINIU_SECRET_KEY=你的SecretKey 42 | QINIU_BUCKET_NAME=你的存储空间名称 43 | QINIU_DOMAIN=https://你的域名 44 | ``` 45 | 46 | ## 使用方法 47 | 48 | 1. 克隆项目后首次运行: 49 | ```bash 50 | # 进入项目目录 51 | cd qiniu_mcp_server 52 | 53 | # 创建虚拟环境 54 | python3 -m venv venv 55 | 56 | # 激活环境 (Linux/Mac) 57 | source venv/bin/activate 58 | 59 | # 安装依赖 60 | pip install -r requirements.txt 61 | 62 | # 复制并配置.env文件 63 | cp .env.example .env 64 | nano .env # 编辑填入你的七牛云凭证 65 | 66 | # 启动服务 67 | python server.py 68 | ``` 69 | 70 | 2. 日常使用: 71 | ```bash 72 | cd qiniu_mcp_server 73 | source venv/bin/activate # 激活环境 74 | python server.py # 启动服务 75 | ``` 76 | 77 | 3. 调用上传接口示例: 78 | ```python 79 | from mcp import McpClient 80 | 81 | client = McpClient("qiniu_mcp") 82 | url = client.use_tool("upload_file", { 83 | "file_path": "/path/to/your/file.jpg" 84 | }) 85 | print("文件URL:", url) 86 | ``` 87 | 88 | 服务提供以下工具: 89 | - `upload_file(file_path: str) -> str`: 上传文件并返回公开访问URL 90 | 91 | ## Trae 集成配置 92 | 93 | 在Trae的配置文件中添加以下内容(请替换实际路径和凭证): 94 | 95 | ```json 96 | { 97 | "mcpServers": { 98 | "qiniu_mcp": { 99 | "command": "python", 100 | "args": [ 101 | "/path/to/qiniu_mcp_server/server.py" 102 | ], 103 | "env": { 104 | "QINIU_ACCESS_KEY": "你的AccessKey", 105 | "QINIU_SECRET_KEY": "你的SecretKey", 106 | "QINIU_BUCKET_NAME": "你的存储空间名称", 107 | "QINIU_DOMAIN": "https://你的域名" 108 | } 109 | } 110 | } 111 | } 112 | ``` 113 | 114 | 注意: 实际使用时请确保: 115 | 1. 替换`/path/to/`为实际服务器路径 116 | 2. 使用真实的凭证信息替换示例值 117 | 3. 妥善保管凭证信息 118 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | fastmcp 2 | qiniu 3 | -------------------------------------------------------------------------------- /server.py: -------------------------------------------------------------------------------- 1 | from mcp.server.fastmcp import FastMCP 2 | from qiniu import Auth, put_file 3 | import config 4 | import os 5 | import uuid 6 | 7 | # Initialize Qiniu Auth 8 | q = Auth(config.QINIU_ACCESS_KEY, config.QINIU_SECRET_KEY) 9 | 10 | # Create MCP server 11 | mcp = FastMCP("qiniu-uploader") 12 | 13 | @mcp.tool() 14 | def upload_file(file_path: str) -> str: 15 | """Uploads a file to Qiniu and returns its public URL""" 16 | if not os.path.exists(file_path): 17 | raise ValueError(f"File not found: {file_path}") 18 | 19 | # Generate unique key 20 | key = f"mcp-uploads/{uuid.uuid4()}{os.path.splitext(file_path)[1]}" 21 | 22 | # Generate upload token 23 | token = q.upload_token(config.QINIU_BUCKET_NAME, key, config.QINIU_UPLOAD_EXPIRES) 24 | 25 | # Upload file 26 | ret, info = put_file(token, key, file_path) 27 | 28 | if info.status_code == 200: 29 | return f"{config.QINIU_DOMAIN}/{key}" 30 | else: 31 | raise Exception(f"Upload failed: {info}") 32 | 33 | if __name__ == "__main__": 34 | mcp.run() 35 | --------------------------------------------------------------------------------