← 返回信息流
MCP 插件LINUX DO · MCP·2026/3/17

universal-db-mcp更新:MCP数据库连接器支持动态自然语言查询

原标题:【开源自荐universal-db-mcp更新日志】MCP 数据库万能连接器:用自然语言查询和分析数据

速览

MCP数据库万能连接器universal-db-mcp发布2.14.0更新,主要解决MCP stdio模式下数据库连接参数必须写死的问题。新增connect_database、disconnect_database和get_connection_status三个tool,支持零配置启动,AI可在对话中动态连接、切换或断开数据库,无需手动修改配置文件。该更新向后兼容,用户可沿用原有配置方式。

AI 深度解读

背景

universal-db-mcp 是一个开源的 MCP(Model Context Protocol)数据库万能连接器,旨在让用户通过自然语言查询和分析数据。它支持多种运行模式(MCP stdio、HTTP REST API、HTTP SSE、HTTP Streamable),并适配 17 种数据库类型。项目持续迭代,本次更新日志包含两个版本:v2.14.0 和 v2.13.0,分别解决动态数据库连接切换和进程挂起问题。

核心内容

v2.14.0 — 新增 MCP stdio 模式动态数据库连接

问题背景
在 MCP stdio 模式下,数据库连接参数必须在 Claude Desktop 的 claude_desktop_config.json 中写死(如 --type mysql--host 等)。用户每次切换数据库需要手动修改配置文件并重启 MCP 服务,无法在对话中动态切换。而其他模式(HTTP REST、SSE、Streamable)已支持通过请求参数动态连接。

解决方案
修改了两个核心文件:src/mcp/mcp-server.tssrc/mcp/mcp-index.ts,新增三个 MCP Tool:

  • connect_database:动态连接任意数据库(支持全部 17 种类型),已有连接时自动断开旧连接。
  • disconnect_database:断开当前连接。
  • get_connection_status:查看当前连接状态(类型、地址、权限模式、缓存状态)。

关键设计:

  • 构造函数中的 config 参数改为可选(DbConfig | null),支持无连接参数启动。
  • start() 方法条件执行:有 adapter 则连接,无则进入无连接模式。
  • 连接管理 tool(connect/disconnect/status)不检查数据库连接状态,始终可用。
  • 数据操作 tool(如 execute_query)在未连接时返回引导信息:“请先使用 connect_database 工具连接数据库”。
  • connect_database 内部复用已有的 createAdapter() 工厂函数,自动支持所有适配器。

用户使用差异

  • 改动前:必须写死连接参数,切换数据库需改配置重启。
  • 改动后方式 A(零配置启动)args 中只填写 ["universal-db-mcp"],在对话中由 AI 自动调用 connect_database 等 tool 来连接或切换数据库。
  • 改动后方式 B(向后兼容):带默认连接参数启动时行为不变,仍可在对话中动态切换。

示例场景
用户直接说:“帮我连接 192.168.1.100 的 MySQL,用户名 root,密码 123456,数据库 order_db”。AI 自动调用 connect_database 完成连接。后续可随时切换数据库或查看状态。

v2.13.0 — 修复 stdio MCP server 在客户端关闭会话后进程挂起的问题

问题描述
universal-db-mcp 作为 stdio MCP server 被 Codex CLI 调用时,用户执行 /exit 后终端提示符不返回,进程挂起,需手动 Ctrl+C

原因分析

  • 未监听 process.stdinend/close 事件,客户端关闭 stdin 管道时服务端无感知。
  • stop() 方法缺少 this.server.close() 调用,transport 层资源(stdin/stdout 监听器)未被释放。
  • 关闭过程中没有超时保护,数据库断连或 server.close() 挂起时无法强制退出。
  • 没有重入保护,多个退出信号(如 stdin close + SIGINT)可能导致 stop() 被重复执行。

修改内容

  • src/mcp/mcp-server.ts:在 stop() 中增加 this.server.close() 调用。
  • src/mcp/mcp-index.ts:添加统一 graceful shutdown 逻辑 + stdin 监听,仅影响 stdio 模式。

修改后效果

  • Codex CLI /exit(stdin 关闭):触发 process.stdin 'end' 事件 → 调用 gracefulShutdown → 释放 transport、关闭数据库连接池 → 进程正常退出。
  • Ctrl+C(SIGINT)、SIGTERM:同样触发 graceful shutdown。
  • 数据库断连或 server.close() 挂起:5 秒超时保护强制退出。
  • 多信号并发:重入保护确保只执行一次 shutdown。

影响范围

  • stdio 模式直接修复。
  • SSE 和 Streamable HTTP 模式间接受益(cleanupSession() 调用 stop() 后现在会正确关闭 MCP Server)。
  • REST API 模式不受影响(有独立 shutdown 逻辑)。

关键要点

  • v2.14.0 核心:在 MCP stdio 模式下实现零配置启动,通过三个新增 tool 让 AI 在对话中动态连接、切换和查看数据库,无需手动修改配置文件。
  • 向后兼容:带默认连接参数启动的行为完全不变,用户可逐步迁移。
  • 改动最小化:仅修改两个文件,不涉及适配器层、HTTP 层或类型定义层;所有 17 种数据库适配器自动受益。
  • v2.13.0 核心:修复 stdio 模式下的进程挂起问题,通过完善 stop() 方法、添加 stdin 关闭监听、超时保护和重入保护解决。
  • 全模式兼容:修复同时提升了 SSE 和 Streamable HTTP 模式的资源清理完整性,REST API 不受影响。
  • Windows 友好:依赖 stdin 关闭检测父进程退出,而非 POSIX-only 的信号机制。
  • 超时兜底:5 秒超时保护防止 shutdown 过程本身挂起。

意义与影响

  • 用户体验提升:v2.14.0 让用户无需提前配置数据库连接,可直接用自然语言告知 AI 要连哪个数据库,并在对话中灵活切换,极大简化了多数据库环境下的操作流程。v2.13.0 解决了令人困扰的进程挂起问题,使 universal-db-mcp 在 Codex CLI 等工具中稳定运行。
  • 开发效率优化:两项更新都遵循“改动最小化”原则,新增功能不破坏现有架构,修复问题不影响已有功能,降低了维护成本。
  • 生态兼容性connect_database 自动继承所有已有适配器,后续新增数据库类型时无需额外适配。v2.13.0 的 graceful shutdown 逻辑适用于所有传输模式,为未来增加新传输层提供了可复用的基础。
  • 社区反馈驱动:两个更新均源自用户真实 issue(@user1477 报告进程挂起问题),体现了开源项目对社区需求的快速响应。
查看原文 →linux.do