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表 — 按主键取一行,以 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 的代理就能写 DROP TABLE。一个持有名为 check_flight_availability 工具的代理可以查询航班可用性,因为它面前的全部代码就只做这件事。
策展发生在代码存在之前
最小权限原则说起来容易,验证起来难。在这里,配置决定生成什么:一个未被选择的对象没有工具、没有方法、没有类。它从二进制文件中就不存在,而不是靠运行中的进程来拦截,因此任何提示词都无法触达它。
一个没有 run-sql 工具的 MCP 服务器会带来什么改变
你的业务规则已经在 PL/SQL 里了
几十年的校验逻辑、引用完整性和审计行为都封装在包中。MCPDBWizard 按原样调用这些例程 — 记录、集合、ref cursor 以及每个 OUT 参数都会返回 — 而不是让语言模型在 SELECT 里重新发明规则。
每次调用都是命名工具,而不是查询
请求以 synuser_activity_log_get_by_pk(entry_id) 形式到达,并遵循严格的 schema — 拼写错误的参数在触碰数据库之前就会被拒绝。这样更容易记录日志、限流、事后审查,也更容易向审计人员解释。
两类受众,两类记录
代理服务器记录谁调用了哪个工具以及是否被允许;每个服务器记录工具做了什么以及结果如何。参数名称始终记录;值仅在您开启该选项时才记录,因为值是由模型选择的。
Oracle 12c 到 26ai
包括此后新增的类型:原生 JSON、BOOLEAN 和 VECTOR,以及基于 JSON 关系双重视图的文档 CRUD。任何无法诚实跨越 JSON 的内容 — SDO_GEOMETRY、BFILE — 会被整体跳过,日志会说明跳过了哪些以及原因。
账户、令牌和授权矩阵
多个账户、多份配置,每个授权一次勾选。两个团队需要针对同一 schema 的不同工具,那就是两份配置,而不是一份配置加一条规则 — 这样第一块面板中的保证才能保持完整。
想和 Oracle 自身的方案做对比?请阅读 Oracle MCP 服务器的一个替代方案、排除临时 SQL 时的 SQLcl MCP 服务器替代方案,或者从大多数人真正会问的问题开始:我能让 AI 代理查询我的生产数据库吗?

配置决定生成什么;代理服务器决定谁可以调用。
- 01
选择对象
将 Design 页面连接到 Oracle,勾选你愿意暴露的 PL/SQL 包,加上你自己编写并测试过的 SQL 语句,以及你希望可直接访问的表和序列。该选择会保存为配置文件 — properties 或 JSON 格式,可版本化,且不包含密码。
PL/SQL 优先,因为这才是重点:勾选你愿意暴露的包和过程,每个都会变成一个带类型化参数的工具。
然后是你自己的 SQL — 你编写并测试过的语句,绑定参数内联类型化。代理运行这些语句;它不会自行编写。
最后是表,按操作逐项策展而非按表整体策展 — 新选择的表默认为只读,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 客户端指向代理服务器
代理通过 Streamable HTTP 在 8080 端口连接,使用分配给其账户的令牌。代理服务器是唯一知道调用者身份的组件 — 它检查账户、授权和限流,然后转发。{ "mcpServers": { "payroll": { "url": "http://localhost:8080/mcp/alice/payroll", "headers": { "Authorization": "Bearer <id>.<secret>" } } } }
快速入门 包含完整路径,包括签发令牌和授权配置。