MCP DB Wizard
公式Oracle向けのMCPサーバーで、解雇されないためのものです。このMCPサーバーはSQLプロンプトを公開せず、Oracleへのログイン方法も教えてくれません。選択されたオブジェクトとSQL文のみが使用可能です。
DB Wizard MCPで何ができますか?
- 厳選されたPL/SQLルーチンの呼び出し — アシスタントに、
synuser_js_admin_getadmintoolinfoのような審査済みパッケージプロシージャを呼び出してもらい、レコード、コレクション、およびすべてのOUTパラメータを返してもらいます。 - 単一のテーブル行の取得 —
synuser_activity_log_get_by_pkを使用して主キーで行をリクエストし、JSONオブジェクトとして取得します。 - テーブルデータの挿入、更新、または削除 — 生成された
synuser_activity_log_insertツール(およびその_updateと_deleteバリアント)を使用して、アシスタントに行の変更を指示します。 - 次のシーケンス値の取得 — 他のシーケンス操作を公開せずに、
synuser_job_id_nextvalから次の番号を要求します。 - 事前承認済み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はそれらのルーチンをそのまま呼び出します — レコード、コレクション、REFカーソル、およびすべてのOUTパラメータを返します — 言語モデルにSELECT文でルールを再発明させる代わりに。
すべての呼び出しは名前付きツールであり、クエリではありません
リクエストは厳密なスキーマに対するsynuser_activity_log_get_by_pk(entry_id)として到着します — スペルミスのある引数は、データベースに触れる前に拒否されます。ログ記録、レート制限、事後レビュー、監査人への説明がはるかに簡単です。
2つの対象、2つの記録
プロキシは誰がどのツールを呼び出し、それが許可されたかどうかを書き込みます。各サーバーはツールが何をしたか、そしてどのように終了したかを書き込みます。引数名は常に記録されます。値は、それを有効にした場合のみ記録されます。なぜなら、その値はモデルが選択したものだからです。
Oracle 12cから26aiまで
それ以降に追加された型も含みます:ネイティブのJSON、BOOLEAN、VECTOR、およびJSONリレーショナル双方向性ビューによるドキュメントCRUD。JSONで正直に渡せないもの — SDO_GEOMETRY、BFILE — はすべてスキップされ、ログには何がどの理由でスキップされたかが記録されます。
アカウント、トークン、および権限マトリクス
多数のアカウント、多数の設定、権限ごとに1つのチェックマーク。同じスキーマに対して異なるツールを必要とする2つのチームは、1つの設定と1つのルールではなく、2つの設定です — これにより、最初のパネルの保証が損なわれません。
- 01
オブジェクトを選択する
DesignページをOracleに接続し、公開してもよいPL/SQLパッケージにチェックを入れます。さらに、自分で作成してテストしたSQLステートメント、および直接到達可能にしたいテーブルとシーケンスにもチェックを入れます。その選択は設定ファイルとして保存されます — propertiesまたはJSON、バージョン管理可能、パスワードは含まれません。
PL/SQLが最初です。それが要点だからです:公開してもよいパッケージとプロシージャにチェックを入れると、それぞれが型付きパラメータを持つ1つのツールになります。
次に、自分自身の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.4 - 03
MCPクライアントをプロキシに向ける
エージェントはStreamable HTTP経由で8080番ポートに接続し、自分のアカウントに発行されたトークンを使用します。プロキシは誰が呼び出しているかを知る唯一のコンポーネントです — アカウント、権限、レート制限を確認してから転送します。{ "mcpServers": { "payroll": { "url": "http://localhost:8080/mcp/alice/payroll", "headers": { "Authorization": "Bearer <id>.<secret>" } } } }
クイックスタートには、トークンの発行と設定の付与を含む全手順が記載されています。