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_getadmintoolinfo PL/SQLルーチン — レコード、コレクション、すべてのOUTパラメータ
  • synuser_job_id_nextval シーケンス — 次の値のみを取得

設計上、到達不可能なもの

  • 呼び出し元からのSQLテキスト — 引数はバインド値のみ
  • DDL — create、alter、drop
  • 選択していないオブジェクト
  • 設定で指定されていないスキーマ
  • Oracleパスワード — 環境変数に格納されています

SQLを書けるエージェントは DROP TABLE を書けます。check_flight_availability というツールを持つエージェントは、飛行機の空席確認ができます。なぜなら、その前に存在するコードはそれだけだからです。

キュレーションはコードが存在する前に行われる

最小権限は主張するのは簡単でも、検証するのは困難です。ここでは設定が何を生成するかを決定します。選択されなかったオブジェクトには、ツールもメソッドもクラスもありません。実行中のプロセスで守られるのではなく、バイナリ自体に存在しないため、どんなプロンプトも到達できません。

run-sqlツールを持たないMCPサーバーが変えるもの

あなたのビジネスルールはすでにPL/SQLにある

数十年にわたる検証、参照ロジック、監査動作はパッケージ内に存在します。MCPDBWizardは、言語モデルにSELECTでルールを再発明させるのではなく、それらのルーチンをそのまま呼び出します — レコード、コレクション、REFカーソル、そしてすべてのOUTパラメータを返します。

PL/SQLがツールになるときにエージェントが見るもの

すべての呼び出しは名前付きツールであり、クエリではない

リクエストは厳密なスキーマに対する synuser_activity_log_get_by_pk(entry_id) として到着します — スペルミスのある引数は、データベースに触れる前に拒否されます。ログ記録、レート制限、事後レビュー、監査人への説明がはるかに容易になります。

キュレーションされたMCPツールとSQLプロンプトを並べて比較

2つの対象、2つの記録

プロキシは誰がどのツールを呼び出し、許可されたかどうかを書き込みます。各サーバーはツールが何を実行し、どのように終了したかを書き込みます。引数名は常に記録されます。値は、その設定を有効にした場合のみ記録されます。なぜなら、値はモデルが選択したものだからです。

MCPサーバーのログを置くべき場所

Oracle 12cから26aiまで

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

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

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

MCPサーバーのロールベースアクセス

Oracle自身のルートと比較検討していますか? OracleのMCPサーバーの代替案、アドホックSQLが排除された場合のSQLcl MCPサーバーの代替案 をお読みいただくか、多くの人が実際に抱く疑問から始めてください:AIエージェントに本番データベースへのクエリを許可してもよいか?

Design time: the Design pages read Oracle's data dictionary, the selection is saved as a config file with no password, and Java is generated and compiled for the selected objects only. Run time: an MCP client calls the proxy on port 8080 with a bearer token; the proxy checks the token, the grant and the rate limit, then forwards to the generated MCP server, which binds the arguments and calls Oracle. The proxy and the server both write to the audit trail.

設定は何を生成するかを決定し、プロキシは誰がそれを呼び出せるかを決定します。

  1. 01

    オブジェクトを選択する

    DesignページをOracleに接続し、公開してもよいPL/SQLパッケージにチェックを入れます。さらに、自分で作成してテストしたSQLステートメント、直接到達可能にしたいテーブルとシーケンスにもチェックを入れます。その選択は設定ファイルとして保存されます — プロパティまたは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 — 作成してテストしたステートメントで、バインドパラメータがインラインで型指定されています。エージェントはこれらを実行します。独自の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.32
    
  3. 03

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

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

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