/ 目录 / 演练场 / DBHub
● 官方 bytebase 🔑 需要你的密钥

DBHub

作者 bytebase · bytebase/dbhub

一个 MCP,多个数据库——Postgres、MySQL、SQL Server、SQLite、Oracle——默认以只读模式的查询界面。

Bytebase 的 DBHub 是一个零依赖的 MCP,通过单个 npx @bytebase/dbhub 二进制文件与多个关系数据库通信。传入你的数据库 DSN,获得 schema 浏览、表采样和 SQL 执行能力。默认以只读模式运行,使其对生产环境的探索性操作也很安全。

为什么要用

核心特性

实时演示

实际使用效果

dbhub.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "dbhub",
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "dbhub": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@bytebase/dbhub"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add dbhub -- npx -y @bytebase/dbhub

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: DBHub

在一个会话中查询 3 个不同的数据库

👤 使用多个关系数据库的工程师 ⏱ ~20 min intermediate

何时使用: 你的技术栈用 Postgres 管理主数据,MySQL 运行遗留服务,SQL Server 做报表副本——你想用一个 AI 助手跨越所有这些。

前置条件
  • 每个数据库的 DSN 和只读凭据 — postgres://、mysql://、sqlserver://、sqlite://、oracle:// 格式
步骤
  1. 配置多个 DSN
    告诉我我当前指向的是哪个数据库。如果需要,切换到 MySQL DSN。✓ 已复制
    → 清晰的活跃数据库指示
  2. 检查 schema
    列出当前数据库中的表和大约的行数。✓ 已复制
    → 表目录
  3. 跨数据库交叉引用
    从 Postgres 查询用户邮箱,再从 MySQL legacy_users 查询相同邮箱,告诉我谁在其中一个但不在另一个。✓ 已复制
    → 对账报告

结果: 跨异构数据库的单一工作流,无需维护多个 MCP 服务器。

注意事项
  • SQL 方言差异会困住 Claude(比如 LIMIT vs TOP) — 明确告诉 Claude 当前查询针对哪个数据库方言,或者分成针对具体数据库的回合
搭配使用: filesystem

分析别人发给你的 SQLite 文件

👤 拿到不透明 .db 文件的工程师或分析师 ⏱ ~10 min beginner

何时使用: 客户发来了一个 sqlite 备份,想要快速了解。

步骤
  1. 将 DBHub 指向该文件
    使用 DSN sqlite:///path/to/data.db。列出表和行数。✓ 已复制
    → 表清单
  2. 采样每个表
    对每个非平凡的表,显示 5 行样本数据并推断其用途。✓ 已复制
    → 按表的摘要
  3. 回答客户的问题
    客户问:<question>。写 SQL、运行、返回答案。✓ 已复制
    → 查询和结果

结果: 快速探索不熟悉的 sqlite 文件,无需将其导出到其他工具。

注意事项
  • 大型 SQLite 表没有索引——全表扫描可能锁定文件 — 以只读方式打开;避免在单个查询中对超过 100 万行进行聚合
搭配使用: filesystem

安全地针对只读副本运行报表查询

👤 BI / 分析 ⏱ ~15 min beginner

何时使用: 你有一个用于分析的副本,想要 AI 驱动的临时报表,不想暴露主库。

前置条件
  • 针对副本的只读 DSN — 仅副本凭据;statement_timeout 在 DSN 中强制执行
步骤
  1. 验证这是副本
    确认当前连接是只读的,并指向副本主机。✓ 已复制
    → 主机字符串 + 只读标志已验证
  2. 运行报表
    [粘贴业务问题]。翻译为 SQL、运行、返回结果。✓ 已复制
    → 结果集
  3. 保存供重复使用
    将此 SQL 保存到 /reports/<name>.sql,添加说明问题的注释。✓ 已复制
    → SQL 文件已保存

结果: 临时 BI,无需冒着风险接触生产主库。

注意事项
  • 重查询会拖慢副本并造成复制延迟 — 设置 statement_timeout 并在非高峰时段运行大查询
搭配使用: filesystem · antv-chart

为迁移审计 SQL Server 存储过程

👤 从 SQL Server 迁移出来的团队 ⏱ ~30 min advanced

何时使用: 你需要列出所有存储过程、它们的代码行数和最后修改日期。

步骤
  1. 列出存储过程
    查询 sys.procedures + sys.sql_modules 以列出所有存储过程的名称、schema、行数和最后修改日期。✓ 已复制
    → 存储过程清单
  2. 分类复杂度
    按行数将存储过程分类:平凡 (<50)、中等 (50-300)、复杂 (>300)。统计每个类别。✓ 已复制
    → 复杂度直方图
  3. 列出 MSSQL 特定的功能
    对于复杂存储过程,标记 MSSQL 特定构造的使用(CROSS APPLY、CTE 递归、TOP、GETDATE)——这些是迁移中困难的项目。✓ 已复制
    → 迁移风险列表

结果: 基于真实数据的存储过程迁移计划。

注意事项
  • 某些存储过程包含难以分类的动态 SQL — 标记任何使用 EXEC sp_executesql 的存储过程以供手动审查
搭配使用: filesystem

组合

与其他 MCP 搭配,撬动十倍杠杆

dbhub + antv-chart

运行 SQL 然后直接绘制结果

通过 DBHub 从 Postgres 副本查询周收入,然后渲染为 AntV 折线图。✓ 已复制
dbhub + filesystem

保存查询和结果以便复现

运行周度 KPI 查询,将 SQL 保存到 /sql/weekly.sql,将结果 CSV 保存到 /data/weekly-<date>.csv。✓ 已复制
dbhub + notion

将 SQL 支持的报表发布到 Notion

运行查询排名靠前的客户,创建一个 Notion 页面并将结果显示为表格。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_databases 首次探索步骤 free
list_tables database? 查询前编目 free
describe_table table, schema? 查询前检查 schema free
execute_sql sql, params? 执行 SQL 读或写操作(写入需要标志) depends on query
execute_read_sql sql, params? 显式只读执行 depends

成本与限制

运行它的成本

API 配额
受你的数据库连接限制约束
每次调用 Token 数
取决于结果大小;用 LIMIT 进行限制
费用
免费——成本仅是你的数据库托管
提示
在 DSN 中设置 statement_timeout;AI 编写的查询可能对全表扫描过于热情。

安全

权限、密钥、影响范围

最小权限: 目标表的 SELECT
凭据存储: DSN 在环境变量中(DSN 或按数据库类型的环境变量)
数据出站: 直接到你的数据库;无第三方代理
切勿授予: 连接角色中的 CREATE/DROP/ALTER,除非会话需要

故障排查

常见错误与修复

身份验证失败 / 访问被拒绝

DSN 凭据错误或缺少 SELECT 权限。重新检查每种数据库的 DSN 格式。

验证: Connect with the DB's native client using the same DSN
不支持的 SQL 功能 / 语法错误

数据库方言不匹配——告诉 Claude 哪个数据库方言是活跃的,或重新检查 DSN 前缀。

连接池耗尽

降低并发或增加池大小;长时间运行的查询通常是真正的原因。

写入被拒绝(只读)

DBHub 处于默认只读模式。为此会话使用 --readonly=false 重新启动。

替代方案

DBHub 对比其他方案

替代方案何时用它替代权衡
Postgres MCP你只使用 Postgres;更深层的 Postgres 特定功能单一数据库方言
MongoDB MCP你需要 Mongo 和关系数据库一起使用不同的数据模型
Supabase MCP你在 Supabase 上,想要项目和数据库管理与 Supabase 绑定

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills