关于 AnalyticDB for MySQL MCP Server
AnalyticDB for MySQL MCP Server 是 AI Agent 与 AnalyticDB MySQL 之间的通用接口。它提供 SQL 工具与资源组以及基于阿里云 OpenAPI 的管理工具组,适合需要查询、诊断或管理 ADB MySQL 集群的用户。默认 execute_sql 为只读模式,完整写入需单独开启。
主要功能
- 01SQL 执行、执行计划查看与元数据浏览
- 02execute_sql 默认只读,写入需设置 ENABLE_SQL_WRITE_TOOLS
- 03基于阿里云 OpenAPI 的集群、账号与白名单管理
- 04监控、诊断与审计日志相关工具
- 05只读工具标注 readOnlyHint,便于客户端区分
适用场景
- 01通过 MCP 客户端对 ADB MySQL 进行只读查询与排障
- 02查看 EXPLAIN 执行计划并分析 SQL 性能
- 03在受控环境中通过 OpenAPI 管理集群与访问白名单
MCP 相关
该项目本身是 MCP 服务,向 MCP 客户端暴露 SQL 工具、资源以及 OpenAPI 管理工具,支持 stdio、SSE 和 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AnalyticDB for MySQL MCP 服务
English | 中文
AnalyticDB for MySQL MCP 服务是 AI Agent 与 AnalyticDB MySQL 之间的通用接口。它提供两组工具:
- SQL 工具与资源(
sql组):直接连接 ADB MySQL 集群以执行 SQL、查看执行计划和浏览数据库元数据。sql组仅用于切换工具组;execute_sql默认以只读模式运行,完整 SQL 执行模式需要额外显式设置ENABLE_SQL_WRITE_TOOLS=true。 - OpenAPI 工具(
openapi组):通过 Alibaba Cloud OpenAPI 管理集群、白名单、账号、网络、监控、诊断和审计日志。
根据 MCP 协议,只读工具会标注为 ToolAnnotations(readOnlyHint=True),让客户端能够将其与会修改数据的操作区分开来。
一、前置条件
- Python >= 3.13
- uv(推荐的包管理器和运行器)
- Alibaba Cloud AccessKey(OpenAPI 工具必需)
- 可选:ADB MySQL 连接凭据(用于直接连接模式下的 SQL 工具)
二、快速开始
2.0 选择配置
复制客户端配置前,请根据使用场景选择工具组和额外开关:
| 使用场景 | 工具组 | 额外开关 | 适用情况 |
|---|---|---|---|
| 只读 SQL 查询、EXPLAIN 和元数据浏览 | sql | 无 | 推荐作为查询、故障排查和只读分析的默认配置 |
通过 execute_sql 完整执行 SQL | sql | ENABLE_SQL_WRITE_TOOLS=true | 当 MCP 客户端可信时执行 INSERT/UPDATE/DELETE/DDL/多语句 SQL |
| OpenAPI 集群管理工具 + SQL 只读工具 | openapi,sql | Alibaba Cloud AK/SK + ADB_MYSQL_* 直接连接设置 | 在保留 SQL 只读访问的同时,执行集群、账号、白名单、诊断和监控操作 |
| OpenAPI + 完整 SQL 执行 | openapi,sql | Alibaba Cloud AK/SK + ADB_MYSQL_* 直接连接设置 + ENABLE_SQL_WRITE_TOOLS=true | 管理操作以及完整 SQL 执行 |
MCP_TOOLSETS=sql仅启用 SQL 工具组。完整 SQL 执行不属于单独的工具组,也不存在sql_write工具组。必须通过ENABLE_SQL_WRITE_TOOLS=true单独启用。
配置客户端前,请检查以下事项:
- 直接数据库模式:配置
ADB_MYSQL_HOST、ADB_MYSQL_PORT、ADB_MYSQL_USER、ADB_MYSQL_PASSWORD,并可选配置ADB_MYSQL_DATABASE。 - 临时账号模式:如果未配置
ADB_MYSQL_USER/ADB_MYSQL_PASSWORD,但已有 AK/SK,服务会通过 OpenAPI 创建临时数据库账号;SQL 工具调用必须提供region_id和db_cluster_id。 - 远程 SSE / Streamable HTTP:当
SERVER_HOST不是环回地址时,请在服务端配置API_KEY,并在客户端设置Authorization: Bearer <API_KEY>。 - 完整 SQL 执行:仅向可信用户和可信 MCP 客户端启用,并使用遵循最小权限原则的数据库账号。
2.1 使用 cherry-studio(推荐)
- 下载并安装 cherry-studio
- 按照文档安装 MCP 环境所需的
uv - 根据文档配置并使用 ADB MySQL MCP。你可以使用下面的 JSON 快速导入配置。

配置 A — 仅 SQL 读取工具(执行只读查询、查看执行计划、浏览元数据):
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "sql"
}
}
}
}
配置 B — OpenAPI 工具 + SQL 读取工具:
注意:OpenAPI 工具包含创建账户、修改白名单和终止查询等可更改数据的管理功能。仅在确实需要管理操作时启用。下面的示例也启用了
sql工具组,因此包含直接数据库连接设置。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "openapi,sql"
}
}
}
}
如果你只需要 OpenAPI 管理工具,不需要 SQL 工具或资源,请将 MCP_TOOLSETS 改为 openapi,并移除 ADB_MYSQL_* 直接数据库设置。
配置 C — 通过 execute_sql 完整执行 SQL:
警告:启用
ENABLE_SQL_WRITE_TOOLS=true后,execute_sql将提供完整的 SQL 执行能力。服务仅执行基本的输入验证,不会限制语句类型、注释、分号、多语句 SQL、DDL、DML、DCL 或 TCL。仅对可信用户启用,并使用遵循最小权限原则的数据库账户。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "sql",
"ENABLE_SQL_WRITE_TOOLS": "true"
}
}
}
}
配置 D — OpenAPI 工具 + 完整 SQL 执行:
警告:此配置同时启用 OpenAPI 管理功能和通过
execute_sql完整执行 SQL 的能力。仅与可信客户端、可信用户以及遵循最小权限原则的数据库账户配合使用。
{
"mcpServers": {
"adb-mysql-mcp-server": {
"name": "adb-mysql-mcp-server",
"type": "stdio",
"isActive": true,
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database",
"MCP_TOOLSETS": "openapi,sql",
"ENABLE_SQL_WRITE_TOOLS": "true"
}
}
}
}
未设置
MCP_TOOLSETS时,仅启用sql组,且execute_sql默认仍以只读模式运行。未配置 AK/SK 时,即使请求启用 OpenAPI 工具,也会自动禁用。
2.2 使用 Claude Code
从 GitHub 下载并同步依赖:
git clone https://github.com/aliyun/alibabacloud-adb-mysql-mcp-server
cd alibabacloud-adb-mysql-mcp-server
uv sync
将以下配置添加到 Claude Code MCP 配置文件(项目级:项目根目录中的 .mcp.json,或用户级:~/.claude/settings.json):
stdio 传输:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"MCP_TOOLSETS": "sql",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
对于 OpenAPI 管理工具,请添加 ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET,并在 MCP_TOOLSETS 中显式包含 openapi。以下示例使用常见设置 MCP_TOOLSETS=openapi,sql,因此还包含直接数据库连接设置,复制配置后即可使用 SQL 读取工具:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"MCP_TOOLSETS": "openapi,sql",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
如果只需要 OpenAPI 管理工具,不需要 SQL 工具或资源,请将 MCP_TOOLSETS 改为 openapi,并移除 ADB_MYSQL_* 直接数据库设置。
要通过 execute_sql 完整执行 SQL,请保留 MCP_TOOLSETS=sql 并设置 ENABLE_SQL_WRITE_TOOLS=true。请注意,单独设置 MCP_TOOLSETS=sql 或 MCP_TOOLSETS=all 都不会启用完整的 SQL 执行功能:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"MCP_TOOLSETS": "sql",
"ENABLE_SQL_WRITE_TOOLS": "true",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
如果同时需要 OpenAPI 管理和完整的 SQL 执行功能,请使用 MCP_TOOLSETS=openapi,sql 并设置 ENABLE_SQL_WRITE_TOOLS=true:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/alibabacloud-adb-mysql-mcp-server",
"run",
"adb-mysql-mcp-server"
],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret",
"MCP_TOOLSETS": "openapi,sql",
"ENABLE_SQL_WRITE_TOOLS": "true",
"ADB_MYSQL_HOST": "your_adb_mysql_host",
"ADB_MYSQL_PORT": "3306",
"ADB_MYSQL_USER": "your_username",
"ADB_MYSQL_PASSWORD": "your_password",
"ADB_MYSQL_DATABASE": "your_database"
}
}
}
}
SSE 传输 — 先启动服务,然后配置客户端:
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=sse
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# API_KEY is required when SERVER_HOST is not a loopback address. Use at least 32 characters.
# export API_KEY="replace-with-a-random-token-at-least-32-chars"
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
# To enable full SQL execution through execute_sql, explicitly set:
# export ENABLE_SQL_WRITE_TOOLS=true
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://localhost:8000/sse"
}
}
}
如果服务绑定到非回环主机,请在服务端配置 API_KEY,并让客户端通过 HTTP 标头发送该密钥。简而言之:API_KEY 是服务端令牌,Authorization: Bearer <API_KEY> 是客户端请求标头。
# Server side
export SERVER_TRANSPORT=sse
export SERVER_HOST=0.0.0.0
export API_KEY="replace-with-a-random-token-at-least-32-chars"
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://your-server-host:8000/sse",
"headers": {
"Authorization": "Bearer replace-with-a-random-token-at-least-32-chars"
}
}
}
}
Streamable HTTP 传输 — 先启动服务,然后配置客户端:
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=streamable_http
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# API_KEY is required when SERVER_HOST is not a loopback address. Use at least 32 characters.
# export API_KEY="replace-with-a-random-token-at-least-32-chars"
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
# To enable full SQL execution through execute_sql, explicitly set:
# export ENABLE_SQL_WRITE_TOOLS=true
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://localhost:8000/mcp"
}
}
}
对于非回环主机上的 streamable_http,请使用上述相同的服务端 API_KEY 和客户端 Authorization: Bearer <API_KEY> 标头模式。完整的客户端 JSON 配置示例:
{
"mcpServers": {
"adb-mysql-mcp-server": {
"url": "http://your-server-host:8000/mcp",
"headers": {
"Authorization": "Bearer replace-with-a-random-token-at-least-32-chars"
}
}
}
}
注意:如果未配置
ADB_MYSQL_USER和ADB_MYSQL_PASSWORD,但有 AK/SK,系统会通过 OpenAPI 自动创建一个临时数据库账号用于执行 SQL,并在之后将其清理。
2.3 使用 Cline
设置环境变量并运行 MCP 服务:
export MCP_TOOLSETS=sql
export ADB_MYSQL_HOST="your_adb_mysql_host"
export ADB_MYSQL_PORT="3306"
export ADB_MYSQL_USER="your_username"
export ADB_MYSQL_PASSWORD="your_password"
export ADB_MYSQL_DATABASE="your_database"
export SERVER_TRANSPORT=sse
export SERVER_HOST=127.0.0.1
export SERVER_PORT=8000
# To enable OpenAPI management tools, add AK/SK and explicitly include openapi:
# export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
# export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# export MCP_TOOLSETS=openapi,sql
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
然后配置 Cline 远程服务:
remote_server = "http://127.0.0.1:8000/sse"
2.4 冒烟测试
启动服务并将其连接到 MCP 客户端后,运行以下只读语句,以验证配置且不修改数据:
select 1 as ok;
select current_date as today, current_timestamp as now_time;
你也可以使用 get_query_plan 或 get_execution_plan 测试查询计划工具:
select 1 as plan_test;
在默认只读模式下,以下多语句 SQL 应被拒绝,这表明单语句保护已启用:
select 1; select 2;
要进一步确认写入保护,请仅在测试数据库中运行以下语句,或先确认表名。默认只读模式下,该语句应被拒绝:
update your_table set id = id where 1 = 0;
如果你还不知道真实的表名,请勿运行针对特定表的 SQL。请先使用 show databases;、MCP 资源 adbmysql:///databases 或 adbmysql:///{database}/tables 检查元数据。
三、Environment Variables
| 变量 | 必填 | 说明 |
|---|---|---|
ALIBABA_CLOUD_ACCESS_KEY_ID | 是(OpenAPI 工具) | Alibaba Cloud AccessKey ID |
ALIBABA_CLOUD_ACCESS_KEY_SECRET | 是(OpenAPI 工具) | Alibaba Cloud AccessKey Secret |
ALIBABA_CLOUD_SECURITY_TOKEN | 否 | STS 临时安全令牌 |
ADB_MYSQL_HOST | 否 | 数据库主机(直连模式) |
ADB_MYSQL_PORT | 否 | 数据库端口,默认值为 3306(直连模式) |
ADB_MYSQL_USER | 否 | 数据库用户名(直连模式) |
ADB_MYSQL_PASSWORD | 否 | 数据库密码(直连模式) |
ADB_MYSQL_DATABASE | 否 | 默认数据库名称(直连模式) |
ADB_MYSQL_CONNECT_TIMEOUT | 否 | 数据库连接超时时间(秒),默认值为 2 |
ADB_MYSQL_MAX_SQL_LENGTH | 否 | 接受的 SQL 语句最大长度,默认值为 10000。必须为正整数 |
ADB_API_CONNECT_TIMEOUT | 否 | OpenAPI 连接超时时间(毫秒),默认值为 10000(10 秒) |
ADB_API_READ_TIMEOUT | 否 | OpenAPI 读取超时时间(毫秒),默认值为 300000(5 分钟) |
MCP_TOOLSETS | 否 | 要启用的工具组,以逗号分隔。默认值:sql。支持的组:sql、openapi;快捷方式:all 会展开为 openapi,sql。此变量仅控制工具组的开放,不控制完整 SQL 执行权限 |
SERVER_TRANSPORT | 否 | 传输协议:stdio(默认)、sse、streamable_http |
SERVER_HOST | 否 | SSE/HTTP 绑定主机,默认值为 127.0.0.1;非环回主机需要配置 API_KEY |
SERVER_PORT | 否 | SSE/HTTP 服务端口,默认值为 8000 |
API_KEY | 否 | MCP HTTP 身份验证令牌;配置后,客户端必须发送 Authorization: Bearer <API_KEY>。非环回主机必须配置;长度至少为 32 个字符 |
ENABLE_SQL_WRITE_TOOLS | 否 | 控制 execute_sql 是否进入完整 SQL 执行模式。默认值:false;必须显式设为 true 才能进入完整 SQL 执行模式。实际可执行范围仍受数据库账户权限、数据库驱动和最大 SQL 长度限制 |
四、Tool List
默认情况下,仅启用 sql 组,且 execute_sql 仅允许执行只读 SQL。只有在 MCP_TOOLSETS 中显式包含 openapi 时,才会启用 openapi 组。MCP_TOOLSETS 仅控制工具组的开放;必须通过 ENABLE_SQL_WRITE_TOOLS=true 单独启用 execute_sql 的完整 SQL 执行功能。
4.1 集群管理(组:openapi)
| 工具 | 说明 |
|---|---|
describe_db_clusters | 列出某个地域中的 ADB MySQL 集群 |
describe_db_cluster_attribute | 获取集群详细属性 |
describe_cluster_access_whitelist | 获取集群 IP 白名单 |
modify_cluster_access_whitelist | 修改集群 IP 白名单 |
describe_accounts | 列出集群中的数据库账户 |
describe_cluster_net_info | 获取集群网络连接信息 |
get_current_time | 获取当前服务端时间 |
4.2 诊断与监控(组:openapi)
| 工具 | 说明 |
|---|---|
describe_db_cluster_performance | 查询集群性能指标(CPU、内存、QPS 等) |
describe_db_cluster_health_status | 查询集群健康状态 |
describe_diagnosis_records | 查询 SQL 诊断摘要记录 |
describe_diagnosis_sql_info | 获取 SQL 执行详情(执行计划、运行时信息) |
describe_bad_sql_detection | 检测影响集群稳定性的异常 SQL |
describe_sql_patterns | 查询 SQL 模式列表 |
describe_table_statistics | 查询表级统计信息 |
4.3 管理与审计(组:openapi)
| 工具 | 说明 |
|---|---|
create_account | 创建数据库账户 |
modify_db_cluster_description | 修改集群描述 |
describe_db_cluster_space_summary | 获取集群存储空间摘要 |
describe_audit_log_records | 查询 SQL 审计日志记录 |
4.4 高级诊断(组:openapi)
| 工具 | 描述 |
|---|---|
describe_executor_detection | 计算节点诊断 |
describe_worker_detection | 存储节点诊断 |
describe_controller_detection | 接入节点诊断 |
describe_available_advices | 获取优化建议 |
kill_process | 终止正在运行的查询进程 |
describe_db_resource_group | 获取资源组配置 |
describe_excessive_primary_keys | 检测主键过多的表 |
describe_oversize_non_partition_table_infos | 检测体积过大的非分区表 |
describe_table_partition_diagnose | 诊断表分区问题 |
describe_inclined_tables | 检测数据倾斜的表 |
4.5 SQL 工具(组:sql)
| 工具 | 描述 |
|---|---|
execute_sql | 在 ADB MySQL 集群上执行 SQL。默认允许只读 SQL;完整 SQL 执行需要设置 ENABLE_SQL_WRITE_TOOLS=true |
get_query_plan | 获取单条 SELECT 或只读 WITH CTE 语句的 EXPLAIN 执行计划 |
get_execution_plan | 获取单条 SELECT 或只读 WITH CTE 语句的 EXPLAIN ANALYZE 实际执行计划 |
4.6 MCP 资源(组:sql)
MCP 资源归入 sql 组,因为它们通过 SQL 连接读取数据库元数据,例如 SHOW DATABASES、SHOW TABLES、SHOW CREATE TABLE 和 SHOW adb_config。这些是只读元数据资源,可与默认的 SQL 只读组一同使用。
| 资源 URI | 描述 |
|---|---|
adbmysql:///databases | 列出所有数据库 |
adbmysql:///{database}/tables | 列出数据库中的所有表 |
adbmysql:///{database}/{table}/ddl | 获取表的 DDL |
adbmysql:///config/{key}/value | 获取配置键的值 |
五、安全策略
5.1 只读 SQL 模式
当 ENABLE_SQL_WRITE_TOOLS 未设置为 true 时,execute_sql 以只读模式运行。服务会在打开数据库连接前验证 SQL:
- 允许
SELECT、SHOW、DESCRIBE、DESC、EXPLAIN和只读WITHCTE 语句等只读 SQL。 - 允许一个可选的末尾分号,并在执行前将其移除。
- 拒绝多语句 SQL。
- 拒绝字符串或带引号标识符之外的 SQL 注释。
- 拒绝未闭合的字符串或带引号标识符。
- 拒绝
SELECT或WITH主体中的写入关键字,包括嵌套写入操作。 - 拒绝
SELECT ... INTO OUTFILE和SELECT ... INTO DUMPFILE。
此模式旨在减少 AI 客户端造成意外或未经授权的数据变更。
5.2 完整 SQL 执行模式
风险提示: 完整 SQL 执行模式意味着 MCP 服务提供通用 SQL 执行入口。启用后,服务将不再尝试判断 SQL 是读操作还是写操作,也不会阻止多语句 SQL、注释、DDL、DML、DCL 或 TCL。仅对可信用户、可信 MCP 客户端和遵循最小权限原则的数据库账户启用此模式。
当 ENABLE_SQL_WRITE_TOOLS=true 时,execute_sql 将成为完整 SQL 执行入口。服务只执行基本输入验证:值必须是字符串,去除首尾空白后不得为空,且长度不得超过 ADB_MYSQL_MAX_SQL_LENGTH。
启用此模式后,服务将不再限制语句类型、注释、分号、多语句 SQL、DDL、DML、DCL 或 TCL,也不会执行 SQL 语法验证。配置的数据库账户和数据库驱动接受的任何 SQL 都可能被执行。
get_query_plan 和 get_execution_plan 不是完整 SQL 执行工具。即使 ENABLE_SQL_WRITE_TOOLS=true,它们也始终会将输入验证为单条只读 SELECT 或只读 WITH CTE 语句。
5.3 运维建议
- 请勿在公共或共享网络上暴露 SSE 或 Streamable HTTP,除非使用强度足够的
API_KEY。 - 使用高熵 API 密钥;密钥可能已泄露时,请及时轮换。
- 只读部署应使用只读数据库账户。
- 启用完整 SQL 执行时,应使用遵循最小权限原则的数据库账户。
- 仅在受信任的管理场景中启用 OpenAPI 工具。
六、本地开发
git clone https://github.com/aliyun/alibabacloud-adb-mysql-mcp-server
cd alibabacloud-adb-mysql-mcp-server
uv sync
运行测试:
uv run python -m pytest test/ -v
使用 MCP Inspector 调试:
npx @modelcontextprotocol/inspector \
-e ALIBABA_CLOUD_ACCESS_KEY_ID=your_ak \
-e ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_sk \
-e ADB_MYSQL_HOST=your_adb_mysql_host \
-e ADB_MYSQL_PORT=3306 \
-e ADB_MYSQL_USER=your_username \
-e ADB_MYSQL_PASSWORD=your_password \
-e ADB_MYSQL_DATABASE=your_database \
-e MCP_TOOLSETS=openapi,sql \
uv --directory /path/to/alibabacloud-adb-mysql-mcp-server run adb-mysql-mcp-server
七、SKILL
除了上述 MCP 服务外,本项目还在 skill/ 目录下提供了一个独立的 SKILL。无需依赖此 MCP 服务,即可将该 Skill 直接部署到 Claude Code(它通过 SKILL 目录下的 call_adb_api.py 调用 ADB MySQL OpenAPI)。
该 Skill 涵盖集群信息查询、性能监控、慢查询诊断、SQL Pattern 分析和 SQL 执行,并内置了适用于常见场景的引导式诊断工作流。
有关设置和使用详情,请参阅 skill/skill_readme.md。
注意:未来,该 Skill 的演进将与我们的下一代 Agent 保持一致。敬请期待。
许可证
Apache License 2.0
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。