|
| 1 | +# 阿里云RDS OpenAPI MCP服务器 |
| 2 | + |
| 3 | +🚀 通过OpenAPI为阿里云RDS提供MCP服务器支持。本项目通过[MCP](https://github.com/CherryHQ/mcp)框架公开阿里云RDS、VPC和计费API,将常见的数据库管理任务打包成易于使用的工具。 |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | +> ⚠️ **注意**: 本说明文档基于Windows平台。 |
| 8 | +
|
| 9 | +## 📋 目录 |
| 10 | +- [✨ 功能特性](#-功能特性) |
| 11 | +- [📋 先决条件](#-先决条件) |
| 12 | +- [🔧 安装](#-安装) |
| 13 | +- [⚙️ 配置](#️-配置) |
| 14 | +- [🚀 快速开始](#-快速开始) |
| 15 | +- [🛠️ 可用工具](#️-可用工具) |
| 16 | +- [💡 使用场景](#-使用场景) |
| 17 | +- [🔌 集成方式](#-集成方式) |
| 18 | +- [🤝 贡献指南](#-贡献指南) |
| 19 | +- [📄 许可证](#-许可证) |
| 20 | +- [💬 技术支持](#-技术支持) |
| 21 | + |
| 22 | +## ✨ 功能特性 |
| 23 | + |
| 24 | +- 🏗️ **全面的RDS管理**: 创建、配置和管理RDS实例 |
| 25 | +- 🔒 **安全与合规**: IP白名单管理和安全审计 |
| 26 | +- 📊 **性能监控**: 查询性能指标和日志 |
| 27 | +- 💰 **成本优化**: 计费分析和资源优化 |
| 28 | +- 🌐 **多环境支持**: 开发、测试和生产环境 |
| 29 | +- 🔗 **VPC集成**: 完整的VPC和交换机管理功能 |
| 30 | + |
| 31 | +## 📋 先决条件 |
| 32 | + |
| 33 | +- 🐍 Python 3.12 或更高版本 |
| 34 | +- ☁️ 拥有适当权限的阿里云账户 |
| 35 | +- 🔑 Access Key ID 和 Access Key Secret(或STS Token) |
| 36 | + |
| 37 | +## 🔧 安装 |
| 38 | + |
| 39 | +### 方式一:使用uv快速启动(推荐) |
| 40 | + |
| 41 | +1. **安装uv** |
| 42 | + ```powershell |
| 43 | + powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" |
| 44 | + ``` |
| 45 | + |
| 46 | +2. **运行服务器** |
| 47 | + ```bash |
| 48 | + uvx alibabacloud-rds-openapi-mcp-server@latest |
| 49 | + ``` |
| 50 | + |
| 51 | +### 方式二:从源码安装 |
| 52 | + |
| 53 | +1. **安装Python 3.12+** |
| 54 | + |
| 55 | + 从[Python官网](https://www.python.org/downloads/)下载 |
| 56 | + |
| 57 | +2. **克隆仓库** |
| 58 | + ```bash |
| 59 | + git clone https://github.com/aliyun/alibabacloud-rds-openapi-mcp-server.git |
| 60 | + cd alibabacloud-rds-openapi-mcp-server |
| 61 | + ``` |
| 62 | + |
| 63 | +3. **安装依赖** |
| 64 | + ```bash |
| 65 | + pip install -i https://mirrors.aliyun.com/pypi/simple/ alibabacloud_bssopenapi20171214 |
| 66 | + pip install -i https://mirrors.aliyun.com/pypi/simple/ alibabacloud_rds20140815 |
| 67 | + pip install -i https://mirrors.aliyun.com/pypi/simple/ alibabacloud_vpc20160428 |
| 68 | + pip install -i https://mirrors.aliyun.com/pypi/simple/ mcp |
| 69 | + ``` |
| 70 | + |
| 71 | +4. **运行服务器** |
| 72 | + ```bash |
| 73 | + python src/alibabacloud_rds_openapi_mcp_server/server.py |
| 74 | + ``` |
| 75 | + |
| 76 | +## ⚙️ 配置 |
| 77 | + |
| 78 | +### 环境变量设置 |
| 79 | + |
| 80 | +在启动MCP服务器之前,需要设置必要的环境变量: |
| 81 | + |
| 82 | +#### PowerShell配置 |
| 83 | +```powershell |
| 84 | +# 设置服务器传输模式 |
| 85 | +$env:SERVER_TRANSPORT="sse" |
| 86 | +
|
| 87 | +# 设置阿里云凭证 |
| 88 | +$env:ALIBABA_CLOUD_ACCESS_KEY_ID="<您的AccessKey ID>" |
| 89 | +$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET="<您的AccessKey Secret>" |
| 90 | +
|
| 91 | +# 可选:使用临时凭证时设置STS Token |
| 92 | +$env:ALIBABA_CLOUD_SECURITY_TOKEN="<您的STS安全令牌>" |
| 93 | +``` |
| 94 | + |
| 95 | +#### 命令提示符(CMD)配置 |
| 96 | +```cmd |
| 97 | +REM 设置服务器传输模式 |
| 98 | +set SERVER_TRANSPORT=sse |
| 99 | +
|
| 100 | +REM 设置阿里云凭证 |
| 101 | +set ALIBABA_CLOUD_ACCESS_KEY_ID=<您的AccessKey ID> |
| 102 | +set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<您的AccessKey Secret> |
| 103 | +
|
| 104 | +REM 可选:使用临时凭证时设置STS Token |
| 105 | +set ALIBABA_CLOUD_SECURITY_TOKEN=<您的STS安全令牌> |
| 106 | +``` |
| 107 | + |
| 108 | +> ⚠️ **重要提示**: 请将`<占位符>`替换为您的真实凭证信息。这些环境变量仅在当前终端会话中有效。 |
| 109 | +
|
| 110 | +## 🚀 快速开始 |
| 111 | + |
| 112 | +### 服务器启动验证 |
| 113 | + |
| 114 | +成功启动后,您将看到类似以下的输出: |
| 115 | +``` |
| 116 | +INFO: Started server process [进程ID] |
| 117 | +INFO: Waiting for application startup. |
| 118 | +INFO: Application startup complete. |
| 119 | +INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) |
| 120 | +``` |
| 121 | + |
| 122 | +### 测试安装 |
| 123 | + |
| 124 | +配置完成后,可以使用简单的提示词测试MCP工具的有效性: |
| 125 | +``` |
| 126 | +请列出所有可用工具,列表方式,显示标题以及对应的简短描述。 |
| 127 | +``` |
| 128 | + |
| 129 | +## 🛠️ 可用工具 |
| 130 | + |
| 131 | +### 🏗️ RDS实例管理 |
| 132 | +- `create_db_instance`: 创建RDS实例 |
| 133 | +- `describe_db_instances`: 查询实例 |
| 134 | +- `describe_db_instance_attribute`: 查询实例详细信息 |
| 135 | +- `modify_db_instance_description`: 修改RDS实例描述 |
| 136 | +- `modify_db_instance_spec`: 修改RDS实例规格 |
| 137 | +- `restart_db_instance`: 重启RDS实例 |
| 138 | + |
| 139 | +### 🔒 安全与访问控制 |
| 140 | +- `modify_security_ips`: 修改IP白名单 |
| 141 | +- `describe_db_instance_ip_allowlist`: 批量查询IP白名单配置 |
| 142 | +- `attach_whitelist_template_to_instance`: 将白名单模板绑定到实例 |
| 143 | +- `describe_all_whitelist_template`: 查询白名单模板列表 |
| 144 | +- `describe_instance_linked_whitelist_template`: 查询绑定到实例的白名单模板列表 |
| 145 | + |
| 146 | +### 👥 数据库与用户管理 |
| 147 | +- `create_db_instance_account`: 创建RDS实例账号 |
| 148 | +- `describe_db_instance_accounts`: 批量查询账户信息 |
| 149 | +- `describe_db_instance_databases`: 批量查询数据库信息 |
| 150 | + |
| 151 | +### 🌐 网络与连接 |
| 152 | +- `allocate_instance_public_connection`: 为RDS实例分配公网连接 |
| 153 | +- `describe_db_instance_net_info`: 批量查询网络配置详情 |
| 154 | +- `describe_vpcs`: 查询VPC列表 |
| 155 | +- `describe_vswitches`: 查询VSwitch列表 |
| 156 | + |
| 157 | +### 📊 监控与性能 |
| 158 | +- `describe_db_instance_performance`: 查询实例性能数据 |
| 159 | +- `describe_error_logs`: 查询实例错误日志 |
| 160 | +- `describe_slow_log_records`: 查询RDS实例的慢日志记录 |
| 161 | +- `describe_db_instance_parameters`: 批量查询参数信息 |
| 162 | +- `modify_parameter`: 修改RDS实例参数 |
| 163 | + |
| 164 | +### 📦 资源管理 |
| 165 | +- `describe_available_classes`: 查询可用实例规格和存储范围 |
| 166 | +- `describe_available_zones`: 查询RDS实例可用区域 |
| 167 | +- `add_tags_to_db_instance`: 添加标签到RDS实例 |
| 168 | + |
| 169 | +### 💰 计费与成本管理 |
| 170 | +- `describe_bills`: 查询用户在特定计费周期内所有产品实例或计费项的消费汇总 |
| 171 | + |
| 172 | +### 🔧 实用工具 |
| 173 | +- `get_current_time`: 获取当前时间 |
| 174 | + |
| 175 | +## 💡 使用场景示例 |
| 176 | + |
| 177 | +### 场景一:资源调配与环境初始化 🏗️ |
| 178 | + |
| 179 | +**在杭州区域创建生产RDS MySQL实例:** |
| 180 | +``` |
| 181 | +在cn-hangzhou可用区生产一个RDS MySQL实例,配置、版本、白名单等信息与实例rm-bp1696hd82oc438fl保持完全一致,并打上标签:生产环境审计、月底前释放 |
| 182 | +``` |
| 183 | + |
| 184 | +**创建只读用户账号:** |
| 185 | +``` |
| 186 | +在cn-hangzhou区域的实例 rm-bp1696hd82oc438fl 上,创建一个只读账号readonly_user,密码为:Strong!Pa$$word 并授予它访问 report_db 数据库的只读权限。 |
| 187 | +``` |
| 188 | + |
| 189 | +### 场景二:安全与合规性自动化审计 🔒 |
| 190 | + |
| 191 | +**添加堡垒机IP到安全组:** |
| 192 | +``` |
| 193 | +立即将堡垒机新IP 100.101.102.103 添加到所有cn-hangzhou可用区的RDS MySQL实例的'ops_allowlist'安全组中。 |
| 194 | +``` |
| 195 | + |
| 196 | +**安全合规审计:** |
| 197 | +``` |
| 198 | +审计所有的RDS SQL Server实例,找到cn-hangzhou中所有白名单中不包含 123.123.123.123 IP的实例 |
| 199 | +``` |
| 200 | + |
| 201 | +### 场景三:成本优化 💰 |
| 202 | + |
| 203 | +**基于性能的成本优化:** |
| 204 | +``` |
| 205 | +分析cn-hangzhou区域过去3天月所有标签为"测试环境"的RDS MySQL实例,找出 CPU 平均使用率低于 5% 的,并建议一个更经济的实例规格。 |
| 206 | +``` |
| 207 | + |
| 208 | +### 场景四:常见运维操作 🔧 |
| 209 | + |
| 210 | +**实例故障排除:** |
| 211 | +``` |
| 212 | +cn-hangzhou实例rm-bp1696hd82oc438f目前无法连接,请立即尝试重启该实例。 |
| 213 | +``` |
| 214 | + |
| 215 | +## 🔌 集成方式 |
| 216 | + |
| 217 | +### Cherry Studio集成(推荐)🍒 |
| 218 | + |
| 219 | +Cherry Studio是一款集成了多种大语言模型的跨平台AI客户端,支持AI对话、绘图等,旨在提升创作效率。 |
| 220 | + |
| 221 | +在MCP客户端配置文件中添加以下配置: |
| 222 | + |
| 223 | +```json |
| 224 | +{ |
| 225 | + "mcpServers": { |
| 226 | + "rds-openapi-mcp-server": { |
| 227 | + "command": "uvx", |
| 228 | + "args": [ |
| 229 | + "alibabacloud-rds-openapi-mcp-server@latest" |
| 230 | + ], |
| 231 | + "env": { |
| 232 | + "ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_id", |
| 233 | + "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key", |
| 234 | + "ALIBABA_CLOUD_SECURITY_TOKEN": "your_sts_token" |
| 235 | + } |
| 236 | + } |
| 237 | + } |
| 238 | +} |
| 239 | +``` |
| 240 | + |
| 241 | +<div align="left"> |
| 242 | + <img src="./import_mcp_cherry.png" alt="Cherry Studio配置示例" width="900" /> |
| 243 | +</div> |
| 244 | +*在Cherry Studio中配置RDS MCP服务器* |
| 245 | + |
| 246 | +<div align="left"> |
| 247 | + <img src="./cherry_studio_list_tools.png" alt="Cherry Studio中展示可用的MCP工具" width="900" /> |
| 248 | +</div> |
| 249 | +*在Cherry Studio中提问展示所有可用的工具* |
| 250 | + |
| 251 | + |
| 252 | +> 📝 **注意**: `ALIBABA_CLOUD_SECURITY_TOKEN` 仅在使用STS Token时填入,如果使用AccessKey方式请保留该值为空。 |
| 253 | +
|
| 254 | + |
| 255 | +### Claude Desktop集成 🤖 |
| 256 | + |
| 257 | +在MCP客户端配置中添加: |
| 258 | + |
| 259 | +```json |
| 260 | +{ |
| 261 | + "mcpServers": { |
| 262 | + "rds-openapi-mcp-server": { |
| 263 | + "command": "uv", |
| 264 | + "args": [ |
| 265 | + "--directory", |
| 266 | + "d:/path/to/alibabacloud-rds-openapi-mcp-server/src/alibabacloud_rds_openapi_mcp_server", |
| 267 | + "run", |
| 268 | + "server.py" |
| 269 | + ], |
| 270 | + "env": { |
| 271 | + "ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_id", |
| 272 | + "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key", |
| 273 | + "ALIBABA_CLOUD_SECURITY_TOKEN": "your_sts_token" |
| 274 | + } |
| 275 | + } |
| 276 | + } |
| 277 | +} |
| 278 | +``` |
| 279 | + |
| 280 | +## 🤝 贡献指南 |
| 281 | + |
| 282 | +我们欢迎您的贡献!请按照以下步骤操作: |
| 283 | + |
| 284 | +1. 🍴 Fork本仓库 |
| 285 | +2. 🌟 创建特性分支 (`git checkout -b feature/amazing-feature`) |
| 286 | +3. 💾 提交您的修改 (`git commit -m '添加新特性'`) |
| 287 | +4. 📤 推送到分支 (`git push origin feature/amazing-feature`) |
| 288 | +5. 🔄 创建Pull Request |
| 289 | + |
| 290 | +### 开发指南 |
| 291 | + |
| 292 | +- 💻 确保代码符合Python PEP 8规范 |
| 293 | +- ✅ 添加适当的测试用例 |
| 294 | +- 📚 更新相关文档 |
| 295 | +- 🔍 运行所有测试确保通过 |
| 296 | + |
| 297 | +## 📄 许可证 |
| 298 | + |
| 299 | +本项目采用Apache 2.0许可证 - 查看[LICENSE](LICENSE)文件了解详情。 |
| 300 | + |
| 301 | +## 💬 技术支持 |
| 302 | + |
| 303 | +如有问题、意见或需要支持,请通过以下方式联系我们: |
| 304 | + |
| 305 | +- 💬 **钉钉群**: 106730017609 |
| 306 | +- 🐛 **GitHub Issues**: [创建问题](https://github.com/aliyun/alibabacloud-rds-openapi-mcp-server/issues) |
| 307 | + |
| 308 | +### 常见问题 ❓ |
| 309 | + |
| 310 | +<details> |
| 311 | +<summary>如何获取阿里云AccessKey?</summary> |
| 312 | + |
| 313 | +1. 登录阿里云控制台 |
| 314 | +2. 点击右上角头像,选择"AccessKey管理" |
| 315 | +3. 创建新的AccessKey对 |
| 316 | +4. 妥善保管AccessKey Secret |
| 317 | + |
| 318 | +</details> |
| 319 | + |
| 320 | +<details> |
| 321 | +<summary>支持哪些RDS数据库引擎?</summary> |
| 322 | + |
| 323 | +目前支持: |
| 324 | +- MySQL |
| 325 | +- SQL Server |
| 326 | +- PostgreSQL |
| 327 | +- MariaDB |
| 328 | + |
| 329 | +</details> |
| 330 | + |
0 commit comments