Rowbit について
Rowbitは、AIエージェントとMariaDBまたはMySQLの間に置くオープンソースのMCPサーバーです。書き込みを事前に確認し、ルールや人の承認で制御でき、個々の変更を元に戻せます。
主な機能
- 01変更前後の行を正確にプレビュー
- 02ルールによる書き込みの承認と拒否
- 03個別のデータベース変更を取り消し
- 04エージェントごとのテーブル・列制限
- 05Webレビュー画面と監査ログ
活用シーン
- 01エージェントが提案する一括更新の確認
- 02安全な小規模書き込みのルール許可
- 03本番環境でのエージェント権限の制限
- 04問題のあるデータ変更の取り消し
MCP 対応
エージェントはデータベースへ直接接続せず、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 エージェントの安全策です。すべての書き込みをプレビューし、リスクのあるものを承認し、個々の変更を取り消せます。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 を実行してください。セットアップでは、データベースの URL を検出し、Rowbit の権限を確認して、修正用の GRANT ステートメントを表示します。また、すべての書き込みをレビュー待ちにするルールを設定し、選択したエージェントのクライアントを接続して、レビュー画面のパスワードを表示します。クイックスタートをご覧ください。
試せるデータベースがありませんか? セットアップでサンプルを選択すると、Docker 上でショップのデータベースが起動し、その前段に Rowbit が配置されます(ツアー)。次に、エージェントにこう依頼してください。
保留中の注文が処理されずに残っています。キャンセルしてください。
対応クライアント: Claude Code、Cursor、VS Code、Claude Desktop、Codex、Gemini CLI、Windsurf、およびその他の MCP クライアント。
| データベース | 状況 |
|---|---|
| MariaDB、MySQL | 対応済み。TLS 経由にも対応(変更のたびに MariaDB 11.4 と MySQL 8.4 でテスト済み) |
| PostgreSQL | 対応予定、次の候補 |
| MongoDB、Redis | 検討中 |
ドキュメント · クイックスタート · インタラクティブデモ · ご意見をお聞かせください
できること
コーディングエージェントに、保留中の注文を修正するよう依頼すると、UPDATE shop.orders SET status = 'cancelled' WHERE status = 'pending' を実行します。このクエリは、直近 1 時間に注文されたすべての注文にも一致します。Rowbit は行に変更が加わる前にこれを検知し、変更対象となる 1,284 行を正確に表示して、人の確認を待ちます。万が一、問題のある変更が実行されても、バックアップを復元せずに、その変更だけを取り消せます。
状況: 初期段階のオープンソースプロジェクトです。各リリースについては変更履歴をご覧ください。次に何を作るかは、フィードバックディスカッションでお寄せいただくご意見をもとに決定します。
仕組み
Rowbit はエージェントとデータベースの間に位置します。エージェントは MCP 経由で Rowbit と通信し、データベースに直接アクセスすることはありません。データベースの認証情報を使わずに、Rowbit を通じて読み取りや書き込みの提案を行います。
- 正確なプレビュー。 Rowbit は書き込みによって変更される行を読み取り、非公開の一時コピー上で操作を再実行します。そのため、テーブルに保存される内容とまったく同じ状態を、変更前後の各行で確認できます。実際のテーブルは読み取り専用です。
- ルールを適用し、その後に人が確認。 小さな YAML ファイルで、安全な書き込みは許可し、リスクのある書き込みは人の確認待ちにし、それ以外は拒否できます。承認できるのは人だけです。承認すると、プレビューした内容がそのまま適用されるか、何も適用されません。ルールをご覧ください。
- 1 件の変更を取り消す。 Rowbit は変更対象となったすべての行を保持するため、ほかの変更はそのままにして、不適切な書き込み 1 件だけを取り消せます。
- スコープとシャドウモード。 エージェントごとに、読み取りや書き込みが可能なテーブルと、決して参照できない列を設定できます。これらはエージェント専用のユーザーを使ってデータベース側で適用されます。シャドウモードでは、ルールを適用する前に、ルールによって保留される内容を確認できます。
- 今いる場所でレビュー。 バイナリに組み込まれた Web UI、ID プロバイダー経由のサインイン、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.
ここでは、エージェントが最大 20 件の注文の status を自分で変更できます。それ以外の列を書き込む更新や、20 件を超える行を変更する更新は人の確認待ちとなり、削除は拒否されます。
スキーマの全体については、examples/rowbit.yml と rowbit.yml の仕様をご覧ください。
エージェントを接続する
rowbit setup を実行すると、選択したクライアントが接続されます。rowbit connect <client> を実行すると、エージェント専用のトークンを使ってクライアントを 1 つ追加できます。エージェントを接続するをご覧ください。
Claude Code
rowbit connect claude-code
claude mcp add を使って、現在のディレクトリに Rowbit を追加します(どこからでも使う場合は --scope user)。エージェントが 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> として送信するトークンを出力します。
コーディングエージェントがスキーマを変更する場合は、エージェントにマイグレーションファイルを書かせ、コードレビューと CI を通すのが適切です。Rowbit はその領域では競合しません。スキーマ変更はすべて人による確認を待ち、実際のワークフローはマイグレーションツールに任せます。データの修正には適していません。
- レビューで確認できる差分は SQL であり、行ではありません。
UPDATE orders SET status = 'cancelled' WHERE status = 'pending'はレビューでは問題なさそうに見えます。実行時のデータによって、影響を受ける内容が変わります。Rowbit は判断時に対象となる行を正確に表示し、その後に行が変更されていれば適用を拒否します。 - 一度きりの修正は、プルリクエストを待てません。 インシデント中に数行の不整合を修復するには、数分で対応する必要があります。そのたびにマイグレーションを書いてレビューする人はいません。
- すべての書き込みに人の確認が必要なわけではありません。 ルールを使えば、小規模で安全な書き込みはそのまま通し、リスクのあるものだけを保留できます。そのため、レビュアーが何でも承認するようになるのを防げます。
- 変更ごとに元に戻せます。 データ用のダウンマイグレーションは、たいてい存在しないか、情報が失われます。Rowbit は、変更の影響を受けたすべての行の変更前の状態を保持します。
コーディングエージェントが本番データベースを消去したという有名なインシデントは、何よりも認証情報の問題です。認証情報を取り上げ、エージェントにマイグレーションを書かせましょう。Rowbit は、書き込みが必要なエージェント向けです。また、エージェントが払い戻しの発行など同じ操作を何度も行うなら、SQL ではなく、その操作だけを行うツールを渡してください。
知っておくとよいこと
- データベースの認証情報を保持するのは Rowbit だけです。 エージェントが独自の接続文字列も持っていると、Rowbit を経由せずに書き込めます。エージェントには Rowbit のエンドポイントだけを渡し、ほかは何も渡さないでください(HTTP 経由で、専用のトークンを使用します)。また、Rowbit 専用のデータベースユーザーを用意してください。
scopesを指定しないエージェントは、Rowbit の権限で読み書きします。 書き込みはすべて引き続きルールによって判断されますが、Rowbit のユーザーが読み取れるデータはすべて読み取れます。本番環境のエージェントにはスコープを指定してください。- 元に戻せるのは行の状態であり、あらゆる影響ではありません。 データは元に戻せますが、それによって送信済みのメールや支払い済みの払い戻しを取り消すことはできません。
- プレビューでテーブルに書き込むことはありません。 ロックを取得せずに影響を受ける行を読み取り、Rowbit の接続だけが参照できる一時コピー上で書き込みを再現します。トリガーやカスケードする外部キーがあるテーブルは拒否されます。副作用がプレビューに表示されず、取り消しもできないためです。Rowbit のデータベースユーザーが完全に調査できないテーブルも拒否されます。
TRIGGERとPROCESSの権限が必要です。正確な権限付与についてはデータベースの権限を参照してください。 - データの保存場所。 変更状態、プレビュー(影響を受ける行の変更前と変更後のコピーを含む)、監査ログは、Rowbit と同じ場所にあるローカルの SQLite ファイルに保存されます。データベースのレプリカと同様に保護してください(方法)。
- CLI は実行者を信頼します。
rowbit.dbを読み取ることができ、データベース URL を持っている人なら誰でも、任意の--as名を使ってrowbit approveを実行できます。どちらもエージェントに渡さず、エージェントがなりすませないユーザーとして Rowbit を実行してください。実運用で使う前にを参照してください。 - 安全側に倒して拒否します。 Rowbit が評価できないものはすべて拒否されます。変更のライフサイクルとSECURITY.mdを参照してください。
コントリビューション
アイデアや意見はディスカッションで歓迎します。コードの貢献についてはCONTRIBUTING.mdを参照してください。コミットには DCO のサインオフが必要です(git commit -s)。セキュリティ上の問題は、SECURITY.mdの説明に従って報告してください。
ライセンス
サーバーはAGPL-3.0-onlyです。rowbit.yml のポリシースキーマ(crates/rowbit-policy)と今後のクライアント SDK はApache-2.0です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
