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_getadmintoolinfoPL/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
包含自那之後新增的型別:原生 JSON、BOOLEAN 與 VECTOR,以及透過 JSON-relational duality views 進行的文件 CRUD。任何無法誠實跨越 JSON 的項目 — SDO_GEOMETRY、BFILE — 會整個略過,且日誌會說明略過了哪些以及原因。
帳戶、權杖與授權矩陣
多個帳戶、多份設定、每個授權一個勾選。兩個團隊需要同一 schema 上的不同工具,就是兩份設定,而不是一份設定加一條規則 — 這保持了第一個區塊中的保證完整無缺。
想與 Oracle 自身的方案比較?請閱讀 Oracle MCP 伺服器的替代方案、當臨時 SQL 被排除時的 SQLcl MCP 伺服器替代方案,或從大多數人真正會問的問題開始:我可以讓 AI agent 查詢我的生產資料庫嗎?

設定決定產生什麼;代理伺服器決定誰可以呼叫它。
- 01
選取物件
將 Design 頁面連接到 Oracle,勾選你願意開放的 PL/SQL 套件,加上你自己撰寫並測試過的 SQL 陳述式,以及你想要可直接觸及的資料表和序列。該選取會儲存為設定檔 — properties 或 JSON 格式、可版本化,且不含任何密碼。
先處理 PL/SQL,因為這是重點:勾選你願意開放的套件與程序,每個都會變成一個工具,其參數皆有型別。
接著是你自己的 SQL — 你撰寫並測試過的陳述式,綁定參數以內聯方式標註型別。Agent 執行這些陳述式;它不會自行組合。
最後是資料表,依操作逐項策展而非依資料表整體策展 — 新選取的資料表預設為唯讀,而 create、update 與 delete 由你決定是否勾選。 - 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 - 03
將你的 MCP 用戶端指向代理伺服器
Agent 透過 Streamable HTTP 在 8080 埠連線,使用發給其帳戶的權杖。代理伺服器是唯一知道呼叫者是誰的元件 — 它檢查帳戶、授權與速率限制,然後轉發。{ "mcpServers": { "payroll": { "url": "http://localhost:8080/mcp/alice/payroll", "headers": { "Authorization": "Bearer <id>.<secret>" } } } }
快速入門涵蓋了完整路徑,包括發行權杖與授予設定。