mcpField
D
Database MCP

Database MCP

本地服务
github.com/cocaxcode数据库29 周前更新

关于 Database MCP

Database MCP 是面向开发者的本地数据库 MCP 服务,支持 PostgreSQL、MySQL 和 SQLite。它结合连接分组、模式资源、写入前快照与回滚,提供从查询到连接管理的工作台能力。

主要功能

  1. 01管理 PostgreSQL、MySQL 和 SQLite 连接
  2. 02按目录范围组织连接组
  3. 03发现表、列、外键和索引
  4. 04执行查询并查看 EXPLAIN
  5. 05写入前快照与反向 SQL 回滚
  6. 06转储、恢复和查询历史

适用场景

  1. 01用自然语言查询项目数据库
  2. 02按项目目录隔离开发与生产连接
  3. 03检查跨表结构并构建 JOIN 查询
  4. 04误操作后恢复变更前的数据

MCP 相关

该 MCP 服务通过工具支持连接管理、查询、变更、回滚及转储恢复,并通过 MCP Resources 发布数据库模式信息。凭据保存在本机;查询还支持行数限制和结果压缩选项。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"database-mcp-cocaxcode": {
"command": "npx",
"args": [
"-y",
"@cocaxcode/database-mcp"
]
}
}
}
启动命令npx -y @cocaxcode/database-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@cocaxcode/database-mcp0.1.14

工具

34

收录的工具列表 · 更新于 3 周前

参数类型必填说明
namestring是Nombre de la conexion (ej: local-pg, staging-mysql)
typeenum是Tipo de base de datospostgresql | mysql | sqlite
groupstring是Nombre del grupo al que pertenece. PREGUNTA AL USUARIO — si no existe se crea automaticamente
modeenum否Modo de acceso (default: read-only)read-only | read-write
dsnstring否Connection string completo (ej: postgresql://user:pass@host:5432/db)
hoststring否Host del servidor
portnumber否Puerto
databasestring否Nombre de la base de datos
userstring否Usuario
passwordstring否密码
filepathstring否Ruta al archivo SQLite (omitir para :memory:)

详细介绍

@cocaxcode/database-mcp

只需一段对话,即可访问你的数据库。
33 个工具 · PostgreSQL · MySQL · SQLite · 连接组 · 回滚 · 导出/恢复 · 自动发现架构

npm 版本 npm 下载量 许可证 Node 33 个工具

概览 · 直接对话 · 连接组 · 安装 · 功能 · 工具参考 · 存储 · 架构


快速概览

功能最全面的数据库 MCP 服务。提供 33 个工具,支持 3 种数据库引擎(PostgreSQL、MySQL、SQLite),并具备连接组、命名连接管理、自动回滚、导出/恢复、通过 MCP Resources 自动发现架构以及完整的查询历史记录——全部通过自然语言操作。

这不仅仅是一个查询运行器,更是一套完整的数据库工作台:将连接整理到与项目目录绑定的组中,设置可跨会话保留的默认值,以三种详细程度检查架构,为每次写入操作创建变更前快照,通过反向 SQL 撤销错误,导出和恢复整个数据库,并按项目和连接追踪你运行的每条查询。

每个连接都属于一个组。组具有作用范围(目录)、默认连接和活动连接。在作用范围内的目录中工作时,你只会看到该组的连接——不会杂乱,也不会混淆。

描述你的需求即可。AI 会读取你的架构、编写 SQL,并安全地执行——自动注入 LIMIT、创建变更前快照,并在执行破坏性操作前请求确认。无需云账户、ORM 或配置文件。凭据绝不会离开你的设备。一切都在本地运行。

适用于 Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Codex CLI、Gemini CLI 以及任何兼容 MCP 的客户端。


直接对话

你无需记住工具名称或 SQL 语法,只需说出你的需求。

> "Connect to my local PostgreSQL on port 5432, database myapp, user admin"

> "Create a group called backend and add this directory"

> "Connect to my PostgreSQL on localhost, put it in the backend group"

> "Set local-pg as the default connection"

> "Show me all tables"

> "What columns does the users table have?"

> "Show me the last 10 orders with the customer name"
  -> AI reads FKs from schema, builds the JOIN, applies LIMIT 10

> "Insert a test user called Alice"
  -> Snapshot captured for rollback

> "Oops, undo that"
  -> Rows restored via reverse SQL

> "Switch to the production database for this session"
  -> Instant context change, all queries now go to prod

> "Delete all inactive users"
  -> "This will affect N rows. Call again with confirm=true to proceed."

> "What did I run today?"
  -> Full query history with timestamps and execution times

> "Dump the database — structure and data"
  -> SQL file generated, ready for restore

AI 已经通过 MCP Resources 了解你的架构。它会读取 db://schema 来发现表,并读取 db://tables/{name}/schema 来获取列、外键和索引。当你要求查询多个表中的数据时,它会自动构建正确的 JOIN。


连接组

每个连接都属于一个组。组是组织数据库连接的单元,可让连接各自归属清晰、井然有序并自动管理。

一个组有三个关键概念:

  • 作用域:共享该组连接的目录。在作用域目录中工作时,你只能看到该组的连接,不会被全局内容干扰。
  • 默认连接:进入作用域目录时自动激活的连接。会在会话之间保留。
  • 当前连接:此刻正在使用的连接。仅对当前会话有效,重启后会重置为默认连接。

以下是一个实用工作流:

"Create a group called backend"
"Add this directory as scope"
"Create a PostgreSQL connection called local-dev in the backend group"   <- auto-default (first connection)
"Create another called production in backend"
"List connections"                                                       <- shows local-dev (active, default)
"Switch to production"                                                   <- session only
"Set production as default"                                              <- persists between sessions

添加到组中的第一个连接会自动成为默认连接。切换连接只会更改当前会话中正在使用的连接;重启后会恢复为默认连接。若要让更改持续生效,请明确设置新的默认连接。

这意味着,你可以放心地临时切换到生产环境执行快速查询,并且知道下次打开项目时,会回到开发数据库。


安装

Claude Code
claude mcp add --scope user database -- npx -y @cocaxcode/database-mcp@latest
Claude Desktop

将以下内容添加到配置文件(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json,Windows 上为 %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}
Cursor / Windsurf

在项目根目录的 .cursor/mcp.json 或 .windsurf/mcp.json 中添加:

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}
VS Code

添加到 .vscode/mcp.json:

{
  "servers": {
    "database": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}
Codex CLI (OpenAI)
codex mcp add database -- npx -y @cocaxcode/database-mcp@latest

或者添加到 ~/.codex/config.toml:

[mcp_servers.database]
command = "npx"
args = ["-y", "@cocaxcode/database-mcp@latest"]
Gemini CLI (Google)

添加到 ~/.gemini/settings.json:

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}
安装驱动程序

只安装所需的驱动程序;它们会在运行时动态加载:

npm install -g postgres       # PostgreSQL (postgres.js)
npm install -g mysql2         # MySQL
npm install -g sql.js         # SQLite (runs in-process, no native bindings)

注意: 使用 npx 时,驱动程序必须全局安装。如果将服务全局安装(npm install -g @cocaxcode/database-mcp),驱动程序可以本地或全局安装。


功能

一个界面,管理多个数据库

大多数数据库 MCP 服务都要求你在每个会话中重新配置凭据。本服务无需如此。命名连接会保存在组中;创建一次,即可永久使用。

命名连接的工作方式类似于 git 分支。 在组中创建一次 dev、staging、prod,它们就会一直存在。切换即时完成,只需一条命令,无需重新配置:

"Create a group called my-project and add this directory as scope"
"Create a connection called dev with host localhost, database myapp, user admin in my-project"
"Create a read-only connection called analytics pointing to ./data/metrics.db in my-project"
"Switch to dev"               -> queries go to PostgreSQL
"Switch to analytics"         -> queries go to SQLite
"Duplicate dev as dev-readonly with read-only mode"

按组作用域划分的连接意味着不同项目会自动使用不同的数据库。在项目 A 中工作?你会看到项目 A 的组及其连接。切换到项目 B 的目录后,就会自动使用项目 B 的组及其默认连接。无需手动切换,项目之间也不会相互干扰:

"Create a group called frontend with scope /home/user/frontend"
"Create a group called backend with scope /home/user/backend"

现在,每个目录都有一组独立的连接。

凭据 100% 保存在本地。 每个连接都以 JSON 文件的形式存储在 ~/.database-mcp/connections/ 中。密码不会离开你的机器。不会向云端发送任何内容,也不会提交到 git。凭据完全由你掌控。

实时管理。 可在对话过程中创建、复制、重命名、测试、导出和切换连接。无需重启,无需编辑配置文件,也不会丢失上下文。

内置安全保护
防护措施工作方式
只读模式在连接级别强制执行,阻止所有修改操作
需要确认破坏性操作需要明确设置 confirm: true
自动添加 LIMIT读取查询默认添加 LIMIT 100(已有 LIMIT 时会予以保留)
密码遮蔽conn_get 的输出中以 *** 显示凭据
修改前快照每次 INSERT/UPDATE/DELETE 都会捕获行状态,以便回滚
自动添加 gitignore首次写入时,将 .database-mcp/ 添加到 .gitignore
回滚快照

每次变更都会捕获变更前的状态快照。撤销任何操作。

"Show me available rollbacks"
"Rollback the last delete"
  -> "This will INSERT 47 rows back into orders. Confirm?"
  -> Rows restored via reverse SQL
原始操作回滚生成的操作
DELETE WHERE id = 5INSERT INTO ... VALUES (...)
UPDATE SET name = 'Bob'UPDATE SET name = 'Alice'(变更前的值)
INSERT INTO ...DELETE WHERE id = {new_id}
DDL(CREATE、ALTER、DROP)记录,但不可逆
架构内省

三个详细程度级别,并支持模式筛选:

"List all tables"                         -> names only (fast)
"Show me the users table with columns"    -> columns + types + nullable
"Full schema for orders including FKs"    -> columns + foreign keys + indexes
"Tables starting with user"              -> pattern: 'user%'

MCP 资源(db://schema 和 db://tables/{name}/schema)可让 AI Agent 自动访问你的架构,无需手动编写 SQL 即可执行多表查询。

使用 EXPLAIN 执行查询
"Show me all users"
  -> SELECT * FROM users LIMIT 100         <- auto LIMIT

"Show the execution plan for this query"
  -> EXPLAIN ANALYZE with dialect-specific syntax (PostgreSQL/MySQL/SQLite)
压缩模式(v0.3+)

SQL 结果通常包含 TEXT / JSON / HTML 列,每行可能达到数 KB。AI Agent 需要为进入上下文窗口的每个字节付费。execute_query、execute_mutation 和 explain_query 接受四个可选参数,在保持行和结构完整的同时,可减少 60-95% 的令牌消耗。

参数值作用
verbosity'minimal' / 'normal'(默认)/ 'full'控制详细程度
only_columns['id', 'title']仅返回这些列(客户端投影)
max_cell_bytes数字(默认 500)'normal' 模式下的单元格字节数上限
max_rows_in_response数字行数上限,优先于 SQL LIMIT

模式:

  • minimal — 仅返回 rowCount、executionTimeMs、affectedRows 以及首行预览。非常适合确认 INSERT/UPDATE/DELETE 操作、COUNT 查询和轮询。可节省约 90-95% 的令牌。
  • normal(默认)— 返回完整行,但每个单元格会截断至 max_cell_bytes,并附加 …(+NB) 标记。保留表格结构。对于宽行,可节省约 60-80% 的令牌。
  • full — 完整返回结果,不做任何处理。需要每个单元格的完整值时使用。

对 SELECT * FROM blog_posts LIMIT 100 的典型节省量:其中 content 每行约含 2KB HTML(总计约 200KB):

模式消耗的令牌节省量
full~50,0000%(基准)
normal(500B 单元格)~12,500~75%
only_columns: ['id','title','slug']~2,500~95%
minimal~300~99%

如需查看与原始 psql 的实测数据对比,请参阅下文的原生替代方案。

恢复完整结果: 每个压缩后的响应都包含一个 call_id。如需稍后获取完整单元格内容,请调用 inspect_last_query({ call_id }) — 无需重新执行 SQL,即可避免增加数据库负载并触发任何副作用。结果会保存在一个含 20 个槽位的环形缓冲区中,并持久化到 ~/.database-mcp/last-queries/,保留时间为 1 小时。

// Example: normal (default) response
{
  "call_id": "k3m9a2xp",
  "columns": ["id", "title", "content"],
  "rows": [
    { "id": 1, "title": "Hello", "content": "<h1>Long HTML…(+1847B)" }
  ],
  "rowCount": 1,
  "executionTimeMs": 12,
  "cells_truncated": 1,
  "hint": "1 cell(s) truncated to 500 bytes. Use inspect_last_query({ call_id: \"k3m9a2xp\" }) for full values.",
  "tokens_saved_estimate": 462
}
原生替代方案:实际令牌成本

当 database 不可用时,此 MCP 与 Claude Code 可用的原生选项(Bash + psql、sqlite3、mysql CLI 等)相比如何。

简而言之:与原始 psql 相比,execute_query 可节省 78% 到 96% 的上下文令牌,具体取决于模式,且不会丢失调试信息。测量方式:在 PostgreSQL 表上实际调用 SELECT * FROM blog_posts LIMIT 5,该表的 content 列每行包含约 1 KB 的 HTML:

Agent 的调用方式使用 MCP?消耗的令牌与 psql 相比
Bash + psql -c "..."(原始表格输出)❌ 原生~1,800基准
Bash + psql + 手动 awk/列筛选❌ 原生脆弱,由 Agent 组装难以衡量
execute_query verbosity=full✅ MCP~1,500−17%(格式开销更少)
execute_query verbosity=normal (默认,单元格上限为 500 B)✅ MCP~400−78%
execute_query verbosity=minimal✅ MCP~80−96%
execute_query 使用 only_columns: ["id","title","slug"]✅ MCP~130−93%

此表中的数字与上文“压缩模式”一节不同,原因是:这些数字来自一次包含 5 行的真实查询,而上表是根据包含 100 行、内容更大的结果推算得出。趋势和数量级相同。

注意:

  • 随着行数增加,原始 psql 输出会变得更糟——JSONB 和较长的 TEXT 列没有原生筛选功能。MCP 的单元格截断会保留结构(行数 + 列列表),同时用 …(+NB) 标记折叠较大的单元格。
  • inspect_last_query 无需重新运行 SQL,即可恢复完整结果。使用 psql 时必须重新执行查询,这会再次消耗数据库 CPU,并可能导致 RETURNING 子句的副作用再次触发。
  • MCP 还提供了没有直接原生替代方案的功能:限定于项目目录的连接组、修改操作的自动回滚快照、查询历史记录、通过 MCP 资源进行的架构内省,以及转储/还原。
  • 在相关情况下,响应末尾会附加架构上下文(normal/full 默认值为 true)。如果 Agent 已了解架构,可使用 include_schema_context: false 将其禁用。
  • 每个已注册的 MCP 每个会话都会增加固定开销,约为 300–600 个令牌(其指令块 + 工具名称)。典型的盈亏平衡点:每个会话执行 1 次实际查询。
转储和还原

以 SQL 格式完整备份数据库——仅包含结构,或同时包含结构和数据。

"Dump the database"
  -> Choose: structure only or full
  -> Choose: all tables or specific ones
  -> SQL file saved to .database-mcp/dumps/

"Restore from the last dump"
  -> Lists available dumps, asks for confirmation, executes

生成的 SQL 会处理 DROP TABLE IF EXISTS、禁用/启用 FK,以及适配方言的 DDL。

查询历史记录

每条查询都会按项目记录时间戳、连接、执行时间和结果类型。

"What queries did I run today?"
"Show me only mutations"
"History for the prod connection"
导出和导入连接
"Export all connections"                    -> JSON with masked passwords
"Export with secrets included"             -> JSON with real credentials
"Import these connections: { ... }"        -> creates missing connections

工具参考

33 个工具分为 8 类,另有 2 个 MCP 资源:

类别工具数量
连接conn_create conn_list conn_get conn_set conn_switch conn_rename conn_delete conn_duplicate conn_test conn_export conn_import11
组conn_group_create conn_group_list conn_group_delete conn_group_add_scope conn_group_remove_scope conn_set_default conn_set_group7
架构search_schema1
查询execute_query execute_mutation explain_query3
转储db_dump db_restore db_dump_list3
回滚rollback_list rollback_apply2
历史记录history_list history_clear2
配置config_get config_set2

资源: db://schema · db://tables/{tableName}/schema

提示: 你无需直接调用这些工具。只需描述你的需求,AI 就会选择合适的工具。


存储

存储按设计分为两个位置。这种分离是有意为之,旨在解决实际问题:凭据属于你,项目历史记录属于项目。

全局:~/.database-mcp/ — 群组、连接、凭据和设置。位于你的主目录中。从不存放在项目内,也从不提交到 git。除非你明确导出,否则绝不与任何人共享。

按项目:{project}/.database-mcp/ — 查询历史记录、回滚快照和数据库转储。位于项目目录内,并会在首次写入时自动添加到 .gitignore。

~/.database-mcp/                          # Global (configurable via DATABASE_MCP_DIR)
├── groups/                               # Connection groups with scopes and defaults
├── connections/                          # Connection configs (credentials, chmod 600)
├── project-conns.json                    # Session-only active connections (cleared on restart)
└── config.json                           # Server config (limits)

{your-project}/.database-mcp/            # Per-project (auto-gitignored)
├── history.json                          # Query history (max 5000)
├── rollbacks.json                        # Pre-mutation snapshots (max 1000)
└── dumps/
    └── {conn}-{timestamp}-{mode}.sql     # Database dumps

这样一来,你可以自由共享项目仓库——协作者可以获取历史记录和回滚结构,但不会获得任何凭据。他们可以在本地创建自己的连接和群组。

配置

可在对话中配置,也可通过环境变量配置:

变量描述默认值
DATABASE_MCP_DIR全局存储目录~/.database-mcp/
DATABASE_MCP_MAX_ROLLBACKS每个项目的最大回滚快照数1000
DATABASE_MCP_MAX_HISTORY每个项目的最大历史记录数5000
"Set max rollbacks to 2000"
"Set max history to 10000"

优先级:环境变量 > 已保存的配置 > 默认值。

警告: 如果将 DATABASE_MCP_DIR 覆盖为 git 仓库内的路径,请将 .database-mcp/ 添加到 .gitignore,以免推送凭据。


架构

src/
├── index.ts              # Entry point (StdioServerTransport)
├── server.ts             # createServer() factory
├── tools/                # 33 tool handlers (one file per category)
├── resources/            # MCP Resources (schema auto-discovery)
├── services/             # Business logic
│   ├── connection-manager    # Lazy connect, driver caching
│   ├── schema-introspector   # Multi-dialect introspection (3 detail levels)
│   ├── query-executor        # Read/mutation/explain with safety
│   ├── rollback-manager      # Snapshot capture + reverse SQL
│   ├── history-logger        # Per-project query log
│   └── dump-manager          # Dump/restore (SQL generation)
├── drivers/              # Database adapters (postgres, mysql, sqlite)
├── lib/                  # Types, storage, sanitization
└── utils/                # SQL classifier, parser, formatter
  • 除 @modelcontextprotocol/sdk 和 zod 外,零运行时依赖
  • 严格的 TypeScript — 不使用 any
  • 动态加载驱动程序 — 在运行时使用 import('postgres') / import('mysql2/promise') / import('sql.js')
  • 使用 tsup 打包后 小于 60KB
  • 工厂模式 — createServer(storageDir?, projectDir?),用于创建隔离的测试实例

MIT · 由 cocaxcode 构建

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。