以前让 Claude Code 生成 CRUD 有个痛点:它不知道你的真实表结构。你得先 SHOW CREATE TABLE、复制 DDL、贴到 Prompt 里。偶尔忘了贴,它给你编一个字段名------代码跑起来就报错。
配好 MySQL MCP 之后,Claude Code 直接连数据库读表结构。你说"为 sys_product 表生成 CRUD",它自己去查字段、生成代码。这篇文章教你怎么配。
MCP 是什么
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,相当于 Claude Code 的插件系统。通过 MCP Server,Claude Code 能连接数据库、文件系统、GitHub、Slack 这些外部数据源。
本文以 MySQL 为例。配好后 Claude Code 直接读真实表结构生成代码------不会编列名,字段类型也跟数据库一致。
方式一:命令行一键配置(推荐)
最简单的是用 claude mcp add 命令:
ini
claude mcp add mysql-dev \
-e MYSQL_HOST="127.0.0.1" \
-e MYSQL_PORT="3306" \
-e MYSQL_USER="dev_readonly" \
-e MYSQL_PASS="your_password" \
-e MYSQL_DB="admin_service" \
-e ALLOW_INSERT_OPERATION="false" \
-e ALLOW_UPDATE_OPERATION="false" \
-e ALLOW_DELETE_OPERATION="false" \
-- npx @benborla29/mcp-server-mysql
各参数含义:
mysql-dev:你自己起的名字,区分不同的 MCP ServerMYSQL_HOST/PORT/USER/PASS/DB:数据库连接信息ALLOW_*_OPERATION=false:禁止写操作------AI 只能读不能改npx @benborla29/mcp-server-mysql:MySQL MCP Server 的 npm 包
如果只想当前项目生效:
ini
claude mcp add -s project mysql-dev \
-e MYSQL_HOST="127.0.0.1" \
...
项目级配置写入 .mcp.json,不包含密码的配置可以随代码提交。密码让每个开发者自己设环境变量。
方式二:手动写配置文件
不想用命令行的话,手动编辑也行。
项目级配置 (.mcp.json,放项目根目录):
perl
{
"mcpServers": {
"mysql-dev": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "dev_readonly",
"MYSQL_PASS": "${MYSQL_PWD}",
"MYSQL_DB": "admin_service",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
}
}
密码用 ${MYSQL_PWD} 引用环境变量,避免硬编码。每个开发者在自己的 ~/.bashrc 里设:
ini
export MYSQL_PWD="your_actual_password"
如果想在所有项目里用同一个数据库连接,把上面的 JSON 放到
~/.claude.json(全局配置),就不用每个项目都配一遍。
验证
csharp
claude mcp list # 列出所有 MCP Server
claude mcp get mysql-dev # 查看详情
Claude Code 里执行 /mcp 也行。状态显示 "Connected" 就说明连上了。
实际效果
之前在 Skills 那篇里讲了 Skills 怎么标准化 CRUD 流程。配上 MCP 之后,效果更好:
shell
> 帮我查一下 sys_product 表有哪些字段,然后生成完整 CRUD
Claude Code 自动通过 MCP 连数据库,执行 SHOW COLUMNS FROM sys_product,拿到真实字段名和类型,再按 Skill 定义的流程生成代码。
全程不需要你手动查表、复制 DDL、贴到 Prompt 里。而且生成的代码直接用真实列名------不会出现字段名对不上的低级错误。
安全(这节一定要看)
建一个只读数据库账号:
sql
CREATE USER 'dev_readonly'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT ON admin_service.* TO 'dev_readonly'@'localhost';
FLUSH PRIVILEGES;
只给 SELECT。即使 MCP 配置里写操作开关忘了设 false,AI 也动不了数据------数据库层面就没给权限。
密码用环境变量 :配置里写 ${MYSQL_PWD},实际密码存 ~/.bashrc 里。
写操作显式关闭:虽然默认就是 false,但显式写一遍更安全------万一哪天默认行为变了,你的配置扛得住。
绝对不要连生产库:MCP 连开发库或只读从库。连接生产数据库的后果不需要我多说。
常见坑
连不上 :先手动 mysql -h 127.0.0.1 -u dev_readonly -p 确认能连上。能连上的话检查 MCP 配置里的 host/port/user/pass/db 对不对。
启动超时 :npx 第一次下载包比较慢,等一分钟。或者先全局安装 npm install -g @benborla29/mcp-server-mysql,配置里 command 用 mcp-server-mysql(不用 npx)。
查不到数据:确认数据库名没错、用户有该库的 SELECT 权限。
配错了想重来 :claude mcp remove mysql-dev 移除,然后重新 claude mcp add。
总结
- MCP 让 Claude Code 能连接数据库、文件系统等外部数据源
- 推荐用
claude mcp add命令一键配置 - 数据库必须用只读账号 + 密码用环境变量
- 配合 Skills 使用效果最好------Skills 定义流程,MCP 提供真实数据
配一次,以后每次生成 CRUD 都不用手动查表结构了。
下一篇讲 Memory + Hook------让 Claude Code 记住你的偏好,改完代码自动格式化、commit 前自动跑测试。有用的话欢迎点赞收藏。