返回市场
Go-MySQL-MCP-服务器

Go-MySQL-MCP-服务器

作者:SagenKoder4 星标更新:2025-11-04

项目介绍

MySQL MCP 服务器

一个提供AI代理直接访问MySQL数据库的模型上下文协议(MCP)服务器。此服务器使AI模型能够通过一组定义良好的工具查询、搜索和分析MySQL数据库内容。

特性

  • 模式探索 - 列出所有模式/数据库,并支持分页
  • 表发现 - 浏览任何模式中的表并获取详细元数据
  • 结构检查 - 获取列定义、类型和索引
  • 安全查询 - 执行带有自动结果限制的SELECT查询
  • 全文搜索 - 在表的所有文本列中搜索值
  • DDL检索 - 获取任何表的CREATE TABLE语句

使用Docker快速开始

使用Docker运行(推荐)

最简单的方式是使用Docker来运行MySQL MCP服务器:

# 拉取最新镜像(默认为stdio模式)
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:latest

# 或拉取特定模式
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:stdio
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:http
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:interactive

Docker使用示例

Stdio模式(适用于Claude Desktop)

# 连接到主机上的MySQL
docker run -i --rm \
  --network host \
  -e MYSQL_HOST=localhost \
  -e MYSQL_USER=your_user \
  -e MYSQL_PASSWORD=your_password \
  -e MYSQL_DATABASE=your_database \
  ghcr.io/sagenkoder/go-mysql-mcp-server:stdio

HTTP服务器模式

# 在8080端口上运行HTTP服务器
docker run -d \
  --name mysql-mcp-http \
  --network host \
  -p 8080:8080 \
  -e MYSQL_HOST=localhost \
  -e MYSQL_USER=your_user \
  -e MYSQL_PASSWORD=your_password \
  ghcr.io/sagenkoder/go-mysql-mcp-server:http

交互模式(用于测试)

# 以交互模式运行
docker run -it --rm \
  --network host \
  -e MYSQL_HOST=localhost \
  -e MYSQL_USER=your_user \
  -e MYSQL_PASSWORD=your_password \
  ghcr.io/sagenkoder/go-mysql-mcp-server:interactive

在Docker中连接到MySQL

如果您的MySQL也在Docker中运行,请使用Docker网络:

# 创建一个网络
docker network create myapp

# 运行MySQL(示例)
docker run -d \
  --name mysql \
  --network myapp \
  -e MYSQL_ROOT_PASSWORD=rootpass \
  -e MYSQL_DATABASE=mydb \
  mysql:8

# 运行MCP服务器
docker run -i --rm \
  --network myapp \
  -e MYSQL_HOST=mysql \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=rootpass \
  -e MYSQL_DATABASE=mydb \
  ghcr.io/sagenkoder/go-mysql-mcp-server:stdio

Claude Desktop配置

使用Docker与Claude Desktop

在您的Claude Desktop配置文件中添加以下内容:

{
  "mcpServers": {
    "mysql": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--network", "host",
        "-e", "MYSQL_HOST=localhost",
        "-e", "MYSQL_USER=your_user",
        "-e", "MYSQL_PASSWORD=your_password",
        "-e", "MYSQL_DATABASE=your_database",
        "ghcr.io/sagenkoder/go-mysql-mcp-server:stdio"
      ]
    }
  }
}

直接使用二进制文件与Claude Desktop

如果您更喜欢直接使用二进制文件:

{
  "mcpServers": {
    "mysql": {
      "command": "/path/to/mysql-mcp-stdio",
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_user",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "your_database"
      }
    }
  }
}

从源码构建

先决条件

  • Go 1.23或更高版本
  • Docker(可选,用于构建Docker镜像)

构建步骤

# 克隆仓库
git clone https://github.com/sagenkoder/go-mysql-mcp-server.git
cd go-mysql-mcp-server

# 构建所有二进制文件
./build.sh

# 构建Docker镜像
./build.sh docker

这将创建:

  • 二进制文件:
    • mysql-mcp-stdio - 用于基于stdio的MCP通信
    • mysql-mcp-http - HTTP服务器模式
    • mysql-mcp-interactive - 用于测试的交互式CLI模式
  • Docker镜像:
    • ghcr.io/sagenkoder/go-mmysql-mcp-server:stdio(也标记为mysql-mcp:latest
    • ghcr.io/sagenkoder/go-mysql-mcp-server:http
    • ghcr.io/sagenkoder/go-mysql-mcp-server:interactive

配置

服务器通过这些环境变量连接到MySQL:

  • MYSQL_HOST - MySQL服务器主机名(默认:localhost)
  • MYSQL_PORT - MySQL服务器端口(默认:3306)
  • MYSQL_USER - MySQL用户名(默认:root)
  • MYSQL_PASSWORD - MySQL密码(必需)
  • MYSQL_DATABASE - 默认数据库(可选)

可用工具

list_schemas

列出MySQL服务器中可用的所有模式/数据库。

参数:

  • page(可选):分页的页数(默认:1)
  • page_size(可选):每页的项目数量(默认:20,最大:100)

list_tables

列出特定模式中的所有表及其元数据。

参数:

  • schema(必需):模式/数据库名称
  • page(可选):分页的页数
  • page_size(可选):每页的项目数量

get_table_structure

获取表的详细列和索引信息。

参数:

  • schema(必需):模式/数据库名称
  • table(必需):表名称

get_table_create

获取特定表的CREATE TABLE语句。

参数:

  • schema(必需):模式/数据库名称
  • table(必需):表名称

execute_query

执行SQL查询(仅限SELECT、SHOW、DESCRIBE、EXPLAIN)。

参数:

  • query(必需):要执行的SQL查询
  • limit(可选):返回的最大行数(默认:100)

search_table

在表的所有文本列中搜索值。

参数:

  • schema(必需):模式/数据库名称
  • table(必需):表名称
  • search_term(必需):要搜索的词
  • limit(可选):返回的最大行数(默认:100)

测试连接

使用交互模式测试您的连接:

# 使用Docker
docker run -it --rm \
  --network host \
  -e MYSQL_HOST=localhost \
  -e MYSQL_USER=test \
  -e MYSQL_PASSWORD=test \
  ghcr.io/sagenkoder/go-mysql-mcp-server:interactive

# 使用二进制文件
MYSQL_USER=test MYSQL_PASSWORD=test ./mysql-mcp-interactive

安全注意事项

  • 只允许SELECT、SHOW、DESCRIBE和EXPLAIN查询
  • 所有查询都自动限制以防止大量结果集
  • 表搜索仅扫描基于文本的列
  • 应将连接详情作为环境变量安全存储
  • Docker镜像以非root用户身份运行以提高安全性

故障排除

连接问题

  • 确保MySQL正在运行且可访问
  • 检查MySQL用户是否有适当的权限
  • 当使用Docker时,验证网络连通性(对于本地MySQL使用--network host
  • 首先使用mysql CLI客户端进行测试:mysql -h localhost -u user -p

Docker网络问题

  • 使用--network host连接到主机上的MySQL
  • 对于Docker中的MySQL,创建共享网络并使用容器名称作为主机名
  • 如果连接到远程MySQL,请检查防火墙规则

许可证

MIT许可证 - 详情见LICENSE文件。 </中文翻译>