MCP规范升级期间Java MCP服务器的演进

MCP规范升级期间Java MCP服务器的演进

💡 原文英文,约2600词,阅读约需10分钟。
📝

内容提要

MCP 2026-07-28规范引入无状态协议核心、发现机制、缓存元数据及类型化工具输出。Java MCP服务器采用兼容优先策略,通过路由边界适配器支持新旧协议,保留2025初始化流程,同时新增无状态路径。测试与一致性检查验证双路径行为,确保现有客户端不受影响,并逐步迁移至新规范。

🔎

延伸解读

兼容优先的迁移策略

文章强调,Java MCP服务器在升级到2026-07-28规范时,采用兼容优先策略,通过路由边界适配器同时支持新旧协议。这种策略确保现有客户端不受影响,同时为新客户端提供新功能。对于生产环境中的Java开发者,这种渐进式迁移比立即切换更稳妥,可以避免破坏已有集成。

无状态协议的核心变化

2026-07-28规范将MCP核心改为无状态HTTP,移除了Mcp-Session-Id和initialize握手。这意味着服务器可以通过简单的负载均衡处理请求,但需要将状态转移到应用层,通过显式标识符传递。对于依赖会话状态的现有服务器,需要重新设计状态管理,将状态从协议层移到应用模型。

测试与一致性检查的重要性

文章强调,在双协议路径迁移中,测试和一致性检查是验证行为正确性的关键。通过单元测试、集成测试和MCP一致性框架,可以确保新旧路径都符合预期。特别是对于草稿特性,需要结合官方一致性运行器和自定义检查,随着规范演进逐步替换。

Q&A

MCP 2026-07-28 规范主要有哪些变化?

MCP 2026-07-28 规范将协议核心改为无状态 HTTP,移除了 Mcp-Session-Id 和 initialize/initialized 交换,引入了显式协议头(如 MCP-Protocol-Version、Mcp-Method、Mcp-Name),新增 server/discover 发现机制,支持缓存元数据(ttlMs、cacheScope),并允许工具输出使用 JSON Schema 2020-12 和更灵活的 structuredContent。

Java MCP 服务器如何在不破坏现有客户端的情况下支持新规范?

采用兼容优先策略,通过路由边界适配器(如 McpRequestLoggingFeature)拦截新协议流量,将请求转换为 McpProtocolRequest 并交给 StatelessMcpProtocolHandler 处理,而旧协议流量继续走原有 Helidon MCP 路径。这样既支持新规范,又保留对 2025 流程的兼容。

MCP 2026-07-28 规范中,server/discover 的作用是什么?

server/discover 是新的发现机制,用于替代之前的 initialize 握手。客户端可以通过发送 server/discover 请求来获取服务器能力、支持的协议版本、工具列表等信息,而无需先建立会话。

在 MCP 2026-07-28 规范下,服务器如何处理状态?

新规范将协议核心改为无状态,移除了会话 ID,因此服务器不应在协议层维护状态。如果需要在多次调用间保持状态(如文档、搜索等),建议将状态移到应用层,通过显式标识符或句柄在客户端和服务器之间传递。

MCP 2026-07-28 规范中,缓存元数据(ttlMs 和 cacheScope)是如何使用的?

在 tools/list 等列表响应中,可以包含 ttlMs(缓存有效期,毫秒)和 cacheScope(缓存范围,如 public),客户端可以根据这些元数据缓存确定性的能力视图,减少重复请求。

MCP 2026-07-28 规范中,工具输出有哪些变化?

工具输出现在支持 JSON Schema 2020-12,并且 structuredContent 不再局限于对象类型,可以是更灵活的结构,便于类型化客户端处理。

MCP 2026-07-28 规范中,哪些功能被标记为弃用?

被标记为弃用的功能包括 Roots(客户端向服务器通告文件系统根)、Sampling(服务器请求客户端进行 LLM 补全)和 Logging(协议级日志消息)。这些功能的最早移除窗口是 2027 年 7 月。

在 urgency-mcp 示例中,如何测试双协议路径?

通过单元测试和集成测试验证,例如 MainTest.mcpInitializeAcceptsSupported2025Protocol 验证旧协议路径,MainTest.statelessDiscoverDoesNotCreateSession 验证新协议路径,MainTest.statelessToolsListContainsCacheHints 验证缓存元数据,MainTest.statelessRejectsLegacySessionHeader 验证拒绝旧会话头。此外,还使用 MCP Conformance Framework 分别对两个协议版本运行一致性检查。

🏷️

标签

➡️

继续阅读