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

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

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 可以查詢航班是否有空位,因為它面前的所有程式碼就只做這件事。

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

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

一個沒有 run-sql 工具的 MCP 伺服器改變了什麼

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

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

當你的 PL/SQL 變成工具時,agent 會看到什麼

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

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

策展後的 MCP 工具與 SQL 提示詞並排比較

兩種對象,兩份記錄

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

MCP 伺服器的日誌應該放在哪裡

Oracle 12c 至 26ai

包含自那之後新增的型別:原生 JSON、BOOLEAN 與 VECTOR,以及透過 JSON-relational duality views 進行的文件 CRUD。任何無法誠實跨越 JSON 的項目 — SDO_GEOMETRY、BFILE — 會整個略過,且日誌會說明略過了哪些以及原因。

帳戶、權杖與授權矩陣

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

MCP 伺服器的角色型存取控制

想與 Oracle 自身的方案比較?請閱讀 Oracle MCP 伺服器的替代方案、當臨時 SQL 被排除時的 SQLcl MCP 伺服器替代方案,或從大多數人真正會問的問題開始:我可以讓 AI agent 查詢我的生產資料庫嗎?

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 陳述式,以及你想要可直接觸及的資料表和序列。該選取會儲存為設定檔 — 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 執行這些陳述式;它不會自行組合。 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.32
    
  3. 03

    將你的 MCP 用戶端指向代理伺服器

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

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