MySQL MCP服务器
一种模型上下文协议(MCP)服务器,为AI代理提供对MySQL数据库的直接访问。该服务器使AI模型能够通过一组定义良好的工具查询、搜索和分析MySQL数据库内容。
特性
- 模式探索 -列出所有带分页的架构/数据库
- 表发现 -浏览任何具有详细元数据的架构中的表
- 结构检查 -获取列定义、类型和索引
- 安全查询 -执行带有自动结果限制的SELECT查询
- 全文搜索 -在表中的所有文本列中搜索值
- DDL检索 -获取任何表的CREATE TABLE语句
Docker快速入门
使用Docker运行(推荐)
运行MySQL MCP服务器最简单的方法是使用Docker:
# Pull the latest image (stdio mode by default)
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:latest
# Or pull a specific mode
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:interactiveDocker使用示例
标准模式(适用于克劳德桌面)
# Connect to MySQL on host machine
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:stdioHTTP服务器模式
# Run HTTP server on port 8080
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交互模式(用于测试)
# Run in interactive mode
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网络:
# Create a network
docker network create myapp
# Run MySQL (example)
docker run -d \
--name mysql \
--network myapp \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=mydb \
mysql:8
# Run MCP server
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:stdioClaude桌面配置
在Claude Desktop中使用Docker
将此添加到您的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"
]
}
}
}使用二进制与克劳德桌面
如果你更喜欢直接使用二进制文件:
{
"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"
}
}
}
}从源头构建
先决条件
- 转到1.23或更高版本
- Docker(可选,用于构建Docker镜像)
构建步骤
# Clone the repository
git clone https://github.com/sagenkoder/go-mysql-mcp-server.git
cd go-mysql-mcp-server
# Build all binaries
./build.sh
# Build Docker images
./build.sh docker这将创建:
- 二进制:
- mysql-mcp-stdio -用于基于stdio的MCP通信 - mysql-mcp-http -HTTP服务器模式 - mysql-mcp-interactive -用于测试的交互式CLI模式
- Docker镜像:
- ghcr.io/sagenkoder/go-mysql-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)
搜索表
在表中的所有文本列中搜索值。
参数:
schema(必需):架构/数据库名称table(必填):表名search_term(必填):要搜索的术语limit(可选):要返回的最大行数(默认值:100)
测试连接
使用交互模式测试您的连接:
# With 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
# With binary
MYSQL_USER=test MYSQL_PASSWORD=test ./mysql-mcp-interactive安全考虑
- 只允许使用SELECT、SHOW、DESCRIBE和EXPLAIN查询
- 所有查询都会自动限制,以防止出现大型结果集
- 表搜索仅扫描基于文本的列
- 连接详细信息应作为环境变量安全存储
- 为了安全起见,Docker镜像以非root用户身份运行
故障排除
连接问题
- 确保MySQL正在运行且可访问
- 检查MySQL用户是否具有适当的权限
- 使用Docker时,验证网络连接(
--network host本地MySQL) - 首先使用mysql CLI客户端进行测试:
mysql -h localhost -u user -p
Docker网络问题
- 使用
--network host连接到主机上的MySQL - 对于Docker中的MySQL,创建一个共享网络并使用容器名称作为主机名
- 如果连接到远程MySQL,请检查防火墙规则
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
