mcpField
A
AnalyticDB for MySQL MCP Server

AnalyticDB for MySQL MCP Server

本地服务
github.com/aliyun数据库3213 周前更新

关于 AnalyticDB for MySQL MCP Server

AnalyticDB for MySQL MCP Server 是 AI Agent 与 AnalyticDB MySQL 之间的通用接口。它提供 SQL 工具与资源组以及基于阿里云 OpenAPI 的管理工具组,适合需要查询、诊断或管理 ADB MySQL 集群的用户。默认 execute_sql 为只读模式,完整写入需单独开启。

主要功能

  1. 01SQL 执行、执行计划查看与元数据浏览
  2. 02execute_sql 默认只读,写入需设置 ENABLE_SQL_WRITE_TOOLS
  3. 03基于阿里云 OpenAPI 的集群、账号与白名单管理
  4. 04监控、诊断与审计日志相关工具
  5. 05只读工具标注 readOnlyHint,便于客户端区分

适用场景

  1. 01通过 MCP 客户端对 ADB MySQL 进行只读查询与排障
  2. 02查看 EXPLAIN 执行计划并分析 SQL 性能
  3. 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 完整执行 SQLsqlENABLE_SQL_WRITE_TOOLS=true当 MCP 客户端可信时执行 INSERT/UPDATE/DELETE/DDL/多语句 SQL
OpenAPI 集群管理工具 + SQL 只读工具openapi,sqlAlibaba Cloud AK/SK + ADB_MYSQL_* 直接连接设置在保留 SQL 只读访问的同时,执行集群、账号、白名单、诊断和监控操作
OpenAPI + 完整 SQL 执行openapi,sqlAlibaba 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(推荐)
  1. 下载并安装 cherry-studio
  2. 按照文档安装 MCP 环境所需的 uv
  3. 根据文档配置并使用 ADB MySQL MCP。你可以使用下面的 JSON 快速导入配置。

cherry-studio configuration

配置 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 和只读 WITH CTE 语句等只读 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。