速看!新版SpringAI的兩個致命問題
無論是使用最新正式版的 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 服務能啟動,但客戶端就是連接不上的問題。