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_getadmintoolinfo PL/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まで

それ以降に追加された型も含みます:ネイティブのJSONBOOLEANVECTOR、およびJSONリレーショナル双方向性ビューによるドキュメントCRUD。JSONで正直に渡せないもの — SDO_GEOMETRYBFILE — はすべてスキップされ、ログには何がどの理由でスキップされたかが記録されます。

アカウント、トークン、および権限マトリクス

多数のアカウント、多数の設定、権限ごとに1つのチェックマーク。同じスキーマに対して異なるツールを必要とする2つのチームは、1つの設定と1つのルールではなく、2つの設定です — これにより、最初のパネルの保証が損なわれません。

  1. 01

    オブジェクトを選択する

    DesignページをOracleに接続し、公開してもよいPL/SQLパッケージにチェックを入れます。さらに、自分で作成してテストしたSQLステートメント、および直接到達可能にしたいテーブルとシーケンスにもチェックを入れます。その選択は設定ファイルとして保存されます — propertiesまたはJSON、バージョン管理可能、パスワードは含まれません。 The Design Procedures tab listing PL/SQL packages and procedures with tick boxes PL/SQLが最初です。それが要点だからです:公開してもよいパッケージとプロシージャにチェックを入れると、それぞれが型付きパラメータを持つ1つのツールになります。 The Design SQL Statements tab, editing a named .sql file with typed bind parameters 次に、自分自身のSQL — 自分で作成してテストしたステートメントで、バインドパラメータがインラインで型付けされています。エージェントはこれらを実行します。独自に組み立てることはありません。 The Design Tables tab, with each table ticked and separate MCP read, create, update and delete boxes 最後にテーブルです。テーブル単位ではなく操作単位でキュレーションされます — 新しく選択されたテーブルは読み取り専用で、create、update、deleteはあなたがチェックを入れるものです。
  2. 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
    
  3. 03

    MCPクライアントをプロキシに向ける

    エージェントはStreamable HTTP経由で8080番ポートに接続し、自分のアカウントに発行されたトークンを使用します。プロキシは誰が呼び出しているかを知る唯一のコンポーネントです — アカウント、権限、レート制限を確認してから転送します。
    {
      "mcpServers": {
        "payroll": {
          "url": "http://localhost:8080/mcp/alice/payroll",
          "headers": {
            "Authorization": "Bearer <id>.<secret>"
          }
        }
      }
    }
    

クイックスタートには、トークンの発行と設定の付与を含む全手順が記載されています。