使用说明
项目简介
go-mcp-mysql 是一个基于 Model Context Protocol (MCP) 的 MySQL 数据库服务器实现。它允许LLM客户端通过标准化的MCP协议与MySQL数据库进行交互,执行数据查询和操作。该服务器使用Go语言开发,无需Node.js或Python环境,部署简单,资源占用低。
主要功能点
- 数据库和表结构管理:支持列出数据库、表,以及查看表结构。
- 数据CRUD操作:提供执行SQL查询的工具,包括读取数据('read_query')、写入数据('write_query')、更新数据('update_query')和删除数据('delete_query')。
- 只读模式:可以配置为只读模式,仅允许执行读取操作,保障数据安全。
- 查询计划检查:可选的查询计划检查,在执行SQL前使用 'EXPLAIN' 语句检查查询计划,确保查询效率(默认开启,可通过参数关闭)。
- 多种部署方式:可以通过命令行参数或DSN字符串配置数据库连接。
安装步骤
-
下载预编译版本 (推荐): 访问 release 页面,下载适合您操作系统的预编译版本。 将下载的可执行文件 'go-mcp-mysql' 放置到您的 '$PATH' 环境变量包含的目录下,或者任何您容易访问的目录。
-
使用 Go 编译 (如果您安装了Go): 打开终端,执行以下命令:
go install -v github.com/Zhwt/go-mcp-mysql@latest编译后的可执行文件通常位于 '$GOPATH/bin' 或 '$HOME/go/bin' 目录下。请确保该目录在您的 '$PATH' 环境变量中。
服务器配置
MCP客户端需要配置 'mcpServers' 字段来连接到 go-mcp-mysql 服务器。以下是两种配置方式,选择其一即可:
方法A: 使用命令行参数配置 (推荐)
这种方式将数据库连接参数直接放在启动命令的参数列表中,易于理解和配置。
{ "mcpServers": { "mysql": { "command": "go-mcp-mysql", // 启动 go-mcp-mysql 服务器的命令,如果不在PATH中,请使用完整路径 "args": [ "--host", "localhost", // MySQL 服务器主机名 "--user", "root", // MySQL 用户名 "--pass", "password", // MySQL 密码 "--port", "3306", // MySQL 端口 "--db", "mydb" // 默认连接的数据库名 ] } } }
方法B: 使用 DSN 字符串配置
DSN (Data Source Name) 字符串提供了一种更紧凑的方式来配置数据库连接,允许您在一个字符串中指定所有连接参数。
{ "mcpServers": { "mysql": { "command": "go-mcp-mysql", // 启动 go-mcp-mysql 服务器的命令,如果不在PATH中,请使用完整路径 "args": [ "--dsn", "username:password@tcp(localhost:3306)/mydb?parseTime=true&loc=Local" // MySQL DSN 连接字符串,详细格式请参考 MySQL DSN 文档 ] } } }
可选配置参数:
- '--read-only': 添加此参数启用只读模式。在只读模式下,只有以 'list_', 'read_', 'desc_' 开头的工具可用。启用或禁用只读模式后,需要重启MCP服务器。
- '--with-explain-check': 默认情况下,CRUD 查询会先执行 'EXPLAIN' 检查查询计划。添加此参数禁用查询计划检查。
基本使用方法
配置完成后,MCP客户端可以通过以下工具与 MySQL 数据库进行交互:
Schema 工具:
- 'list_database': 列出所有数据库,无需参数。
- 'list_table': 列出所有表,或根据 'name' 参数模糊搜索表名。
- 'desc_table': 描述表结构,需要 'name' 参数指定表名。
- 'create_table' (非只读模式): 创建新表,需要 'query' 参数提供完整的 'CREATE TABLE' SQL 语句。
- 'alter_table' (非只读模式): 修改表结构,需要 'query' 参数提供 'ALTER TABLE' SQL 语句。 注意:请勿使用此工具删除表或列。
Data 工具:
- 'read_query': 执行只读 SQL 查询,需要 'query' 参数提供 'SELECT' SQL 语句。
- 'write_query' (非只读模式): 执行写入 SQL 查询 (INSERT),需要 'query' 参数提供 'INSERT' SQL 语句。
- 'update_query' (非只读模式): 执行更新 SQL 查询 (UPDATE),需要 'query' 参数提供 'UPDATE' SQL 语句,务必包含 WHERE 条件。
- 'delete_query' (非只读模式): 执行删除 SQL 查询 (DELETE),需要 'query' 参数提供 'DELETE' SQL 语句,务必包含 WHERE 条件。
示例:使用 'read_query' 工具查询数据
假设您已经配置了名为 'mysql' 的 MCP 服务器,您可以使用 MCP 客户端调用 'mysql.read_query' 工具,并传入 SQL 查询语句作为参数:
{ "tool_calls": [ { "tool_name": "mysql.read_query", "parameters": { "query": "SELECT * FROM users WHERE id = 1;" } } ] }
服务器将执行该查询,并将结果以 CSV 格式返回给客户端。
信息
分类
数据库与文件