MCP DB Wizard
公式Oracle向けのMCPサーバーで、解雇されないためのものです。このMCPサーバーはSQLプロンプトを公開せず、Oracleへのログイン方法も教えてくれません。選択されたオブジェクトとSQL文のみが使用可能です。
DB Wizard MCPで何ができますか?
- 主キーで行を取得 — 特定の活動ログエントリを要求し、
synuser_activity_log_get_by_pkを介してJSONオブジェクトとして取得します。 - 活動ログに挿入 — アシスタントに新しいログレコードを追加させ、同じキュレーションされたテーブルから更新および削除操作も利用可能です(
synuser_activity_log_insertを使用)。 - PL/SQLルーチンを呼び出す —
synuser_js_admin_getadmintoolinfoを呼び出してビジネスプロシージャを実行し、レコード、コレクション、およびすべてのOUTパラメータを受け取ります。 - 次のシーケンス値を取得 — 他のシーケンスデータを公開せずに、
synuser_job_id_nextvalから次のIDを要求します。 - 事前承認済みのSQLのみを実行 — 選択したテスト済みの型付きSQLステートメントを、引数をバインド値として実行し、アドホックなクエリ構成は行いません。
ドキュメント
解雇されないためのOracle用MCPサーバー
設定こそがセキュリティモデル全体です
エージェントから到達可能なもの
synuser_activity_log_get_by_pkテーブル — 主キーによる1行をJSONオブジェクトとして取得synuser_activity_log_insertテーブル — 同じ選択範囲から _update と _delete を実行synuser_js_admin_getadmintoolinfoPL/SQLルーチン — レコード、コレクション、すべてのOUTパラメータsynuser_job_id_nextvalシーケンス — 次の値のみを取得
設計上、到達不可能なもの
- 呼び出し元からのSQLテキスト — 引数はバインド値のみ
- DDL — create、alter、drop
- 選択していないオブジェクト
- 設定で指定されていないスキーマ
- Oracleパスワード — 環境変数に格納されています
SQLを書けるエージェントは DROP TABLE を書けます。check_flight_availability というツールを持つエージェントは、飛行機の空席確認ができます。なぜなら、その前に存在するコードはそれだけだからです。
キュレーションはコードが存在する前に行われる
最小権限は主張するのは簡単でも、検証するのは困難です。ここでは設定が何を生成するかを決定します。選択されなかったオブジェクトには、ツールもメソッドもクラスもありません。実行中のプロセスで守られるのではなく、バイナリ自体に存在しないため、どんなプロンプトも到達できません。
あなたのビジネスルールはすでにPL/SQLにある
数十年にわたる検証、参照ロジック、監査動作はパッケージ内に存在します。MCPDBWizardは、言語モデルにSELECTでルールを再発明させるのではなく、それらのルーチンをそのまま呼び出します — レコード、コレクション、REFカーソル、そしてすべてのOUTパラメータを返します。
すべての呼び出しは名前付きツールであり、クエリではない
リクエストは厳密なスキーマに対する synuser_activity_log_get_by_pk(entry_id) として到着します — スペルミスのある引数は、データベースに触れる前に拒否されます。ログ記録、レート制限、事後レビュー、監査人への説明がはるかに容易になります。
キュレーションされたMCPツールとSQLプロンプトを並べて比較
2つの対象、2つの記録
プロキシは誰がどのツールを呼び出し、許可されたかどうかを書き込みます。各サーバーはツールが何を実行し、どのように終了したかを書き込みます。引数名は常に記録されます。値は、その設定を有効にした場合のみ記録されます。なぜなら、値はモデルが選択したものだからです。
Oracle 12cから26aiまで
それ以降に追加された型も含みます:ネイティブの JSON、BOOLEAN、VECTOR、そしてJSONリレーショナル双対性ビューによるドキュメントCRUD。JSONで正直に渡せないもの — SDO_GEOMETRY、BFILE — は丸ごとスキップされ、ログには何がどの理由でスキップされたかが記録されます。
アカウント、トークン、権限マトリクス
多数のアカウント、多数の設定、権限ごとに1つのチェックマーク。同じスキーマに対して異なるツールを必要とする2つのチームは、1つの設定と1つのルールではなく、2つの設定になります — これにより、最初のパネルの保証が維持されます。
Oracle自身のルートと比較検討していますか? OracleのMCPサーバーの代替案、アドホックSQLが排除された場合のSQLcl MCPサーバーの代替案 をお読みいただくか、多くの人が実際に抱く疑問から始めてください:AIエージェントに本番データベースへのクエリを許可してもよいか?

設定は何を生成するかを決定し、プロキシは誰がそれを呼び出せるかを決定します。
- 01
オブジェクトを選択する
DesignページをOracleに接続し、公開してもよいPL/SQLパッケージにチェックを入れます。さらに、自分で作成してテストしたSQLステートメント、直接到達可能にしたいテーブルとシーケンスにもチェックを入れます。その選択は設定ファイルとして保存されます — プロパティまたはJSON、バージョン管理可能、パスワードは含まれません。
まずPL/SQLが重要です:公開してもよいパッケージとプロシージャにチェックを入れると、それぞれがパラメータを型付きで持つ1つのツールになります。
次に、自分自身のSQL — 作成してテストしたステートメントで、バインドパラメータがインラインで型指定されています。エージェントはこれらを実行します。独自のSQLを構成することはありません。
最後にテーブル。テーブル単位ではなく操作単位でキュレーションされます — 新しく選択されたテーブルは読み取り専用で、create、update、deleteはあなたがチェックを入れる対象です。 - 02
生成、コンパイル、実行
Runtimeページは、それらのオブジェクトだけに対してJavaを生成し、コンパイルし、ループバック上で独自のサーバーとして起動します。選択しなかったものには、ツールもメソッドもクラスもありません — 単に拒否されるのではなく、バイナリに存在しません。docker run -d --name mcpdbwizard \ -p 8080:8080 \ -e MCPDBWIZARD_ORACLE_HOST=db.example.com \ -e MCPDBWIZARD_ORACLE_PORT=1521 \ -e MCPDBWIZARD_ORACLE_SID=/PDB1 \ -e MCPDBWIZARD_ORACLE_USER=appuser \ -e DB_PASS_FILE=/run/secrets/oracle \ -v mcpdbwizard-demo:/data \ ghcr.io/srmadscience/mcpdbwizard:2.0.32 - 03
MCPクライアントをプロキシに向ける
エージェントは8080番ポートでStreamable HTTP経由で接続し、アカウントに発行されたトークンを使用します。プロキシだけが誰が呼び出しているかを知る唯一のコンポーネントです — アカウント、権限、レート制限を確認してから転送します。{ "mcpServers": { "payroll": { "url": "http://localhost:8080/mcp/alice/payroll", "headers": { "Authorization": "Bearer <id>.<secret>" } } } }
クイックスタート には、トークンの発行と設定の付与を含む全手順が記載されています。