ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Spring AI MCP Server SSE 端点无响应?3 条社区验证过的修复路径

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服务正常启动但浏览器或 Postman 访问localhost:8080/sse始终挂住控制台一片安静。这里给出 3 条修复路径按改动成本从低到高排列第一条通常就能解决问题。症状速判SSE 端点挂起时先看这 4 项先确认你的卡点是否和这里一致预期行为实际表现访问/sse立即收到event: endpoint事件连接建立后一直等待无内容返回也无 404启动日志打印 SSE transport 初始化信息无任何报错也看不到 transport 相关日志Postman / 浏览器可直接验证两者都表现为能连通、没数据像在服务但实际没在stdio 方式启动同一组 Tool正常工作关键点在最后两项stdio 能跑说明你的 Tool 定义和 MCP Server 核心没问题问题只出在 HTTP 传输层而连得上却无响应且零报错是这类问题的典型指纹。根因拆解从版本混用看起表层原因新旧 artifact 混用。1.0.0-M6 时代的旧坐标spring-ai-mcp-server-webmvc-spring-boot-starter和 M7 起的spring-ai-starter-mcp-server-webmvc同时出现在依赖树里时自动配置类和 starter 的装配预期对不上SSE transport 的RouterFunctionBean 可能根本没被注册但启动过程完全合法、不抛错。社区多位开发者交叉验证过这一现象是社区反馈中命中率最高的原因。深层原因响应式容器与 Servlet 应用的错配。WebFlux 版 SSE transport 在源码里注册的是 WebFlux 的RouterFunctionBean见 McpServerSseWebFluxAutoConfiguration.java它需要 Netty 等响应式容器来承载。如果你的应用是默认的非响应式 Servlet 应用这个 Bean 创建后没有任何容器会去拾取它——端点自然访问不到而且全程没有异常可查。还有一层容易漏当前版本的McpServerProperties里protocol默认值是STREAMABLE见 McpServerProperties.java。SSE 传输的自动装配条件里包含protocolSSE不设这行SSE 端点同样不会挂载。修复路径从改动最小的开始把依赖换成 WebMVC 传输改动最小如果你的应用是普通 Servlet 栈、又不想动任何启动配置走这条。dependencies !-- ... 删除旧的 spring-ai-mcp-server-*-starter 坐标 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependency /dependenciesspring: ai: mcp: server: protocol: SSE # 必须显式指定默认是 STREAMABLE重启后访问/sse应立刻看到event: endpoint其 data 是消息回传地址默认/mcp/message。代价这条路径把 SSE 传输绑定在 Servlet 栈上如果你的工程未来要整体切响应式届时需要重新选择。若执行上一步后仍然无响应切换到下一条路径 →用 WebFlux 并真正启用响应式容器如果你就是想在响应式栈上跑 SSE依赖必须只留 webflux并且把整个应用切到响应式dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webflux/artifactId /dependencyspring: main: web-application-type: reactive ai: mcp: server: protocol: SSE type: ASYNCweb-application-type: reactive这一行是社区反馈里最容易漏的它让 Spring Boot 用 Netty 而非 Servlet 容器启动WebFlux 版RouterFunction才会真正被挂载。验证方法同上/sse应立即推送event: endpoint。代价整个应用进入响应式环境OpenFeign 客户端在此模式下不可用Spring Cloud Gateway 的转发链路也要重新评估。若上面两条都通了但你发现 MCP 客户端侧也在迁移考虑第三条路径 →顺势迁到 Streamable HTTP 传输当前代码里 SSE transport 已被标注Deprecated(since 2.0.0, forRemoval true)见上文两个自动配置类的注解而 Streamable HTTP 是默认协议。社区多位开发者反馈MCP 规范本身也把旧的 SSE 传输标记为 deprecatedStreamable HTTP 是长期方向。如果客户端版本允许直接删掉protocol配置项依赖保持spring-ai-starter-mcp-server-webmvc按 Streamable HTTP 端点验证向默认端点发initialize请求应返回协议协商响应。代价这是协议升级而非配置修复所有 MCP 客户端必须同步支持老客户端会全部失联需要灰度切换。踩坑清单❌ M6 旧坐标和 M7 新坐标混用 → 自动配置与 starter 对不上SSE 端点静默缺失❌ 忘了显式设置spring.ai.mcp.server.protocol: SSE→ 默认走 STREAMABLESSE 条件装配直接不生效❌ 同时引入 webmvc 和 webflux 两个 MCP Server starter → 两个自动配置都满足条件由加载顺序决定谁生效行为不可预期❌ 切了web-application-type: reactive后还依赖 OpenFeign → 客户端在响应式栈下无法工作调用直接失败❌ 用 Postman 普通 GET 测/sse就判定没数据 → SSE 是长连接流工具侧要开启事件流解析才能看到推送内容收尾当前版本下最省事的组合Servlet 应用 spring-ai-starter-mcp-server-webmvc 显式protocol: SSE。考虑到源码里 SSE transport 已标记移除、官方默认切向 Streamable HTTP建议客户端允许时尽早迁移届时旧路径自然退役。【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表