Home / Blog / MCP C# SDK 2.0 Makes HTTP Stateless by Default and Adds…
Tech News

MCP C# SDK 2.0 Makes HTTP Stateless by Default and Adds Multi Round-Trip

Microsoft released MCP C# SDK 2.0, making HTTP servers stateless by default, standardising routing headers, and introducing Multi Round-Trip Requests.

By Dillip Chowdary • Oct 26, 2026 • Source: InfoQ

MCP C# SDK 2.0 Makes HTTP Stateless by Default and Adds Multi Round-Trip

Microsoft announced the stable release of version 2.0 of the official MCP C# SDK, implementing the 2026-07-28 revision of the Model Context Protocol specification. Detailed in InfoQ's report, the release makes Streamable HTTP servers stateless by default, standardises HTTP routing headers, and introduces Multi Round-Trip Requests for interactive tools. Built on ASP.NET Core in collaboration with Microsoft, the release is described by the SDK team as the largest revision since the protocol launched because it completely rethinks how MCP operates over HTTP transport layers.

This architectural overhaul covers .NET developers and enterprise teams hosting AI tools, model endpoints, or agentic backends on distributed infrastructure. Between August and October, Microsoft followed the major milestone with minor releases 2.1 through 2.3 to patch edge cases and expand server flexibility. The upgrade eliminates shared session bottlenecks, revamps OAuth compliance, and establishes new protocol patterns across modern cloud load balancers and reverse proxies.

What MCP C# SDK 2.0 Makes HTTP Stateless shipped

The release removes the mandatory initialize handshake and the Mcp-Session-Id header from the baseline HTTP transport. Instead of forcing clients to pin to a single server process, protocol version and capability flags now travel inside every HTTP request payload and header envelope. This design allows any backend server instance in a cluster to handle incoming requests without requiring sticky sessions, shared in-memory session caches, or centralised coordination across nodes.

To handle interactive tools without persistent duplex channels, the 2.0 architecture ships Multi Round-Trip Requests. When a tool requires user or model intervention, it throws an InputRequiredException populated by InputRequest.ForElicitation, InputRequest.ForSampling, or InputRequest.ForRootsList along with an opaque requestState token. The client runtime gathers the necessary answers and re-issues the tool call with inputResponses, enabling conversational tool iteration over standard stateless HTTP request cycles.

What changed for builders in MCP C# SDK 2.0 Makes HTTP Stateless

For systems engineers, load balancers and reverse proxy gateways can now route MCP traffic at the HTTP infrastructure layer without parsing full message bodies. Each tools/call payload surfaces matching Mcp-Method and Mcp-Name request headers. Developers can also apply the [McpHeader] attribute to tool method arguments to promote specific parameters to Mcp-Param-* HTTP headers. The payload body remains authoritative throughout execution, and any discrepancy between header flags and body data causes the server to reject the call with a HeaderMismatch error code.

Architecture Attribute1.x Baseline2.0–2.3 Standard
Default HTTP Session ModeStateful (Mcp-Session-Id required)Stateless (HttpServerTransportOptions.Stateless = true)
Tool Interaction FlowServer-initiated channel callsMulti Round-Trip Requests (MRTR)
Protocol Revision Target2025-11-25 specification2026-07-28 specification
Target Framework Support.NET 8, 9, 10, .NET Standard 2.0.NET 8, 9, 10, .NET Standard 2.0
Server Identity NullabilityNon-nullable McpClient.ServerInfoNullable McpClient.ServerInfo (v2.3)
Diagnostic DeprecationsNoneMCP9004, MCP9005, MCP9006 warnings
MCP C# SDK 2.0 Makes HTTP Stateless by Default and Adds Multi Round-Trip
Illustration · Pexels

Clients built on the SDK probe the server/discover endpoint first to determine target capabilities, falling back to legacy handshakes when communicating with pre-2.0 servers. When connecting down-level clients running the 2025-11-25 specification to stateful 2.0 instances, the SDK automatically translates MRTR flows back to older server-initiated requests. However, if an older client connects to a purely stateless 2.0 endpoint, unresolved server-initiated input requests immediately fail with an McpException.

Advertisement

Tech Pulse Daily

Get tomorrow's pulse first

Join engineers who read Tech Pulse before stand-up. Free, weekday mornings.

How to install or upgrade MCP C# SDK 2.0 Makes HTTP Stateless

Developers building on .NET 8, .NET 9, .NET 10, or .NET Standard 2.0 can fetch the updated core packages directly from NuGet. To pull the latest release into an existing project, execute the standard package management command:

Command
dotnet add package ModelContextProtocol --version 2.3.0

Projects consuming extended features such as task management or MCP Apps must install the dedicated modular companion packages. For example, opting into the rewritten tasks workflow requires adding the standalone package:

Command
dotnet add package ModelContextProtocol.Extensions.Tasks

Gotchas and compatibility in MCP C# SDK 2.0 Makes HTTP Stateless

Upgrading from 1.x carries several breaking API changes and diagnostic warnings. While core stable 1.x endpoints remain functional, the Tasks implementation was moved out of the core package and rewritten into ModelContextProtocol.Extensions.Tasks, rendering it completely incompatible with the experimental tasks APIs from versions 1.3 and 1.4. In addition, compiler warnings MCP9004 and MCP9006 flag deprecated legacy SSE endpoints and stateful-only configurations, while MCP9005 flags legacy roots, sampling, and logging APIs in accordance with SEP-2577.

Minor updates in the 2.x line introduced additional constraints. Version 2.3 made McpClient.ServerInfo nullable because servers may omit optional metadata during discovery; Microsoft explicitly warns against making security authorization decisions based on self-reported identity data. Furthermore, modern Streamable HTTP responses now hold back HTTP headers until the first protocol message is ready to transmit. As a result, silent long-running handlers may require incremental progress reports or extended HTTP client timeout budgets to prevent dropped connections.

What to watch after MCP C# SDK 2.0 Makes HTTP Stateless

Subsequent minor updates have already expanded configuration options for mixed environments. Version 2.1 added an opt-in subscriptions/listen handler for custom server notification streams, while version 2.2 introduced HttpServerSessionMode to let legacy 2025-11-25 and modern 2026-07-28 clients connect to the exact same server endpoint. Version 2.3 introduced McpClientOptions.TimeProvider to unlock deterministic timeout unit testing, excluded OAuth flows from DiscoverProbeTimeout, and fixed graceful stdio server termination by closing standard input before waiting for exit.

Security rules are also significantly stricter, enforcing RFC 9207 OAuth issuer validation, mandatory advertised PKCE S256 support, and inferred application types during dynamic registration. Microsoft indicated that the engineering team's immediate next development priority centers on end-to-end authentication and authorization mechanisms. One operational detail still under developer scrutiny is that the specification currently provides no explicit protocol-level guard against tampering or cross-session replay of the opaque requestState token used in round-trip requests.

Developer Action Items

  • ☐ Diff the official changelog for Microsoft / Framework 2.0 before you bump — APIs, defaults, and removed flags only.
  • ☐ Install through the vendor's documented channel in staging; keep a one-command rollback and time-box the canary.
  • ☐ Grep your repo for old flag names, lockfile pins, and plugin versions that the notes mark as breaking.
  • ☐ Prefer the first patch cut over the day-zero tag unless you have a reason to be on the leading edge.
  • ☐ If InfoQ did not name a region, plan, or SKU, screenshot the official availability line before you promise it to users.

MCP C# SDK 2.0 Makes HTTP Stateless FAQ

What is the default session behavior in MCP C# SDK 2.0?

HttpServerTransportOptions.Stateless defaults to true, removing the Mcp-Session-Id header and initialize handshake so any server instance can handle requests without sticky routing.

How do tools request additional client input without stateful connections?

Tools throw an InputRequiredException carrying an opaque requestState and input requests, prompting the client to gather responses and re-issue the call via Multi Round-Trip Requests.

What breaking changes affect developers upgrading from version 1.x to 2.3?

Tasks moved to an incompatible opt-in package, McpClient.ServerInfo was made nullable in version 2.3, and stateful SSE options now trigger compiler warnings MCP9004, MCP9005, and MCP9006.

Sources

Dillip Chowdary

Author

Dillip Chowdary

Writes Tech Bytes coverage of AI, engineering, and the tools that actually ship. Editor of Tech Pulse Daily.

Related on Tech Bytes

Advertisement

5-min tech signal

Weekday briefing for engineers who skip the noise.

No spam · Unsubscribe anytime

Advertisement

✈️ CareerPilot

Your AI job-search copilot

Match your resume against live Ashby, Greenhouse & Lever openings — fit scores, job-specific resume optimization and email alerts.

Find matching jobs →

Free Tools

Browse all tools →