MySQL MCP Server
MySQL MCP Server
让 AI 助手安全、可控地连接 MySQL —— 基于 MCP 的生产级数据库工具服务
简体中文 | English
简介
MySQL MCP Server 是一个开源的 Model Context Protocol 服务器,让 Cursor、Claude Desktop 等 AI 客户端通过 stdio 安全地查询、分析和管理 MySQL / MariaDB。
本项目在 wenit/mysql-mcp-server 基础上持续演进,面向真实维护场景补充了多层安全防护、多连接、EXPLAIN 分析、审计与运维工具,并配备 CI 与单元测试。
npm 包 | |
协议 | MCP over stdio(JSON-RPC) |
运行时 | Node.js ≥ 20 |
许可证 |
为什么选择本项目
AI 助手直接操作数据库时,最大的风险不是「连不上」,而是误删、越权、Token 爆炸、缺乏可观测性。本项目从设计之初就把这些当作一等公民:
能力 | 说明 |
多层安全 | 参数化查询 · DELETE/UPDATE 强制 WHERE · 拦截 TRUNCATE/DROP/ALTER · 可选库白名单 |
只读双保险 |
|
生产可运维 | 多 DSN 切换 · 进程列表 · 慢查询状态 · 可选审计日志与慢日志尾部读取 |
AI 友好 | EXPLAIN 中文告警 · Schema Resources · 查询/优化 Prompts · 结果集与 Schema 展开上限 |
工程质量 | TypeScript · ESLint · Prettier · 10+ 单元测试 · GitHub Actions CI |
快速开始
1. 安装并启动
# 方式 A:零安装(推荐试用)
npx -y @yclenove/mysql-mcp-server
# 方式 B:全局安装
npm install -g @yclenove/mysql-mcp-server
mysql-mcp-server2. 配置数据库连接
在项目根目录创建 .env(参考 .env.example):
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
# 生产环境强烈建议
MYSQL_READONLY=true自 v1.4.2 起:若存在项目根
.env,其中MYSQL_*会覆盖系统环境中的同名变量,避免 AI 客户端误连本机。
3. 接入 Cursor
若一键安装后显示 No tools, prompts, or resources(部分 Cursor 版本会把 args 合并成单个字符串),请在本机创建 .cursor/mcp.json:
{
"mcpServers": {
"mysql-mcp": {
"command": "mysql-mcp-server",
"args": [],
"env": {}
}
}
}连接信息写在项目根 .env,不要把生产密码写进 MCP 配置的 env。完整接入步骤见 客户端接入。
功能一览
┌─────────────────────────────────────────────────────────────┐
│ MCP Client(Cursor / Claude Desktop / Inspector) │
└───────────────────────────┬─────────────────────────────────┘
│ stdio JSON-RPC
▼
┌─────────────────────────────────────────────────────────────┐
│ MySQL MCP Server │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌───────┐ │
│ │ Query │ │ Modify │ │ Schema │ │ Batch │ │ Ops* │ │
│ │ EXPLAIN │ │ DDL │ │ Connect │ │ │ │ Audit*│ │
│ └─────────┘ └─────────┘ └──────────┘ └─────────┘ └───────┘ │
│ Resources · Prompts · 超时/重试/截断 · 危险语句拦截 │
└───────────────────────────┬─────────────────────────────────┘
│ mysql2 连接池
▼
MySQL / MariaDB
* 需显式环境变量启用20+ MCP 工具:查询、写入、元数据、批量、DDL、多连接、可选运维
4 个 Resource:
schema/overview、schema/table/{name}、databases、status/pool4 个 Prompt:
analyze-table、generate-query、optimize-query、data-overview
MCP 工具参考
工具 | 说明 |
| 只读 SELECT/SHOW/DESCRIBE/EXPLAIN;支持 |
| 执行计划 + 中文告警;可选 |
工具 | 说明 |
| Ping、版本、当前 connectionId / database |
| 库表元数据(受白名单约束) |
| 表结构详情 |
| 多 DSN 管理 |
工具 | 说明 |
| 参数化写入;UPDATE/DELETE 必须含 WHERE |
| 存储过程调用 |
| 事务批量执行(最多 50 条) |
| 批量插入(最多 50 行) |
| 建表(只读模式禁用) |
工具 | 前置条件 |
|
|
|
|
|
|
|
|
|
|
手动验收清单:MCP_CURSOR_TEST.md · AI 扩展约定:AGENTS.md
安全模型
本项目面向「AI 可能犯错」的场景设计,安全不是可选项:
请求 → 工具层校验 → 执行层校验 → MySQL 会话(可选 transaction_read_only)
│ │
├─ 只读模式拦截 ├─ DELETE/UPDATE 须含 WHERE
├─ 危险 DDL 拦截 ├─ 标识符白名单校验
└─ 库白名单 └─ SQL 长度 / 超时 / 行数上限机制 | 行为 |
参数化查询 | 所有工具使用 |
WHERE 强制 | 无 WHERE 的 DELETE/UPDATE 直接拒绝 |
DDL 拦截 | TRUNCATE / DROP / ALTER 默认拒绝 |
库白名单 |
|
只读模式 | 工具层 + 会话层 |
审计 | 可选 |
配置说明
复制 .env.example 并按需修改。常用变量:
分类 | 变量 | 默认值 | 说明 |
连接 |
| — | 基本连接信息 |
连接 |
| — |
|
安全 |
|
| 只读模式 |
安全 |
| — | 逗号分隔库名白名单 |
执行 |
|
| 单次最大返回行数 |
执行 |
|
| 查询超时(ms) |
执行 |
|
| 单条 SQL 最大长度 |
MCP |
|
| Resource 展开表数上限 |
MCP |
| — | 审计日志路径 |
多连接 |
| — | JSON 数组额外 DSN |
完整变量列表见 .env.example 内注释。
客户端接入
Cursor
以本仓库根目录打开工作区(使
cwd能加载.env)全局安装:
npm install -g @yclenove/mysql-mcp-server@latest在本机创建
.cursor/mcp.json(仓库不提交.cursor/,见.gitignore)重载窗口或在 Settings → MCP 启用
mysql-mcp
不装全局时可用 npx:"command": "npx", "args": ["-y", "@yclenove/mysql-mcp-server"]
调试源码:"command": "node", "args": ["${workspaceFolder}/dist/index.js"](需先 npm run build)
Claude Desktop
编辑 claude_desktop_config.json(macOS: ~/Library/Application Support/Claude/,Windows: %APPDATA%/Claude/):
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@yclenove/mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database",
"MYSQL_READONLY": "true"
}
}
}
}Docker
docker build -t mysql-mcp-server .
docker run -e MYSQL_HOST=host.docker.internal \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=password \
-e MYSQL_DATABASE=mydb \
-e MYSQL_READONLY=true \
mysql-mcp-server开发与贡献
从源码运行
git clone https://github.com/yclenove/mysql-mcp-server.git
cd mysql-mcp-server
npm install
cp .env.example .env # 编辑连接信息
npm run build
npm start质量保障
每次 PR / push 到 main 都会运行 CI:
npm run typecheck # TypeScript 类型检查
npm run lint # ESLint
npm run format:check
npm run build
npm test # 10+ 单元测试(node --test)
npm run inspector # MCP Inspector 交互调试目录结构
src/
├── index.ts # 入口,加载 .env
├── server.ts # MCP Server 注册
├── resources.ts # MCP Resources
├── prompts.ts # MCP Prompts
├── db/
│ ├── connection.ts # 连接池、多 DSN、只读会话
│ ├── executor.ts # 执行、超时、重试、安全校验
│ └── allowlist.ts # 库白名单
└── tools/ # query · modify · schema · batch · ops · ddl · connections
test/ # *.test.mjs扩展工具 / Resource / Prompt 前请阅读 AGENTS.md。
欢迎通过 Issue 反馈问题或提交 PR。
故障排查
现象 | 处理 |
连接失败 | 检查 MySQL 服务、 |
| v1.4.2+ 项目 |
一键安装 Cursor 无工具 | 改用手动 |
查询超时 | 增大 |
只读模式下写入报错 | 预期行为;确认 |
相关链接
文档 | 说明 |
版本更新记录 | |
Cursor 全功能手动测试清单 | |
AI 助手扩展约定(Token 经济、工具描述规范) | |
原始 fork 来源 |
License
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yclenove/mysql-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server