使用说明
MCP MySQL服务器
MCP MySQL Server是一个基于Go的MCP服务器实现,它提供MySQL数据库交互功能,允许MCP客户端(例如Claude Desktop)执行数据库操作。
特性
- MCP合规性:根据MCP规范为工具执行提供基于JSON-RPC的接口。
- MySQL操作:支持数据库操作,如查询、模式检查和(可选)数据操作。
- 只读模式:防止数据修改操作的可选限制。
- 查询计划验证:可选EXPLAIN分析以验证查询安全性。
- URL样式连接字符串:支持标准URL样式数据库连接字符串,如
mysql://user:pass@host:port/dbname. - 最小容器:使用谷歌的无发行版构建,以提高安全性和减小图像大小。
需求
- Docker(推荐)
对于当地发展:
- 转到1.24或更高版本
- MySQL服务器(本地或远程)
使用Docker(推荐)
# Pull the image
docker pull cnosuke/mcp-mysql:latest
# Run with default settings
docker run -i --rm cnosuke/mcp-mysql:latest
# Run with custom MySQL connection
docker run -i --rm \
-e MYSQL_HOST=your-mysql-host \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=your-username \
-e MYSQL_PASSWORD=your-password \
-e MYSQL_DATABASE=your-database \
cnosuke/mcp-mysql:latest
# Run in read-only mode
docker run -i --rm \
-e MYSQL_HOST=your-mysql-host \
-e MYSQL_USER=your-username \
-e MYSQL_PASSWORD=your-password \
-e MYSQL_DATABASE=your-database \
-e MYSQL_READ_ONLY=true \
cnosuke/mcp-mysql:latest
使用Claude Desktop(Docker)
要使用Docker与Claude Desktop集成,请在您的 claude_desktop_config.json 文件:
{
"mcpServers": {
"mysql": {
"command": "docker",
"args": ["run", "-i", "--rm", "cnosuke/mcp-mysql:latest"],
"env": {
"MYSQL_HOST": "your-mysql-host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your-username",
"MYSQL_PASSWORD": "your-password",
"MYSQL_DATABASE": "your-database",
"MYSQL_READ_ONLY": "false"
}
}
}
}
构建和运行(Go Binary)
或者,您可以直接构建并运行Go二进制文件:
# Build the server
make
# Run the server
./bin/mcp-mysql server --config=config.yml
与Claude Desktop一起使用(Go Binary)
要使用Go二进制文件与Claude Desktop集成,请在您的 claude_desktop_config.json 文件:
{
"mcpServers": {
"mysql": {
"command": "./bin/mcp-mysql",
"args": ["server"],
"env": {
"LOG_PATH": "mcp-mysql.log",
"DEBUG": "false",
"MYSQL_HOST": "your-mysql-host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your-username",
"MYSQL_PASSWORD": "your-password",
"MYSQL_DATABASE": "your-database",
"MYSQL_READ_ONLY": "false"
}
}
}
}
Docker镜像详细信息
该项目使用谷歌的无发行版容器映像作为最终的Docker映像。这 gcr.io/distroless/static 基础图像提供:
- 最小攻击面-仅包括必要的组件
- 更小的映像大小-没有shell、包管理器或其他不必要的二进制文件
- 提高了安全性-减少了潜在漏洞的数量
Docker镜像是使用多阶段构建过程构建的:
- 第一阶段使用Go Alpine构建应用程序
- 第二阶段仅使用编译后的二进制文件使用无发行版/静态
配置
服务器是通过YAML文件(默认:config.yml)或环境变量配置的:
log: 'path/to/mcp-mysql.log' # Log file path, if empty no log will be produced
debug: false # Enable debug mode for verbose logging
mysql:
host: 'localhost'
user: 'root'
password: ''
port: 3306
database: ''
dsn: ''
read_only: false
explain_check: false
连接选项
您可以通过三种方式指定MySQL连接详细信息(按优先级顺序):
- 刀具参数:通过a
dsn调用任何工具时,直接将参数发送到该工具 - 配置中的DSN:设置
mysql.dsn配置文件中的值 - 个人参数:在配置文件中设置单个连接参数
如果没有以任何一种方式提供连接信息,服务器将返回一条错误消息,提示您提供连接详细信息。
配置选项
mysql.host:MySQL服务器主机名(默认值:“localhost”)mysql.user:MySQL用户名(默认:“root”)mysql.password:MySQL密码mysql.port:MySQL端口(默认:3306)mysql.database:MySQL数据库名称mysql.dsn:MySQL DSN(数据源名称)字符串。如果提供,则会覆盖单个连接参数mysql.read_only:启用只读模式。在此模式下,只有以开头的工具list,read_和desc_可用的mysql.explain_check:检查查询计划EXPLAIN执行前
您可以使用环境变量覆盖配置:
LOG_PATH:日志文件的路径DEBUG:启用调试模式(真/假)MYSQL_HOST:MySQL服务器主机名MYSQL_PORT:MySQL服务器端口MYSQL_USER:MySQL用户名MYSQL_PASSWORD:MySQL密码MYSQL_DATABASE:MySQL数据库名称MYSQL_DSN:MySQL DSN字符串MYSQL_READ_ONLY:启用只读模式(真/假)MYSQL_EXPLAIN_CHECK:启用查询计划检查(true/false)
日志记录
日志行为通过配置进行控制:
- 如果
log在配置文件中设置,日志将写入指定文件 - 如果
log为空,将不会生成日志 - 集
debug: true用于更详细的日志记录
MCP服务器工具
MCP客户端通过发送JSON-RPC请求来执行各种工具,从而与服务器进行交互。支持以下MCP工具:
架构工具
-
list_database- 列出MySQL服务器中的所有数据库。
- 参数:
dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:匹配的数据库名称列表。
-
list_table- 列出MySQL服务器中的所有表。
- 参数:
dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:匹配表名的列表。
-
create_table(在只读模式下不可用)- 在MySQL服务器中创建一个新表。
- 参数:
query:创建表的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:受影响的x行。
-
alter_table(在只读模式下不可用)- 更改MySQL服务器中的现有表。通知LLM不要删除现有的表或列。
- 参数:
query:更改表的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:受影响的x行。
-
desc_table- 描述表格的结构。
- 参数:
name:要描述的表的名称。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回值:表的结构。
数据工具
-
read_query- 执行只读SQL查询。
- 参数:
query:要执行的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:查询的结果。
-
write_query(在只读模式下不可用)- 执行写SQL查询。
- 参数:
query:要执行的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:受影响的x行,最后插入id:<last_insert_id>。
-
update_query(在只读模式下不可用)- 执行更新SQL查询。
- 参数:
query:要执行的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:受影响的x行。
-
delete_query(在只读模式下不可用)- 执行删除SQL查询。
- 参数:
query:要执行的SQL查询。dsn(可选):用于覆盖配置的MySQL DSN字符串。
- 返回:受影响的x行。
MySQL DSN格式
这 dsn 参数或 mysql.dsn 配置选项可以以两种格式指定:
1.本机MySQL DSN格式
[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN]
例子: username:password@tcp(localhost:3306)/mydb?parseTime=true&loc=Local
请参考 MySQL DSN 有关此格式的更多详细信息。
2.URL样式连接格式
mysql://username:password@hostname:port/dbname?param1=value1¶m2=value2
例子: mysql://root:pass@localhost:3306/mydb?parseTime=true&loc=Local
此URL样式格式会自动转换为本机MySQL DSN格式。
支持的URL方案包括: mysql://, mariadb://.
命令行参数
启动服务器时,您可以指定各种设置:
./bin/mcp-mysql server [options]
选项:
--config,-c:配置文件的路径(默认:“config.yml”)。
贡献
欢迎投稿!请分叉存储库并提交改进或bug修复的pull请求。对于重大变化,先打开一个问题来讨论你的想法。
许可证
该项目根据MIT许可证获得许可。
作者:cnosuke(x.com/cnosuke)