|
| 1 | + |
| 2 | +> 注:当前项目为 Serverless Devs 应用,由于应用中会存在需要初始化才可运行的变量(例如应用部署地区、函数名等等),所以**不推荐**直接 Clone 本仓库到本地进行部署或直接复制 s.yaml 使用,**强烈推荐**通过 `s init ${模版名称}` 的方法或应用中心进行初始化,详情可参考[部署 & 体验](#部署--体验) 。 |
| 3 | +
|
| 4 | +# aliyun-dms-mcp-server 帮助文档 |
| 5 | + |
| 6 | +<description> |
| 7 | + |
| 8 | +阿里云DMS MCP 服务 |
| 9 | + |
| 10 | + |
| 11 | +</description> |
| 12 | + |
| 13 | + |
| 14 | +## 资源准备 |
| 15 | + |
| 16 | +使用该项目,您需要有开通以下服务并拥有对应权限: |
| 17 | + |
| 18 | +<service> |
| 19 | + |
| 20 | + |
| 21 | + |
| 22 | +| 服务/业务 | 权限 | 相关文档 | |
| 23 | +| --- | --- | --- | |
| 24 | +| 函数计算 | AliyunFCFullAccess | [帮助文档](https://help.aliyun.com/product/2508973.html) [计费文档](https://help.aliyun.com/document_detail/2512928.html) | |
| 25 | + |
| 26 | +</service> |
| 27 | + |
| 28 | +<remark> |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +</remark> |
| 33 | + |
| 34 | +<disclaimers> |
| 35 | + |
| 36 | + |
| 37 | + |
| 38 | +</disclaimers> |
| 39 | + |
| 40 | +## 部署 & 体验 |
| 41 | + |
| 42 | +<appcenter> |
| 43 | + |
| 44 | +- :fire: 通过 [云原生应用开发平台 CAP](https://cap.console.aliyun.com/template-detail?template=aliyun-dms-mcp-server) ,[](https://cap.console.aliyun.com/template-detail?template=aliyun-dms-mcp-server) 该应用。 |
| 45 | + |
| 46 | +</appcenter> |
| 47 | +<deploy> |
| 48 | + |
| 49 | +</deploy> |
| 50 | + |
| 51 | +## 案例介绍 |
| 52 | + |
| 53 | +<appdetail id="flushContent"> |
| 54 | + |
| 55 | +# AlibabaCloud DMS MCP Server |
| 56 | + |
| 57 | +**AI 首选的统一数据管理网关,支持30多种数据源**连接的多云通用数据MCP Server,一站式解决**跨源数据安全访问**。 |
| 58 | + |
| 59 | +- 支持阿里云全系:RDS、PolarDB、ADB系列、Lindorm系列、TableStore系列、Maxcompute系列。 |
| 60 | +- 支持主流数据库/数仓:MySQL、MariaDB、PostgreSQL、Oracle、SQLServer、Redis、MongoDB、StarRocks、Clickhouse、SelectDB、DB2、OceanBase、Gauss、BigQuery等。 |
| 61 | + |
| 62 | +<img src="https://dms-static.oss-cn-hangzhou.aliyuncs.com/mcp-readme/architecture-0508.jpg" alt="Architecture" width="60%"> |
| 63 | + |
| 64 | + |
| 65 | +--- |
| 66 | + |
| 67 | +## 核心特性 |
| 68 | +为AI提供统一的**数据接入层**与**元数据访问层**,通过标准化接口解决: |
| 69 | +- 数据源碎片化导致的MCP Server维护成本 |
| 70 | +- 异构协议间的兼容性问题 |
| 71 | +- 账号权限不受控、操作无审计带来的安全问题 |
| 72 | + |
| 73 | +同时,通过MCP将获得以下特性: |
| 74 | +- **NL2SQL**:通过自然语言执行SQL,获得数据结果 |
| 75 | +- **代码生成**:通过该服务获取schema信息,生成DAO代码或进行结构分析 |
| 76 | +- **取数**:通过SQL自动路由准确数据源获得数据,为上层业务提供数据支持 |
| 77 | +- **安全**:精细的访问控制和可审计性 |
| 78 | + |
| 79 | + |
| 80 | +## 工具清单 |
| 81 | + |
| 82 | +### 元数据相关 |
| 83 | +#### addInstance:将实例添加到 DMS。如果实例已存在,则返回已有实例信息。 |
| 84 | + |
| 85 | +- **db_user** (字符串, 必需): 用于连接数据库的用户名。 |
| 86 | +- **db_password** (字符串, 必需): 用于连接数据库的密码。 |
| 87 | +- **instance_resource_id** (字符串, 可选): 实例的资源 ID,通常由云服务提供商分配。 |
| 88 | +- **host** (字符串, 可选): 实例的连接地址。 |
| 89 | +- **port** (字符串, 可选): 实例的连接端口号。 |
| 90 | +- **region** (字符串, 可选): 实例所在的区域(例如 "cn-hangzhou")。 |
| 91 | + |
| 92 | +#### getInstance:根据 host 和 port 信息从 DMS 中获取实例详细信息。 |
| 93 | + |
| 94 | +- **host** (字符串, 必需): 实例的连接地址。 |
| 95 | +- **port** (字符串, 必需): 实例的连接端口号。 |
| 96 | +- **sid** (字符串, 可选): Oracle 类数据库所需,默认为 None。 |
| 97 | + |
| 98 | +#### searchDatabase:根据 schemaName 在 DMS 中搜索数据库。 |
| 99 | + |
| 100 | +- **search_key** (字符串, 必需): schemaName。 |
| 101 | +- **page_number** (整数, 可选): 要检索的页码(从 1 开始),默认为 1。 |
| 102 | +- **page_size** (整数, 可选): 每页的结果数量,最多 1000,默认为 200。 |
| 103 | + |
| 104 | +#### getDatabase:从 DMS 中获取特定数据库的详细信息。 |
| 105 | + |
| 106 | +- **host** (字符串, 必需): 实例的连接地址。 |
| 107 | +- **port** (字符串, 必需): 实例的连接端口号。 |
| 108 | +- **schema_name** (字符串, 必需): 数据库名。 |
| 109 | +- **sid** (字符串, 可选): Oracle 类数据库所需,默认为 None。 |
| 110 | + |
| 111 | +#### listTable:根据 databaseId 和 tableName 在 DMS 中搜索数据表。 |
| 112 | + |
| 113 | +- **database_id** (字符串, 必需): 用于限定搜索范围的数据库 ID(可通过 getDatabase 工具获取)。 |
| 114 | +- **search_name** (字符串, 必需): 作为搜索关键词的非空字符串,用于匹配表名。 |
| 115 | +- **page_number** (整数, 可选): 分页页码(默认:1)。 |
| 116 | +- **page_size** (整数, 可选): 每页结果数量(默认:200,最大:200)。 |
| 117 | + |
| 118 | +#### getTableDetailInfo:获取特定数据表的详细元数据信息,包括字段和索引详情。 |
| 119 | + |
| 120 | +- **table_guid** (字符串, 必需): 表的唯一标识符(格式:dmsTableId.schemaName.tableName),可通过 searchTable 或 listTable 工具获取。 |
| 121 | + |
| 122 | +--- |
| 123 | + |
| 124 | +### SQL 执行相关 |
| 125 | + |
| 126 | +#### executeScript:通过 DMS 执行 SQL 脚本并返回结果。 |
| 127 | + |
| 128 | +- **database_id** (字符串, 必需): DMS 数据库 ID,可通过 getDatabase 工具获取。 |
| 129 | +- **script** (字符串, 必需): 要执行的 SQL 脚本内容。 |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +### NL2SQL 相关 |
| 134 | + |
| 135 | +#### nl2sql:将自然语言问题转换为可执行的 SQL 查询。 |
| 136 | + |
| 137 | +- **question** (字符串, 必需): 需要转换为 SQL 的自然语言问题。 |
| 138 | +- **database_id** (整数, 必需): DMS 数据库 ID,可通过 getDatabase 工具获取。 |
| 139 | +- **knowledge** (字符串, 可选): 用于辅助 SQL 生成的额外上下文或数据库知识。 |
| 140 | + |
| 141 | +--- |
| 142 | + |
| 143 | +## 支持的数据源 |
| 144 | +| DataSource/Tool | **NL2SQL** *nlsql* | **Execute script** *executeScript* | **Show schema** *getTableDetailInfo* | **Access control** *default* | **Audit log** *default* | |
| 145 | +|-----------------------|--------------------|------------------------------------|--------------------------------------|-----------------------------|------------------------| |
| 146 | +| MySQL | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 147 | +| MariaDB | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 148 | +| PostgreSQL | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 149 | +| Oracle | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 150 | +| SQLServer | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 151 | +| Redis | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 152 | +| MongoDB | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 153 | +| StarRocks | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 154 | +| Clickhouse | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 155 | +| SelectDB | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 156 | +| DB2 | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 157 | +| OceanBase | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 158 | +| Gauss | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 159 | +| BigQuery | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 160 | +| PolarDB | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 161 | +| PolarDB-X | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 162 | +| AnalyticDB | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 163 | +| Lindorm | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 164 | +| TableStore | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 165 | +| Maxcompute | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 166 | +| Hologres | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 167 | + |
| 168 | +--- |
| 169 | + |
| 170 | +## 快速开始 |
| 171 | + |
| 172 | +### 方案一 使用源码运行 |
| 173 | +#### 下载代码 |
| 174 | +```bash |
| 175 | +git clone https://github.com/aliyun/alibabacloud-dms-mcp-server.git |
| 176 | +``` |
| 177 | + |
| 178 | +#### 配置MCP客户端 |
| 179 | +在配置文件中添加以下内容: |
| 180 | +```json |
| 181 | +{ |
| 182 | + "mcpServers": { |
| 183 | + "dms-mcp-server": { |
| 184 | + "command": "uv", |
| 185 | + "args": [ |
| 186 | + "--directory", |
| 187 | + "/path/to/alibabacloud-dms-mcp-server/src/alibabacloud_dms_mcp_server", |
| 188 | + "run", |
| 189 | + "server.py" |
| 190 | + ], |
| 191 | + "env": { |
| 192 | + "ALIBABA_CLOUD_ACCESS_KEY_ID": "access_id", |
| 193 | + "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "access_key", |
| 194 | + "ALIBABA_CLOUD_SECURITY_TOKEN": "sts_security_token optional, required when using STS Token" |
| 195 | + } |
| 196 | + } |
| 197 | + } |
| 198 | +} |
| 199 | +``` |
| 200 | + |
| 201 | +### 方案二 使用PyPI包运行 |
| 202 | +```json |
| 203 | +{ |
| 204 | + "mcpServers": { |
| 205 | + "dms-mcp-server": { |
| 206 | + "command": "uvx", |
| 207 | + "args": [ |
| 208 | + "alibabacloud-dms-mcp-server@latest" |
| 209 | + ], |
| 210 | + "env": { |
| 211 | + "ALIBABA_CLOUD_ACCESS_KEY_ID": "access_id", |
| 212 | + "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "access_key", |
| 213 | + "ALIBABA_CLOUD_SECURITY_TOKEN": "sts_security_token optional, required when using STS Token" |
| 214 | + } |
| 215 | + } |
| 216 | + } |
| 217 | +} |
| 218 | +``` |
| 219 | +--- |
| 220 | + |
| 221 | +## Contact us |
| 222 | + |
| 223 | +如果您有使用问题或建议, 请加入[Alibaba Cloud DMS MCP讨论组](https://h5.dingtalk.com/circle/joinCircle.html?corpId=dinga0bc5ccf937dad26bc961a6cb783455b&token=2f373e6778dcde124e1d3f22119a325b&groupCode=v1,k1,NqFGaQek4YfYPXVECdBUwn+OtL3y7IHStAJIO0no1qY=&from=group&ext=%7B%22channel%22%3A%22QR_GROUP_NORMAL%22%2C%22extension%22%3A%7B%22groupCode%22%3A%22v1%2Ck1%2CNqFGaQek4YfYPXVECdBUwn%2BOtL3y7IHStAJIO0no1qY%3D%22%2C%22groupFrom%22%3A%22group%22%7D%2C%22inviteId%22%3A2823675041%2C%22orgId%22%3A784037757%2C%22shareType%22%3A%22GROUP%22%7D&origin=11) (钉钉群号:129600002740) 进行讨论. |
| 224 | + |
| 225 | +<img src="http://dms-static.oss-cn-hangzhou.aliyuncs.com/mcp-readme/ding-zh-cn.jpg" alt="DingTalk" width="60%"> |
| 226 | + |
| 227 | + |
| 228 | + |
| 229 | +## License |
| 230 | +本项目采用Apache 2.0许可证 |
| 231 | + |
| 232 | +</appdetail> |
| 233 | + |
| 234 | +## 使用流程 |
| 235 | + |
| 236 | +<usedetail id="flushContent"> |
| 237 | + |
| 238 | +1. 部署完成拿到 URL 后,准备好支持 SSE 的 MCP Client,通过 SSETransport 进行连接。 |
| 239 | + |
| 240 | +2. DMS mcp server不支持创建数据库,需要先在控制台上创建好数据库,如果是在RDS控制上创建的,需要在DMS上同步下 |
| 241 | + |
| 242 | + |
| 243 | +1. 准备好数据库账号,账号要完成[安全托管](https://help.aliyun.com/zh/dms/product-overview/security-hosting?scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%402637012.S_BB1%40bl%2BRQW%40ag0%2BBB2%40ag0%2Bhot%2Bos0.ID_2637012-RL_%E5%AE%89%E5%85%A8%E6%89%98%E7%AE%A1-LOC_doc%7EUND%7Eab-OR_ser-PAR1_212a5d3d17482482327868236d8f90-V_4-P0_0-P1_0&spm=a2c4g.11186623.help-search.i50),否则tools会报错 |
| 244 | + |
| 245 | +2. DMS mcp server 不依赖数据库开公网,DMS网关会打通数据库内网 |
| 246 | + |
| 247 | +</usedetail> |
0 commit comments