Spring AI MCP Server的SSE端点打不开?3个解决方案,最快换1行依赖搞定
2026/9/18 5:57:44 网站建设 项目流程

Spring AI MCP Server的SSE端点打不开?3个解决方案,最快换1行依赖搞定

【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai

摘要:用Spring AI的MCP Server以SSE方式暴露服务时,应用启动一切正常,浏览器或Postman访问/sse却连个回音都没有——这是MCP Server配置里最迷惑人的坑之一。本文按社区验证过的经验,给出复现方式、三条自查项、webmvc与webflux两套完整配置,帮你在10分钟内定位问题。

先说结论:换掉一行依赖,多数情况就通了

我踩到这个坑的时候,服务日志干净得像没发生任何事,唯独/sse端点"进不去"。多人验证下来的发现是:大多数情况下,问题出在"编程模型"和"版本"两个地方,而不是端点路径或工具本身

三个解法一句话版:

  1. 嫌麻烦 → 换用webmvc依赖,最省事(推荐首选)
  2. 想留在webflux → 补上reactive配置,让应用跑在响应式容器里
  3. 想一步到位 → 直接抄第5节的完整配置

下面按"先复现 → 再自查 → 最后抄配置"的顺序展开。

复现步骤:启动一切正常,端点却石沉大海

复现这个现象不需要特殊条件,按社区讨论里最常见的搭法就行:

  1. 引入MCP Server的SSE相关starter
  2. 服务正常启动,日志无任何异常
  3. 用浏览器或Postman访问localhost:8080/sse

现象对比如下:

对比项SSE(HTTP/SSE传输)stdio(标准输入输出传输)
服务启动正常正常
端点访问无任何响应,也没有报错本地进程直连,正常工作
日志输出干净,查不到异常正常
迷惑程度高(像是"服务没起来")

这里插一句官方架构视角,SSE传输走的是Web Container里的SSE Server Transports,而stdio走的是StdioServerTransport,两条路完全独立——这也解释了为什么stdio正常时容易让人误判"SSE也没坏,只是网络问题":

排查清单:3条自查项,按顺序过一遍

把排查当成"由外到内"剥洋葱,从最容易错的配置层往下走。

1. 版本混用自查:M6和M7能不能共存?

不能。社区里有人同时引入了两组starter,一组是spring-ai-mcp-server-webmvc-spring-boot-starter1.0.0-M6,另一组是spring-ai-starter-mcp-server-webmvc1.0.0-M7。两个里程碑版本的自动配置类互相打架,装配出的端点行为就不受控制了。

自查方法:搜一遍pom里的spring-ai依赖,确认同一条MCP链路上的坐标版本完全一致。推理过程很简单:MCP Server端点能注册成功与否,取决于自动配置类有没有被正确加载,而版本混用恰恰是自动配置"半加载"的典型诱因。

2. 编程模型不匹配自查:你的Boot应用是响应式还是非响应式的?

SSE在webflux依赖下跑在响应式栈(Project Reactor + Netty)上,"响应式编程模型"说白了就是:整个应用以非阻塞方式处理请求,和传统的"一个请求一个线程"不是一回事。

默认的新建Spring Boot应用是非响应式的——如果只引了webflux的MCP依赖,没有让整个应用切到reactive模式,端点就会"注册了但没人接"。自查方法:确认依赖里webflux相关坐标是否齐全,以及启动时实际生效的Web服务器是不是ReactiveWebServerFactory。

3. 配置缺失自查:响应式开关有没有打开?

上面两条都排除后,检查配置里有没有显式声明应用类型。reactive这一行是webflux路线的"总开关",漏掉它,症状就是本次要解决的"能启动、访问不了、无报错"。

方案决策:三个方案怎么选?

维度方案A:换用webmvc方案B:webflux补reactive配置方案C:完整webflux示例
改动量仅1个依赖坐标1个依赖 + 1行yamlyaml + pom整套
适用场景普通非响应式Boot项目(多数人的情况)已经在响应式栈上的项目新项目或想一次性对齐完整配置
难度
潜在代价Spring Boot Gateway转发可能受影响OpenFeign客户端在当前版本下可能不兼容需自行核对各字段与版本匹配
社区验证度

推荐:先试方案A。当前版本下社区反馈最多的有效路径就是webmvc;确实要响应式再走B/C。

可直接抄:三份配置各管一件事

以下代码块基于社区验证版本整理,依赖坐标与配置项属于事实信息,可直接复用;版本号请按自己项目实际替换。

方案A场景用这份:只动一行依赖,其余不动。

<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> </dependency>

方案B场景用这份:webflux依赖保持不变,yaml里把应用类型切到reactive。

spring: main: web-application-type: reactive

方案C场景用这份:yaml与pom的完整组合,含BOM统一版本管理,避免第3节自查项1的混用问题。

spring.ai.mcp.server.enabled=true spring.ai.mcp.server.stdio=false spring.ai.mcp.server.name=webflux-mcp-server spring.ai.mcp.server.version=1.0.0 spring.ai.mcp.server.type=ASYNC spring.ai.mcp.server.instructions=This reactive server provides weather information tools and resources spring.ai.mcp.server.sse-message-endpoint=/mcp/messages spring.ai.mcp.server.sse-endpoint=/sse spring.ai.mcp.server.capabilities.tool=true spring.ai.mcp.server.capabilities.resource=true spring.ai.mcp.server.capabilities.prompt=true spring.ai.mcp.server.capabilities.completion=true
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webflux</artifactId> </dependency> </dependencies>

避坑速查:动配置前对照一遍checklist

  • 版本一致性:pom里所有spring-ai相关依赖同一版本号,禁止M6/M7混引
  • 依赖互斥:webmvc与webflux的MCP Server starter二选一,不同时引入
  • Feign兼容性:走webflux + reactive路线时,OpenFeign客户端在当前版本下可能不工作,先用社区验证过的结论做风险预估
  • Gateway兼容性:走webmvc路线时,留意Spring Cloud Gateway转发链路是否受影响
  • 配置对齐:换方案后重启,确认/sse首次访问能建立长连接、日志出现连接建立记录

配置项含义有疑惑时,可参考仓库内官方文档目录:MCP Server Boot Starter文档、SSE Server文档。

一句话收尾

默认先选webmvc,响应式栈项目再切reactive路线,SSE端点问题基本都能收住。随着框架持续迭代,SSE传输方式本身在逐步让位于Streamable HTTP,新项目可留意官方文档的协议推荐,避免在即将演进的传输方式上投入过多定制。

【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询