{"id":"2000729","slug":"rss-753bfe963237c4","title":"MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力","summary":"MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力 - InfoQ \n首页 \nAI会议 hot\nAI课程 hot\nAI应用 hot\n报告 \nHarmonyOS \nSnowflake new\n更多 \n\n\n\n 写点什么 \n创作场景\n\n记录自己日常工作的实践、心得\n发表对生活和职场的感悟\n针对感兴趣的事件发表随笔或者杂谈\n 从 0 到 1 详细介绍你掌握的一门语言、","topic":"大厂分享","kind":"doc","language":"zh-CN","source":"InfoQ 中文","source_url":"https://www.infoq.cn/article/80iUxvCNB59aOgyXB7LN?utm_source=rss&amp;utm_medium=article","license":"原文版权，转载需授权","updated_at":"2026-11-07T13:55:20.979Z","word_count":2668,"url":"https://knowledgehub.wujiss.com/a/rss-753bfe963237c4","sections":[{"heading":"","text":"MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力 - InfoQ 首页 AI会议 hot AI课程 hot AI应用 hot 报告 HarmonyOS Snowflake new 更多   写点什么 创作场景  记录自己日常工作的实践、心得 发表对生活和职场的感悟 针对感兴趣的事件发表随笔或者杂谈 从 0 到 1 详细介绍你掌握的一门语言、一个技术，或者一个兴趣、爱好 或者，就直接把你的个人博客、公众号直接搬到这里 企业动态 行业深度 AI&amp;大模型 出海 后端 芯片&amp;算力 架构 大数据 软件工程 云计算 大前端 管理/文化 MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力 作者：Edin Kapić 明知山 本文字数：1563 字 阅读完需：约 5 分钟 AI摘要 微软发布 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/"}],"text":"MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力 - InfoQ 首页 AI会议 hot AI课程 hot AI应用 hot 报告 HarmonyOS Snowflake new 更多   写点什么 创作场景  记录自己日常工作的实践、心得 发表对生活和职场的感悟 针对感兴趣的事件发表随笔或者杂谈 从 0 到 1 详细介绍你掌握的一门语言、一个技术，或者一个兴趣、爱好 或者，就直接把你的个人博客、公众号直接搬到这里 企业动态 行业深度 AI&amp;大模型 出海 后端 芯片&amp;算力 架构 大数据 软件工程 云计算 大前端 管理/文化 MCP C# SDK 2.0 默认启用 HTTP 无状态模式，新增多轮请求能力 作者：Edin Kapić 明知山 本文字数：1563 字 阅读完需：约 5 分钟 AI摘要 微软发布 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/"}