多源数据库查询服务器

一个无状态的查询优先服务器,支持连接多个MySQL和ClickHouse数据源,提供只读查询和安全控制功能。

  • by dongrv
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 dongrv/mcp-server-for-mysql

使用说明

安全数据库MCP服务器

此查询优先、无状态的MCP服务器连接到多个配置的MySQL和ClickHouse源。它专为团队检查已知表和运行有界只读查询而设计,对数据和模式更改具有方言感知安全控制。

对本地MCP客户来说是新手吗?按照中文初学者指南,使用本地二进制文件或Docker完成Claude Desktop和Codex的设置: Claude Desktop 与 Codex 本地接入指南.

配置

复制 config.example.yaml 到当地 config.yaml,然后通过环境提供每个DSN:

mode: quick
sources:
  - name: orders
    display_name: 订单库
    description: 用户充值订单、支付状态与退款记录
    aliases: [充值库, 支付订单]
    keywords: [充值, 支付, 退款]
    type: mysql
    dsn: ${ORDERS_DSN}
  - name: logs
    display_name: 日志库
    description: 服务运行日志、错误事件与审计记录
    aliases: [服务日志, 错误日志]
    keywords: [报错, 审计, 故障排查]
    type: mysql
    dsn: ${LOGS_DSN}
  - name: analytics
    display_name: 分析库
    description: 聚合指标、用户行为与经营分析数据
    aliases: [数仓, 经营分析]
    keywords: [指标, 趋势, 用户行为]
    type: clickhouse
    dsn: ${ANALYTICS_DSN}

每个名字都是独一无二的 source_id 用于MCP呼叫。所需 display_name 和 description,加上可选的别名和关键字,帮助AI客户端解释源选择,但永远不要替换确切的ID。每个DSN都必须是一个精确的环境引用。未知的YAML字段、重复的名称、无效的源配置文件、不支持的源类型以及缺少或为空的DSN值无法启动,而不会显示解析的DSN。

建立 go build -o build/mcp-database ./cmd,然后运行 ./build/mcp-database -config config.yaml.在Windows上使用 start.bat run path\\to\\config.yaml;在类Unix系统上使用 CONFIG_PATH=path/to/config.yaml ./start.sh run.

安全模型

quick 模式直接执行只读请求和低风险的单语句写入。它预览了高影响力的工作:DDL、迁移、, DELETE 或 UPDATE 没有 WHERE,以及所有多语句突变。 strict 模式预览每个非空的SQL意图,包括读取。

预览包含规范SQL、风险、原子性和 preview_hash。在人类查看完完整的预览后,重复相同的调用 confirm: true 还有那个哈希。更改后的请求返回 preview_mismatch 并且不执行。哈希绑定源、工具、规范化SQL顺序、参数、风险和原子性。

此过程有意不存储用户、权限、确认或审计记录。它不能证明人为确认或阻止直接呼叫者的重播。经过身份验证的网关必须拥有身份、源授权、确认显示、一次性授权、防重放和持久审计。看 docs/prd/2026-07-14-wecom-database-gateway-prd.md.

query 只允许一条只读语句。它使用30秒的截止日期,最多返回100行,将其他行标记为 truncatedSQL保护程序因不支持的语法、事务/会话控制、不安全的表函数以及有状态或锁定的MySQL表达式而失败关闭。仅接受单个语句的参数。

为每个源使用单独的最低权限数据库帐户。仅查询帐户应仅包含元数据和 SELECT 权限。不要将此stdio MCP进程直接暴露给不受信任的用户或自主代理。

客户端、Docker和验证

主要本地客户端演练是 Claude Desktop 与 Codex 本地接入指南它涵盖了二进制构建、stdio客户端配置、Docker、源代码选择、确认和故障排除。通用工具表面和确认协议记录在 TOOLS_SCHEMA.md.

Zed不是主要演练的一部分。 zed-config-example.json 是一个单独的、无凭据的可选示例,使用Zed的当前 context_servers 设置;将DSN保留在Zed进程环境中。

Docker镜像仅包含二进制和无凭据配置示例。装载一个真实的配置文件,并在运行时传递DSN环境变量。服务器仅支持stdio,没有HTTP运行状况终结点。

跑 go test ./... -count=1, go vet ./...,以及 go build ./cmd 用于静态验证。对于实时设备:运行 docker compose -f docker-compose.integration.yml up -d --wait;set RUN_DATABASE_INTEGRATION=1;奔跑 go test -tags=integration ./internal/integration -count=1;终于跑了 docker compose -f docker-compose.integration.yml down -v.

看 docs/security-audit.md 调查结果、验证证据和剩余风险。