From 2fe26a471eeffb0c054edfc2eb47671c8a26d5a8 Mon Sep 17 00:00:00 2001 From: z0rimo Date: Fri, 11 Sep 2026 14:26:11 +0900 Subject: [PATCH] docs: document OAuth scope selection --- docs/concepts/transports/transports.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/concepts/transports/transports.md b/docs/concepts/transports/transports.md index bb4e155f2..94a46e43c 100644 --- a/docs/concepts/transports/transports.md +++ b/docs/concepts/transports/transports.md @@ -145,6 +145,29 @@ var transport = new HttpClientTransport(new HttpClientTransportOptions }); ``` +#### OAuth scope selection + +When OAuth is configured through , provides fallback scopes only when the server does not provide scope information through the `WWW-Authenticate` header or Protected Resource Metadata. + +To filter or customize the scopes selected from server-provided information, use . The selector runs after the SDK has resolved the candidate scopes and appended `offline_access` when advertised by the authorization server. The returned scopes are used consistently for the authorization request and Dynamic Client Registration. + +```csharp +using ModelContextProtocol.Authentication; + +var transport = new HttpClientTransport(new HttpClientTransportOptions +{ + Endpoint = new Uri("https://my-mcp-server.example.com/mcp"), + OAuth = new ClientOAuthOptions + { + RedirectUri = new Uri("http://localhost:1179/callback"), + ScopeSelector = scopes => + scopes?.Where(scope => scope is "mcp:tools" or "mcp:resources") + } +}); +``` + +Return `null` or an empty sequence from `ScopeSelector` to omit the `scope` parameter entirely. + #### Resuming sessions Streamable HTTP supports session resumption. Save the session ID, server capabilities, and server info from the original session, then use to reconnect: