Skip to content

Release v2.0.0-rc.1#1738

Merged
jeffhandley merged 1 commit into
mainfrom
release-2.0.0-rc.1
Jul 25, 2026
Merged

Release v2.0.0-rc.1#1738
jeffhandley merged 1 commit into
mainfrom
release-2.0.0-rc.1

Conversation

@jeffhandley

Copy link
Copy Markdown
Contributor

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.

  1. 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.
    • There is no stable direct replacement; update affected task-scope integration code for the current Tasks APIs.
  2. Harden OAuth issuer validation Implement RFC 9207 issuer validation in ClientOAuthProvider #1605

    • AuthorizationRedirectDelegate now produces MCP9007, which breaks warning-as-error builds; the manual authorization flow now requires the complete redirect URL.
    • Migrate to AuthorizationCallbackHandler and return AuthorizationResult.
  3. Require advertised PKCE S256 support Enforce PKCE metadata compliance in OAuth client (#730) #1700

    • Authorization servers that omit code_challenge_methods_supported: ["S256"] now cause authentication to fail instead of receiving an inferred default.
    • Correct the authorization-server metadata or use a compliant discovery document.
  4. Send Dynamic Client Registration application types Add application_type to the Dynamic Client Registration request #1613

    • Unset ApplicationType now sends an inferred application_type instead of omitting it.
    • Set DynamicClientRegistrationOptions.ApplicationType explicitly when the authorization server requires another value.

What's Changed

Documentation Updates

Test Improvements

Acknowledgements

Full Changelog: v2.0.0-preview.3...v2.0.0-rc.1


API Compatibility Report

dotnet pack --no-restore completed without ApiCompat warnings or errors against 1.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.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 11969ba6-e16b-42a7-8402-49243929b97e
@jeffhandley
jeffhandley merged commit bdaa95c into main Jul 25, 2026
11 checks passed
@jeffhandley
jeffhandley deleted the release-2.0.0-rc.1 branch July 25, 2026 01:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants