mcpField
M
MCP DB Wizard

MCP DB Wizard

已认证精选远程服务
mcpdbwizard.com数据库13 周前更新

关于 MCP DB Wizard

MCP DB Wizard 根据选定的 Oracle 对象和批准的 SQL,生成 Java 调用层及可选的 MCP 服务端。它面向希望让 Agent 调用经过筛选的类型化数据库操作,而非通用 run-sql 工具的团队。

主要功能

  1. 01根据 PL/SQL 签名生成类型化工具
  2. 02在生成时选择对外开放的对象
  3. 03生成表的 CRUD 和查询工具
  4. 04以类型化绑定参数执行固定 SQL
  5. 05通过 stdio 或 Streamable HTTP 运行 MCP

适用场景

  1. 01向 AI Agent 开放选定的存储过程
  2. 02将表操作限制为指定 CRUD 动作
  3. 03将批准的 SQL 语句作为类型化工具开放
  4. 04根据 Oracle 模式生成数据库访问层

MCP 相关

生成的 MCP 服务端开放选定的 PL/SQL 例程、表操作、批准的 SQL 语句、序列及受支持的 JSON 关系双向视图。默认使用 stdio,也可使用 Streamable HTTP,并可选启用 Bearer 令牌认证和 TLS。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"db-wizard": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/srmadscience/mcpdbwizard:2.0.29"
]
}
}
}
启动命令docker run -i --rm ghcr.io/srmadscience/mcpdbwizard:2.0.29

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/srmadscience/mcpdbwizard:2.0.29

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCPDBWizard

一个基于你选择的对象构建的 Oracle MCP 服务。 在控制台中勾选 PL/SQL 包、 表、序列和你自行测试过的 SQL 语句,它便会生成一个 Model Context Protocol 服务, 将且仅将这些对象作为类型化工具提供给 AI Agent——每个工具都包含一个根据过程真实签名推导出的 JSON Schema。

这里没有 run-sql 工具。 任何未选中的内容都不会有工具、方法或类:它不会在运行时被拒绝,而是根本不存在于二进制文件中。运行时也不会拼接查询——生成的代码是包含固定 SQL 语句和类型化绑定的普通 Java,MCP 服务调用这些封装,而不是编写供模型执行的 SQL。

生成这个服务也意味着生成整个调用层,因此你还会获得:类型化 DAO 工厂、可调用语句封装、表管理器以及可选的 SOAP 层。它们本身也很实用,但 MCP 服务才是重点。

支持 Oracle 12c 至 26ai,并已针对覆盖该范围的六个实时实例进行回归测试。

已列入 mcpservers.org

MCPDBWizard 的工作方式:设计时,根据 Oracle 数据字典选择的对象会保存为配置文件,并且只为这些对象生成 Java 代码;运行时,MCP 客户端调用代理,代理检查令牌、授权和速率限制,然后将请求转发给生成的 MCP 服务,由该服务绑定参数并调用 Oracle。

完整产品的组成方式。本仓库包含生成器——配置文件、生成并编译,以及生成的 MCP 服务。Design 页面、Runtime 页面和代理位于 Docker 镜像中的 Web 控制台;在这里,你可以改用 Swing 工具或配置文件选择对象,生成的服务也可以独立运行。


难点所在

通常的做法是给 Agent 一个 run-sql 工具,但当面对真实的架构时,这种方法就会失效:与整洁的基准测试相比,已发布的 text‑to‑SQL 准确率在企业规模的架构上会大幅下降;而一个错误的 UPDATE 不是错误答案,而是一次事故。

另一种做法是精心设计工具——但手动为每个过程编写一个工具,数量多了就难以扩展;而且 PL/SQL 特别不适合自动推导:

  • 一个过程可以有任意数量的 OUT 和 IN OUT 参数,而不只是单个返回值
  • 参数可以是记录(包括嵌套在其他记录中的记录)、集合、 %ROWTYPE、REF CURSOR、包类型和重载
  • Oracle 自身的数据字典在不同版本中的描述方式各不相同

本项目会完成这一推导。每个生成的 MCP 工具都包含根据过程实际签名构建的真实 JSON Schema,因此 Agent 会被告知参数是什么,而不是从说明文字中自行推断。

oracle:  PROCEDURE order_summary(p_customer IN  NUMBER,
                                 p_totals   OUT summary_rec,
                                 p_lines    OUT SYS_REFCURSOR)

tool:    order_summary { "p_customer": <number> }
      -> { "p_totals": { "orderCount": 12, "value": 4210.55 },
           "p_lines":  [ { "sku": "AB-1", "qty": 3 }, ... ] }

记录会以 JSON 对象形式传递,REF CURSOR 会以行对象数组形式传递,DATE 会以 ISO‑8601 字符串形式传递,RAW 和二进制向量会以 base64 形式传递,CLOB 会以文本形式传递,BLOB 会以 base64 形式传递。


快速开始

需要 Java 21 和 Maven。Oracle JDBC 驱动(com.oracle.database.jdbc:ojdbc11) 来自 Maven Central——无需手动安装。

mvn clean package

这会在 target/ 中生成两个 jar:一个普通 jar,以及一个内置驱动的独立 mcpdbwizard-app-<version>-shaded.jar。

# Interactive (Swing) -- pick objects and options, save a config
java -jar target/mcpdbwizard-app-*-shaded.jar <log_dir> myconfig.pb2

# Batch -- regenerate from a saved config
java -jar target/mcpdbwizard-app-*-shaded.jar <log_dir> build myconfig.pb2

如果 <log_dir> 不存在,则会创建它。

2026-08 年变更: 以前命令开头有一个 <access_code> 参数。该参数已 移除,仍然传入该参数的命令行会将其视为日志目录。 该参数只会验证格式——至少 19 个字符、不是路径、不是字面值 build—— 随后便会被忽略,因此不会进行任何身份验证。请从任何传入该参数的脚本中将其删除。

配置文件可以是 .pb2(扁平属性文件)或 .json;两种格式都可接受,并且可以无损地双向转换:

java -cp target/mcpdbwizard-app-*-shaded.jar \
     com.mcpdbwizard.schema.ConfigConverter myconfig.pb2 myconfig.json

生成内容

DAO 工厂每个配置对应一个入口点,用于配置连接和日志记录
PL/SQL 包装器每个过程/函数对应一个类——setParamX、executeProc、getParamY
表管理器按主键执行行 CRUD,以及按唯一键、索引和外键子表查找
SQL 语句类你自己的 SQL,带有类型化绑定参数
SOAP 服务层可选
JSON / JSON-RPC 连接器可选
MCP 服务可选(需要 Java 17+ 才能使用 MCP SDK)

生成的代码仅依赖本仓库中的运行时库 com.mcpdbwizard.pub。

MCP 服务

生成一个 <Factory>McpServer.java,默认通过 stdio 通信,也可在使用 http [port] 启动时通过 Streamable HTTP 通信。可选的 bearer-token 身份验证和 TLS 都会在运行时从环境变量读取密钥;如果密钥未设置,则会安全失败,因此生成的源代码中不会包含任何密钥。

它会公开 PL/SQL 例程、表行 CRUD 和二级查找、用户 SQL 语句、序列,以及——在 23ai 上——支持文档 CRUD 和 etag 乐观锁定的 JSON 关系型双向视图。

公开内容在生成时确定,而非运行时。 未选择的对象完全不会生成代码;TABLE_MCP_CRUD_<i> 可将表的操作范围缩小到创建/读取/更新/删除的任意子集。未公开的操作不会生成工具方法——它们不会存在于二进制文件中,而不仅仅是未注册。


Oracle 数据类型支持

除常见标量类型和 LOB 外,还支持:12c 标识列和扩展的 VARCHAR2/RAW;21c 原生 JSON;23ai 原生 BOOLEAN、VECTOR(稠密、二进制和稀疏)以及 JSON 关系型双向视图。

已知缺口:TIMESTAMP WITH [LOCAL] TIME ZONE 和 BFILE 可作为过程参数传递,但尚不能用作表列;SDO_GEOMETRY 没有 JSON 映射,因此会跳过使用该类型的例程;FLOAT16 向量在服务端被禁用。


日志记录

生成的工厂会根据配置选择一种 LogInterface 实现:控制台、文本文件、java.util.logging、Log4j 1.x、SLF4J 或 Log4j 2。SLF4J 和 Log4j 2 后端位于 com.mcpdbwizard.pub 中,且仅依赖 facade jar;它是可选依赖——如果使用这些后端,请自行提供 api 和绑定。


测试

数据库无关测试套件无需任何配置,在全新克隆后即可通过:

mvn test

需要 Oracle 的测试设有门控:无法连接数据库时会跳过,而不是失败。 若要将它们指向你自己的实例,请复制模板——实际文件已加入 gitignore,且 不会离开你的计算机:

cp src/test/resources/test-boxes.properties.template src/test/resources/test-boxes.properties
cp Scripts/tns/tnsnames.ora.template                 Scripts/tns/tnsnames.ora
cp Scripts/boxes.env.template                        Scripts/boxes.env

对于每项设置,环境变量(MCPDBWIZARD_TEST_HOST 等)始终优先于文件,这样 一次运行就能选择不同的服务。

第三层测试依赖于生成器输出:Scripts/testrun_current.sh 会根据一组配置重新生成代码并进行编译,随后一系列测试框架会用该代码连接实时数据库进行测试。

**这一层不属于本仓库,其中所需的架构也不属于本仓库。**这些配置会检查 Oracle 架构,而这些架构的结构并非我们可以公开的——其中有些来自多年前的客户项目——并且配置会枚举其指向的架构,因此配置本身也不能随项目发布。测试框架也同样不能发布:它们会引用这些架构中的表和例程,并且只有针对重新生成的代码树才能编译,而这里不可能存在这样的代码树。

这对你意味着:运行生成器无需任何额外内容,运行测试套件也无需任何额外内容。在全新克隆后,数据库无关测试是完整且通过的;设有门控的实时测试则会跳过。你无法获得的是一套可供重新生成的现成样本。Scripts/check_provisioning.sh 仍会保留,它会准确列出配置所需的对象;如果你要构建自己的配置,可以从这里着手。

examples/generated-output/ 展示了生成器的输出,无需连接数据库。


仓库布局

路径说明
src/main/java/com/mcpdbwizard/pub生成代码所链接的运行时库
src/main/java/com/mcpdbwizard/app生成器——引擎、Swing UI、共享辅助工具
src/main/java/com/mcpdbwizard/schema配置的类型化模型;.pb2 ↔ .json
src/main/java/com/mcpdbwizard/mcpdbwizardconnectorJSON / JSON‑RPC 连接器生成器
examples/generated-output已纳入版本控制的生成器输出示例,重新生成于 2026‑08‑07
Scripts/重新生成、配置检查和导出门控
API 文档为 com.mcpdbwizard.pub 生成的 javadoc,即你所链接的库

贡献者说明——架构、约定和积累的注意事项——见 CLAUDE.md。


API 文档

com.mcpdbwizard.pub 的 API 文档

这是生成代码所链接的运行时库,也是唯一有文档说明的包——生成器自身的内部实现不对外公开,发布这些内容会掩盖你实际调用的部分。包概要会说明应使用哪些内容,并包含兼容性约定:其中的签名对该生成器产出的所有程序都至关重要,因此只会增加方法,不会更改已有方法。

同一套页面也发布在项目网站的 mcpdbwizard.com/javadoc 上。两处文档都会在发布时从源代码重新生成,而不是相互复制。

在本地运行 mvn javadoc:javadoc,会将文档写入 target/reports/apidocs/。该命令启用了 failOnWarnings,因此失效的 @link 会导致构建失败,而不会让无效的交叉引用随版本发布。


已知问题

已知问题 — 问题是什么、调用方遇到问题时实际会看到什么,以及每个问题的解决方法。大多数问题不会主动显现:记录中的 JSON 键是生成的字段名而非列名、VECTOR 例程参数只能接受稠密数组,或配置中的工具数量超出了 Oracle 的 open_cursors。

其中每个尚未解决的问题也都是本仓库中的一个 issue,页面中附有对应链接。提交新 issue 前请先阅读;如果你正好遇到了其中某个问题,请在对应 issue 下说明,而不是另开一个。之所以有三个问题只记录了文档而尚未修复,是因为没人提出过需求,所以你的评论可能就能让“从来没人需要过”变成“有人需要”。


贡献

请参阅 CONTRIBUTING.md。打开拉取请求前,请先运行以下命令:

Scripts/export/check-export-clean.sh

如果代码库中混入了私有主机名、凭据或 jar 文件,该命令就会失败。

许可证

Apache License 2.0 — 请参阅 LICENSE 和 NOTICE。

此生成器生成的代码属于你自己的作品,不受本项目的许可证义务约束。它在运行时链接到 com.mcpdbwizard.pub,该库位于本仓库中,同样采用 Apache‑2.0 许可证,因此你可以按自己喜欢的条款发布生成的应用程序。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。