Skip to content

Commit e051ae0

Browse files
authored
Merge pull request #30 from devsapp/dms-mcp-server
add dms mcp server
2 parents 29161b4 + c69d842 commit e051ae0

File tree

10 files changed

+1682
-1
lines changed

10 files changed

+1682
-1
lines changed

start-mcp-aliyun-dms/hook/index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
async function preInit(inputObj) {
2+
3+
}
4+
5+
async function postInit(inputObj) {
6+
7+
}
8+
9+
module.exports = {
10+
postInit,
11+
preInit
12+
}

start-mcp-aliyun-dms/publish.yaml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
Edition: 3.0.0
2+
Type: Project
3+
Name: aliyun-dms-mcp-server
4+
Version: 0.0.2
5+
Provider:
6+
- 阿里云 # 取值内容参考:https://api.devsapp.cn/v3/common/args.html
7+
Description: 阿里云DMS MCP 服务
8+
HomePage: https://github.com/aliyun/alibabacloud-dms-mcp-server/tree/main
9+
Tags: #标签详情
10+
- MCP
11+
- Python
12+
- AliyunMCP
13+
Category: MCP服务 # 取值内容参考:https://api.devsapp.cn/v3/common/args.html
14+
Service: # 使用的服务
15+
函数计算: # 取值内容参考:https://api.devsapp.cn/v3/common/args.html
16+
Authorities: #权限描述
17+
- AliyunFCFullAccess # 所需要的权限,例如AliyunFCFullAccess
18+
Organization: 阿里云函数计算(FC) # 所属组织
19+
Effective: Public # 是否公开,取值:Public,Private,Organization
20+
Parameters:
21+
type: object
22+
additionalProperties: false # 不允许增加其他属性
23+
required: # 必填项
24+
- region
25+
- serviceRole
26+
properties:
27+
region:
28+
title: 地域
29+
type: string
30+
default: cn-hangzhou
31+
description: 创建应用所在的地区
32+
enum:
33+
- cn-beijing
34+
- cn-hangzhou
35+
- cn-shanghai
36+
- cn-shenzhen
37+
- ap-southeast-1
38+
serviceRole:
39+
title: 函数计算访问阿里云角色
40+
type: string
41+
default: "AliyunFCForDMSMcpServerRole"
42+
pattern: "^acs:ram::[0-9]*:role/.*$"
43+
description: 函数中需要基于此角色访问DMS MCP server
44+
required: true
45+
x-role:
46+
name: AliyunFCForDMSMcpServerRole
47+
service: FC
48+
authorities:
49+
- AliyunDMSFullAccess

start-mcp-aliyun-dms/readme.md

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
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)[![Deploy with Severless Devs](https://img.alicdn.com/imgextra/i1/O1CN01w5RFbX1v45s8TIXPz_!!6000000006118-55-tps-95-28.svg)](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+
![image](https://img.alicdn.com/imgextra/i4/O1CN018McKDh1MHpVoFF47u_!!6000000001410-2-tps-660-690.png)
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>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
aliyun-dms-mcp-server:
2+
default:
3+
rootPath: .
4+
languages:
5+
- python3.12
6+
cache:
7+
paths:
8+
- "~/.cache"
9+
steps:
10+
- run: mkdir -p python
11+
- run: pip install alibabacloud-dms-mcp-server -t python
12+
- run: find ./python/bin -type f -perm -u+x -exec sed -i '1{/^#!.*/ s|.*|#!/usr/bin/env python3|}' {} \;

0 commit comments

Comments
 (0)