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_getadmintoolinfo PL/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 里重新发明规则。

当你的 PL/SQL 变成工具时,代理会看到什么

每次调用都是命名工具,而不是查询

请求以 synuser_activity_log_get_by_pk(entry_id) 形式到达,并遵循严格的 schema — 拼写错误的参数在触碰数据库之前就会被拒绝。这样更容易记录日志、限流、事后审查,也更容易向审计人员解释。

策展后的 MCP 工具与 SQL 提示词并排对比

两类受众,两类记录

代理服务器记录谁调用了哪个工具以及是否被允许;每个服务器记录工具做了什么以及结果如何。参数名称始终记录;值仅在您开启该选项时才记录,因为值是由模型选择的。

MCP 服务器的日志应该放在哪里

Oracle 12c 到 26ai

包括此后新增的类型:原生 JSON、BOOLEAN 和 VECTOR,以及基于 JSON 关系双重视图的文档 CRUD。任何无法诚实跨越 JSON 的内容 — SDO_GEOMETRY、BFILE — 会被整体跳过,日志会说明跳过了哪些以及原因。

账户、令牌和授权矩阵

多个账户、多份配置,每个授权一次勾选。两个团队需要针对同一 schema 的不同工具,那就是两份配置,而不是一份配置加一条规则 — 这样第一块面板中的保证才能保持完整。

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 语句,以及你希望可直接访问的表和序列。该选择会保存为配置文件 — 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 — 你编写并测试过的语句,绑定参数内联类型化。代理运行这些语句;它不会自行编写。 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 客户端指向代理服务器

    代理通过 Streamable HTTP 在 8080 端口连接,使用分配给其账户的令牌。代理服务器是唯一知道调用者身份的组件 — 它检查账户、授权和限流,然后转发。
    {
      "mcpServers": {
        "payroll": {
          "url": "http://localhost:8080/mcp/alice/payroll",
          "headers": {
            "Authorization": "Bearer <id>.<secret>"
          }
        }
      }
    }
    

快速入门 包含完整路径,包括签发令牌和授权配置。