エージェントにデータベースをクエリさせる、
あなたが許すまでは読み取り専用で
AgentsRoomはMySQL、PostgreSQL、MongoDBの接続を管理し、AIコーディングエージェントがそこにクエリを実行する手段を提供します。デフォルトは読み取り専用、一度に1文、パスワードは手の届かないところに置かれます。
本物の行を読めるエージェントは、データについて推測しなくなります。そこに書き込めないエージェントは、一行ずつ監視すべきリスクではなくなります。
AgentsRoomがプライベートサブネット内のデータベースに到達し、AIエージェントの読み取り専用クエリに答える仕組み。
データが見えないAIコーディングエージェントは、自分が想像したスキーマを相手にコードを書きます。存在しないカラムを作り出し、7つの値を持つenumを3つだと決めつけ、バグを行ではなく仮説で説明します。データベース接続を与えればそれは解消しますが、同時に、頼れるエージェントをインシデントに変える最短経路でもあります。AgentsRoomはその緊張関係を軸に作られています。
接続は、どのデータベースクライアントでもそうするようにアプリへ保存します:エンジン、ホスト、ポート、ユーザー、データベース、そしてサーバーが求めるならTLS。データベースがインターネットから到達できない場所にあるなら、接続はSSHトンネルかAWS SSMのポートフォワーディングセッション経由でルーティングされます。使うのは、すでにAgentsRoomに保存してあるSSHとSSMの接続です。こうしてプライベートサブネットにあるデータベースが、外部に開かないままクエリできる相手になります。
どの接続も読み取り専用から始まります。SELECTは実行されます。データを変更する文は実行されません。その接続を書き込み可能にし、操作を確認するまでは。1回の呼び出しで受け付ける文は1つだけなので、セミコロンの陰に余計なものが隠れることはなく、結果セットには上限があるため、幅の広いクエリがエージェントやウィンドウを溢れさせることもありません。接続には本番のフラグを立てることもでき、その場合は確認がうっかり通らないよう厳しくなります。
読むことだけが仕事ではありません。あるマシンで保存した接続は他のマシンにも現れるので、データベースの設定はコンピューターごとではなく一度で済みます。そしてデータベースはファイルに書き出せますし、ファイルから戻せますし、同じトンネルを通って別のサーバーへそのままコピーすることもできます。これまでアプリの外でやっていた作業です。
エージェントが操作する前提で作られたデータベースクライアント
MySQL、PostgreSQL、MongoDB、プライベートネットワークでも到達可能、ガードレールは最初からオン。
MySQL、PostgreSQL、MongoDBの接続
データベースごとに接続を保存します:ホスト、ポート、ユーザー、開くデータベース、そしてサーバーが要求するならTLS。ローカルのデータベースも、ステージングも、本番のレプリカも同じリストに並び、打ち直すのではなく選ぶだけになります。
プライベートなデータベースに到達する
プライベートサブネットにあるデータベースは例外扱いではありません。接続をSSHトンネルまたはAWS SSMのポートフォワーディングセッション経由にすれば、すでにアプリに保存してあるSSHとSSMの接続を再利用して、AgentsRoomが開いてくれます。
デフォルトで読み取り専用
新しい接続にできるのは読むことだけです。クエリは行を返し、データを変える文は拒否されます。安全モードにするのを誰かが覚えておく必要はありません。すべての接続がその安全モードから始まるからです。
書き込みの前に2つの鍵
書き込みには1つではなく2つの意識的な行為が必要です。接続を書き込み可能にすること、そして操作そのものを明示的に確認すること。うっかりしたクリック1回が、WHERE句のないUPDATEまで連鎖することはありません。
1回の呼び出しにつき1文
各呼び出しが運ぶのはちょうど1文です。セミコロンの後ろに積まれたものは実行されずに拒否されるため、読み取りに見えるものが2つ目の文を忍ばせることはできません。さらに結果セットにも上限があります。
本番にはフラグが立つ
接続を本番としてマークすると、確認が厳しくなります。大事なデータベースが、ローカルのコピーとまったく同じ顔をしなくなります。長い一日の終わりのあなたに対しても、タスクリストを消化していくエージェントに対しても。
どのマシンでも、同じ接続
オフィスのマシンで保存した接続は、ノートPCにもそのままあります:名前、ホスト、ポート、ユーザー、既定のデータベース、そして経由するトンネルまで。あとに残るのはパスワードだけで、入力したマシンの中で暗号化されたままなので、各マシンで一度だけ入力を求められます。
エクスポート、インポート、コピー
データベースを.sqlファイルに書き出し、そのファイルをデータベースに流し込み、あるデータベースを別のデータベースへそのままコピーできます。上書きの前に対象はバックアップされ、まるごと置き換えるかどうかは別に確認される判断です。
エージェントはデータベースにクエリしますが、パスワードは持ちません
データベースの認証情報はAgentsRoomが保持し、外へ渡すことはありません。エージェントは名前で知っている接続に対してクエリの実行を依頼し、アプリが接続を開き、文を実行して行を返します。パスワードはエージェントが受け取るものにも、エージェントが書くクエリにも、保持する会話にも一切含まれません。
読み取り専用のルールがその後半であり、エージェントにとっては口先で抜け出せるデフォルトではありません。エージェントがクエリに使うツールは、その接続が何を許していようと読み取り以外を拒否します。接続を書き込み可能にすると、書き込みが解禁されるのはあなたに対してだけで、場所はコンソールです。そこでは書き込みのたびに明示的な確認が求められ、接続に本番のフラグが立っていれば、その確認は意図的に厳しくなります。エージェントがまずいクエリを実行しても、最悪の結末はテーブルの消失ではなく誤った答えのままです。
1文だけというルールが、古典的な穴を塞ぎます。1文を運ぶ呼び出しはセミコロンと2文目で拡張できないので、レビューでは無害に読めるクエリが実行時に別のことをすることはありません。上限付きの結果セットと組み合わせれば、ミスはミスのまま留まり、データの持ち出しには育ちません。
対応は3つのエンジン、足りないものも名指しします
MySQLとMariaDB、PostgreSQL、そしてMongoDB。翻訳レイヤーを挟むのではなく、それぞれに専用のドライバを用意しています。3つは本当に違うからです:PostgreSQLのセッションは1つのデータベースに結び付き、MongoDBはSQLではなくクエリを受け取り、エクスポートはそのエンジンに付属するツールで動きます。3つとも、サーバーに直接でも、インターネットに公開されていない場合はSSHトンネルやAWS SSMのポートフォワーディングセッション経由でも到達できます。
SQL Server、Oracle、SQLite、Redis、その他のエンジンには対応していません。それはダウンロードした後ではなく、前に知るべきことです。次にどのエンジンが来るかは寄せられた要望で決まるので、あなたのエンジンが足りないなら、公開バックログでどれかを伝えてください。票として数えられます。
使いたいデータベースエンジンをリクエストする読むだけでなく、データベースごと動かす
データベースをファイルにエクスポート。ファイルをデータベースにインポート。あるいは、すでに保存してあるSSHトンネルやAWS SSMセッション越しも含めて、あるデータベースを別のデータベースへそのままコピー。どのエンジンもそれぞれの公式ツールを使い、ディスクへストリーミングで書き出すので、数ギガバイトのデータベースはクラッシュではなくプログレスバーになります。
これらのツールはデータベース側に付属するもので、AgentsRoomには付いてきません:mysqldumpとmysql、pg_dumpとpsql、mongodumpとmongorestore。見つからないときは、アプリがどれが足りないかを正確に伝え、ツールの入っているフォルダを指定できるようにします。データベースクライアントならそうあるべきだからです:Dockやスタートメニューから起動されたアプリには最小限のPATHしか見えず、そのままではツールを持っているマシンでも「見つかりません」と言い張ることになります。
1回の誤ったクリックが1日を吹き飛ばすのはコピーです。だからコピーは、うまくいく場合ではなく、そこを前提に組み立てられています。
- 読み取り専用の接続は、何かが開かれる前にインポートをその場で拒否します。
- 最初の1文が適用される前に、対象のデータベースはあなたが選んだファイルへダンプされます。
- 確認画面は接続名とデータベース名を示し、接続に本番のフラグが立っていればより強く警告します。
- 対象のデータベースを削除して作り直すのは別のオプションで、本番の接続ではデータベース名を打ち直す必要があります。
プライベートなデータベースから答えまで
接続を保存し、経路を通し、自分でクエリするかエージェントに任せます。
接続を保存する
データベースを追加します:ホスト、ポート、ユーザー、データベース名、そしてサーバーが求めるならTLS。あとで見て分かる名前を付け、本番ならそのフラグを立てます。
プライベートなら経路を通す
データベースに直接到達できない場合は、AgentsRoomにすでに保存してある接続から組み立てたSSHトンネルやAWS SSMのポートフォワーディングセッションへ接続を向けます。プライベートサブネットのデータベースが、外部に公開しないまま到達可能になります。
自分でクエリするか、エージェントに任せる
アプリから文を実行するか、エージェントにMCP経由で実行させます。変更するまでは読み取り専用、1回の呼び出しにつき1文、結果セットには上限があり、あらゆる書き込みとあなたのデータの間には明示的な確認が立ちます。
エージェントに本物の行が必要なとき
本番データを読むことが、修正までの最短経路になる場面。
本物のデータでデバッグする
バグが出るのは一握りのアカウントだけ。エージェントにその行を読ませれば、データがどうなっているかについて3つの仮説を並べる代わりに、ロジックを壊している値を見つけます。
公開されていないデータベース
データベースはパブリックなエンドポイントを持たないプライベートサブネットにあります。保存済みの接続を元にしたSSHトンネルやAWS SSMセッション経由でルーティングすれば、インターネットにポートを開けずにクエリできます。
エージェントに推測ではなく確認させる
マイグレーションやクエリを書く前に、エージェントは実際に保存されている内容を見られます。読んで、報告して、その間に何かを変える権限を得ることは決してありません。
書き込みリスクのない本番
本番を読むことはしばしば必要ですが、タスクの途中で本番に書き込むことはほとんどありません。接続に本番のフラグを立てて読み取り専用のままにすれば、調査と破壊の違いが誰かの注意力に左右されなくなります。
ステージングを本物のデータで作り直す
バグが再現するのは本物の行の上だけ。すでに保存してあるトンネルを通して、データベースをステージングのサーバーへコピーします。そこにあったものは先にダンプされます。
ノートPCを開けば、すべてがそこにある
接続はあなたのアカウントについて回ります:同じホスト、同じトンネル、同じ読み取り専用と本番のフラグ。パスワードだけは各マシンで一度だけ聞かれます。それが、入力したマシンから決して出ていかない部分だからです。
エージェントはどうやってデータベースにクエリするのですか?
AgentsRoom MCPを通じて、4つのツールで行います。db_listは保存済みの接続とそのメタデータを返し、db_schemaはSQLを一行も書かずにスキーマ、テーブル、カラムをたどり、db_queryは1文を実行して行を返し、db_connection_newはまだ保存していないデータベースを提案します。接続を開くのはAgentsRoomで、手前にSSHトンネルやAWS SSMセッションがあればそれも含めて開きます。エージェントに返るのは結果セットであり、認証情報ではありません。
db_queryは、接続が何を許していようと読み取り専用です。接続を書き込み可能にすると、書き込みが解禁されるのはあなたに対してだけで、場所はコンソールです。そこでは書き込みのたびに明示的な確認が求められ、本番のフラグが立った接続はそのことをはっきり告げます。エージェントに対しては解禁されません:db_queryの読み取り専用ルールはMCPプロセスではなくデスクトップアプリ側にあるので、エージェントが言いくるめられて別のことを求めても、そのルールは揺らぎません。DROPを実行するのにパスワードは要りません。だからこそガードレールは、認証情報だけでなく文そのものに置かれています。
同じ制限はデータベースの登録にも当てはまります。db_connection_newが開くのは、ホスト、ユーザー、そして到達に使うべきSSHまたはAWS SSMの接続であらかじめ埋めた作成フォームだけで、それを確認し、パスワードを入力し、保存するのはあなたです。あなたが保存するまで何も保管されません。エージェントはあなたのデータについて考えるために必要なものを得ますが、そのアクセスが普通はインシデントに変わってしまう経路は、どれも使えません。
AgentsRoom MCPを見るよくある質問
どのデータベースに対応していますか?
MySQLとMariaDB、PostgreSQL、そしてMongoDB。それぞれに専用のドライバがあり、どれも直接でも、SSHトンネルやAWS SSMのポートフォワーディングセッション経由でも到達できます。SQL Server、Oracle、SQLiteなどには今日は対応していません。そのどれかが必要なら、公開バックログでリクエストしてください:このリストは実際に寄せられた要望で伸びていきます。
AIエージェントは私のデータベースに書き込めますか?
書き込めません。エージェントがクエリに使うMCPツールdb_queryは、接続が何を許していようと読み取り専用です:SELECT、SHOW、EXPLAINは通り、MongoDBのfindやaggregateも通りますが、データを変えるものはすべて拒否されます。接続を書き込み可能にしても、書き込みが解禁されるのはコンソールにいるあなたに対してだけで、そこでは1件ごとに明示的な確認が求められます。エージェントに対しては解禁されません。ガードレールがパスワードではなく文そのものに置かれているのは、DROPを実行するのに必要なものがパスワードではないからです。
プライベートサブネット内のデータベースにはどう到達しますか?
すでにAgentsRoomに保存してあるSSHとSSMの接続から組み立てた、SSHトンネルまたはAWS SSMのポートフォワーディングセッション経由で接続をルーティングします。アプリがトンネルやセッションを開き、その先にデータベースをつなぐので、データベースはパブリックなインターネットから到達できないままです。
エージェントにデータベースのパスワードは見えますか?
見えません。エージェントは接続を名前で指定してMCP経由でクエリします。認証情報を保持し文を実行するのはAgentsRoom自身なので、パスワードがエージェントに返ることも、クエリに書き込まれることも、会話に含まれることもありません。
エージェントは一度に複数の文を実行できますか?
できません。1回の呼び出しが運ぶのはちょうど1文です。セミコロンの後ろに積まれたものは実行されずに拒否されるので、読み取りに見えるものの中に書き込みを隠すという最も古い手口が使えなくなります。
接続に本番のフラグを立てると何が変わりますか?
書き込みの前に求められる確認が厳しくなります。大事なデータベースが、ローカルのコピーと同じようには振る舞わなくなります。長い一日の終わりに欲しいことであり、タスクリストを消化していくエージェントに対してはなおさら欲しいことです。
大量の行を返すクエリはどうなりますか?
結果セットには上限があります。巨大なテーブルを返すはずのクエリは、ウィンドウやエージェントのコンテキストを溢れさせる代わりに切り詰められて返るので、幅の広いSELECTはデータの持ち出しではなく単なる不便で済みます。
エージェントはデータベース接続を追加できますか?
提案はできますが、保存は決してできません。db_connection_newは、ホスト、ポート、ユーザー、そしてそのデータベースに到達するために通すべきSSHまたはAWS SSMの接続であらかじめ埋めた作成フォームを開きます。それを確認し、パスワードを入力し、保存するのはあなたです。あなたが保存するまで何も保管されず、認証情報をエージェントが差し出すことも決してありません。
エージェントは私のスキーマをどうやって把握しますか?
db_schemaを使います。保存済みの接続をSQLなしで探索するツールです。引数なしで呼べばスキーマを一覧し、データベースを指定すればテーブルとビューを一覧し、テーブルを指定すればカラム、その型、NULLを許すかどうか、キー、デフォルト値を返します。エージェントにinformation_schemaを手でクエリさせるより、安く、安全です。
データベース接続はマシン間で同期されますか?
接続は同期されますが、パスワードは同期されません。名前、ホスト、ポート、ユーザー、既定のデータベース、スコープ、読み取り専用と本番のフラグ、そして経由するSSHまたはSSMトンネルはあなたのアカウントに紐づいて移動するので、あるマシンで保存した接続が他のマシンにも現れ、打ち直す必要がありません。パスワードだけは入力したマシンのキーチェーンで暗号化されたまま残り、私たちに送られることはありません。だから他のマシンから届いた接続は、開く前にパスワードの入力待ちとして表示されます。
データベースをダンプして別の場所にインポートできますか?
できます。データベースをファイルに書き出し、そうしたファイルをデータベースにインポートし、あるデータベースを別のデータベースへ直接コピーできます。すでに保存してあるSSHやSSMトンネル越しでも同じです。どのエンジンもそれぞれの公式ツール(mysqldumpとmysql、pg_dumpとpsql、mongodumpとmongorestore)を使い、これらはAgentsRoomではなくデータベース側に付属します:見つからない場合は、それらが入っているフォルダを指定するよう求められます。コピーが動くのは同じエンジン同士の接続の間だけです。ダンプはそれを作ったエンジンにしか戻せないからです。読み取り専用の接続へのインポートは拒否され、書き込みが始まる前に対象は指定したファイルへダンプされ、対象を置き換えるのは別のオプションで、その確認にはデータベース名が示されます。
こちらもおすすめ
AWS SSM経由のRDS
パブリックなエンドポイントを持たないAmazon RDSインスタンスに、aws ssm start-sessionとAWS-StartPortForwardingSessionToRemoteHostドキュメントを使って、自分のマシンから到達します。維持する踏み台も、VPNも、受信SSHのルールも要りません。AgentsRoomがループバックポートでセッションを開き、その先にデータベースクライアントをつなぎます。対応はMySQL、PostgreSQL、MongoDBなので、RDS MySQL、RDS PostgreSQL、Aurora、DocumentDBが対象です。
SSH接続
SSH接続を保存し、内蔵のSSHターミナルを開いて、Claude Code、Codex、Antigravity CLIをリモートサーバーやVPS上で直接実行できます。SSH鍵またはパスワード認証、プロジェクトごとの接続プロファイル、別のSSHクライアントは不要です。
シークレットマネージャー
APIキー、トークン、パスワードをOSのキーチェーンに保存し、開発コマンドやエージェントの環境変数では{{secret:NAME}}として参照すれば、AgentsRoomが起動時に解決します。エージェントに見えるのは名前だけで、値が渡ることはなく、サーバーに同期されるものもありません。
開発ターミナル
プロジェクトごとのターミナルマネージャーとプロセスランチャー。バックエンド、フロントエンド、ワーカーをワンクリックで起動。ローカルでも、リモートサーバー上でも。
AgentsRoom MCP
エージェントにAgentsRoom自体を操縦させるMCPサーバー:プロジェクト、ターミナル、バックログ、接続を、付随するガードレールとともに。
エージェントに渡すのはデータ、鍵ではありません
AgentsRoomをダウンロードして、MySQL、PostgreSQL、MongoDBの接続を保存し、SSHトンネルやAWS SSMセッション経由で到達して、エージェントに読み取り専用でクエリさせましょう。
コンパニオンアプリ:外出先でもエージェントを確認
Claude、Codex、Antigravity CLI、またはその他の AI プロバイダーを使用します。
バグや要望を公開バックログに直接送信できます。