使用说明
Huawei RDS MySQL MCP Server
让 AI Agent(Cursor、Claude Code、Cherry Studio 等)通过 MCP 协议直接操作华为云 RDS MySQL 数据库。
功能一览
Tools(10 个)
| 工具 | 说明 |
|---|---|
execute_sql |
执行 SQL 查询(写操作受安全开关控制) |
list_databases |
列出所有可访问的数据库 |
get_table_schema |
获取表结构(字段名/类型/注释) |
get_table_schema_with_relations |
表结构 + 外键关系 |
explain_sql |
EXPLAIN 执行计划分析(支持 traditional/tree/json) |
get_table_ddl |
获取完整建表语句 |
get_slow_queries |
查询慢日志记录 |
get_process_list |
查看当前连接/线程 |
get_server_status |
服务器状态摘要(连接数/QPS/InnoDB 指标) |
get_table_stats |
表的行数/大小/索引大小等统计 |
Resources & Templates
| URI | 说明 |
|---|---|
huawei-rds-mysql://tables |
列出当前数据库所有表 |
huawei-rds-mysql://{table}/field |
获取表字段信息 |
huawei-rds-mysql://{table}/data |
获取表数据(默认 50 行) |
快速开始
1. 安装依赖
# 进入项目目录
cd huawei-rds-mysql-mcp-server
# 创建虚拟环境(推荐)
python3 -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install -e .
注意:如果遇到 SSL 证书错误,可手动安装依赖:
pip install mysql-connector-python sqlparse python-dotenv "mcp[cli]>=1.6.0"
2. 配置
支持两种配置方式,可以同时使用:
方式一:.env 文件(推荐)
在项目根目录创建 .env 文件:
# .env
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=test
服务启动时会按以下顺序查找 .env 文件(先找到先用):
- 当前工作目录下的
.env - 项目根目录下的
.env - 用户主目录下的
~/.env
方式二:环境变量
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=root
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=test
优先级规则
环境变量 > .env 文件
当环境变量和
.env文件中存在同名变量时,环境变量优先。 这意味着你可以在.env中写好默认配置,再用环境变量覆盖个别值(如 CI/CD 中覆盖密码)。
3. 启动服务
从项目根目录执行以下命令:
cd huawei-rds-mysql-mcp-server
uv venv
source .venv/bin/activate
cp .env.example .env # set env file with your database information
uv run src/rds_mysql_mcp_server/server.py
启动成功日志
正常启动后会看到类似输出:
INFO - huawei-rds-mysql-mcp-server - Loaded .env from: /path/to/.env (environment variables take precedence)
INFO - huawei-rds-mysql-mcp-server - Safety switches: INSERT=False, UPDATE=False, DELETE=False, DDL=False
INFO - huawei-rds-mysql-mcp-server - Database target: 127.0.0.1:3341/test as root
INFO - huawei-rds-mysql-mcp-server - Starting MCP SSE server on 127.0.0.1:8080/sse
INFO: Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
客户端配置
Cursor(SSE 模式)
先手动启动 MCP Server(参考上方"启动服务"),然后在项目根目录创建 .cursor/mcp.json:
{
"mcpServers": {
"huawei-rds-mysql": {
"type": "sse",
"url": "http://127.0.0.1:8080/sse"
}
}
}
Cursor(stdio 模式)
无需手动启动,Cursor 会自动拉起进程:
{
"mcpServers": {
"huawei-rds-mysql": {
"command": "python3",
"args": ["-m", "rds_mysql_mcp_server"],
"env": {
"PYTHONPATH": "/absolute/path/to/huawei-rds-mysql-mcp-server/src",
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "test",
"RUN_MODE": "stdio"
}
}
}
}
如果已
pip install -e .,可将command改为"run_huawei_rds_mysql_mcp_server"并删除args和PYTHONPATH。
Claude Desktop
编辑 claude_desktop_config.json:
{
"mcpServers": {
"huawei-rds-mysql": {
"command": "python3",
"args": ["-m", "rds_mysql_mcp_server"],
"env": {
"PYTHONPATH": "/absolute/path/to/huawei-rds-mysql-mcp-server/src",
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "test",
"RUN_MODE": "stdio"
}
}
}
}
配置项一览
以下配置项可通过 .env 文件或环境变量设置(环境变量优先):
| 变量 | 说明 | 默认值 | 必填 |
|---|---|---|---|
MYSQL_HOST |
数据库地址 | 127.0.0.1 |
否 |
MYSQL_PORT |
数据库端口 | 3306 |
否 |
MYSQL_USER |
数据库用户 | — | 是 |
MYSQL_PASSWORD |
数据库密码 | — | 是 |
MYSQL_DATABASE |
数据库名 | — | 是 |
MYSQL_ENABLE_INSERT |
允许 INSERT | false |
否 |
MYSQL_ENABLE_UPDATE |
允许 UPDATE | false |
否 |
MYSQL_ENABLE_DELETE |
允许 DELETE | false |
否 |
MYSQL_ENABLE_DDL |
允许 DDL | false |
否 |
RUN_MODE |
运行模式 (sse / stdio) |
sse |
否 |
SSE_BIND_HOST |
SSE 绑定地址 | 127.0.0.1 |
否 |
SSE_BIND_PORT |
SSE 绑定端口 | 8080 |
否 |
安全机制
默认只允许只读查询(SELECT / SHOW / DESCRIBE),写操作需显式开启。
可以在 .env 文件中配置:
# .env 中按需开启(不建议全部开启)
MYSQL_ENABLE_INSERT=true
MYSQL_ENABLE_DDL=true
或通过环境变量:
export MYSQL_ENABLE_INSERT=true
export MYSQL_ENABLE_DDL=true
此外还内置了:
- SQL 注释剥离(防止注释绕过)
- 危险模式检测(拦截
LOAD_FILE()、INTO OUTFILE) sqlparse操作类型识别
运行测试
测试分两类:
- 单元测试(不需要数据库连接):SQL 安全检查、操作类型识别、配置解析等
- 集成测试(需要真实 MySQL 连接):各 Tool 的端到端验证
# 1. 配置测试数据库连接
cp tests/.env.example tests/.env
# 编辑 tests/.env 填入真实的数据库连接信息
# 2. 运行全部测试(单元测试 + 集成测试)
uv run pytest tests/ -v
# 3. 只运行不需要数据库连接的单元测试
uv run pytest tests/ -v -k "not integration"
# 4. 运行指定测试类或测试方法
uv run pytest tests/ -v -k "TestCheckSqlSafety"
uv run pytest tests/test_server.py::TestIntegrationExecuteSql::test_integration_select_1 -v
注意:集成测试需要 DDL 权限(创建/删除临时测试表),请在
tests/.env中设置MYSQL_ENABLE_DDL=true。
项目结构
huawei-rds-mysql-mcp-server/
├── pyproject.toml # 项目元数据与依赖
├── README.md # 本文档
├── src/
│ └── rds_mysql_mcp_server/
│ ├── __init__.py # 包入口(导出 main)
│ ├── __main__.py # 支持 python -m rds_mysql_mcp_server 启动
│ ├── server.py # MCP 服务主体(工具/资源注册、路由、启动)
│ └── utils.py # 配置加载(.env + 环境变量)、DB 连接、SQL 安全检查、结果格式化
├── tests/
│ ├── .env.example # 环境变量模板
│ └── test_server.py # 测试套件
└── docs/
└── mysql-community-mcp-server-design.md # 设计文档
License
Apache License 2.0