# 阿里云OSS图片转存MCP服务器 一个基于Model Context Protocol (MCP)的服务器,支持两种模式将图片URL转存到阿里云OSS并返回CDN访问地址。 **架构特点**: 支持OSS直传和HOOK代理两种模式,使用STS临时凭证确保安全,提供完整的图片上传和管理功能。 ## MCP工具说明 ### transfer_image_to_oss 将指定URL的图片转存到阿里云OSS,并返回新的CDN访问地址。 **参数:** - `imageURL` (string): 要转存的图片URL地址 **返回结果:** ```json { "structuredContent": { "success": true, "data": { "cdnUrl": "https://cdn.example.com/images/photo_123.jpg", "fileName": "images/photo_123.jpg", "originalUrl": "https://source.example.com/photo.jpg" }, "message": "Image successfully transferred to OSS" }, "content": [{ "type": "text", "text": "{\"success\":true,\"data\":{\"cdnUrl\":\"https://cdn.example.com/images/photo_123.jpg\",\"fileName\":\"images/photo_123.jpg\",\"originalUrl\":\"https://source.example.com/photo.jpg\"},\"message\":\"Image successfully transferred to OSS\"}" }] } ``` **错误返回格式:** ```json { "isError": true, "structuredContent": { "success": false, "data": null, "error": "Invalid URL format", "message": "Failed to transfer image to OSS" }, "content": [{ "type": "text", "text": "Error: Invalid URL format" }] } ``` **功能特性:** - 🔄 **双模式支持**: OSS直传和HOOK代理两种模式 - 🔑 **STS安全**: OSS模式使用STS临时凭证,确保最小权限原则 - 🌐 支持HTTP/HTTPS协议的图片URL - ⚡ OSS模式:直接SDK集成,高性能上传 - 🔗 HOOK模式:API代理上传,兼容现有系统 - 🔒 完整的安全验证和文件类型检查 - 📏 文件大小限制(最大50MB) - 🏷️ 智能文件名处理,防止路径遍历攻击 - 📋 **MCP规范**: 完整符合官方规范,包含outputSchema定义 - 🎯 **结构化数据**: 提供structuredContent字段,直接访问结构化数据 - 🔄 **向后兼容**: 同时提供content数组,支持传统客户端 - ⚡ **错误处理**: 规范的isError标记和错误详情 - 🩺 **健康检查**: 内置配置验证和状态监控 ## 环境变量配置 项目支持两种上传模式:**OSS模式**(直接上传到阿里云OSS)和 **HOOK模式**(通过API接口上传)。 ### 基础配置 ```bash # MCP服务端口 PORT=3004 # 上传模式 (OSS 或 HOOK) UPLOAD_MODE=OSS ``` ### OSS模式配置 当 `UPLOAD_MODE=OSS` 时,需要配置以下环境变量: ```bash # STS临时凭证配置 STS_ACCESS_KEY_ID=your_sts_access_key_id STS_ACCESS_KEY_SECRET=your_sts_access_key_secret STS_ROLE_ARN=acs:ram::your_account_id:role/your_role_name STS_ENDPOINT=sts.cn-hangzhou.aliyuncs.com # OSS存储配置 OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com OSS_BUCKET=your_bucket_name # CDN配置 CDN_ENDPOINT=https://your-cdn-domain.com ``` **OSS模式说明**: - 使用STS临时凭证,提供最小权限原则,更加安全 - 直接通过阿里云OSS SDK上传,性能更好 - 确保RAM角色具有对应OSS存储桶的PutObject和GetObject权限 ### HOOK模式配置 当 `UPLOAD_MODE=HOOK` 时,需要配置以下环境变量: ```bash # HOOK上传接口URL UPLOAD_HOOK_URL=http://your-api-server:3001/api/resources/transfer-image-to-oss ``` **HOOK模式说明**: - 通过API接口代理上传,适合集成现有系统 - 支持多种响应格式自动适配 - 无需配置OSS相关参数,由后端API处理 ## MCP客户端集成 本MCP服务器支持两种通信模式: - **stdio模式**:适用于Cursor等桌面MCP客户端,通过命令行直接启动 - **HTTP模式**:适用于Docker部署和N8N等服务器环境 ### 配置示例 **OSS模式配置**: ```json { "mcpServers": { "alioss-mcp-server": { "command": "npx", "args": ["-y","alioss-mcp-server@latest"], "env": { "UPLOAD_MODE": "OSS", "STS_ACCESS_KEY_ID": "your_sts_access_key_id", "STS_ACCESS_KEY_SECRET": "your_sts_access_key_secret", "STS_ROLE_ARN": "acs:ram::your_account_id:role/your_role_name", "OSS_ENDPOINT": "oss-cn-hangzhou.aliyuncs.com", "OSS_BUCKET": "your_bucket_name", "CDN_ENDPOINT": "https://your-cdn-domain.com" } } } } ``` **HOOK模式配置**: ```json { "mcpServers": { "alioss-mcp-server": { "command": "npx", "args": ["-y","alioss-mcp-server@latest"], "env": { "UPLOAD_MODE": "HOOK", "UPLOAD_HOOK_URL": "http://your-api-server:3001/api/resources/transfer-image-to-oss" } } } } ``` **🔧 自动模式检测**: - **默认使用stdio模式**,适合所有MCP客户端(Cursor、Claude Desktop等) - 当设置`PORT`环境变量或使用`--http`参数时,自动切换到HTTP模式(适合Docker部署) - 可通过`MCP_TRANSPORT=http`环境变量强制指定HTTP模式 ## Docker部署 ### 方式一:使用 Docker Compose(推荐) 1. **创建环境变量文件** 复制配置模板: ```bash cp env.example .env ``` 编辑 `.env` 文件,根据选择的模式填写配置: ```bash # OSS模式配置示例 UPLOAD_MODE=OSS STS_ACCESS_KEY_ID=your_sts_access_key_id STS_ACCESS_KEY_SECRET=your_sts_access_key_secret STS_ROLE_ARN=acs:ram::your_account_id:role/your_role_name OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com OSS_BUCKET=your_bucket_name CDN_ENDPOINT=https://your-cdn-domain.com # 或者 HOOK模式配置示例 # UPLOAD_MODE=HOOK # UPLOAD_HOOK_URL=http://your-api-server:3001/api/resources/transfer-image-to-oss ``` 2. **启动服务** ```bash # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f alioss-mcp-server # 停止服务 docker-compose down ``` ### 方式二:直接使用 Docker **OSS模式**: ```bash docker build -t alioss-mcp-server . docker run -d \ --name alioss-mcp-server \ -p 3004:3004 \ -e UPLOAD_MODE=OSS \ -e STS_ACCESS_KEY_ID=your_sts_access_key_id \ -e STS_ACCESS_KEY_SECRET=your_sts_access_key_secret \ -e STS_ROLE_ARN=your_role_arn \ -e OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com \ -e OSS_BUCKET=your_bucket_name \ -e CDN_ENDPOINT=https://your-cdn-domain.com \ alioss-mcp-server ``` **HOOK模式**: ```bash docker run -d \ --name alioss-mcp-server \ -p 3004:3004 \ -e UPLOAD_MODE=HOOK \ -e UPLOAD_HOOK_URL=http://your-api-server:3001/api/resources/transfer-image-to-oss \ alioss-mcp-server ``` ### 访问Docker部署的MCP服务 #### 服务端点 Docker容器启动后,MCP服务将在以下端点可用: - **MCP端点**: `http://localhost:3004/messages` - **健康检查**: `http://localhost:3004/health` #### 验证服务状态 ```bash # 检查容器状态 docker ps | grep alioss-mcp-server # 查看服务日志 docker logs alioss-mcp-server # 健康检查 curl http://localhost:3004/health ``` #### MCP客户端连接Docker服务 ```json { "mcpServers": { "alioss-mcp-server": { "command": "curl", "args": [ "-X", "POST", "http://localhost:3004/messages", "-H", "Content-Type: application/json", "--data-raw" ] } } } ``` ### 本地开发 ```bash # 安装依赖 pnpm install # 开发模式启动 pnpm dev # 构建 pnpm build # 生产模式启动 pnpm start ``` ### N8N集成 Docker服务启动后,可以在N8N中使用: #### 前置要求 - 安装 `n8n-nodes-mcp` 社区节点 - 设置环境变量:`N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` #### 配置MCP Client节点 - **Connection Type**: `HTTP Streamable` - **HTTP Streamable URL**: `http://localhost:3004/messages`(本地Docker)或 `http://your-server-ip:3004/messages`(远程Docker) - **Authentication**: `None` #### 使用transfer_image_to_oss工具 在N8N工作流中添加MCP Client节点,执行工具时传入: ```json { "imageURL": "https://example.com/image.jpg" } ``` ## 技术架构 本MCP服务器支持两种架构模式: ### OSS模式架构 ```plaintext Claude/Cursor → MCP Server → 阿里云OSS (端口3004) (直接SDK调用) ↓ STS临时凭证服务 ``` ### HOOK模式架构 ```plaintext Claude/Cursor → MCP Server → API Server → 阿里云OSS (端口3004) (HOOK URL) ``` ### 技术栈 - **架构模式**: 双模式支持 (OSS直传 + HOOK代理) - **传输协议**: HTTP Streamable (MCP 推荐标准) - **Web框架**: Express.js (轻量级) - **OSS SDK**: ali-oss (官方SDK,OSS模式) - **安全认证**: 阿里云STS + RAM角色 (OSS模式) - **MCP协议**: 原生支持 (无额外依赖) - **容器化**: Docker + Docker Compose ### 架构优势 **OSS模式**: - ✅ **安全性高**: STS临时凭证 + 最小权限原则 - ✅ **性能优异**: 直接SDK调用,减少网络开销 - ✅ **独立部署**: 无需依赖外部API服务 **HOOK模式**: - ✅ **兼容性好**: 可集成现有API系统 - ✅ **灵活部署**: 适应不同的基础设施 - ✅ **集中管理**: 复用现有的上传逻辑 **通用优势**: - ✅ **模式切换**: 配置简单,一键切换 - ✅ **易于维护**: 代码集中,逻辑清晰 - ✅ **容器友好**: 完整的Docker支持 ### 端点说明 - **`POST /messages`**: HTTP Streamable MCP端点,支持所有MCP操作 - **`GET /health`**: 健康检查端点 ## 使用示例 ### 在 Claude Desktop 中使用 配置完成后,您可以在对话中直接使用: ```plaintext 请帮我将这个图片转存到OSS:https://example.com/image.jpg ``` Claude 会自动调用 MCP 服务将图片上传到阿里云OSS并返回CDN地址。 ### 在 Cursor 中使用 在代码编辑器中,您可以通过AI助手上传图片: ```plaintext @alioss-mcp-server 请将这个截图上传到OSS: https://screenshot.example.com/img.png ``` ## 故障排除 ### 常见问题 1. **服务启动失败** - 检查环境变量配置是否正确 - 确认网络连接正常 - 查看服务日志获取详细错误信息 2. **上传失败** - OSS模式:检查STS凭证和权限配置 - HOOK模式:确认API接口可访问 - 检查图片URL是否有效 3. **MCP客户端连接失败** - 确认服务正在运行(端口3004) - 检查客户端配置文件格式 - 重启MCP客户端 4. **权限问题** - 确保RAM角色具有OSS权限 - 检查STS配置是否正确 - 验证OSS存储桶访问权限 5. **网络问题** - 检查防火墙设置 - 确认OSS endpoint可访问 - 验证代理设置 ## 健康检查 访问健康检查端点查看服务状态: ```bash curl http://localhost:3004/health ``` 返回示例: ```json { "status": "ok", "service": "alioss-mcp-server", "initialized": true, "tools": 1, "uploadMode": "OSS", "configured": true } ``` **状态说明**: - `status`: 服务状态 (`ok` 或 `warning`) - `service`: 服务名称 - `initialized`: MCP服务器是否已初始化 - `tools`: 可用工具数量 - `uploadMode`: 当前上传模式 - `configured`: 配置是否完整 - `missingConfig`: 缺失的配置项(如果有) ## 获取帮助 如果您有任何问题: - 查看项目文档和 `env.example` 配置模板 - 检查健康检查端点获取服务状态 - 搜索现有的 [issues](https://github.com/yourusername/alioss-mcp-server/issues) - 创建新的 issue 提问 ### 安全问题报告 如发现安全问题,请通过 [GitHub Issues](https://github.com/yourusername/alioss-mcp-server/issues) 报告,并在标题中标注 `[SECURITY]`。 ## 许可证 本项目基于 [MIT 许可证](LICENSE) 开源。 ## 贡献 欢迎贡献代码、报告问题或提出建议!请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详细信息。 感谢您的关注和支持!