使用说明
MySQL MCP服务器
用于与MySQL数据库交互的MCP服务器。
此服务器支持执行只读查询(query)和最终回滚的写查询(testexecute)。
设置
环境变量
将以下环境变量添加到 ~/.mcp/.env:
MYSQL_HOST=host.docker.internal # Hostname to access host services from Docker container
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password
备注:
host.docker.internal是一个特殊的DNS名称,用于从Docker容器访问主机服务。 连接到主机上运行的MySQL服务器时使用此设置。 如果连接到其他MySQL服务器,请更改为相应的主机名。
mcp.json配置
{
"mcpServers": {
"mysql": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--add-host=host.docker.internal:host-gateway",
"--env-file",
"/Users/username/.mcp/.env",
"ghcr.io/xiangma9712/mcp/mysql"
]
}
}
}
用法
启动服务器
docker run -i --rm --add-host=host.docker.internal:host-gateway --env-file ~/.mcp/.env ghcr.io/xiangma9712/mcp/mysql
备注:如果您正在使用OrbStack,
host.docker.internal是自动支持的,因此--add-host选项可以省略。 虽然Docker Desktop通常也会自动支持这一点,但添加--add-host建议使用该选项以提高可靠性。
可用命令
1.执行只读查询
{
"type": "query",
"payload": {
"sql": "SELECT * FROM your_table"
}
}
答复:
{
"success": true,
"data": [
{
"id": 1,
"name": "example"
}
]
}
2.测试查询执行
{
"type": "test_execute",
"payload": {
"sql": "UPDATE your_table SET name = 'updated' WHERE id = 1"
}
}
答复:
{
"success": true,
"data": "The UPDATE SQL query can be executed."
}
3.列表
{
"type": "list_tables"
}
答复:
{
"success": true,
"data": ["table1", "table2", "table3"]
}
4.描述表格
{
"type": "describe_table",
"payload": {
"table": "your_table"
}
}
答复:
{
"success": true,
"data": [
{
"Field": "id",
"Type": "int(11)",
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": ""
},
{
"Field": "name",
"Type": "varchar(255)",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": ""
}
]
}
实现细节
- 用TypeScript实现
- 使用mysql2包
- 作为Docker容器运行
- 通过标准输入接受JSON命令
- 通过标准输出返回JSON响应
- 用途
host.docker.internal连接到MySQL主机(兼容OrbStack和Docker Desktop)
安全考虑
- 使用环境变量进行敏感信息管理
- SQL注入预防是实现者的责任
- 生产使用所需的适当网络配置
- 连接到主机服务时需要适当的防火墙设置