实战 📋 6 个步骤 第 511 / 511 篇

用 DBX MCP Server 让编码智能体直查数据库:零配置接入与只读安全分级实操

官方 README 路线:DBX 桌面端配连接(密码进钥匙串)、.mcp.json 接入 Claude Code、8 个 dbx_ 工具清单、自然语言查库演练、默认只读 + ALLOW_WRITES/ALLOW_DANGEROUS_SQL 分级解锁、直接执行与桌面端桥接的支持边界。

2026.10.07· 8 分钟上手· 约 2606 字· 🗄️ DBX / 🔌 MCP Server

让编码智能体(Claude Code、Cursor 这类)帮忙查数据库,一直卡在两难里:把表结构贴给它、让它写 SQL 再人工复制执行,来回折腾;直接给它数据库连接串,又等于把凭据和写权限一起交出去。DBX 的 MCP Server(GitHub t8y2/dbx,MIT 协议)给了一条中间路线:在 DBX 桌面客户端里配一次连接,MCP Server 自动读取这些连接——密码走系统钥匙串——编码智能体通过 8 个标准 MCP 工具直接查库,而默认只读的 SQL 执行把「它会不会删库」的恐惧挡在门外。

本篇按官方仓库 README 走通六步:装 DBX 配连接、接入 Claude Code、认识工具集、真实查询演练、只读安全分级、最后说清支持边界与多客户端接入。读完你要能安全地把「查个数据」这件事交给智能体,而不是把生产库的钥匙递给它。

前置准备:DBX 桌面客户端已安装并配置了至少一条数据库连接;Node.js 18 或更新版本;一个支持 MCP 的编码智能体(Claude Code / Cursor / Windsurf / VS Code 均可)。

不同转载渠道对 DBX 的描述出入不小(工具数量、支持数据库的种类都有旧版口径在流传)。本篇以官方仓库 README 当前版本为准:8 个工具、直接执行支持 PostgreSQL / MySQL / SQLite 及 Doris、StarRocks、Redshift 等兼容库;其他数据库类型走 DBX 桌面端桥接。装之前扫一眼 README 的最新版,别按旧文抄配置。

Step 1:在 DBX 里配好连接:凭据只进钥匙串

1 在 DBX 里配好连接:凭据只进钥匙串

先在桌面端把地基打好——从 GitHub releases 下载对应平台的独立二进制,解压即用,然后添加一条连接:

# DBX 桌面端:新建连接
#   类型: PostgreSQL   主机: localhost   端口: 5432
#   填完点测试连接,能列出 schema 即成功

# MCP Server 从这个 SQLite 库读连接配置(自动,零配置):
#   macOS   : ~/Library/Application Support/com.dbx.app/dbx.db
#   Linux   : ~/.config/com.dbx.app/dbx.db
#   Windows : %APPDATA%\com.dbx.app\dbx.db

关键设计在这里:连接密码存进系统钥匙串,MCP Server 自动读取,整个过程中智能体看不到也拿不到凭据本体——它调用工具时只报「用哪条连接」,鉴权由 DBX 层完成。这就是「连接配置一次,智能体直接用」的实现基础。

给智能体用的时候,连接命名清晰一点(比如 analytics-readonly、local-dev),后面在对话里点名连接时不至于混淆。

Step 2:接入 Claude Code:一条 npx 命令的事

2 接入 Claude Code:一条 npx 命令的事

MCP Server 是个 npm 包,装法有两种,推荐 npx 直跑:

# 方式 A:npx 直接运行(推荐,免全局安装)
npx @dbx-app/mcp-server

# 方式 B:全局安装
npm install -g @dbx-app/mcp-server

# Claude Code:项目根目录 .mcp.json
{
  "mcpServers": {
    "dbx": {
      "command": "npx",
      "args": ["-y", "@dbx-app/mcp-server"]
    }
  }
}

配置写进 .mcp.json 后重启 Claude Code 会话,确认 MCP 工具列表里出现了 dbx_ 开头的八个工具,接入就完成了。Cursor、Windsurf、VS Code 的配置结构相同,都是往各自的 MCP 配置里加同一段 mcpServers。

npx 每次都可能重新解析版本,生产环境建议把版本号钉死(npx @dbx-app/mcp-server@具体版本号),避免某天自动升级带来行为变化;全局安装同理,升级前先看 release notes。

Step 3:认识八个工具:从连接到执行的完整面

3 认识八个工具:从连接到执行的完整面

八个工具覆盖了查库的全部动作,先过一遍清单:

dbx_list_connections    列出 DBX 里配置的全部连接
dbx_add_connection      新增连接
dbx_remove_connection   删除连接
dbx_list_tables         列出某连接下的表与视图
dbx_describe_table      看表的列定义
dbx_get_schema_context  拿适合 AI 写 SQL 的紧凑表结构上下文
dbx_execute_query       执行 SQL(最多返回 100 行)
dbx_open_table          在 DBX 桌面端打开表

其中 dbx_get_schema_context 值得单独点名:它把表结构压缩成适合大模型消费的紧凑上下文,比原始 DDL 省得多 token——让智能体写 SQL 之前先调它,准确率和成本都会更好看。dbx_execute_query 的 100 行返回上限是硬编码的防护,防止一次失控查询把上下文窗口冲爆。

把这张工具清单贴进你团队的开发文档:同事配好 MCP 后不需要读文档,直接告诉智能体「列出连接、看表结构、查数据」三步就上手了。

Step 4:查询演练:自然语言进,数据出

4 查询演练:自然语言进,数据出

接入完成后,在 Claude Code 里用人话指挥即可,典型的五连问:

# 在编码智能体里依次说:
"列出我的数据库连接"
"看看 local-pg 上有哪些表"
"描述一下 users 表的结构"
"查一下最近 7 天的订单数量"
"在 DBX 里打开 orders 表"

智能体的标准动作序列是:list_connections 确认有哪些库、get_schema_context 或 describe_table 搞清结构、然后写 SQL 调 execute_query。你只需要盯两件事——它生成的 SQL 是否合理、返回结果是否对得上预期。对关键数字,让它把 SQL 贴出来,你在 DBX 桌面端里跑一遍对照,形成核对习惯。

顺带交代一下 DBX 本体的底子,方便你判断它适不适合自己的工具链:20MB 量级的跨平台客户端,没有捆绑 Chromium,低配机器上启动比动辄几百 MB 的重型数据库 IDE 快得多;支持 PostgreSQL、MySQL、SQLite、MongoDB、Redis、DuckDB、ClickHouse 等常见类型,查询历史可搜索可回放,危险语句执行前有安全确认弹窗,CSV、Parquet 文件可以直接拖进去预览。MCP Server 是它的延伸而非全部——就算暂时不让智能体接库,把它当轻量客户端替换掉臃肿的旧工具也是合理选择,客户端与 MCP 两层的配置互不干扰。

养成「先 describe 后写 SQL」的提示习惯:明确要求智能体先看表结构再动手,能显著减少它凭空编列名的情况——虽然 describe 工具就是为这设计的,但明确指令永远更稳。

Step 5:只读安全分级:从默认拦截到逐级解锁

5 只读安全分级:从默认拦截到逐级解锁

这是本篇最重要的一节。dbx_execute_query 默认只读,写操作与危险语句被分层拦截:

# 默认:拦截一切写操作(INSERT / UPDATE / DELETE)
# 解锁写操作(仍拦截危险 DDL):
DBX_MCP_ALLOW_WRITES=1

# 再解锁危险语句(DROP / TRUNCATE / ALTER):
DBX_MCP_ALLOW_DANGEROUS_SQL=1

# UI 侧还有权限档位:Settings -> MCP
#   read-only / safe write / full access + 连接白名单

推荐的生产姿势:环境变量永远保持默认(只读),需要写操作的场景去 DBX 桌面端的 Settings 里按连接开档位——read-only 给日常查询,safe write 给数据订正,full access 只留给明确受控的运维连接,再配上连接白名单圈定智能体可触达的范围。层层加锁看着繁琐,但每一层都对应一类真实事故。

给智能体接的连接永远不要指向生产库的读写账号。就算默认只读挡住了写语句,SELECT 大表也可能拖垮生产库——正确的做法是建只读副本或数仓出口,把 analytics 类连接指向那里。环境变量解锁写权限这件事,只应该发生在本地开发库上。

Step 6:支持边界与多客户端接入

6 支持边界与多客户端接入

把能力的边界说清楚,避免配到一半发现路线不对:

# 直接执行(MCP Server 直连数据库):
#   PostgreSQL / MySQL / SQLite / Doris / StarRocks / Redshift
#
# 桥接执行(走 DBX 桌面端):
#   其他类型数据库的查询、表列表、字段读取
#   前提:DBX 桌面端正在运行;或配置 DBX_WEB_URL 用 Web 后端
#
# dbx_open_table:需要 DBX 桌面端运行中(本地 HTTP 通信)

也就是说 PostgreSQL 和 MySQL 用户体验最完整——装完 MCP 就能脱离 DBX 运行;用其他数据库(MongoDB、Redis、ClickHouse 等)的,MCP Server 会把请求转给运行中的 DBX 桌面端处理,桌面端关了查询就不通。dbx_open_table 的 UI 联动同理:它通过本地 HTTP 接口唤起 DBX 打开对应表,适合让智能体在查完数据后顺手把表丢到界面里给你人肉复核。

与教程 464 的 Text2SQL 安全闭环对照着用:464 讲的是自建通道时的安全设计(只读账号、LIMIT 封顶、审计),本篇是拿现成工具把这套原则直接落地——默认只读、行数上限、凭据不出钥匙串,思路一脉相承。

预期效果自查:Claude Code 的 MCP 工具列表里出现 8 个 dbx_ 工具;「列出我的数据库连接」能返回 DBX 里配置的连接;一次自然语言查询拿到正确数据且你能看到生成的 SQL;尝试让智能体执行 DELETE 被默认拦截。四条全过,说明接入、查询、安全三层都就位了。

常见问题 FAQ

智能体能看到我的数据库密码吗?看不到。密码存在系统钥匙串里,MCP Server 读取连接配置后代为鉴权,智能体的工具调用里只有「用哪条连接」的信息。这也是它比自己改 .env 塞连接串更安全的地方——凭据始终不进模型上下文。

不用 DBX 桌面端,只装 MCP Server 行不行?不行,前提条件就是 DBX 已安装且至少配了一条连接——连接配置的存放与鉴权都在 DBX 这一层。想要纯命令行方案的话,思路换成教程 464 的自建只读通道更合适。

查询结果最多 100 行,要看全量数据怎么办?这是有意的防护设计。需要全量数据时让智能体写聚合或分页查询(配合 LIMIT/OFFSET),或在 DBX 桌面端里直接导出 CSV/JSON——把大批量数据灌进模型上下文既贵又没必要,摘要加抽查才是智能体查库的正确姿势。

← 返回教程中心