使用说明
MySQL MCP服务器
一个安全、功能丰富的MySQL模型上下文协议(MCP)服务器,专为与Claude和VS Code GitHub Copilot等AI助手集成而设计。
目录
特性
- 安全第一:基于安全最佳实践、输入验证和可配置的访问控制构建
- 可配置操作:根据需要启用/禁用CRUD操作和表创建(默认启用读取操作)
- 表格数据显示:格式正确的响应便于数据可视化
- 综合录井:调试和监控的详细日志记录
- 基于环境的配置:使用环境变量或配置对象轻松设置
- NPM包:准备用作项目中的依赖项
用法
使用Visual Studio代码
将此添加到您的 .vscode/mcp.json:
{
"servers": {
"mysql": {
"command": "npx",
"args": ["@lakshya-mcp/mysql-mcp-server-claude"],
"env": {
"MYSQL_HOST": "{your_host}",
"MYSQL_PORT": "{your_port}",
"MYSQL_USER": "{your_username}",
"MYSQL_PASSWORD": "{your_password}",
"MYSQL_DATABASE": "{your_database}",
"MYSQL_ALLOW_CREATE": "false",
"MYSQL_ALLOW_UPDATE": "false",
"MYSQL_ALLOW_DELETE": "false",
"MYSQL_ALLOW_CREATE_TABLE": "false",
"MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
}
}
}
}
使用克劳德桌面
将此添加到您的 claude_desktop_config.json.
跟随这些 说明 查找文件。
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["@lakshya-mcp/mysql-mcp-server-claude"],
"env": {
"MYSQL_HOST": "{your_host}",
"MYSQL_PORT": "{your_port}",
"MYSQL_USER": "{your_username}",
"MYSQL_PASSWORD": "{your_password}",
"MYSQL_DATABASE": "{your_database}",
"MYSQL_ALLOW_CREATE": "false",
"MYSQL_ALLOW_UPDATE": "false",
"MYSQL_ALLOW_DELETE": "false",
"MYSQL_ALLOW_CREATE_TABLE": "false",
"MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
}
}
}
}
保存文件并重新启动claude桌面。它应该在工具下可见(选中旁边的图标 +).
使用克劳德代码
打开终端并运行以下命令:
对于windows(不带wsl):
claude mcp add mysql -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASSWORD={your_password} -e MYSQL_DATABASE={your_database} -e MYSQL_ALLOW_CREATE=false -e MYSQL_ALLOW_UPDATE=false -e MYSQL_ALLOW_DELETE=false -e MYSQL_ALLOW_CREATE_TABLE=false -e MYSQL_READ_ONLY=true -- cmd /c npx @lakshya-mcp/mysql-mcp-server-claude
对于mac/windows(带wsl):
claude mcp add mysql -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASSWORD={your_password} -e MYSQL_DATABASE={your_database} -e MYSQL_ALLOW_CREATE=false -e MYSQL_ALLOW_UPDATE=false -e MYSQL_ALLOW_DELETE=false -e MYSQL_ALLOW_CREATE_TABLE=false -e MYSQL_READ_ONLY=true -- npx -y @lakshya-mcp/mysql-mcp-server-claude
然后键入: claude 然后跑 /mcp。它应该显示:
❯ 1. mysql ✔ connected · Enter to view details
使用Gemini CLI
导航到主目录并查找名为的文件夹 .gemini.
在该文件夹中,您将找到 settings.json 文件。
将此添加到您的 .gemini/settings.json 文件:
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["@lakshya-mcp/mysql-mcp-server-claude"],
"env": {
"MYSQL_HOST": "{your_host}",
"MYSQL_PORT": "{your_port}",
"MYSQL_USER": "{your_username}",
"MYSQL_PASSWORD": "{your_password}",
"MYSQL_DATABASE": "{your_database}",
"MYSQL_ALLOW_CREATE": "false",
"MYSQL_ALLOW_UPDATE": "false",
"MYSQL_ALLOW_DELETE": "false",
"MYSQL_ALLOW_CREATE_TABLE": "false",
"MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
}
}
}
}
然后重新启动gemini cli。您应该能够看到mysql-mcp服务器。
您可以通过运行以下命令进行验证 /mcp.
在您的项目中
- 安装软件包
npm install -g @lakshya-mcp/mysql-mcp-server-claude
- 创建服务器并使用
const { MySQLMCPServer } = require("@lakshya-mcp/mysql-mcp-server-claude");
// Using environment variables
const server = new MySQLMCPServer();
await server.start();
// Or with custom configuration
const server = new MySQLMCPServer({
database: {
host: "localhost",
port: 3306,
user: "username",
password: "password",
database: "mydb",
},
features: {
fetch: true,
create: false,
update: false,
delete: false,
createTable: false,
},
});
可用工具
MySQL MCP Server为数据库交互提供了几个强大的工具。每个工具的设计都考虑到了安全性,并包括适当的输入验证:
mysql_list_tables
目的:列出数据库中所有可访问的表
- 返回您有权访问的所有表的完整列表
- 有助于发现数据库结构
- 无需参数
- 如果已配置,则尊重表访问控制
mysql_describe_table
目的:获取有关表结构的详细信息,包括列、类型和约束
- 显示列名、数据类型、可空状态和键信息
- 查询前理解表模式至关重要
- 帮助识别主键、外键和数据约束
- 参数:
table_name(string,必填):要描述的表的名称
mysql_select_data
目的:从具有可选筛选和分页的表中选择数据
- 灵活的查询,支持过滤、排序和分页
- 以表格格式返回数据,便于可视化
- 支持复杂的WHERE子句以实现精确的数据检索
- 内置行限制,提高性能和安全性
- 参数:
table_name(string,必填):要查询的表的名称columns(数组,可选):要选择的特定列(例如,[“姓名”、“电子邮件”])where(字符串,可选):WHERE子句条件(例如,“年龄>25 AND状态='活动'”)order_by(字符串,可选):ORDER BY子句(例如,“name ASC”或“created_at DESC”)limit(number,可选):要返回的最大行数offset(number,可选):分页时要跳过的行数
mysql_insert_data(如果启用)
目的:将新数据插入表中
- 允许向数据库添加新记录
- 仅在配置中启用CREATE操作时可用
- 插入前根据表架构验证数据
- 支持批量插入以提高效率
- 参数:
table_name(string,必填):要插入的表的名称data(object,必填):作为键值对插入的数据(例如,{“name”:“John”,“age”:30})
mysql_update_data(如果启用)
目的:更新表中的现有数据
- 根据指定条件修改现有记录
- 仅在配置中启用UPDATE操作时可用
- 需要WHERE子句以防止意外的大规模更新
- 根据表约束验证更新的数据
- 参数:
table_name(字符串,必填):要更新的表的名称data(object,必填):作为键值对更新的数据(例如,{“status”:“inactive”})where(string,必填):WHERE子句,用于标识要更新的行(例如,“id=123”)where_params(数组,可选):参数化WHERE子句的参数
mysql_delete_data(如果启用)
目的:从表中删除数据
- 根据指定条件从数据库中删除记录
- 仅在配置中启用DELETE操作时可用
- 需要WHERE子句以防止意外批量删除
- 包括安全检查和确认提示
- 参数:
table_name(string,必填):要从中删除的表的名称where(string,必填):WHERE子句,用于标识要删除的行(例如,“status='expired'”)where_params(数组,可选):参数化WHERE子句的参数
mysql_create_table(如果启用)
目的:使用指定的列和约束创建新表
- 允许使用自定义架构定义创建新的数据库表
- 仅在配置中启用CREATE TABLE操作时可用
- 支持各种列类型、约束和表选项
- 包括“如果不存在”选项等安全功能
- 参数:
table_name(string,必填):要创建的表的名称columns(array,必填):具有以下属性的列定义数组:name(字符串,必填):列名type(字符串,必填):列数据类型(例如,“VARCHAR”、“INT”、“TEXT”、“DATETIME”)length(number,可选):支持它的类型的列长度(例如VARCHAR(255))nullable(boolean,可选):列是否可以为NULL(默认值:true)primaryKey(boolean,可选):此列是否是主键的一部分(默认值:false)autoIncrement(boolean,可选):此列是否自动递增(默认值:false)unique(boolean,可选):此列是否具有唯一约束(默认值:false)defaultValue(任意,可选):列的默认值
if_not_exists(布尔值,可选):如果表存在,则使用CREATE TABLE IF NOT EXISTS以避免错误(默认值:false)engine(字符串,可选):存储引擎(例如“InnoDB”、“MyISAM”)charset(字符串,可选):字符集(例如“utf8mb4”)collation(字符串,可选):排序规则(例如,“utf8mb4_unicode_ci”)
备注:出于安全考虑,默认情况下禁用写入操作(INSERT、UPDATE、DELETE、CREATE TABLE)。仅在必要时启用它们,并确保适当的访问控制到位。
配置选项
数据库配置
{
database: {
host: "localhost", // MySQL host
port: 3306, // MySQL port
user: "username", // MySQL username
password: "password", // MySQL password
database: "dbname", // Database name
ssl: false, // Enable SSL
connectionLimit: 10, // Connection pool limit
acquireTimeout: 60000 // Connection acquire timeout in ms
}
}
功能配置
{
features: {
fetch: true, // Always enabled - read operations
create: false, // Enable INSERT operations
update: false, // Enable UPDATE operations
delete: false, // Enable DELETE operations
createTable: false // Enable CREATE TABLE operations
}
}
安全配置
{
security: {
allowedTables: ["users", "products"], // Only allow these tables
blockedTables: ["admin", "secrets"], // Block these tables
maxRows: 1000, // Maximum rows per query
readOnly: true // Disable all write operations
}
}
日志记录配置
{
logging: {
level: "info", // error, warn, info, debug
file: "./mysql-mcp.log" // Optional log file path
}
}
安全功能
- 输入验证:所有输入都使用Joi模式进行验证
- SQL注入防护:仅使用参数化查询
- 表访问控制:表格的可配置允许/阻止列表
- 行限制:每个查询可配置的最大行数
- 只读模式:禁用所有写入操作的选项
- 连接池:具有超时功能的安全连接管理
- 审计日志:全面记录所有操作和安全事件
错误处理
服务器包括全面的错误处理:
- 数据库连接错误
- SQL查询无效
- 拒绝权限操作
- 配置验证错误
- 运行时异常
所有错误都会与上下文一起记录,并作为结构化响应返回。
贡献
欢迎投稿!请确保维护所有安全最佳实践,并为新功能添加适当的测试。
支持
对于问题和疑问,请在GitHub存储库中创建问题。