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 伺服器

設定本身就是完整的安全模型

Agent 可以觸及的項目

  • synuser_activity_log_get_by_pk 資料表 — 以 JSON 物件形式,依主鍵取得單一列
  • synuser_activity_log_insert 資料表 — 支援 _update 與 _delete,來自相同的選取範圍
  • synuser_js_admin_getadmintoolinfo PL/SQL 常式 — 記錄、集合與每個 OUT 參數
  • synuser_job_id_nextval 序列 — 下一個值,僅此而已

因設計而無法觸及的項目

  • 來自呼叫端的 SQL 文字 — 引數皆為綁定值
  • DDL — create、alter、drop
  • 任何你未選取的物件
  • 任何設定檔未指名的 schema
  • Oracle 密碼 — 它存在於環境變數中

一個能寫 SQL 的 agent 就能寫 DROP TABLE。一個握有名為 check_flight_availability 工具的 agent 可以查詢航班是否有空位,因為它面前的所有程式碼就只做這件事。

策展發生在程式碼存在之前

最小權限容易宣稱,卻難以驗證。在這裡,設定檔決定什麼會被產生:一個沒人選取的物件,就沒有工具、沒有方法、也沒有類別。它從二進位檔中缺席,而非由執行中的程序來守護,所以沒有任何提示詞能觸及它。

你的商業規則早已寫在 PL/SQL 裡

數十年累積的驗證、參照邏輯與稽核行為,都封裝在套件中。MCPDBWizard 直接呼叫這些常式 — 記錄、集合、ref cursor,以及每個回傳的 OUT 參數 — 而不是要求語言模型在 SELECT 中重新發明這些規則。

每次呼叫都是具名工具,而非查詢

請求以 synuser_activity_log_get_by_pk(entry_id) 的形式送達,並遵循嚴格的 schema — 拼錯的引數在觸及資料庫之前就會被拒絕。這讓記錄、速率限制、事後審查,以及向稽核人員解釋,都變得容易得多。

兩種對象,兩份記錄

代理伺服器記錄誰呼叫了哪個工具、以及是否被允許;每個伺服器記錄工具做了什麼、以及結果如何。引數名稱永遠記錄;值只有在你開啟該選項時才記錄,因為那些值是模型選的。

Oracle 12c 到 26ai

包含之後新增的型別:原生 JSONBOOLEANVECTOR,以及透過 JSON-relational duality views 進行的文件 CRUD。任何無法忠實跨越 JSON 的項目 — SDO_GEOMETRYBFILE — 會整個略過,而記錄檔會說明略過了什麼、以及原因為何。

帳號、權杖與授權矩陣

多個帳號、多份設定、每個授權一次勾選。兩個團隊需要針對同一 schema 使用不同工具,就是兩份設定,而不是一份設定加一條規則 — 這保持了第一個區塊中的保證完整無缺。

  1. 01

    選取物件

    將 Design 頁面連到 Oracle,勾選你願意開放的 PL/SQL 套件,加上你自己撰寫並測試過的 SQL 陳述式,以及你想直接觸及的資料表與序列。該選取範圍會儲存為設定檔 — properties 或 JSON 格式、可版本化、且不含密碼。 The Design Procedures tab listing PL/SQL packages and procedures with tick boxes PL/SQL 優先,因為這正是重點:勾選你願意開放的套件與程序,每個都會變成一個工具,參數帶有型別。 The Design SQL Statements tab, editing a named .sql file with typed bind parameters 接著是你自己的 SQL — 你撰寫並測試過的陳述式,綁定參數以內聯方式標註型別。Agent 執行這些陳述式;它不會自行組合 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 程式碼、編譯它,並以獨立伺服器形式在 loopback 上啟動。任何你未選取的項目,就沒有工具、沒有方法、也沒有類別 — 它從二進位檔中缺席,而非只是被拒絕。
    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 client 指向代理伺服器

    Agent 透過 Streamable HTTP 在 8080 埠連線,使用發給其帳號的權杖。代理伺服器是唯一知道呼叫者是誰的元件 — 它檢查帳號、授權與速率限制,然後轉發。
    {
      "mcpServers": {
        "payroll": {
          "url": "http://localhost:8080/mcp/alice/payroll",
          "headers": {
            "Authorization": "Bearer <id>.<secret>"
          }
        }
      }
    }
    

快速入門涵蓋了完整路徑,包括發行權杖與授權設定檔。