内容提要
2026年7月,MCP协议重大修订,C# SDK 2.0同步更新,核心是从有状态连接转向无状态架构。新协议移除Session ID,改用自描述头部,简化部署和负载均衡,支持普通HTTP API式运维。SDK保持向后兼容,状态由应用层管理,并引入新扩展和JSON Schema支持,使MCP服务器更易扩展和集成云原生基础设施。
延伸解读
运维简化:从粘性会话到无状态路由
v1 时代,MCP 服务器依赖粘性路由和共享 Session 存储,导致负载均衡复杂且 Redis 成为单点。v2 移除 Session ID 后,任意请求可打到任意实例,网关仅需按头部路由,无需解析 body。这使 MCP 服务器能像普通 HTTP API 一样部署,支持 Round-Robin 负载均衡和 Kubernetes HPA 自动扩缩容,显著降低运维成本。
状态管理:从隐式会话到显式句柄
去会话化并非去状态化,而是将状态管理从协议层转移到应用层。工具返回显式句柄(如 basket_id),模型在后续调用中传递该句柄。相比 v1 的隐式 Session,这种方式更灵活,模型可组合、传递和推理句柄生命周期,实现跨工具的状态流转,同时保持无状态架构的运维优势。
向后兼容与降级机制
C# SDK 2.0 承诺与 v1.x 完全向后兼容,稳定 API 无需修改。若服务器需保持有状态,可显式设置 Stateless=false,此时返回诊断码 MCP9006,客户端自动降级到 v1 的 initialize 握手。客户端也支持自动探测 v2 服务器,失败则回退,确保平滑迁移。
扩展与 Schema 升级
v2 将扩展从实验性功能转为独立轨道,并发布 tasks 相关官方扩展。工具输入输出 Schema 升级到完整 JSON Schema 2020-12,支持 oneOf、$ref 等复杂结构,增强了工具定义的表达力和校验能力,为更复杂的 MCP 应用奠定基础。
Q&A
C# MCP SDK 2.0 相比 1.x 在架构上有什么根本变化?
C# MCP SDK 2.0 的核心变化是从有状态连接转向无状态架构,移除了 Session ID 和初始化握手,改用自描述头部(如 MCP-Protocol-Version、Mcp-Method),使 MCP 服务器可以像普通 HTTP API 一样部署、扩容和运维。
MCP 协议 v2 中如何实现无状态?
v2 协议移除了 Session ID,客户端请求不再需要携带会话标识,而是通过自描述头部(如 MCP-Protocol-Version、Mcp-Method、Mcp-Name)传递信息。服务器无需维护会话状态,任意请求可以打到任意实例,负载均衡器无需粘性路由。
MCP v2 中状态管理推荐怎么做?
v2 协议推荐状态由应用层管理,协议层不插手。具体做法是工具返回显式句柄(如 basket_id、task_id),模型在后续调用中作为普通参数传回,从而在无状态协议下实现有状态业务逻辑。
C# MCP SDK 2.0 是否向后兼容 v1.x?
是的,官方承诺 2.0.0 SDK 与 v1.x 服务器和客户端完全向后兼容。稳定的非废弃 API 从 1.x 继续工作,无需修改。客户端自动探测 v2 服务器,失败则降级到 v1。
MCP v2 中服务器如何向客户端发起请求(如 elicitation)?
v2 不再需要 SSE 长连接,而是返回 InputRequiredResult,客户端收集输入后重试原调用,并携带 requestState。requestState 自包含所有上下文,因此任何实例都能处理重试。
MCP v2 协议引入了哪些新扩展和 Schema 支持?
v2 引入了两个官方扩展:tasks/get、tasks/update、tasks/cancel,并将工具的 inputSchema 和 outputSchema 升级到完整 JSON Schema 2020-12,支持 oneOf、anyOf、allOf、if/then/else、$ref、$defs 等特性。
MCP v2 对运维部署有什么具体好处?
v2 移除了 Session ID,使得负载均衡器无需粘性路由,可以使用普通 Round-Robin;无需 Redis 等 Session Store,消除了单点;网关可以按 Mcp-Method / Mcp-Name 纯头部路由,无需解析 body。这使得 MCP 服务器可以像普通 HTTP 服务一样部署在 nginx 后面,用 Kubernetes HPA 自动扩缩容。
如果服务器需要保持有状态,C# SDK 2.0 如何处理?
可以显式设置 options.Stateless = false,此时服务器会拒绝 v2 协议,强制客户端降级到 2025-11-25 的 initialize 握手,并返回诊断码 MCP9006。