使用说明
MCP MySQL 服务器
一个用于MySQL数据库操作的模型上下文协议(MCP)服务器,内置安全功能和操作抗干扰能力。非常适合与Claude Code、Codex CLI以及其他MCP兼容的AI助手一起使用。
特点/特性
- 安全的MySQL操作自由执行SELECT查询,同时控制破坏性操作
- **“Operation Resistance”可以翻译为“抵抗行动”**可配置的INSERT、UPDATE和DELETE限制
- 模式保护DROP、TRUNCATE 和 ALTER 操作始终被阻止
- 防止SQL注入使用带参数绑定的预编译语句
- 多种工具查询执行、表列表查看、模式检查和数据库信息查询
- 连接池高效的连接管理以提升性能
- 详细的错误报告带有SQL代码的清晰错误信息
快速入门
选项1:自动设置(最简单)
# One command - does everything!
./setup.sh
该脚本将:
- 自动检测 Bun 或 npm
- 安装依赖项
- 创建并可选配置 .env 文件
- 构建项目
- 测试数据库连接
选项2:手动设置
使用 Bun(更快):
bun install
cp .env.example .env && nano .env
bun run build
使用 npm:
npm install
cp .env.example .env && nano .env
npm run build
集成指南
- 克劳德代码设置 - Claude代码集成完整指南
- Codex CLI 设置 - 命令行使用和自动化
- 使用示例 - 全面的查询示例和模式
配置
环境变量
创建一个 .env 文件(使用 .env.example (作为模板):
# MySQL Connection
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=your_username
MYSQL_PASS=your_password
MYSQL_DB=your_database
# Operation Permissions (true/false)
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
MCP客户端配置
对于Claude Code,请添加到您的 ~/.config/claude-code/.mcp.json:
{
"mcpServers": {
"mysql": {
"command": "node",
"args": ["/absolute/path/to/mcp-mysql-server/dist/index.js"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASS": "your_password",
"MYSQL_DB": "your_database",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
}
}
需要更多例子吗? 见 docs/mcp-config-examples.md 翻译为中文是:“文档/mcp配置示例.md” 对于:
- 多个数据库
- 远程/Docker 配置
- 开发环境与生产环境设置
- 特定于平台的路径
查看 集成指南 以获取详细的设置说明。
安全特性
总是阻塞操作
这些操作是 总是被阻挡 无论配置如何:
DROP- 删除表/数据库TRUNCATE- 截断表(或清空表)ALTER- 修改表结构
可配置操作
通过环境变量控制这些操作:
INSERT- 由……控制ALLOW_INSERT_OPERATIONUPDATE- 由……控制ALLOW_UPDATE_OPERATIONDELETE- 由……控制ALLOW_DELETE_OPERATION
始终允许的操作
SELECT- 阅读数据总是被允许的
可用工具
1. mysql_query(在MySQL中用于执行SQL查询的函数)
执行带有安全限制的SQL查询。
参数:
query(字符串,必需): 要执行的SQL查询params(数组,可选):预编译语句的参数
示例:
{
"query": "SELECT * FROM users WHERE id = ?",
"params": [123]
}
回答:
{
"success": true,
"rows": [...],
"rowCount": 5,
"fields": [...]
}
2. mysql_list_tables(MySQL列出表)
列出当前数据库中的所有表。
示例回复:
{
"success": true,
"tables": [
{ "Tables_in_db": "users" },
{ "Tables_in_db": "products" }
]
}
3. mysql描述表(或 mysql表描述)
获取特定表的结构/模式。
参数:
table(字符串,必填):表名
示例回复:
{
"success": true,
"table": "users",
"columns": [
{
"Field": "id",
"Type": "int",
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment"
}
]
}
4. 获取MySQL数据库信息
获取数据库连接和权限的相关信息。
示例回复:
{
"success": true,
"connection": {
"host": "localhost",
"port": 3306,
"user": "tommygun",
"database": "db"
},
"permissions": {
"INSERT": false,
"UPDATE": false,
"DELETE": false,
"SELECT": true,
"DROP": false,
"TRUNCATE": false,
"ALTER": false
}
}
使用示例
如需全面示例,请参阅 示例/使用示例.md。
快速示例
安全的SELECT查询:
Get the first 10 users from the database
参数化查询(防止SQL注入):
Find products where category is 'electronics' and price is less than 1000
数据分析:
Show me monthly revenue for the last 6 months
模式探索:
What tables are in my database?
Show me the structure of the users table
阻塞操作
当操作被禁用时,您会收到明确的错误信息:
{
"error": "INSERT operations are disabled. Set ALLOW_INSERT_OPERATION=true to enable.",
"blocked": true
}
启用写操作
为了启用写入操作,请更新您的 .env:
# Enable INSERT operations
ALLOW_INSERT_OPERATION=true
# Enable UPDATE operations
ALLOW_UPDATE_OPERATION=true
# Enable DELETE operations (use with caution!)
ALLOW_DELETE_OPERATION=true
更改权限后,重启MCP服务器。
安全最佳实践
- 默认为只读模式除非特别需要,否则保持写操作禁用状态
- 使用预编译语句总是使用
params用于用户输入的数组 - 验证表名服务器在执行描述操作时验证表名
- 模式保护DROP/TRUNCATE/ALTER 操作已被永久阻止
- 连接池使用连接池以提高性能和资源管理效率
错误处理
服务器提供了详细的错误响应:
{
"error": "Table 'db.nonexistent' doesn't exist",
"code": "ER_NO_SUCH_TABLE",
"sqlState": "42S02"
}
测试与验证
快速测试
一旦连接到您的MCP客户端,请尝试以下命令:
-
检查连接:
Show me the MySQL database information -
列出表格:
What tables are in my database? -
测试安全功能:
Try to insert a test record into any table(应显示明确错误信息并阻止)
-
查询数据:
Show me sample data from the users table
验证核对清单
- [ ] 服务器在MCP客户端中显示为已连接
- [ ] 数据库连接信息显示正确
- [ ] 工作列表表
- [ ] SELECT 查询执行成功
- [ ] INSERT/UPDATE/DELETE 被阻止(默认)
- [ ] 清除被阻止操作的错误信息
如需详细的测试示例,请参阅 示例/用法示例.md。
发展
# Build the project
npm run build
# Run the server directly (for testing)
npm start
# Build and run
npm run dev
# Watch mode (if needed)
npm run build -- --watch
项目结构
mcp-mysql-server/
├── src/
│ └── index.ts # Main server implementation
├── dist/ # Compiled JavaScript output
├── examples/ # Integration guides and examples
│ ├── claude-code-setup.md
│ ├── codex-cli-setup.md
│ └── usage-examples.md
├── .env.example # Environment template
├── package.json
├── tsconfig.json
└── README.md
做出贡献
见 `CONTRIBUTING.md` 翻译为中文是:“贡献指南/贡献说明文件”。这个文件通常用于说明如何向项目贡献代码或内容,包括贡献的流程、规范、要求等 作为开发指南。
故障排除
连接问题
- 验证 MySQL 是否正在运行:
mysql -u username -p - 检查主机/端口配置
- 验证用户凭据
- 确保数据库存在
权限错误
- 检查MySQL用户是否具有所需的权限
- 验证
ALLOW_*_OPERATION设置符合您的需求
未找到工具
- 确保服务器已正确配置
.mcp.json - 验证构建是否成功:
ls -la dist/index.js - 检查MCP客户端是否能找到服务器
资源
- 快速入门指南 - 5分钟内快速上手
- 设置检查清单 - 分步设置指南
- 文档索引 - 所有文件已整理完毕
- MCP协议文档
- 集成指南 - 克劳德代码(Claude Code)& Codex 命令行界面(CLI)
- 使用示例
- 贡献指南
- 安全策略
- 项目改进 - 有什么新鲜事吗
支持
- 问题:通过 GitHub 问题页面报告错误或请求功能
- 问题:检查一下 例子 常见用例目录
- 安全性:如有关于安全性的担忧,请通过电子邮件联系维护人员
更新日志
版本 1.0.0
- 首次发布
- 基本的MySQL操作(SELECT,INSERT,UPDATE,DELETE)
- 安全特性与操作阻力
- 为防止SQL注入而准备的预编译语句
- 连接池
- 全面的文件记录
许可证
MIT - 查看 许可证 文件详情见附件