关于 Rowbit
Rowbit 是位于 AI Agent 与 MariaDB 或 MySQL 之间的开源 MCP 服务,可预览数据写入、按规则审批或拦截,并撤销单次更改。
主要功能
- 01精确预览行变更前后内容
- 02按规则审批或拦截写入
- 03撤销单次数据库更改
- 04按 Agent 限制表和列访问
- 05提供网页审核界面和审计日志
适用场景
- 01审核 Agent 提议的批量更新
- 02按规则放行安全的小型写入
- 03限制生产环境 Agent 的访问
- 04撤销有问题的数据更改
MCP 相关
Agent 通过 MCP 经由 Rowbit 读取数据并提出写入,而非直接连接数据库。Rowbit 向客户端提供受规则和审核流程约束的数据库操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/ermag/rowbit:0.2.2本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/ermag/rowbit:0.2.2stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Rowbit
为会向数据库写入数据的 AI Agent 提供安全保障。预览每次写入,审批有风险的操作,撤销任意单次更改。通过 MCP 支持 MariaDB 和 MySQL。
开始使用
curl -fsSL https://ermag.github.io/rowbit/install.sh | sh
rowbit setup
适用于 macOS 和 Linux(Windows 可通过 WSL 使用)。如果 ~/.local/bin 不在你的 PATH 中,安装程序会提示你改为运行 ~/.local/bin/rowbit setup。Setup 会查找数据库的 URL,检查 Rowbit 的权限并打印用于修复权限的 GRANT 语句,编写规则以拦截所有写入操作供审核,连接你选择的客户端,并打印审核页面的密码。请参阅快速入门。
没有可供试用的数据库?在 setup 提示时选择示例:它会通过 Docker 运行一个商店数据库,并在前面部署 Rowbit(参见导览)。然后向 Agent 提出请求:
待处理的订单卡住了。取消它们。
兼容 Claude Code、Cursor、VS Code、Claude Desktop、Codex、Gemini CLI、Windsurf 和任意 MCP 客户端。
| 数据库 | 状态 |
|---|---|
| MariaDB、MySQL | 已支持,也支持 TLS(每次更改都会针对 MariaDB 11.4 和 MySQL 8.4 进行测试) |
| PostgreSQL | 已列入计划,接下来支持 |
| MongoDB、Redis | 正在探索 |
功能介绍
你让编码 Agent 修复卡在待处理状态的订单,它便执行 UPDATE shop.orders SET status = 'cancelled' WHERE status = 'pending'。但这个操作也会匹配过去一小时内下的所有订单。Rowbit 会在操作影响任何数据行之前拦截它,向用户准确展示将要更改的 1,284 行,并等待审批。如果确实有不良更改通过了,你可以单独撤销这次更改,无需恢复备份。
状态: 处于早期阶段,且为开源项目;每次发布的内容请参阅更新日志。接下来要构建什么,取决于你在反馈讨论中告诉我们的内容。
工作原理
Rowbit 位于 Agent 与数据库之间。Agent 通过 MCP 与 Rowbit 通信,绝不会直接访问数据库:它们通过 Rowbit 读取并提出写入,无需数据库凭据。
- 精确预览。 Rowbit 会读取写入将要更改的行,并在私有临时副本上重放操作,因此你可以准确查看每行更改前后的内容,与表实际存储的内容完全一致。你的表只会被读取。
- 先定规则,再由人处理。 一个小型 YAML 文件允许安全写入通过,将有风险的写入暂存给人处理,并拒绝其余写入。只有人可以批准,批准后执行的内容与预览完全一致,否则什么也不执行。参见规则。
- 撤销单项更改。 Rowbit 会保留每次更改涉及的所有行,因此你可以撤销一项错误写入,同时保留其他所有内容。
- 作用域与影子模式。 对每个 Agent,指定它可以读取或写入哪些表,以及哪些列是它绝不能查看的;这些限制由数据库通过该 Agent 专属的用户账号强制执行。影子模式会显示规则会暂存哪些操作,让你在正式执行规则前先行查看。
- 在当前环境中审核。 二进制文件内置 Web UI,通过你的身份提供商登录,并支持 Slack 或 webhook 通知,以及基于哈希链的审计日志。参见一项更改的流转过程。
# rowbit.yml
version: 0
agents:
coding-agent:
default: hold
rules:
- name: small-order-fixes
when: { statement: update, table: shop.orders, columns: status, rows: { max: 20 } }
then: allow
- name: no-deletes
when: { statement: delete }
then: block
reason: Data fixes don't delete rows.
这里的 Agent 可以自行更改最多 20 个订单的 status。如果更新操作写入其他列或涉及更多行,则会暂存给人处理;删除操作会被拒绝。
如需了解完整架构,请参见 examples/rowbit.yml 和 rowbit.yml 规范。
连接你的 Agent
rowbit setup 会连接你选择的客户端。rowbit connect <client> 会再设置一个客户端,并为其配置专属令牌。参见连接你的 Agent。
Claude Code
rowbit connect claude-code
使用 claude mcp add 为当前目录添加 Rowbit(要在所有位置使用,请设置 --scope user)。添加用于指导 Agent 善用 Rowbit 的技能:
/plugin marketplace add Ermag/rowbit
/plugin install rowbit@rowbit
Cursor
rowbit connect cursor
将 Rowbit 添加到 ~/.cursor/mcp.json。重启 Cursor。
VS Code
rowbit connect vscode
或者,在运行 rowbit demo 或 rowbit serve 后,将其添加到 VS Code,并在 VS Code 提示时粘贴 rowbit connect vscode --print 输出的令牌。
Claude Desktop、Codex、Gemini CLI、Windsurf
rowbit connect claude-desktop # macOS; starts rowbit mcp itself
rowbit connect codex
rowbit connect gemini
rowbit connect windsurf
任何其他 MCP 客户端
rowbit connect --print
会输出地址(http://127.0.0.1:8080/mcp)和令牌;发送时将令牌作为 Authorization: Bearer <token>。
对于修改架构的编码 Agent,让它编写迁移文件,再经过代码审查和 CI,这是正确的做法,而 Rowbit 并不与之竞争:它会将每项架构变更交由人工处理,并将实际工作流留给你的迁移工具。但它不适合修复数据:
- 审查差异显示的是 SQL,而不是行。
UPDATE orders SET status = 'cancelled' WHERE status = 'pending'在审查时看起来没问题。但它运行时会影响哪些行,取决于当时的数据。Rowbit 会在做出决定时显示确切的行;如果这些行后来发生了变化,它就会拒绝执行。 - 一次性修复等不了拉取请求。 事故期间修复几行损坏的数据,需要在几分钟内得到解决方案,而没人会为每次修复都编写并审查一个迁移。
- 并非每次写入都需要人工处理。 规则允许小型且安全的写入直接通过,只拦截有风险的写入,避免审查者养成不加判断就批准的习惯。
- 每项变更都可以单独撤销。 数据迁移通常缺少下行迁移,或者会造成数据丢失。Rowbit 会保留每项变更所影响行的变更前快照。
众所周知,编码 Agent 清空生产数据库的事故,和其他因素一样,也是凭据管理问题:收回凭据,让 Agent 编写迁移即可。Rowbit 面向的是需要执行写入的 Agent。如果 Agent 总是重复执行同一操作,例如发放退款,就给它一个只执行该操作的工具,而不是让它使用 SQL。
须知
- 只有 Rowbit 持有数据库凭据。 如果 Agent 也有自己的连接字符串,它就能绕过 Rowbit 进行写入。只向 Agent 提供 Rowbit 的端点,不提供其他信息(通过 HTTP,并使用其自己的令牌),并让 Rowbit 使用自己的数据库用户。
- 没有
scopes的 Agent 会使用 Rowbit 的权限进行读写。 它的规则仍会决定每次写入是否执行,但没有任何机制阻止它读取 Rowbit 用户能够读取的所有内容。请为生产环境中的 Agent 配置 scopes。 - 撤销只会恢复行,不会让一切回到原样。 它会还原数据,但无法收回因此发送的邮件,也无法撤回因此支付的退款。
- 预览绝不会写入你的表。 它会在不加锁的情况下读取受影响的行,并在临时副本上重放写入;只有 Rowbit 的连接可以访问该副本。对于带有触发器或级联外键的表,系统会拒绝操作,因为预览中不会显示这些副作用,也无法撤销。Rowbit 的数据库用户无法完整检查的表也会被拒绝:它需要
TRIGGER和PROCESS权限。所需的精确授权请参阅数据库权限。 - 数据存储位置。 变更状态、预览内容(包括受影响行的变更前和变更后副本)以及审计日志,都存储在 Rowbit 旁边的本地 SQLite 文件中。请像保护数据库副本一样保护它(了解方法)。
- CLI 信任运行它的人。 任何能够读取
rowbit.db并持有数据库 URL 的人,都可以使用任意--as名称运行rowbit approve。请勿让 Agent 获得这两项信息,并以它们无法冒充的用户身份运行 Rowbit;另请参阅投入实际使用前。 - 失败时默认拒绝。 对于 Rowbit 无法评估的任何内容,它都会拒绝执行。请参阅变更生命周期和 SECURITY.md。
贡献
欢迎在 Discussions中分享想法和意见。代码贡献请参阅 CONTRIBUTING.md。提交需要 DCO 签署(git commit -s)。请按照 SECURITY.md 中的说明报告安全问题。
许可证
服务端采用 AGPL-3.0-only 许可证。rowbit.yml 策略架构(crates/rowbit-policy)和未来的客户端 SDK 采用 Apache-2.0 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
