pgbrake について
pgbrake はコーディングエージェントと Postgres の間に入るローカル MCP サーバーで、書き込みの承認ルールを適用し、変更を記録して取り消しに備えます。SQL を解析し、ジャーナルをローカルに保存します。
主な機能
- 01Postgres SQL 文の解析
- 02リスクの高い書き込みの承認保留
- 03対象となる UPDATE と DELETE の取り消し
- 04SQL 文と判断の記録
- 05複数文呼び出しのアトミック実行
活用シーン
- 01大量または破壊的な書き込みに承認を求める
- 02対象となるデータベース変更を元に戻す
- 03エージェントの SQL 文の監査記録を確認する
MCP 対応
pgbrake は MCP クライアントに Postgres へのアクセスを提供し、サーバー内で書き込みルールを適用します。MCP elicitation または対話型ターミナルを通じて人間の承認を受けられます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
pgbrake
AI エージェントが操作するデータベースのための、取り消しボタンです。
pgbrake は、Claude Code / Codex / Cursor と Postgres の間に入るローカル MCP サーバーです。 エージェントが行うすべての書き込みには変更 ID が付与され、1 つのコマンドで元に戻せます。リスクのある SQL は人間の承認を待ちます。すべてが記録されます。データがマシンの外に出ることはありません。

agent> DELETE FROM users WHERE created_at < '2025-01-01'
pgbrake> held: DELETE would touch 4,812 rows (limit 100) — approval apv_3f9c21aa
agent> DELETE FROM users WHERE id = 42
pgbrake> 1 row affected; undo with change id chg_8e01b7d2
you$ pgbrake undo chg_8e01b7d2
undid delete on "users": 1 row(s) restored
理由
Claude Code のチェックポイントで巻き戻せるのはファイルであり、データベースではありません。クライアント側の権限確認プロンプトやフックは、MCP 呼び出しでは回避されたり、誤作動したりする可能性があり、ツール独自の「破壊的」というラベルは単なる目安にすぎません。 pgbrake はルールをサーバー内で適用するため、どのエージェントやクライアントから呼び出されても有効です。
できること(無料、MIT)
- 正確な SQL 解析(正規表現ではなく、pglast 経由の Postgres パーサーを使用)。
- 承認待ちとなる操作: DDL(
DROP、ALTER、TRUNCATEなど)、WHERE句のないUPDATE/DELETE、行数制限(デフォルトは 100)を超える書き込み、アップサート、MERGE。 - 常に禁止される操作:
ALTER SYSTEM、ロールやデータベースの作成・削除、COPY ... PROGRAM、DOブロック。 - 1 つのコマンドで元に戻せます: 各
UPDATE/DELETEの前に、影響を受ける行をローカルに保存します。挿入は主キーで追跡します。--forceを指定しない限り、行が変更されている場合は取り消しを拒否します。 - 承認できるのは人間だけです: クライアント独自のプロンプト(MCP のエリシテーション)、または対話型ターミナルでの
pgbrake approve <id>で承認します。承認は 1 回限りで、15 分後に期限切れとなり、正確な SQL にひも付けられます。 ~/.pgbrake/journal.dbに、すべてのステートメント、判断、行数を監査ログとして記録します。- 複数ステートメントの呼び出しは 1 つのトランザクションで実行されます。すべて成功するか、すべて取り消されます。
インストール
pip install pgbrake # or: uvx pgbrake serve
Claude Code:
claude mcp add pgbrake --env PGBRAKE_DSN="postgresql://me@localhost/app" -- uvx pgbrake serve
Codex(~/.codex/config.toml):
[mcp_servers.pgbrake]
command = "uvx"
args = ["pgbrake", "serve"]
env = { PGBRAKE_DSN = "postgresql://me@localhost/app" }
その後、エージェントから他のデータベース MCP / psql へのアクセスをすべて削除し、pgbrake だけを経由するようにしてください。
Claude Code では、"Bash(psql:*)" と "Bash(pgbrake approve:*)" を permissions.deny に追加してください。
コマンド
pgbrake pending # SQL waiting for you
pgbrake approve <id> # approve (interactive terminal only)
pgbrake deny <id>
pgbrake changes # undoable changes
pgbrake undo <change-id> # reverse one
pgbrake log # audit log
設定(環境変数)
| 変数 | デフォルト | |
|---|---|---|
PGBRAKE_DSN | — | 接続文字列(DATABASE_URL が設定されている場合はそちらを使用) |
PGBRAKE_MAX_ROWS | 100 | この行数を超える書き込みには承認が必要です |
PGBRAKE_ALLOW_DDL | 0 | スキーマ変更を許可するには 1 を設定します(変更は引き続き記録されます) |
PGBRAKE_READ_ONLY | 0 | すべての書き込みを拒否するには 1 を設定します |
PGBRAKE_STATEMENT_TIMEOUT_MS | 15000 | |
PGBRAKE_JOURNAL | ~/.pgbrake/journal.db |
制限事項
- 取り消しの対象となるのは、pgbrake 経由で変更された行です。バックアップではないため、実際のバックアップも保管してください。
TRUNCATE、DDL、アップサート、MERGEは承認待ちとなりますが、元に戻すことはできません。- 主キーのないテーブルの更新には承認が必要で、元に戻すことはできません。
- 無料版では、取り消し可能な直近 20 件の変更が保持されます。
Pro(近日公開)
無制限の取り消し履歴、エージェントのターミナルコマンド向けマイグレーションガード
(prisma migrate reset --force、drizzle-kit push --force、alembic downgrade base など:まずスナップショットを作成してから確認します)、プロジェクトごとのポリシーファイル、監査ログのエクスポート機能。ライセンスは買い切りです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。