MCP 数据库连接器全家桶
10 个 MCP 服务器,给 AI agent 安全连上 Postgres / MySQL / MongoDB / Redis / SQLite —— 每一件都自带只读模式、schema 自省和审计日志,让 agent 不再瞎猜字段,也不会一条 SQL 干掉生产表。
这个 pack 装了什么
这是更广的那个数据库 MCP 包。Postgres for Agent 把单一引擎讲透;这个 pack 横切普通后端会用到的 5 种数据库 —— Postgres / MySQL / MongoDB / Redis / SQLite —— 外加两个通用路由器和一个不需要凭据的 DryRun,给真正怕事故的人。
| # | 服务器 | 引擎 | 安全姿势 |
|---|---|---|---|
| 1 | Postgres MCP Pro | Postgres | 索引建议 / EXPLAIN / 安全 SQL 闸 |
| 2 | pgEdge Postgres MCP | Postgres | 默认只读 + Web UI 审计 |
| 3 | DryRun 离线 Postgres MCP | Postgres(只读 schema) | 零凭据、零连接 —— 拿 schema 文件解析 SQL |
| 4 | mcp-server-mysql | MySQL | 只读模式,专为 Claude Code 调过 |
| 5 | MySQL MCP Server | MySQL | 能力作用域 + 查询白名单 |
| 6 | MongoDB MCP Server | MongoDB | --read-only 开关,npx 直装 |
| 7 | Redis MCP Server(官方) | Redis | 命令级 ACL,Redis Inc. 官方构建 |
| 8 | SQLite MCP | SQLite | 纯本地,按文件路径限范围 |
| 9 | Universal DB MCP | 17 种引擎 | 全部适配器默认只读 |
| 10 | GenAI Toolbox(Google) | Postgres / MySQL / Spanner / AlloyDB | OAuth + IAM 感知,生产级别 |
5 种引擎,3 档安全(只读 / 能力作用域 / 离线),一条命令装齐。
为什么要做多数据库 MCP
大部分团队不是单数据库。给用户面 Postgres 出功能的 agent,同样要读分析用 MySQL、会话用 Redis、目录用 MongoDB,还有开发本地的 SQLite。每个引擎各自接一份 ad-hoc MCP,最后就是 5 个服务器 / 3 种凭据格式 / 零统一审计的灾难现场。
这个 pack 挑的是「在所有引擎上把同一组事情做对」的连接器:
- 默认只读,全部带
--read-only或等价能力开关。要写就显式打开,没人替你默默放行 - schema 内省是一等工具,agent 调
list_tables/describe_table/list_indexes,不用猜 - 连接池内置,agent 一轮推理打 20 次查询不会重连风暴
- 审计日志默认开,agent 跑的每条查询都进结构化日志,事后能 grep
例外是 #3 DryRun —— 它根本不碰你的数据库。你扔给它 schema dump,它让 agent 起草 SQL、类型校验、解释执行计划,全程零凭据。适合 agent 在 junior 写迁移时陪练,没人需要碰生产。
安装流程 —— 选 DB / 开只读 / 自省 / 查询 / 审计
这五步节奏在 pack 里每个服务器都通用:
# 1. 选要让 agent 看见的 DB
tokrepo install pack/mcp-database-connectors
# 或者一个一个装:
tokrepo install postgres-mcp-pro
tokrepo install mongodb-mcp-server
# 2. 接进 host,只读 ON
# Claude Code 示例(~/.claude/mcp.json):
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@pgEdge/pg-mcp", "--read-only"],
"env": { "DATABASE_URL": "$READONLY_DSN" }
}
}
}
# 3. 永远先 introspect 再 query
# 提示词:「列出所有表,描述 orders 表,
# 然后写一条上周营收的查询」
# 4. 执行 —— agent 跑 SELECT,你读结果
# 5. 审计 —— grep 服务器日志
tail -f ~/.tokrepo/logs/postgres-mcp-pro.log
MySQL 换成 mcp-server-mysql,Mongo 换成 mongodb-mcp-server,Redis 换成官方 redis-mcp-server。这 5 步完全一样 —— 学一次就够了,这就是这个 pack 的价值。
只读模式:为什么每一个开关都要拨
默认放开写权限的 MCP 是把 LLM 幻觉变成生产事故最快的方式。经典翻车现场:agent 推理一条 UPDATE,WHERE 写漏了,半张表被刷掉。
这个 pack 里每个服务器都把默认值翻过来了:agent 必须显式申请写能力,host 配置必须显式批准。 两步显式 opt-in,恰好是任何能 DROP TABLE 的能力该有的姿势。
确实需要写的时候 —— 跑迁移、灌测试数据 —— 用一个专用角色(mcp_writer),只给特定 schema 的 grant,永远不要用超级用户。配合 Neon 分支、pgEdge 克隆或 Docker fixture,事故半径直接压缩到一个一次性数据库。
常见踩坑
- schema dump 烧 token。500 张表的生产 schema 跑
list_tables直接打爆 agent 上下文。按单 schema 过滤,或塞个白名单 - 通用 DB MCP 也躲不开方言差异。它能管 17 种数据库,但 JSON 列在 Postgres 和 MySQL 里语义不一样 —— agent 偶尔会把 Postgres 风格的 SQL 喂给 MySQL。system prompt 里加一句提示
- Redis ACL 是按命令级,不是按 key 级。官方服务器尊重 ACL,但
KEYS *仍然 O(N),要设--max-scan-keys,否则 agent 一把锁死事件循环 - Mongo
--read-only拦写但不拦eval。老的 Mongo MCP 还允许跑服务端 JS。坚持用本 pack 里 2026 年后的构建,已经把$where/$function剥掉 - DryRun 的 schema 要保持新。它设计上离线,永远看不到你昨天加的列。把 schema 导出做进 CI
跟其他 pack 的关系
只关心 Postgres 深度(Neon、Supabase、分支),看 Postgres for Agent。要更广的 MCP(浏览器、GitHub、文件系统),看 MCP Server Stack。生产配置通常是每个 pack 各取一件:本 pack 一个数据库连接器 + 通用 MCP 工具箱 + 向量 DB 做语义召回。
10 个资产打包就绪
常见问题
为什么不用一个通用 DB MCP,要十个干嘛?
通用 MCP(DBHub / GenAI Toolbox / Universal DB MCP)覆盖大多数场景很漂亮 —— 一个服务器,多个 DSN。但每个引擎都有通用层抹平不了的细节:Postgres 的 EXPLAIN ANALYZE、Mongo 的聚合管道、Redis 的 ACL 语义。Pack 里的引擎专用服务器把这些当一等工具暴露。需要广度用通用 MCP,需要深度用引擎专用的。
只读模式真的拦得住,还是 agent 一句话就能绕过?
协议层就拦死了。只读开了之后,MCP 服务器只注册 query / describe_table,根本不向 host 暴露 insert / update / delete。Agent 调不了不存在的工具。再保险一层:搭配数据库侧的只读角色(Postgres role)或 Redis ACL,从 DB 那头也撤掉写命令权限。
Claude Code / Cursor / Codex CLI 都能用吗?
三家都能用,加上 Cline / Roo Code / Windsurf / GitHub Copilot / Gemini CLI。MCP 是标准 —— TokRepo CLI 会根据你跑哪个 host 写对应的 config。同一个服务器二进制对所有 host 都生效。
跟 Postgres for Agent 那个 pack 区别在哪?
Postgres for Agent 是单引擎深耕 —— 5 个 Postgres 服务器,包含 Neon / Supabase,分支化任务流,RLS 踩坑。本 pack 是横切 —— Postgres / MySQL / Mongo / Redis / SQLite 每个一两件。技术栈多语言选这个,全 Postgres 选那个。
DryRun 看不到真实数据,能解决什么?
两件事。第一,让 junior + agent 安全写 SQL —— 截图里不会泄露凭据,也不会误手 DELETE。第二,可以放进 CI 当门禁:每个 PR 提议的 SQL 拿 DryRun 跑一遍生产 schema dump,引用了不存在的列就直接 fail。