Skip to content

v2.0.0-preview.3

Pre-release
Pre-release

Choose a tag to compare

@jeffhandley jeffhandley released this 15 Jul 00:44
0d34048

This preview reorganizes the Tasks feature into its own ModelContextProtocol.Extensions.Tasks package, keeping ModelContextProtocol.Core focused on the base protocol while a new generic request-handler and alternate-result surface lets the Tasks package layer on top. It also delivers correctness fixes to the draft 2026-07-28 protocol -- per-request client capabilities, negotiation boundaries, and the resultType discriminator -- plus Streamable HTTP client improvements (an empty-JSON-response fix and a new standalone GET-stream opt-out) and conformance-test consolidation.

Breaking Changes

Refer to the C# SDK Versioning documentation for details on versioning and breaking change policies.

  1. Tasks extracted into the new ModelContextProtocol.Extensions.Tasks package #1693
    • The Tasks API -- task result/notification types, McpTaskStatus, IMcpTaskStore/InMemoryMcpTaskStore, the tasks/* request methods, and the client GetTaskAsync/UpdateTaskAsync/CancelTaskAsync/CallToolRawAsync methods -- is removed from ModelContextProtocol.Core and relocated to the new ModelContextProtocol.Extensions.Tasks package under the ModelContextProtocol.Extensions.Tasks namespace.
    • Core now exposes a task-agnostic ResultOrAlternate<T> (replacing ResultOrCreatedTask<T>) plus generic extension points -- McpServerRequestHandler, McpServerOptions.RequestHandlers, McpServerHandlers.CallToolWithAlternateHandler, McpRequestFilters.CallToolWithAlternateFilters, and McpServer.InterceptOutgoingRequests -- that the Tasks package builds on.
    • Migration: add a PackageReference to ModelContextProtocol.Extensions.Tasks; change using ModelContextProtocol.Protocol; to using ModelContextProtocol.Extensions.Tasks; for task types; the task client/server APIs are now extension methods (McpTasksClientExtensions/McpTasksServerExtensions), and the task store is registered via the new builder extensions instead of McpServerOptions.TaskStore.

Experimental APIs

To support extracting Tasks (#1693), ModelContextProtocol.Core gained a generic server-extension surface -- ResultOrAlternate<T>, McpServerRequestHandler, McpServerOptions.RequestHandlers, McpServerHandlers.CallToolWithAlternateHandler, McpRequestFilters.CallToolWithAlternateFilters, and McpServer.InterceptOutgoingRequests -- that lets extension packages such as ModelContextProtocol.Extensions.Tasks layer behavior onto the server pipeline. These APIs are annotated [Experimental] under diagnostic ID MCPEXP002.

This surface is still being designed: #1704 tracks composing these seams with the normal filter and subscription pipeline (typed custom RPCs, filter composition, and extension-defined subscriptions). Expect these low-level extensibility APIs to change and potentially remain [Experimental] through the 2.0.0 stable release.

What's Changed

  • Fix request-scoped draft client capabilities #1685 by @PranavSenthilnathan (co-authored by @Copilot)
  • Tighten draft protocol negotiation boundaries #1692 by @halter73 (co-authored by @Copilot)
  • Fix missing resultType on complete result responses #1684 by @PranavSenthilnathan (co-authored by @Copilot)
  • Ignore empty Streamable HTTP JSON responses #1626 by @jstar0
  • Extract Tasks into the ModelContextProtocol.Extensions.Tasks extension package #1693 by @jeffhandley (co-authored by @Copilot)
  • Add opt-out for Streamable HTTP standalone GET stream #1699 by @jstar0 (co-authored by @Copilot)

Test Improvements

  • Re-enable http-custom-headers conformance scenario #1691 by @tarekgh
  • Run stateful and stateless conformance endpoints in a single server process #1672 by @halter73 (co-authored by @Copilot)

Acknowledgements

Full Changelog: v2.0.0-preview.2...v2.0.0-preview.3