MCP C# SDK 2.0 默认启用 HTTP 无状态模式,新增多轮请求能力

InfoQ AI 约 7 分钟读完

作者:Edin Kapić

微软发布 MCP C# SDK 2.0,全面适配 MCP 协议 2026-07-28 修订版,重构 HTTP 层为无状态设计,支持多轮往返请求(MRTR)与动态功能协商。

移除 initialize 握手与 Mcp-Session-Id 头,协议版本与能力声明随请求发送;默认启用无状态 HTTP 服务器,旧客户端可自动降级兼容;状态相关配置及传统 SSE 端点触发明确警告码(MCP9006/MCP9004)。

适合 LLM 工具平台开发者、企业级 MCP 服务端架构师、.NET 生态基础设施工程师阅读。

微软正式发布 官方 MCP C# SDK 2.0 版本 ,实现了 MCP 规范的 2026-07-28 修订版 。该版本默认将 Streamable HTTP 服务器设为无状态,标准化 HTTP 请求头,方便基础设施路由 MCP 流量,并为交互式工具引入了多轮往返请求(MRTR)。8 月至 10 月间又相继发布了 2.1 至 2.3 三个次要版本。

MCP 是一个开放协议,用于标准化应用程序如何向大语言模型提供上下文和工具。 C# SDK 由微软联合维护,基于 ASP.NET Core 构建。SDK 团队称这一新规范修订是自协议发布以来最大的一次,因为它重新设计了 MCP 在 HTTP 上的运行方式。

initialize 握手和 Mcp-Session-Id 请求头已被移除。协议版本和功能声明现在随每个请求一起发送,因此任何服务器实例都可以处理请求,无需粘性路由或共享会话存储。 HttpServerTransportOptions.Stateless 现在默认为 true ;需要会话能力的服务器可将其设置为 false 。客户端会先探测 server/discover ,如果是旧服务器就回退到传统握手。仅有状态模式相关配置、传统 SSE 端点现在会抛出 MCP9006 、 MCP9004 警告。

tools/call 请求新增 Mcp-Method 、 Mcp-Name 请求头, 特性可以把工具参数提升为 Mcp-Param-* 请求头。负载均衡器、网关可以直接基于请求头路由,无需解析请求体。但请求体依然是权威来源:如果请求头和请求体信息不一致,服务端会返回 HeaderMismatch 错误。

无状态化改造移除了服务器在调用过程中向客户端请求输入的通道。MRTR 取而代之:工具抛出 InputRequiredException ,包含了一个或多个输入请求,这些请求可通过 InputRequest.ForElicitation 、 ForSampling 或 ForRootsList 构建,外加一个不透明的 requestState 。客户端收集响应并通过 inputResponses 重新发起调用。如果注册了处理程序, McpClient 会自动执行相关操作。对于 2025-11-25 或更早版本客户端的有状态会话,SDK 会桥接到旧的服务器发起请求;对于无状态的低版本连接,该请求会抛出 McpException 。遵循 SEP-2577 ,Roots、采用和日志 API 被标记为废弃,警告码为 MCP9005 。

根据公告,稳定的 1.x API 仍可继续使用。唯一的例外是 Tasks,它已移至 ModelContextProtocol.Extensions.Tasks 包中,且与 1.3 和 1.4 版本中的实验版本不兼容。实验性的 ModelContextProtocol.Extensions.Apps 包可用于 MCP App 场景。发布说明还列出了更严格的 OAuth 行为:RFC 9207 签发者校验、强制要求对外声明 PKCE S256 支持,以及动态客户端注册自动推断应用类型。包支持的目标框架包括 .NET 8、9 和 10,以及 .NET Standard 2.0。

2.1 版本添加了可选的 subscriptions/listen 处理器,用于自定义服务器端通知流,当 server/discover 在 HTTP 层失败时回退到 initialize 。2.2 版本引入了 HttpServerSessionMode ,使用 2025-11-25 和 2026-07-28 修订版的客户端能够共享一个端点,并修复了 McpHeaderEncoder.DecodeValue 中的异常。

2.3 版本将 McpClient.ServerInfo 设为可空,这是一项源码级的重大变更,因为服务器可能不在 server/discover 中返回可选的身份元数据;文档提醒不要出于安全决策目的使用服务器自报的身份信息。Streamable HTTP 现在会等待第一个协议消息到达后再发送响应头,因此长时间静默运行的处理器可能需要输出进度信息或设置更长的 HTTP 超时。其他变更包括:在列出工具、提示词和资源时保留注册顺序,暴露 McpClientOptions.TimeProvider ,方便编写确定性超时测试,将 OAuth 排除在 DiscoverProbeTimeout 之外,以及在等待优雅退出前关闭 stdio 服务器的输入。

有读者在博文评论区 询问协议如何防止 被篡改或跨会话重用 ,目前评论区暂无官方回复。

团队表示下一阶段重点是端到端身份认证与授权。 SDK 可在 NuGet 上获取 ,文档见 项目站点 , 2.0 、 2.1 、 2.2 和 2.3 的发布说明可在 GitHub 上查看。

查看英文原文: https://www.infoq.com/news/2026/10/MCP-CSharp-SDK-Stateless/

促进软件开发及相关领域知识与创新的传播

关于我们 我要投稿 合作伙伴 加入我们 关注我们

联系我们 内容投稿:editors@geekbang.com 业务合作:hezuo@geekbang.com 反馈投诉:feedback@geekbang.com 加入我们:zhaopin@geekbang.com 联系电话:010-64738142 地址:北京市朝阳区望京北路9号2幢7层A701

InfoQ 近期会议 上海 · QCon 全球软件开发大会 2026.10.22-24 北京 · AICon 全球人工智能开发与应用大会 2026.12.18-19

全球 InfoQ InfoQ En InfoQ Jp InfoQ Fr InfoQ Br

Copyright © 2026, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司 | 京 ICP 备 16027448 号 - 5 京公网安备 11010502039052号 | 产品资质

原文标题 MCP C# SDK 2.0 默认启用 HTTP 无状态模式,新增多轮请求能力
引用来源 InfoQ AI
本地存档 2026-11-05 15:39
引用格式 作者:Edin Kapić. MCP C# SDK 2.0 默认启用 HTTP 无状态模式,新增多轮请求能力. 2026-11-05. https://www.ai007.site/news/146982

本文内容由 ai007 从公开渠道聚合,版权归原作者所有。若原文已删除或变更, 以原文站为准;本站存档仅为便于查阅而保留。