Veto — SQL Safety & Cost Oracle について
Vetoは、AIコーディングエージェントがPostgreSQL文を実行する前に、安全性、正確性、推定コストを決定論的に検査するリモートMCPサーバーです。監査可能なok、warn、blockの判定を返し、本番データベースへの接続や判定へのLLM利用はありません。
主な機能
- 01決定論的なSQL安全判定
- 02破壊的操作と正確性ルールの検査
- 03一時PostgresとEXPLAINによるコスト分析
- 04監査・CI向けの安定した検出ID
- 05任意の宣言型組織ポリシー
活用シーン
- 01実行前にエージェント作成SQLをゲート
- 02マイグレーションの破壊的変更を確認
- 03判定結果に応じてCIチェックを分岐
MCP 対応
リモートのStreamable HTTP MCPエンドポイントを通じてanalyze_sqlと、Pro向けのカスタムポリシー設定・取得ツールを提供します。呼び出し元の本番データベースには接続せずにSQLを分析します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://vetosql.com/mcpclaude mcp add --transport http com-vetosql-veto https://vetosql.com/mcp{"mcpServers":{"com-vetosql-veto":{"type":"http","url":"https://vetosql.com/mcp"}}}Cursor で開く{"servers":{"com-vetosql-veto":{"type":"http","url":"https://vetosql.com/mcp"}}}VS Code で開く{"mcpServers":{"com-vetosql-veto":{"type":"http","url":"https://vetosql.com/mcp"}}}{"mcpServers":{"com-vetosql-veto":{"serverUrl":"https://vetosql.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
3| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| sql | string | はい | 分析するSQL(1つ以上のステートメント)。 |
| schema | string | いいえ | 任意のCREATE TABLE/INDEX DDL。指定すると、使い捨てのPostgres上でEXPLAINベースのコスト分析(大規模テーブルでのシーケンシャルスキャンなど)が有効になります。省略すると、静的な安全性分析のみを行います。 |
| dialect | string | いいえ | |
| rowCountHints | object | いいえ | より現実的なコスト見積もりに使用する、テーブル名から推定行数への任意のマップ。 |
詳細
Veto — SQL 安全性・コスト判定サービス(MCP)
Veto は、AI コーディングエージェントが SQL を実行する前に、Postgres SQL の安全性、正確性、コストを審査する、決定論的な MCP サーバーです。 各ステートメントに対して
ok/warn/blockの判定を返します。コアに LLM は使用せず、データベースに接続することもありません。
ウェブサイト: https://vetosql.com · MCP エンドポイント: https://vetosql.com/mcp(リモート、streamable-http)
AI コーディングエージェント(Claude Code、Cursor、…)は SQL を作成して実行します。ときには WHERE のない DELETE FROM payments や、マイグレーション中の DROP TABLE を書くことがあります。プロンプトを増やしても、確率的なシステムの問題は解決しません。必要なのは決定論的なゲートです。Veto はそのゲートです。同じステートメントを渡せば、毎回同じ判定を返し、監査や CI のゲートに利用できる安定した検出項目 ID を付与します。
検出できる内容
| 判定 | 意味 | 該当する内容 |
|---|---|---|
block | 破壊的/データ損失 | スコープ指定のない DELETE/UPDATE、TRUNCATE、データを含むオブジェクトの削除。CTE 内に隠れた破壊的なステートメントも含みます |
warn | リスクはあるが復旧可能 | ロック負荷の高いスキーマ変更、高コストのスキャン、誤った行を気づかれずに返す正確性の落とし穴(= NULL、NOT IN (subquery)、内部結合のように絞り込まれた LEFT JOIN)、SELECT * などのよくあるアンチパターン |
ok | 安全に実行可能 | 通常の、元に戻せるマイグレーション |
各検出項目には、安定したドット区切りの ID(例:destructive.delete_without_where)が付与されるため、パイプラインで条件分岐できます。正確なルールセットはサーバー側にあり、時間とともに更新されます。
決定論的である理由
- 再現可能 — 同じ入力には同じ判定が返ります。テスト可能で、信頼できます。
- 監査可能 — 「モデルがリスクを感じた」ではなく、名前の付いたルールが発動します。
- 判定が揺らがない — 巧妙なプロンプトで
blockを覆すことはできず、調子の悪い日に性能が落ちることもありません。 - データベースに触れません — コストは、トランザクション内の使い捨てのスクラッチ Postgres 上で実際の
EXPLAINを実行して測定します。トランザクションは必ずロールバックされます。本番データベースに接続することはありません。
ツール
analyze_sql
Postgres SQL/マイグレーションの安全性とコストについて、決定論的な判定を返します。
| 入力 | 型 | 備考 |
|---|---|---|
sql | string | 分析対象の SQL/マイグレーション。1 つ以上のステートメントを指定します(必須) |
schema | string? | 任意の CREATE TABLE/INDEX DDL。指定すると、スクラッチ Postgres 上で EXPLAIN ベースのコスト分析が可能になります |
rowCountHints | object? | 任意のテーブル名 → 推定行数のマップ。現実的なコスト見積もりに使用します |
verdict が ok | warn | block のいずれかである { verdict, findings[], plan?, meta } を返します。
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 という語と、その後のスペースは残してください)。
"headers": { "Authorization": "Bearer VETO-…" }
料金
| プラン | 価格 | 制限 | 追加内容 |
|---|---|---|---|
| Free | €0 | 60 req/min | 破壊的操作、ロック、正確性、コストに関するすべてのルールを含む、完全な決定論的判定 |
| Pro | €9.90 / mo | 1200 req/min | カスタム組織ポリシー(set_policies)、メンテナーサポート |
vetosql.com から登録できます。
FAQ
Veto はどのデータベースに対応していますか? PostgreSQL に対応しています。Veto は SQL テキストを解析するため、Supabase、Neon、RDS、セルフホストなど、あらゆる Postgres ホストや、あらゆるマイグレーションツールで動作します。データベースには接続しません。
安全ですか?データを閲覧したり変更したりできますか? いいえ。Veto が本番データベースに接続することはありません。コスト分析は、別のスクラッチ用 Postgres に対して、必ずロールバックされるトランザクション内で実行されるため、データの読み取りも書き込みも行われません。
Squawk や sqlfluff のようなリンターとは何が違いますか?
これらは CI/スタイルチェック用のツールです。Veto は AI エージェントが MCP 経由で呼び出すリアルタイムの実行時ゲートで、実行しようとしているステートメントそのものに対して、ok/warn/block の判定を返します。さらに、コストの見積もりや組織独自のポリシーにも対応します。
エージェントに読み取り専用または制限付きの DB ロールを与えるだけではだめですか?
ロールは大まかな制御であり、設定を誤りやすいだけでなく、書き込みが許可されたロール内で高コストなシーケンシャルスキャンや、テーブル全体への UPDATE が実行されることも検出できません。Veto は、使用するロールに加えて、ステートメント単位の判定を提供します。
LLM を使用しますか?
いいえ。コア機能は、決定論的な静的解析と EXPLAIN です。呼び出し元のエージェントが構造化された判定内容を説明しますが、判定そのものがモデルから生成されることはありません。
リンク
- ウェブサイト: vetosql.com
- ブログ: AI エージェントが本番データベースを消去しました。必要なのは、より優れたプロンプトではありません。
- MCP エンドポイント:
https://vetosql.com/mcp - 公式 MCP レジストリ:
com.vetosql/veto - Glama: glama.ai/mcp/connectors/com.vetosql/veto
Metawear が開発しました。ホステッドサービスは vetosql.com で稼働しています。このリポジトリは、Veto サーバーの公開ドキュメントと MCP レジストリマニフェストです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。