mcpField
P
pgbrake

pgbrake

ローカル
github.com/lexangその他01 日前に更新

pgbrake について

pgbrake はコーディングエージェントと Postgres の間に入るローカル MCP サーバーで、書き込みの承認ルールを適用し、変更を記録して取り消しに備えます。SQL を解析し、ジャーナルをローカルに保存します。

主な機能

  1. 01Postgres SQL 文の解析
  2. 02リスクの高い書き込みの承認保留
  3. 03対象となる UPDATE と DELETE の取り消し
  4. 04SQL 文と判断の記録
  5. 05複数文呼び出しのアトミック実行

活用シーン

  1. 01大量または破壊的な書き込みに承認を求める
  2. 02対象となるデータベース変更を元に戻す
  3. 03エージェントの SQL 文の監査記録を確認する

MCP 対応

pgbrake は MCP クライアントに Postgres へのアクセスを提供し、サーバー内で書き込みルールを適用します。MCP elicitation または対話型ターミナルを通じて人間の承認を受けられます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"lexang-pgbrake": {
"command": "uvx",
"args": [
"pgbrake"
],
"env": {
"PGBRAKE_DSN": "<PGBRAKE_DSN>"
}
}
}
}
起動コマンドuvx pgbrake
設定が必要な環境変数
PGBRAKE_DSNシークレットPostgres connection string, e.g. postgresql://me@localhost/app

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypipgbrake0.1.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

pgbrake

AI エージェントが操作するデータベースのための、取り消しボタンです。

pgbrake は、Claude Code / Codex / Cursor と Postgres の間に入るローカル MCP サーバーです。 エージェントが行うすべての書き込みには変更 ID が付与され、1 つのコマンドで元に戻せます。リスクのある SQL は人間の承認を待ちます。すべてが記録されます。データがマシンの外に出ることはありません。

pgbrake のデモ

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_ROWS100この行数を超える書き込みには承認が必要です
PGBRAKE_ALLOW_DDL0スキーマ変更を許可するには 1 を設定します(変更は引き続き記録されます)
PGBRAKE_READ_ONLY0すべての書き込みを拒否するには 1 を設定します
PGBRAKE_STATEMENT_TIMEOUT_MS15000
PGBRAKE_JOURNAL~/.pgbrake/journal.db

制限事項

  • 取り消しの対象となるのは、pgbrake 経由で変更された行です。バックアップではないため、実際のバックアップも保管してください。
  • TRUNCATE、DDL、アップサート、MERGE は承認待ちとなりますが、元に戻すことはできません。
  • 主キーのないテーブルの更新には承認が必要で、元に戻すことはできません。
  • 無料版では、取り消し可能な直近 20 件の変更が保持されます。

Pro(近日公開)

無制限の取り消し履歴、エージェントのターミナルコマンド向けマイグレーションガード (prisma migrate reset --force、drizzle-kit push --force、alembic downgrade base など:まずスナップショットを作成してから確認します)、プロジェクトごとのポリシーファイル、監査ログのエクスポート機能。ライセンスは買い切りです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。