Release v2.0.0-rc.1#1738
Merged
Merged
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 11969ba6-e16b-42a7-8402-49243929b97e
tarekgh
approved these changes
Jul 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v2.0.0-rc.1
2.0.0-rc.1 advances the v2 SDK toward general availability with stronger OAuth conformance, improved dynamic client registration, and expanded Tasks validation.
We remain on-track to release 2.0.0 stable on or before 2026-07-28.
We want to give a big thanks to @KubaZ2 for reporting the critical, ship-stopping Tasks/HTTP defect in #1720, fixed by #1722!
Release Notes
Breaking Changes
Refer to the C# SDK Versioning documentation for details on versioning and breaking change policies.
Remove the preview task-scope helper Fix HTTP task filter composition #1722
McpTasksServerExtensions.CreateMcpTaskScope(...)was removed from the stable surface. This affects only applications built against the v2 preview API; no stable 2.0 release has shipped.Harden OAuth issuer validation Implement RFC 9207 issuer validation in ClientOAuthProvider #1605
AuthorizationRedirectDelegatenow producesMCP9007, which breaks warning-as-error builds; the manual authorization flow now requires the complete redirect URL.AuthorizationCallbackHandlerand returnAuthorizationResult.Require advertised PKCE S256 support Enforce PKCE metadata compliance in OAuth client (#730) #1700
code_challenge_methods_supported: ["S256"]now cause authentication to fail instead of receiving an inferred default.Send Dynamic Client Registration application types Add
application_typeto the Dynamic Client Registration request #1613ApplicationTypenow sends an inferredapplication_typeinstead of omitting it.DynamicClientRegistrationOptions.ApplicationTypeexplicitly when the authorization server requires another value.What's Changed
application_typein Dynamic Client Registration requests Addapplication_typeto the Dynamic Client Registration request #1613 by @jayaraman-venkatesan (co-authored by @copilot)ClientOAuthProviderImplement RFC 9207 issuer validation in ClientOAuthProvider #1605 by @mikekistler (co-authored by @halter73 @copilot)Documentation Updates
release/1.x(v1.4.1) andmain(v2 preview) content Publish multi-version documentation site #1727 by @jeffhandley (co-authored by @copilot)Test Improvements
Acknowledgements
AutoDetecttransport hides the real error: surfaces 405 to the user when the server actually returned 415 #1526 (resolved by fix(client): preserve underlying status code in AutoDetect probe #1530)initialize#1580 and Stdio requests with deeply nested params can remain pending while the server remains healthy #1614 (resolved by Reject mismatched initialize protocol versions #1724 and Reply with JSON-RPC parse error for over-nested stdio requests #1629)Full Changelog: v2.0.0-preview.3...v2.0.0-rc.1
API Compatibility Report
dotnet pack --no-restorecompleted without ApiCompat warnings or errors against1.3.0; no compatibility suppressions were added.API Diff Report
ModelContextProtocol.Core
namespace ModelContextProtocol.Authentication { public sealed class ClientOAuthOptions { + public Func<AuthorizationCallbackContext, CancellationToken, Task<AuthorizationResult>> AuthorizationCallbackHandler { get; set; } } public sealed class DynamicClientRegistrationOptions { + public string? ApplicationType { get; set; } } public sealed class TokenContainer { - public Nullable<int> ExpiresIn { get; set; } + public Nullable<int?>? ExpiresIn { get; set; } - public required DateTimeOffset ObtainedAt { get; set; } + public required DateTimeOffset? ObtainedAt { get; set; } + public string? ClientId { get; set; } + public string? ClientSecret { get; set; } + public string? TokenEndpointAuthMethod { get; set; } } + public sealed class AuthorizationCallbackContext + { + public AuthorizationCallbackContext(); + public required Uri AuthorizationUri { get; init; } + public required Uri RedirectUri { get; init; } + } + public sealed class AuthorizationResult + { + public AuthorizationResult(); + public string? Code { get; init; } + public string? Iss { get; init; } + } } namespace ModelContextProtocol.Protocol { public sealed class JsonRpcMessageContext { + public string? RoutingName { get; set; } } } namespace ModelContextProtocol.Server { public sealed class McpRequestFilters { - public IList<McpRequestFilter<CallToolRequestParams, ResultOrAlternate<CallToolResult>>> CallToolWithAlternateFilters { get; set; } + public IList<McpRequestInvocationFilter<CallToolRequestParams, ResultOrAlternate<CallToolResult>>> CallToolWithAlternateFilters { get; set; } } public abstract class McpServer : McpSession { - public IDisposable InterceptOutgoingRequests(Func<string, JsonNode, CancellationToken, ValueTask<JsonNode>> interceptor); + public McpServer WithOutgoingRequestInterceptor(Func<string, JsonNode, CancellationToken, ValueTask<JsonNode>> interceptor); } public sealed class McpServerRequestHandler { + public string? RoutingNameParameter { get; init; } } + public sealed class McpRequestInvocationFilter<TParams, TResult> { ... } }ModelContextProtocol
No direct public-surface changes.
ModelContextProtocol.AspNetCore
No direct public-surface changes.