MySQL MCP(支持各种IDE,兼容Spring AI调用)
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"mysql": {
"args": [
"-y",
"@yang04/mysql-mcp-server"
],
"command": "npx",
"env": {
"ALLOW_WRITE": "true",
"MYSQL_DATABASE": "",
"MYSQL_HOST": "",
"MYSQL_PASSWORD": "",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root"
}
}
}
}
服务介绍
@yang04/mysql-mcp-server
一个基于 TypeScript 的 MySQL MCP(Model Context Protocol)服务端,允许 LLM(如 Claude)通过标准 MCP 协议安全地与 MySQL 数据库进行交互。
功能特性
- 🔍 数据库浏览 — 列出数据库、表、索引、约束等结构信息
- 📊 安全查询 — 参数化查询、SQL 注入防护、结果行数限制
- ✏️ 写操作支持 — 可选启用 INSERT / UPDATE / DELETE(需显式开启)
- 🔒 安全防护 — 危险语句过滤(DROP / TRUNCATE 等)、WHERE 条件强制检查
- ⏱️ 查询超时 — 自动注入超时控制,防止长时间运行的查询
- 🔌 即插即用 — 支持 npx 一键运行,无需 clone 和构建
快速开始
方式一:npx 直接运行(推荐)
无需安装,直接在 MCP 客户端配置中使用:
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@yang04/mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_WRITE": "true",
"CONNECTION_LIMIT":"5",
"QUERY_TIMEOUT":"30000",
"MAX_RESULTS":"1000"
}
}
}
}
方式二:全局安装后使用
npm install -g @yang04/mysql-mcp-server
{
"mcpServers": {
"mysql": {
"command": "mysql-mcp-server",
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"ALLOW_WRITE": "true",
"CONNECTION_LIMIT":"5",
"QUERY_TIMEOUT":"30000",
"MAX_RESULTS":"1000"
}
}
}
}
环境变量
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
MYSQL_HOST |
是 | localhost |
MySQL 主机地址 |
MYSQL_PORT |
否 | 3306 |
MySQL 端口 |
MYSQL_USER |
是 | — | MySQL 用户名 |
MYSQL_PASSWORD |
是 | — | MySQL 密码 |
MYSQL_DATABASE |
否 | — | 默认数据库名 |
ALLOW_WRITE |
否 | false |
是否启用写操作(INSERT / UPDATE / DELETE) |
CONNECTION_LIMIT |
否 | 5 |
连接池大小 |
QUERY_TIMEOUT |
否 | 30000 |
查询超时时间(毫秒) |
MAX_RESULTS |
否 | 1000 |
SELECT 查询最大返回行数 |
客户端配置
Claude Desktop
编辑 claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Trae IDE
在项目根目录创建 .trae/mcp.json。
Cursor / Windsurf
在 MCP 设置中添加上述配置。
工具列表
只读工具(默认可用)
| 工具 | 说明 | 参数 |
|---|---|---|
list_databases |
列出所有可访问的数据库 | 无 |
list_tables |
列出指定数据库中的所有表 | database? |
describe_table |
获取表的详细结构信息 | table, database? |
execute_query |
执行安全的 SELECT 查询 | sql, params?, database? |
explain_query |
获取查询执行计划 | sql, database? |
show_indexes |
显示表的索引信息 | table, database? |
show_constraints |
显示表的外键和唯一约束 | table, database? |
show_create_table |
获取创建表的 DDL 语句 | table, database? |
get_table_stats |
获取表的统计信息(行数、大小等) | table, database? |
search_columns |
按名称模式搜索列 | pattern, database? |
写操作工具(需 ALLOW_WRITE=true)
| 工具 | 说明 | 参数 |
|---|---|---|
insert_data |
向表中插入数据 | table, data, database? |
update_data |
更新表中符合条件的数据 | table, data, where, whereParams?, database? |
delete_data |
删除表中符合条件的数据 | table, where, whereParams?, database? |
execute_write_query |
执行自定义写 SQL | sql, params?, database? |
使用示例
以下是在 Claude 中使用该 MCP 服务的典型对话示例:
浏览数据库结构
你:帮我看看当前数据库有哪些表
Claude 调用 list_tables → 返回所有表名列表
你:看一下 sys_user 表的结构
Claude 调用 describe_table → 返回列名、类型、约束等详细信息
查询数据
你:查询 sys_user 表中前 10 条数据
Claude 调用 execute_query → SELECT * FROM sys_user LIMIT 10
你:分析一下 SELECT * FROM orders WHERE status = 'pending' 的执行计划
Claude 调用 explain_query → 返回 EXPLAIN 结果
搜索列
你:帮我找一下哪些表有 email 相关的列
Claude 调用 search_columns → pattern: "%email%"
写操作(需启用 ALLOW_WRITE=true)
你:向 sys_config 表插入一条配置
Claude 调用 insert_data → table: "sys_config", data: [{key: "theme", value: "dark"}]
你:把 id 为 1 的用户状态改为启用
Claude 调用 update_data → table: "sys_user", data: {status: 1}, where: "id = ?"
安全机制
| 机制 | 说明 |
|---|---|
| 只读默认 | 未启用 ALLOW_WRITE 时,只暴露只读工具 |
| SQL 注入防护 | 所有查询使用参数化查询,禁止拼接用户输入 |
| 危险语句过滤 | 阻止 DROP、TRUNCATE、GRANT、REVOKE 等操作 |
| WHERE 条件强制 | UPDATE 和 DELETE 必须包含 WHERE 条件 |
| 查询超时 | 默认 30 秒超时,防止长时间运行的查询 |
| 结果行数限制 | 默认最大返回 1000 行 |
推荐安全实践
建议为 MCP 服务创建一个专用的 MySQL 只读用户:
CREATE USER 'mcp_readonly'@'localhost' IDENTIFIED BY 'secure_password';
GRANT SELECT, SHOW VIEW ON your_database.* TO 'mcp_readonly'@'localhost';
FLUSH PRIVILEGES;
如果需要写操作,创建一个权限受限的用户:
CREATE USER 'mcp_writer'@'localhost' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ON your_database.* TO 'mcp_writer'@'localhost';
FLUSH PRIVILEGES;
技术栈
- TypeScript + Node.js (ESM)
- @modelcontextprotocol/sdk — MCP 协议实现
- mysql2 — MySQL 驱动(连接池 + Promise)
- zod — 参数 Schema 定义与校验
License
MIT