关于 Drizzle MCP
Drizzle MCP 是面向编码 Agent 的数据库浏览 MCP 服务,依据项目使用的 Drizzle schema 展示数据库结构与数据。它默认只读,并将 TypeScript 属性、SQL 名称、关系及迁移状态纳入上下文。
主要功能
- 01读取表、列、键、索引与关系
- 02按条件浏览和统计数据
- 03执行受限的只读 SQL 查询
- 04查看查询计划与 schema 漂移
- 05检查迁移状态并标记已修改迁移
- 06写入操作需显式启用
适用场景
- 01让 Agent 按项目 schema 编写 Drizzle 查询
- 02检查数据库中的实际数据分布
- 03定位 schema 与线上数据库的差异
- 04确认查询计划是否使用索引
MCP 相关
作为 MCP 服务向编码客户端提供 schema、数据浏览、统计、查询、计划分析和漂移检查工具。默认只读;以 `--allow-writes` 启动后才提供写入工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
drizzle-mcp
面向 Agent 的 Drizzle Studio。一个 MCP 服务,让 Claude Code、Cursor 和其他编码 Agent 通过 Drizzle schema 查看你的数据库。
通用数据库 MCP 只能看到表和列。这个 MCP 服务会读取代码实际使用的 schema:TypeScript 名称与 SQL 名称、关系、枚举和默认值。这样,Agent 就能回答“数据库里实际有什么?”,并编写与之匹配的 Drizzle 代码。
下面是 Agent 查询 posts 表时获得的结果:
## posts
SQL table `posts`, exported as `posts` from `src/db/schema.ts`.
| column (TS key, SQL name) | type | nullable | default | notes |
| ------------------------- | ------------------------ | -------- | ------- | ------------------------------ |
| id | serial | no | | primary key |
| authorId (author_id) | integer | no | | → users.id, on delete cascade |
| published | boolean | no | false | |
| createdAt (created_at) | timestamp with time zone | no | now() | |
Relations (for `browse` with `with`, or `db.query` in code):
- author: one users on posts.authorId = users.id
- comments: many comments on posts.id = comments.postId
设置
在包含 drizzle.config.ts 的文件夹中运行。
Claude Code
claude mcp add drizzle -- npx -y drizzle-mcp
Cursor(.cursor/mcp.json)和 VS Code(.vscode/mcp.json,使用 "servers" 而不是 "mcpServers"):
{
"mcpServers": {
"drizzle": { "command": "npx", "args": ["-y", "drizzle-mcp"] }
}
}
对于 Claude Desktop 等不会在项目文件夹中启动服务的客户端,请在 args 中添加 "--config", "/path/to/drizzle.config.ts"。
drizzle-mcp 会像 drizzle-kit 一样加载配置,包括 .env。它使用项目已安装的数据库驱动和 drizzle-orm 版本连接数据库。
工具
| 工具 | 功能 |
|---|---|
schema | 列出表。指定表名后,会描述列(TypeScript 键和 SQL 名称、类型、是否可为空、默认值)、键、索引、检查约束和关系。 |
browse | 按 Drizzle Studio 的方式读取行:选择列、筛选、排序和分页,并通过 relations() 包含相关行。行使用 TypeScript 属性作为键,与 db.query 的返回结果一致。 |
count | 统计行数,支持统计总数或使用 groupBy 按值分组,以查看数据分布。 |
query | 以只读方式运行一条 SQL 语句,并最多返回 100 行。 |
explain | 显示查询计划,以检查是否使用了索引。在 Postgres 上,analyze 会实际运行查询并计时。 |
drift | 将 schema 与实时数据库进行比较:检查缺失或多余的表和列,以及类型或是否可为空属性的变更。 |
migrations | 列出 drizzle-kit 的迁移,并标记已应用或待处理状态。它还会标记任何在应用后被编辑的迁移。 |
execute | 更改数据。仅在使用 --allow-writes 启动服务时可用。 |
筛选条件使用 JSON,因此值始终作为参数绑定,不会直接拼接到 SQL 中:
{ "published": true, "createdAt": { "gte": "2026-01-01" }, "or": [{ "title": { "ilike": "%drizzle%" } }, { "rating": { "gte": 4.5 } }] }
编辑 schema 后,服务会在下次调用时加载变更;无需重启。
默认安全
Agent 不应该因为意外,或因为读取到的内容而破坏数据库。
- 只读。 每条语句都在只读事务中运行。SQLite 读取使用只读连接。
- 每次只运行一条语句。
select 1; commit; drop table users会在到达数据库前被拒绝。Postgres 驱动和better-sqlite3本身也会拒绝这样的语句;而 libsql 会静默丢弃第一条语句之后的所有内容。 - 限制范围。 语句会在 15 秒后超时。结果最多为 100 行,并通过游标获取,因此不会将大型表全部载入内存。过长的值会被截断。
- 隐藏机密。 名称类似
password、token、secret或apiKey的列,其值会显示为[redacted]。 - 写入需显式启用。
--allow-writes会添加execute工具。无论是否启用,query始终为只读。
要求
| 数据库 | 驱动 |
|---|---|
| PostgreSQL | pg、postgres(postgres.js)、PGlite |
| SQLite | better-sqlite3、@libsql/client(包括 Turso) |
目前尚不支持 MySQL。
drizzle-mcp 需要 Node.js 22 或更高版本。它已针对 drizzle-orm 0.45(当前稳定版本)进行测试。仍处于 beta 阶段的 Drizzle 1.0 定义了不同的关系,因此暂不支持。
选项
--config <path> The Drizzle config (default: drizzle.config.ts in the current folder)
--url <url> Connect here instead of the config's dbCredentials
--driver <name> pg, postgres, pglite, better-sqlite3 or libsql (default: the one installed)
--allow-writes Add the execute tool
--max-rows <n> The most rows a tool returns (default: 100)
--timeout <ms> Statement time limit (default: 15000)
--max-text <n> Cut strings longer than this (default: 500)
--redact <regex> Hide columns whose names match (default: password, secret, token…)
--show-secrets Don't hide any columns
工作原理
- 它会加载
drizzle.config.ts和你的.env,然后导入配置指向的架构文件(单个文件、文件夹或 glob)。导入通过 jiti 完成,因此无需构建步骤即可使用 TypeScript。 - 它会从 drizzle-orm 自身的元数据中读取表、列和关系。这些信息与
drizzle-kit和关系查询使用的信息相同。TypeScript 名称和关系均来自这里。 - 它会使用项目的驱动程序进行连接。
browse和count会用你的架构对象构建关系查询。query会通过上述安全措施运行普通 SQL。
开发
pnpm install
pnpm check # types, lint and 145 tests
测试会针对每个驱动程序运行每个工具。Postgres 以 PGlite 的形式运行,它是编译为 WebAssembly 的真正 Postgres。pg 和 postgres.js 通过 Postgres 线协议连接到它,因此无需 Docker。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。