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

配置就是全部的安全模型

代理可访问

  • 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 工具的代理可以查询航班可用性,因为它面前的全部代码就只做这件事。

治理发生在代码存在之前

最小权限原则说起来容易,验证起来难。在这里,配置决定生成什么:未被选择的对象没有工具、没有方法、没有类。它从二进制文件中缺席,而不是靠运行中的进程来守护,因此任何提示词都无法触达它。

你的业务规则已经在 PL/SQL 里了

几十年的校验、引用逻辑和审计行为都封装在包中。MCPDBWizard 按原样调用这些例程 — 记录、集合、引用游标以及每个 OUT 参数都会返回 — 而不是让语言模型在 SELECT 中重新发明规则。

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

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

两类受众,两类记录

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

Oracle 12c 到 26ai

包括此后新增的类型:原生 JSONBOOLEANVECTOR,以及基于 JSON 关系二元视图的文档 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 — 您编写并测试过的语句,绑定参数以内联方式标注类型。代理运行这些语句;它不会自行拼装。 The Design Tables tab, with each table ticked and separate MCP read, create, update and delete boxes 最后是表,按操作而非按表进行治理 — 新选中的表默认为只读,create、update 和 delete 由您勾选决定。
  2. 02

    生成、编译、运行

    Runtime 页面仅为这些对象生成 Java 代码,编译它,并在回环地址上以独立服务器方式启动。任何您未选择的内容没有工具、没有方法、没有类 — 它从二进制文件中缺席,而不仅仅是被拒绝。
    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 客户端指向代理

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

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