公司数据库服务器为oracle 11g. 想通过MaxKB进行数据库的检索, 之前尝试在MaxKB镜像中封装Oracle的驱动,尝试多次都以失败告终。后面MCP来了,有了专门可以连接oracle的MCP,昨天专门动手来操作部署,以下是躺坑到爬出来的全过程,供各位参考。
1.使用1panel上的dbhub进行部署,发现无法连接数据库
原因是数据库的版本较低,dbhub中的oracle驱动不支持这么低版本的oracle数据库。
2. dbhub-oracle-thick可以支持oracle11g及以下的oracles数据库
查询github上 dbhub的说明 针对老版本的oracle,可以使用dbhub-oracle-thick的docker镜像来部署,针对oracle11g之前的数据库可以使用。
相关Docker安装指令如下:
docker run --rm --init
–name dbhub
–publish 8080:8080
bytebase/dbhub-oracle-thick
–transport http
–port 8080
–dsn “oracle://username:password@localhost:1521/service_name”
请注意这里有个要注意的地方是transport 必须是http ,而不是sse和stdio,否则docker无法正常运行,运行成功的结果如下:
显示connect to mcp server at http://0.0.0.0:8080/message 表示MCP部署成功,一切都很顺利,没有任何怀疑。
在这里有个小插曲,其实部署成功了,但是由于不知道如何测试是否成功,在这里用curl进行MCP的连接测试。
换用cherry studio进行MCP连接测试,
MCP的地址用的是 http://服务器IP:8888 和 http://服务器IP:8888/sse
测试结果如下:
3.部署成功为什么无法访问?
在这里开始了各种怀疑,比如docker有问题,transport的方式写错了?通常大家用的都是sse或者stdio的模式。要不换成sse或stdio的模式再试试。
于是神奇的情况又出现了。
当把http改成sse时,部署完成,运行log直接切换到stdio模式
而且docker一直处于处于重启状态,log一直停留在starting with stdio transport的位置。
把transport换成stdio,也是一样的提示,docker无法正常启动。
找了maxkb的顾问协助,也是没解决问题,折腾了一个下午,先下班空下脑子。
4.transport为http的MCP该如何访问?
今天上班,直接打开github上dbhub的项目说明,地址为 https://github.com/bytebase/dbhub?tab=readme-ov-file ,仔细查看说明文件,找到了一张下面这段内容:
打开了图片,看到了图片上的设置内容
好像发现了问题,访问地址应该是http://服务器IP:端口/message ,注意结尾是/message,而不是/sse
使用cherry studio进行MCP的配置测试,居然成功了,看到了胜利的曙光。
5.在MaxKB中如何配置
Cherry Studio中配置连接dbhub的MCP成功,还是要到MaxKB中进行验证的。
于是又有了新的问题。
在MCP中配置transport为http ,获取工具是提示不支持http,必须为sse或stdio
但是maxkb的1.10.8版本说明中是支持Streamable HTTP协议的
应该还是配置上有点问题,配置改成Streamable HTTP,还是不成功。
于是找了顾问,找到了解决办法,把transport的协议改为 streamable_http
终于连接成功,完成了MaxKB使用dbhub的MCP连接oracle11g的数据库
敲黑板,划重点,做总结:
1.针对 oracle12g 以下的版本,dbhub的镜像包使用 dbhub-oracle-thick ,而不是dbhub
2.docker命令中的transport协议必须为http,而不是sse或stdio,github上说是支持http和stdio,但是stdio模式下尝试多次也没有成功,暂时放弃了。
3.MCP服务使用http模式的访问地址为 http://服务器IP:端口/message ,端口后要加message。
4.在MaxKB中配置MCP服务时,对应的transport 设置为 streamable_http ,而不是http和Streamable HTTP