mcpField
V
Veto — SQL Safety & Cost Oracle

Veto — SQL Safety & Cost Oracle

远程服务
vetosql.com数据库019 周前更新

关于 Veto — SQL Safety & Cost Oracle

Veto 是远程 MCP 服务,可在 AI 编码 Agent 执行 PostgreSQL 语句前,以确定性方式检查安全性、正确性和估算成本。它返回可审计的 ok、warn 或 block 结果,不连接生产数据库,也不使用 LLM 生成判定。

主要功能

  1. 01确定性 SQL 安全判定
  2. 02破坏性操作与正确性规则检查
  3. 03通过 EXPLAIN 分析临时 Postgres 成本
  4. 04用于审计和 CI 的稳定发现 ID
  5. 05可选的声明式组织策略

适用场景

  1. 01执行前拦截 Agent 编写的 SQL
  2. 02检查迁移中的破坏性变更
  3. 03依据判定结果分支运行 CI 检查

MCP 相关

通过远程 Streamable HTTP MCP 端点提供 analyze_sql,以及 Pro 版的自定义策略设置和读取工具。分析 SQL 时不会连接调用方的生产数据库。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://vetosql.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

3
参数类型必填说明
sqlstring是要分析的 SQL(一个或多个语句)。
schemastring否可选的 CREATE TABLE/INDEX DDL。提供后会在临时 Postgres 上启用基于 EXPLAIN 的成本分析(例如大型表上的顺序扫描);省略则仅进行静态安全分析。
dialectstring否
rowCountHintsobject否可选的表名到预估行数的映射,用于得出更贴近实际的成本估算。

详细介绍

Veto — SQL 安全与成本预检器(MCP)

Veto 是一个确定性的 MCP 服务,可在 AI 编码 Agent 执行 Postgres SQL 之前,对其安全性、正确性和成本进行审查。 它会为每条语句返回 ok / warn / block 判定——核心逻辑不使用大模型,也绝不会连接到你的数据库。

网站: https://vetosql.com · MCP 端点: https://vetosql.com/mcp(远程,streamable-http)

AI 编码 Agent(Claude Code、Cursor 等)会编写并执行 SQL。有时它们会写出没有 WHERE 的 DELETE FROM payments,或在迁移期间执行 DROP TABLE。增加提示词并不能修复概率性系统的问题——确定性关卡可以。Veto 就是这样的关卡:给定同一条语句,它每次都会返回相同判定,并提供稳定的发现项 ID,便于你审计并在 CI 中设置关卡。


它能检测什么

判定含义包含的情况
block破坏性操作/数据丢失未限定范围的 DELETE/UPDATE、TRUNCATE、删除含数据的对象——包括隐藏在 CTE 中的破坏性语句
warn有风险但可恢复锁开销大的架构变更、开销高的扫描、会悄无声息地返回错误行的正确性陷阱(= NULL、NOT IN (subquery)、被筛选成内连接的 LEFT JOIN),以及 SELECT * 等常见反模式
ok可以安全执行常规、可逆的迁移

每条发现项都带有稳定的点分隔 ID(例如 destructive.delete_without_where),方便你的流水线据此分支处理。确切的规则集由服务端管理,并会随时间演进。

为什么采用确定性设计

  • 可复现 — 相同输入,相同判定。可测试,因此值得信赖。
  • 可审计 — 触发的是命名规则,而不是“模型觉得它有风险”。
  • 不会漂移 — 再巧妙的提示词也无法让它撤销 block 判定;状态不佳时也不会表现变差。
  • 绝不接触你的数据库 — 成本通过真实的 EXPLAIN 测量,在一次性临时 Postgres 中执行,并且始终在事务中回滚。它绝不会连接到你的生产数据库。

工具

analyze_sql

为 Postgres SQL/迁移返回确定性的安全性与成本判定。

输入类型说明
sqlstring要分析的 SQL/迁移——一条或多条语句(必填)
schemastring?可选的 CREATE TABLE/INDEX DDL——启用基于临时 Postgres 上 EXPLAIN 的成本分析
rowCountHintsobject?可选的映射:表名 → 估算行数,用于获得更贴近实际的成本估算

返回 { verdict, findings[], plan?, meta },其中 verdict ∈ ok | warn | block。

set_policies (Pro)

将自定义组织策略存储到与你的 Pro 密钥关联的位置;随后 analyze_sql 会在内置规则之上执行这些策略。策略是声明式数据——经过验证,绝不会执行(最多 50 条,并会替换先前存储的策略集)。

每条策略包括:table(精确名称或 glob,例如 payments、audit_*、*)、operations(select/insert/update/delete/truncate/drop/alter 中任意项)、action(block/warn),以及可选的 message。

{
  "policies": [
    { "table": "payments", "operations": ["delete", "truncate"], "action": "block",
      "message": "Never delete from payments — use the refund flow." }
  ]
}

发送完整策略集会对其进行更新;发送空数组会将其清除。

get_policies (Pro)

返回当前为你的密钥存储的自定义组织策略集——也就是 analyze_sql 在内置规则之上执行的同一组规则。此操作为只读;如果未设置任何策略,则返回空列表。


设置

Veto 是一个远程 MCP 服务——无需安装,也无需源代码。将客户端指向该端点即可。

Claude Code — .mcp.json
{
  "mcpServers": {
    "veto": {
      "type": "http",
      "url": "https://vetosql.com/mcp"
    }
  }
}
Cursor — ~/.cursor/mcp.json
{
  "mcpServers": {
    "veto": {
      "url": "https://vetosql.com/mcp"
    }
  }
}

免费层无需密钥(60 req/min)。**Pro:**将你的 VETO-… 密钥添加为 bearer token(保留单词 Bearer 和其后的空格):

"headers": { "Authorization": "Bearer VETO-…" }

定价

套餐价格限制额外权益
Free€060 req/min完整的确定性判定——涵盖所有破坏性操作、锁、正确性与成本规则
Pro€9.90 / mo1200 req/min自定义组织策略(set_policies)、维护者支持

在 vetosql.com 订阅。


常见问题

Veto 支持哪些数据库? PostgreSQL。可与任何 Postgres 托管服务(Supabase、Neon、RDS、可自托管)和任何迁移工具配合使用,因为 Veto 分析的是 SQL 文本,不会连接到你的数据库。

安全吗?它能查看或修改我的数据吗? 不能。Veto 从不连接到你的生产数据库。成本分析会在单独的临时 Postgres 中通过一个始终回滚的事务运行,不会读取或写入任何数据。

Veto 与 Squawk 或 sqlfluff 这类代码检查工具有何不同? 它们是 CI/风格工具。Veto 是 AI Agent 通过 MCP 调用的实时运行时关卡,会针对即将执行的确切语句返回 ok/warn/block 判定,还会提供成本估算和自定义组织策略。

为什么不直接给 Agent 一个只读或受限的数据库角色? 角色的粒度较粗,也容易配置错误,而且无法发现代价高昂的顺序扫描,或在允许写入的角色下执行的全表 UPDATE。无论你使用什么角色,Veto 都会额外提供语句级判定。

它会使用大模型吗? 不会。核心是确定性静态分析和 EXPLAIN。调用它的 Agent 会解读结构化判定;判定本身绝不会由模型生成。


链接


由 Metawear 构建。托管服务运行于 vetosql.com;此仓库是 Veto 服务的公开文档和 MCP 注册表清单。

评论

支持 Markdown

第一次接触 MCP?

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

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