使用说明
db_mcp_server
基于 Go 的 MySQL MCP Server。当前实现通过 streamable_http 暴露 /mcp 接口,并根据请求头里的 app 字段路由到不同的数据库连接。
当前实现
- 传输方式:
streamable_http - 默认监听地址:
:8080 - MCP 路径:
/mcp - 数据源:MySQL
- 工具数量:2 个
get_db_schemaexecute_sql
重要约束
- 服务启动时会读取固定文件
local_app.json - 数据库连接不是通过命令行参数动态传入,而是预先写在配置文件里
- 每个 MCP 请求都必须带上 HTTP Header
app: <name> app的值必须与配置文件db_config[].app完全一致execute_sql只允许执行SELECT语句
配置文件
项目内的 app.json 可以作为模板,实际启动时读取的是 local_app.json。
如果本地还没有这个文件,可以先复制一份:
cp app.json local_app.json
示例:
{
"server_name": "mysql-mcp-server",
"addr": ":8080",
"version": "1.0.0",
"db_config": [
{
"app": "playmate",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "your-password",
"database": "your-database",
"charset": "utf8mb4"
}
]
}
字段说明:
server_name:MCP Server 名称addr:HTTP 监听地址version:服务版本db_config:数据库连接列表db_config[].app:客户端请求头里的应用标识
启动
直接运行:
go run .
或先编译再启动:
go build -o ./bin/db_mcp_server .
./bin/db_mcp_server
启动后默认监听:
http://localhost:8080/mcp
MCP 请求要求
服务端在 app/service.go 中强制校验 app 请求头。
例如:
app: playmate
如果请求里没有这个头,服务会直接返回 400 Bad Request。如果 app 没有匹配到配置中的数据库,后续工具调用也无法正确执行。
可用工具
1. get_db_schema
用途:读取当前数据库的表和字段信息。
输入参数:无
返回结果:JSON 字符串,结构类似:
{
"users": [
{
"column": "id",
"type": "bigint"
},
{
"column": "name",
"type": "varchar(255)"
}
]
}
2. execute_sql
用途:执行查询 SQL。
输入参数:
{
"sql": "SELECT * FROM users LIMIT 10"
}
约束:
- 只允许
SELECT - 不允许
INSERT、UPDATE、DELETE、DROP等写操作 - 当前代码不会自动追加
LIMIT,查询范围需要客户端自己控制
返回结果:查询结果的 JSON 字符串;如果无结果,返回 查询结果为空
代码结构
- main.go:加载配置并启动 HTTP 服务
- app/service.go:创建 MCP Server,挂载
/mcp,校验app请求头 - db/db.go:注册工具并处理 SQL/schema 查询
- res/db.go:初始化 MySQL 连接池
注意事项
local_app.json是当前启动所依赖的本地配置文件app.json更适合作为模板,不建议把真实账号密码直接提交到仓库- 仓库里还有一些 Python 脚本,但当前 Go 服务入口仍然是
main.go