速看!新版SpringAI的2个致命问题
无论是使用最新正式版的 Spring AI,还是最新正式版 Spring AI Alibaba,在实现自定义 MCP 服务器端和客户端的时候,一定要注意这两个问题,不然你会发现你的 MCP 服务器端能启动,但客户端就是连接不上,并且控制台也都是误报信息。
注意事项一
自定义 MCP 服务器端添加依赖时,如果是非标准 stdio 模式,当前项目一定要记得排除掉 spring-boot-starter-web 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
也就是说,你的 spring-ai-starter-mcp-server-webflux 依赖不能和 spring-boot-starter-web 依赖并存,以下是错误配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
因为当有 spring-boot-starter-web 依赖时会默认使用 tomcat 启动服务,这样项目虽然启动了,但 mcp service 服务并未启动,mcp service 服务是使用 netty 启动的,如下图所示:


注意事项二
Spring AI 正式版之后,在使用客户端注册 MCP 工具时要使用 ToolCallbacks 而不是 Tools,如果在新版本中使用后者就会启动报错。
错误用法
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultTools(tools.getToolCallbacks())
.build();
}
或者以下方式也是错误的:
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultTools(tools)
.build();
}
正确用法
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultToolCallbacks(tools.getToolCallbacks())
.build();
}
小结
在进行 Spring AI 或 Spring AI Alibaba 老项目升级时,或使用最新正式版框架时,一定要注意这两个问题,不然就会导致自定义的 MCP 服务能启动,但客户端就是连接不上的问题。
本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、LangChain4j、Dify、Spring AI Alibaba、智能体(AI Agent)、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。
速看!新版SpringAI的2个致命问题的更多相关文章
- jQuery速看
本文参考w3school网站. jQuery是一个十分流行的javascript库. 基础语法是:$(selector).action() $:表示使用的语法为jquery selector:选择器 ...
- P1162_填涂颜色(JAVA语言)(速看!全洛谷最暴力解法!QAQ)
思路:看了看数据n<=30,于是我们可以暴力求解(主要是BFS学的不咋地~2333).枚举每个0的位置,看上下左右四个方向上是否都有1.都有1的话说明被1包围,即在闭合圈的内部,开个数组标记一下 ...
- 速看,ElasticSearch如何处理空值
大家好,我是咔咔 不期速成,日拱一卒 在MySQL中,十分不建议大家给表的默认值设置为Null,这个后期咔咔也会单独出一期文章来说明这个事情. 但你进入一家新公司之前的业务中存在大量的字段默认值为Nu ...
- DC010的精华分享【首发速看】
世界黑客大会[DC010] 是全球安全圈最神秘.最前沿的黑客大派对 而作为中国首个受DEFCON授权支持成立的 地区性 信息 安全 技术交流平台 DEFCONGROUP 010(DC010) 在国内 ...
- 安全意识第三期丨关于高速ETC办理的这些新骗局,速看!
近期,最火爆的莫过于ETC了. 不仅各大银行,甚至微信和支付宝都推出了办理服务. 虽说更加便捷了,却也带来了安全隐患. 下面这个案例,大家一定要注意,已经有很多车主“中招”,落入了骗子的圈套. 注意: ...
- (数据科学学习手札151)速通pandas2.0新版本干货内容
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前两天pandas正式发布了其 ...
- Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方
参考资料:http://cn.mathworks.com/help/matlab/ref/fread.html 注意:参考资料针对的Matlab版本号R2015a,我使用的是R2013b. Matla ...
- Python操作Mysql实例代码教程在线版(查询手册)
本文介绍了Python操作MYSQL.执行SQL语句.获取结果集.遍历结果集.取得某个字段.获取表字段名.将图片插入数据库.执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐 实 ...
- 韦东山yy公开课笔记(1)--各种杂的问题
1,第四期的智能猫眼会有打电话和发短信的功能吗? 答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefil ...
- C#中WebBrowser的使用
原文:C#中WebBrowser的使用 其实网络上这类文章很多,我大致从头说说我自己的经验. 1.加入引用 在控件栏按右键,选择“添加/移除项”,选COM组件,选中“Microsoft Web Bro ...
随机推荐
- emlog 制作一个小插件(截取正文生成 xx 字摘要)的过程
blockquote { background: rgba(255, 255, 0, 1); color: rgba(255, 0, 0, 1) !important } 如果熟悉其他 PHP 平台的 ...
- Vue3封装支持Base64导出的电子签名组件
效果图 准备工作 组件内用到elementPlus,vue-esign组件,使用前提前安装好. 组件代码 <template> <!-- 签名容器 --> <div cl ...
- 大量数据topk-分桶+堆+多路并归解决方案
利用分桶.堆与多路归并解决 TopK 问题:结果处理阶段解析 在处理大规模数据时,TopK 问题是一个常见且具有挑战性的任务,即从海量数据中找出最大(或最小)的 K 个元素.为了高效地解决这个问题,我 ...
- ChirpStack 设备连通性测试极简工具
一.工具简介 你是否为调试 ChirpStack 设备数据连通性而烦恼?是否希望快速验证数据解析逻辑而无需复杂部署?这个 ChirpStack 数据连通性测试工具,算是一个极简解决方案! 无论是 Ch ...
- zk源码—3.单机和集群通信原理
大纲 1.单机版的zk服务端的启动过程 (1)预启动阶段 (2)初始化阶段 2.集群版的zk服务端的启动过程 (1)预启动阶段 (2)初始化阶段 (3)Leader选举阶段 (4)Leader和Fol ...
- 🔥Gitlab 删除仓库文件夹
1.进入文件夹 -> 右键 -> Git Bash Here -> 打开命令窗口 2.拉取代码到本地 (本地无项目情况) git clone git地址 3.拉取最新代码(本地已有项 ...
- app自动化的三大等待
app自动化的三大等待与web自动化的三大等待的代码脚本一样 一.硬性等待 硬性等待无论元素是否出现,都必须等待设置的时间再继续执行后面的代码. 使用简单,但是容易浪费时间.所以一般和隐式等待或显式等 ...
- thinkphp 命令行执行导入
<?phpdeclare (strict_types=1);namespace app\command;use think\console\Command;use think\console\I ...
- Go 1.22 相比 Go 1.21 有哪些值得注意的改动?
本系列旨在梳理 Go 的 release notes 与发展史,来更加深入地理解 Go 语言设计的思路. https://go.dev/doc/go1.22 Go 1.22 值得关注的改动: for ...
- kubernetes部署1.15.0版本
部署环境 centos7.4 master01: 192.168.85.110 node01: 192.168.85.120 node02: 192.168.85.130 所有节点都要写入hosts ...