文章摘要
MCP 2026-07-28规范已经正式发布,核心协议转向无状态,并增加请求路由头、列表缓存语义及扩展框架。与此同时,Spring AI 2.0文档已经提供STDIO、Streamable HTTP和STATELESS等MCP客户端与服务端配置。很多Java开发者因此认为,只要把spring.ai.mcp.server.protocol改成STATELESS,项目就已经完整支持新规范。实际上,传输能力、SDK版本、协议协商和扩展支持是四个不同层面。本文梳理Spring AI 2.0与MCP 2026-07-28之间的真实兼容关系,并给出生产升级清单。
一、先给出结论
不能简单回答“完全支持”或“完全不支持”。
更准确的结论是:
Spring AI 2.0已经具备MCP生产接入所需的大部分基础能力 包括STDIO、Streamable HTTP、STATELESS、工具适配与注解开发 但某个具体项目是否完整兼容2026-07-28规范 仍取决于实际MCP Java SDK版本、协议协商结果、客户端版本和扩展能力尤其需要避免下面这个错误判断:
配置了STATELESS = 完整支持2026-07-28全部规范STATELESS首先描述服务端传输和会话模型,并不能证明以下能力已经全部落地:
- 新协议版本协商;
Mcp-Method与Mcp-Name请求头;ttlMs与cacheScope;- Tasks扩展;
- MCP Apps扩展;
- 新授权流程;
- 正式弃用策略;
- 目标客户端的互操作性。
二、Spring AI 2.0当前提供哪些MCP能力
Spring AI 2.0提供专门的MCP Boot Starter。
客户端:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId></dependency>WebFlux客户端:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency>服务端WebMVC:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>服务端WebFlux:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency>服务端协议可以配置为:
spring:ai:mcp:server:protocol:STREAMABLE或:
spring:ai:mcp:server:protocol:STATELESS此外,Spring AI还提供:
@McpTool;@McpResource;@McpPrompt;- MCP Tool到Spring AI
ToolCallback的适配; - 同步与异步客户端;
- 多个命名MCP连接;
- 工具过滤;
- 工具名前缀;
- OAuth 2.0与API Key安全扩展;
- Micrometer与OpenTelemetry观测能力。
这些能力足以搭建生产级MCP客户端和服务端,但“框架能搭建”与“完全匹配最新协议修订”仍需分开验证。
三、为什么Spring AI 2.0 GA说明仍提到旧规范
Spring AI 2.0.0 GA发布时,官方说明其MCP Java SDK基线与当时最新稳定规范对应。
MCP 2026-07-28是在Spring AI 2.0.0 GA之后发布的重大修订。
因此会出现三种信息同时存在:
Spring AI 2.0.0 GA发布说明 → 对应当时稳定规范 Spring AI当前在线文档 → 已展示STATELESS与更新后的传输能力 MCP 2026-07-28最终规范 → 包含新的协议语义和扩展框架生产项目不能只看文章标题或Starter名称,应该检查实际构建结果:
mvn dependency:tree\-Dincludes=io.modelcontextprotocol.sdkGradle:
./gradlew dependencies\--configurationruntimeClasspath重点确认:
MCP Java SDK实际版本 Spring AI实际版本 是否存在依赖覆盖 是否引用Snapshot 是否被其他Starter降级四、协议版本与SDK版本不是一回事
常见版本包括:
Spring AI 2.0.0 MCP Java SDK 2.x MCP Protocol 2026-07-28三者编号不能直接比较。
错误理解:
Java SDK 2.0 所以一定支持协议2026-07-28正确做法是查看:
- SDK发行说明;
- 支持的协议版本;
- 客户端初始化或请求中的版本协商;
- 新字段和新请求头实现;
- 官方互操作性测试结果。
企业项目应维护兼容矩阵:
| 组件 | 当前版本 | 支持协议 | 验证状态 |
|---|---|---|---|
| Spring AI | 2.0.x | 待确认 | 测试中 |
| MCP Java SDK | 实际版本 | 待确认 | 测试中 |
| 桌面客户端 | 版本号 | 2025-11-25 | 已验证 |
| 企业Agent | 版本号 | 2026-07-28 | 待验证 |
| 自建MCP Server | 版本号 | 双版本 | 已验证 |
五、STATELESS到底解决什么问题
有状态Streamable HTTP通常需要:
初始化 → 建立逻辑会话 → 后续请求携带会话标识 → 服务端维护会话状态无状态服务端则更接近:
每次请求自包含 → 任意实例处理 → 不依赖协议级会话Spring AI配置:
spring:ai:mcp:server:protocol:STATELESS主要价值:
- 普通轮询负载均衡;
- 无需Sticky Session;
- 容器实例可随时替换;
- 更容易横向扩容;
- 更适合Serverless;
- 简化共享会话存储。
但无状态服务端通常不能提供依赖双向会话的能力,例如:
- 服务端主动Sampling;
- Elicitation;
- 部分通知;
- 连接级进度交互。
因此,不能为了扩容而一律切换STATELESS。
六、STREAMABLE与STATELESS如何选
选择STREAMABLE
适合:
- 服务端需要回调客户端;
- 需要Sampling;
- 需要Elicitation;
- 需要复杂双向通知;
- 一次交互中存在持续上下文;
- 客户端与服务端都支持会话。
选择STATELESS
适合:
- 工具主要是请求—响应;
- 服务端不主动调用客户端;
- 云原生水平扩容;
- API Gateway统一接入;
- 高并发查询工具;
- 工具状态已经外置。
选择STDIO
适合:
- 本地开发;
- 桌面客户端插件;
- 单机工具;
- 不暴露网络端口;
- 随客户端进程启动和退出。
七、2026-07-28带来的新增验证项
1. 无状态核心
验证项目是否仍依赖:
初始化握手副作用 Mcp-Session-Id Sticky Session 进程内会话Map2. 请求路由头
新规范引入用于网关识别的请求头。
网关需要确认:
- 是否保留未知请求头;
- 是否按方法统计;
- 是否被WAF删除;
- 是否在跨域配置中允许;
- 是否加入日志脱敏规则。
3. 列表缓存语义
工具、资源和Prompt列表可能带:
ttlMs cacheScope需要验证客户端是否:
- 识别TTL;
- 按身份隔离缓存;
- 正确响应listChanged;
- 不缓存高动态工具;
- 不跨租户共享private结果。
4. 扩展框架
Tasks和MCP Apps属于扩展能力,不能因为服务端支持核心协议,就默认客户端支持扩展。
八、最稳妥的兼容策略:双协议运行
生产服务不要立即只支持新协议。
推荐:
旧协议客户端 → 旧兼容入口 新协议客户端 → 2026-07-28入口或者通过版本协商在同一入口处理。
灰度顺序:
内部测试客户端 → 开发环境 → 测试租户 → 只读工具 → 低风险写工具 → 核心生产工具九、不要只做“能连通”的测试
最小连接成功只证明:
网络可达 JSON-RPC可以解析还需要测试:
工具发现
工具数量 名称 Schema Description 缓存变化 权限过滤工具调用
参数校验 错误映射 超时 取消 重试 幂等 审计资源与Prompt
URI模板 内容类型 大文件 分页 权限 动态变化通知兼容性
旧客户端连接新服务端 新客户端连接旧服务端 不支持扩展时降级 未知字段是否安全忽略十、Spring AI项目的升级清单
□ 锁定Spring AI具体版本 □ 检查MCP Java SDK依赖树 □ 确认支持的协议版本 □ 不把STATELESS等同于完整新规范 □ 盘点Sampling和Elicitation需求 □ 决定STREAMABLE或STATELESS □ 验证请求头经过网关 □ 设计工具列表缓存隔离 □ 检查OAuth Scope与租户权限 □ 建立双版本互操作测试 □ 先灰度只读工具 □ 预留回滚入口十一、推荐的配置隔离
开发环境可以:
spring:ai:mcp:server:protocol:STREAMABLE云端只读工具服务:
spring:ai:mcp:server:protocol:STATELESS不要让所有环境共享同一个配置文件。
可以使用:
application-local.yml application-test.yml application-prod.yml十二、我的判断
Spring AI 2.0已经给Java团队提供了成熟的MCP开发入口,并提前具备了无状态服务端、Streamable HTTP和企业安全等关键能力。
但MCP 2026-07-28是一轮协议级重大变更。
真正的兼容必须通过:
精确版本 +协议协商 +新语义实现 +客户端互操作 +生产网关验证共同确认。
总结
判断Spring AI项目是否支持MCP 2026-07-28,不应只看:
有没有STATELESS配置而应检查:
SDK版本 协议版本 请求路由头 列表缓存 扩展能力 安全机制 互操作测试对于生产系统,最稳妥的做法是锁定依赖、建立兼容矩阵、双版本灰度,而不是在没有完整验证时直接替换全部MCP连接。