news 2026/9/18 14:56:36

Spring AI MCP Server SSE 端点无法访问:3 种解法 + 完整避坑清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring AI MCP Server SSE 端点无法访问:3 种解法 + 完整避坑清单

Spring AI MCP Server SSE 端点无法访问:3 种解法 + 完整避坑清单

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

凌晨一点的调试现场:服务启动日志干干净净,浏览器敲localhost:8080/sse,页面空白;换成 Postman 发 GET,连接转圈到底也没个回音——这个端点像黑洞,把所有请求都吞了,控制台一行错误都不给。折腾一圈后发现,Spring AI 的 MCP Server SSE 端点访问失败,问题出在三处:依赖版本混用、webflux 没开 reactive 模式、webmvc 与 webflux 同时引入。最省事的一条路是切到 webmvc 依赖,立等可取。

读完这篇能拿走 3 个直接可上手的解法和 1 份上线前必查清单,全程不超过十分钟。

30 秒分流:你的故障落在哪一格?

SSE(Server-Sent Events)是服务端向客户端单向推流的 HTTP 长连接,MCP Server 靠它把消息持续推给客户端。你的症状对号入座,直接跳到对应章节:

你的情况大概率原因看哪节
pom 里同时出现 1.0.0-M6 和 1.0.0-M7 两个版本的 Spring AI 组件版本混用根因一
依赖没混、服务也起了,但 /sse 永远挂着或 404webflux 没开 reactive根因二
classpath 里 webmvc、webflux 两套 MCP Server 依赖都在依赖冲突根因三

SSE 端点无响应的 3 个根因

同步柜台和异步叫号,不是一回事

webflux 的 SSE 传输跑在响应式运行时(Netty 的非阻塞事件循环)上,webmvc 的跑在 Servlet 容器(Tomcat 的线程池)上。打个比方:webmvc 像窗口柜台,一个窗口同时只服务一个顾客,来了就办完为止;webflux 像大厅叫号,系统只负责喊号,不盯你取没取到。你的 Spring Boot 应用默认是"柜台模式"——此时就算 classpath 里塞了 webflux 的 SSE 端点 bean,也轮不到它们出场,请求打进来自然石沉大海,而且不报错。

30 秒验证:

curl -N -H 'Accept: text/event-stream' http://localhost:8080/sse

命令挂住没输出,且应用日志显示 Tomcat started,基本就是这一条。

发动机和变速箱,不同批次

版本混用是典型的"M6 发动机配 M7 变速箱"。两个版本的 autoconfigure 类名、属性 key 都动过刀,混跑时自动装配的条件判断会互相错位:服务照起,端点路由却悄悄没挂上,日志里连个警告都不留。

30 秒验证:

mvn dependency:tree | grep spring-ai

扫一眼版本号,M6、M7 两个批次同时出现就是它。

两套依赖抢一个柜台

webmvc 和 webflux 的 MCP Server starter 同时引入,Spring Boot 检测到 Servlet API 后按非响应式容器启动,webflux 那套自动配置直接静默失效。你看到的"端点不存在",其实是配置压根没被激活。

30 秒验证:

mvn dependency:tree | grep mcp-server

输出里同时出现 webmvc、webflux 两行,删掉一行再试。

三条修复路径(按推荐度降序)

路径 A:webmvc 最小依赖写法

最小改动:删掉 webflux,换 webmvc,一行依赖解决黑洞

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

重启后curl -N http://localhost:8080/sse立刻能看到event: endpoint推回来。为什么官方文档没这么写?文档习惯把响应式方案放在前面讲,但社区踩坑统计下来,默认非响应式的 Spring Boot 应用配 webmvc 反而零额外配置、最不容易翻车。

  • 适用场景:绝大多数内部工具、单体后端服务。
  • 已知副作用:webmvc 实现下,Spring Cloud Gateway 的转发链路不可用——它本身依赖 webflux 运行时。

路径 B:webflux 响应式配置方法

坚持 webflux 时,补上"叫号模式"的开关

<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webflux</artifactId> </dependency>
spring: main: web-application-type: reactive

这两行让 Boot 切到 Netty 和响应式运行时,webflux 的 SSE 自动配置才真正生效。确认 classpath 里没有 webmvc 版本的 starter 和spring-boot-starter-web

  • 适用场景:团队统一响应式技术栈、高并发长连接服务。
  • 已知副作用:OpenFeign 等基于 Servlet 的 HTTP 客户端在此模式下无法正常工作,需要换 Reactor Netty 一类的响应式客户端。

路径 C:webflux 完整配置参考

需要自定义端点和能力声明时的最小参考,5 个关键字段

spring: main: web-application-type: reactive ai: mcp: server: name: webflux-mcp-server type: ASYNC sse-endpoint: /sse sse-message-endpoint: /mcp/messages

其中nametype、两个端点路径是必填核心,capabilities 声明按需追加即可,不建议照抄整份大配置。BOM 统一管版本,避免再次混批:

<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency>
  • 适用场景:对端点路径、服务器元数据有定制要求的外部服务。
  • 已知副作用:与路径 B 相同——Feign 客户端不可用,网关后部署需单独验证转发。

避坑 Checklist

  • BOM 统一管理版本:混用 M6/M7,端点静默消失
  • webmvc、webflux 二选一:同时引入,自动配置失效
  • 用 webflux 必开 reactive:不开,/sse 永远黑洞
  • 上 webflux 前排查 Feign:客户端会直接罢工
  • 端点路径别和网关冲突:转发规则可能吞掉 SSE

怎么选,下一步

内部工具、单体应用闭眼选路径 A,省事且社区验证最充分;对外提供高并发长连接服务、且团队本来就响应式,走 B 或 C。服务要挂在网关后面,先确认网关协议链路——webmvc 方案下 Gateway 转发不可用,必要时把 MCP Server 独立出口部署。

最后说句预期:这套 SSE 传输在 Spring AI 新版本里已标记为待移除,官方重心正转向 Streamable HTTP 传输,后续版本中本问题大概率被新架构自然消解。项目代码可直接从 GitHub_Trending/spr/spring-ai 仓库获取,对照 mcp/ 和 auto-configurations/mcp/ 目录能看懂两套传输的装配逻辑。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 14:55:58

深圳发货到香港,冷链物流最容易卡在哪些环节?

深圳到香港直线距离不远&#xff0c;但很多食品、餐饮企业第一次走冷链跨境&#xff0c;会发现这段"短途"远比想象中复杂。卡住的从来不是车开不过去&#xff0c;而是通关、温控衔接和规则细节。这篇把深港冷链最常见的几个卡点拆开讲&#xff0c;方便在排期和选服务…

作者头像 李华
网站建设 2026/9/18 14:51:57

单片机选型全攻略:开发、验证、量产三维度决策指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 14:51:53

SSM框架苹果酒店住房管理系统:从CRUD到业务闭环的Java毕设实战指南

1. 项目定位与需求梳理&#xff1a;为什么苹果酒店住房管理适合当毕设每年到毕设季&#xff0c;Java方向的学生问得最多的就是“有没有什么题目既不太难&#xff0c;又能把SSM框架用上&#xff0c;还能写得清楚论文”。苹果酒店住房管理系统这类题目&#xff0c;就是典型的“看…

作者头像 李华
网站建设 2026/9/18 14:50:29

解决VS Code找不到Chrome:注册表App Paths修复指南

从 VS Code 里点开调试面板&#xff0c;或者直接在终端敲了个chrome&#xff0c;结果 Windows 弹出来一句“Windows找不到文件‘chrome’。请确定文件名是否正确后&#xff0c;再试一次”的对话框&#xff0c;那一刻的心情我太懂了。尤其当你确认 Chrome 明明就装在 C 盘 Progr…

作者头像 李华
网站建设 2026/9/18 14:48:20

GET/POST在线接口测试:HTTP请求与Content-Type排错

1. 从一堆“get”开头的报错里&#xff0c;找准在线接口工具的真实用途在搜索框里敲下“get post 在线接口”这几个字&#xff0c;返回的东西大概率会让你怀疑自己打错了字&#xff1a;有介绍 PostScript 虚拟打印机的&#xff0c;有解释 C# 编译环境缺 Visual C 14.0 的&#…

作者头像 李华