使用说明

项目简介

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字符串配置数据库连接。

安装步骤

  1. 下载预编译版本 (推荐): 访问 release 页面,下载适合您操作系统的预编译版本。 将下载的可执行文件 'go-mcp-mysql' 放置到您的 '$PATH' 环境变量包含的目录下,或者任何您容易访问的目录。

  2. 使用 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 格式返回给客户端。

信息

分类

数据库与文件