[{"data":1,"prerenderedAt":100},["ShallowReactive",2],{"wiki-mcp-mcp-authorization-en":3},{"meta":4,"html":8,"headings":9,"words":99},{"title":5,"description":6,"published":7,"updated":7},"Authorization in MCP","Authorization in MCP is an OAuth 2.1 based flow for HTTP servers: bearer tokens, resource metadata, client registration, scopes and issuer checks.","2026-11-03","\u003Cp>\u003Cstrong>Authorization in MCP\u003C/strong> is the part of the Model Context Protocol specification that defines how an \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-client\">MCP client\u003C/span> obtains an access token for a protected \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-server\">MCP server\u003C/span> and presents it with every HTTP request. It is built on OAuth 2.1 and a set of related IETF standards. The MCP server acts as an OAuth resource server, and a separate authorization server issues the tokens.\u003C/p>\n\u003Cp>Authorization first appeared in the specification 2025-03-26 and has changed in every revision since. This article describes the current version of the specification, \u003Cstrong>2026-07-28\u003C/strong>, and notes what changed in earlier versions. Basic concepts of the protocol (host, client, server, transports) are described in the article \u003Ca href=\"/en/wiki/mcp/what-is-mcp\" class=\"wiki-link wiki-link--article\">What is MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"overview\" class=\"wiki-heading\">Overview\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"overview\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Property\u003C/th>\n\u003Cth>Value\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Type\u003C/td>\n\u003Ctd>Authorization at the transport level, optional\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Applies to\u003C/td>\n\u003Ctd>HTTP-based transports; stdio servers take credentials from the environment\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Basis\u003C/td>\n\u003Ctd>OAuth 2.1 (IETF draft), a selected subset of its features\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Roles\u003C/td>\n\u003Ctd>MCP server as resource server, MCP client as OAuth client, authorization server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Token\u003C/td>\n\u003Ctd>Bearer access token in the \u003Ccode>Authorization\u003C/code> header of every request\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Discovery\u003C/td>\n\u003Ctd>Protected Resource Metadata (RFC 9728); Authorization Server Metadata (RFC 8414) or OpenID Connect Discovery 1.0\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Client registration\u003C/td>\n\u003Ctd>Client ID Metadata Documents, pre-registration, Dynamic Client Registration (deprecated)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Required protections\u003C/td>\n\u003Ctd>PKCE with \u003Ccode>S256\u003C/code>, resource indicators (RFC 8707), issuer validation (RFC 9207)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Specification version\u003C/td>\n\u003Ctd>2026-07-28\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"the-problem-it-solves\" class=\"wiki-heading\">The problem it solves\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"the-problem-it-solves\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>A remote MCP server often serves many users and has to know who sends a request and what that user has allowed. A token in a configuration file is issued by hand for each server and stored in a predictable location on disk.\u003C/p>\n\u003Cp>MCP clients are general-purpose: a host can connect to a server with which it has no prior relationship. OAuth 2.0 (RFC 6749) assumes the opposite: the client registers before the flow and learns the endpoints from the documentation of the service.\u003C/p>\n\u003Cp>The specification solves this with a chain of standard documents. The server answers an unauthenticated request with HTTP 401 and a link to its metadata, which names the authorization server. The client identifies itself with a URL of its own metadata document, so no prior registration is needed. The resulting token is bound to one MCP server.\u003C/p>\n\u003Ch2 id=\"history\" class=\"wiki-heading\">History\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"history\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The table shows how authorization changed across the versions of the specification.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Date\u003C/th>\n\u003Cth>Event\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>November 2024\u003C/td>\n\u003Ctd>Specification 2024-11-05: authorization is not defined\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>26 March 2025\u003C/td>\n\u003Ctd>Specification 2025-03-26: authorization based on OAuth 2.1, Authorization Server Metadata (RFC 8414) with default paths \u003Ccode>/authorize\u003C/code>, \u003Ccode>/token\u003C/code>, \u003Ccode>/register\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>18 June 2025\u003C/td>\n\u003Ctd>Specification 2025-06-18: the MCP server is classified as an OAuth resource server and publishes Protected Resource Metadata (RFC 9728). Clients must send resource indicators (RFC 8707). Token passthrough is forbidden; a Security Best Practices page is added\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>25 November 2025\u003C/td>\n\u003Ctd>Specification 2025-11-25: Client ID Metadata Documents recommended, Dynamic Client Registration optional, OpenID Connect Discovery 1.0, scopes in \u003Ccode>WWW-Authenticate\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>28 July 2026\u003C/td>\n\u003Ctd>Specification 2026-07-28: validation of \u003Ccode>iss\u003C/code> in the authorization response (RFC 9207), credentials bound to the issuer, \u003Ccode>application_type\u003C/code> in Dynamic Client Registration, Dynamic Client Registration deprecated\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"roles\" class=\"wiki-heading\">Roles\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"roles\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The specification defines three participants and a user agent:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Resource server\u003C/strong> is the protected MCP server. It accepts requests with access tokens, checks them and answers.\u003C/li>\n\u003Cli>\u003Cstrong>OAuth client\u003C/strong> is the MCP client. It makes requests on behalf of the resource owner, usually the user of the host.\u003C/li>\n\u003Cli>\u003Cstrong>Authorization server\u003C/strong> interacts with the user, if needed, and issues access tokens for use at the MCP server. It can be hosted together with the MCP server or separately; the specification does not define its implementation.\u003C/li>\n\u003Cli>\u003Cstrong>User agent\u003C/strong> is the browser in which the user signs in and gives consent.\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"when-authorization-applies\" class=\"wiki-heading\">When authorization applies\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"when-authorization-applies\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Authorization is optional. When an implementation supports it, the requirements depend on the transport:\u003C/p>\n\u003Cul>\n\u003Cli>an implementation over an HTTP-based transport should follow the authorization specification;\u003C/li>\n\u003Cli>an implementation over \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"stdio\">stdio\u003C/span> should not follow it and takes credentials from the environment, for example from environment variables set by the host;\u003C/li>\n\u003Cli>an implementation over another transport must follow the established security practices of that transport.\u003C/li>\n\u003C/ul>\n\u003Cp>The transports themselves are described in the article \u003Ca href=\"/en/wiki/mcp/mcp-transports\" class=\"wiki-link wiki-link--article\">Transports in MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"the-complete-flow\" class=\"wiki-heading\">The complete flow\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"the-complete-flow\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The diagram shows the flow from the first request without a token to the first request with a token. The client ID comes from one of the registration mechanisms described below.\u003C/p>\n\u003Cdiv class=\"wiki-code wiki-code--plain\">\u003Cpre>\u003Ccode>Browser              MCP client                   MCP server              Authorization server\n   |                      |                            |                            |\n   |                      |-- request without token --&gt;|                            |\n   |                      |&lt;- 401, WWW-Authenticate ---|                            |\n   |                      |-- GET resource metadata --&gt;|                            |\n   |                      |&lt;- authorization_servers ---|                            |\n   |                      |-- GET authorization server metadata -------------------&gt;|\n   |                      |&lt;- endpoints, PKCE, iss support -------------------------|\n   |                      |   record issuer, PKCE      |                            |\n   |&lt;- authorization URL -|                            |                            |\n   |-- code_challenge, resource, scope --------------------------------------------&gt;|\n   |                      |                            |                            | user signs in, consents\n   |&lt;- redirect: code, state, iss --------------------------------------------------|\n   |-- code, state, iss -&gt;|                            |                            |\n   |                      |   compare iss with issuer  |                            |\n   |                      |-- token request, code_verifier ------------------------&gt;|\n   |                      |&lt;- access token, refresh token --------------------------|\n   |                      |-- request + Bearer token -&gt;|                            |\n   |                      |&lt;- MCP response ------------|                            |\u003C/code>\u003C/pre>\u003C/div>\n\u003Ch2 id=\"discovery\" class=\"wiki-heading\">Discovery\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"discovery\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"protected-resource-metadata\" class=\"wiki-heading\">Protected resource metadata\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"protected-resource-metadata\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>An MCP server must implement OAuth 2.0 Protected Resource Metadata (RFC 9728). Its metadata document must contain the \u003Ccode>authorization_servers\u003C/code> field with at least one authorization server. The server makes the document discoverable in one of two ways: it puts the URL in the \u003Ccode>resource_metadata\u003C/code> parameter of the \u003Ccode>WWW-Authenticate\u003C/code> header of a 401 response, or it serves the document at a well-known URI.\u003C/p>\n\u003Cp>A response to a request without a token can look like this:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>HTTP/1.1 401 Unauthorized\nWWW-Authenticate: Bearer resource_metadata=&quot;https://mcp.example.com/.well-known/oauth-protected-resource/mcp&quot;, scope=&quot;files:read&quot;\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>If the header has no \u003Ccode>resource_metadata\u003C/code>, the client builds well-known URIs and tries them in order. For an \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-endpoint\">MCP endpoint\u003C/span> \u003Ccode>https://example.com/public/mcp\u003C/code> the first one is \u003Ccode>https://example.com/.well-known/oauth-protected-resource/public/mcp\u003C/code>, with the path inserted after the well-known prefix. The second one is the root: \u003Ccode>https://example.com/.well-known/oauth-protected-resource\u003C/code>. Clients must support both discovery mechanisms.\u003C/p>\n\u003Cp>The metadata document of the server from the example above:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;resource&quot;: &quot;https://mcp.example.com/mcp&quot;,\n  &quot;authorization_servers&quot;: [&quot;https://auth.example.com&quot;],\n  &quot;scopes_supported&quot;: [&quot;files:read&quot;, &quot;files:write&quot;],\n  &quot;bearer_methods_supported&quot;: [&quot;header&quot;],\n  &quot;resource_name&quot;: &quot;Example MCP Server&quot;\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>According to RFC 9728, the \u003Ccode>resource\u003C/code> value must match the URL that the client used to call the server; otherwise the client must not use the document.\u003C/p>\n\u003Ch3 id=\"authorization-server-metadata\" class=\"wiki-heading\">Authorization server metadata\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"authorization-server-metadata\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>An authorization server must provide at least one of two discovery mechanisms: OAuth 2.0 Authorization Server Metadata (RFC 8414) or OpenID Connect Discovery 1.0. Clients must support both and try several well-known URLs in a fixed order.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Issuer\u003C/th>\n\u003Cth>URLs in order of priority\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>With a path, \u003Ccode>https://auth.example.com/tenant1\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>/.well-known/oauth-authorization-server/tenant1\u003C/code>, \u003Ccode>/.well-known/openid-configuration/tenant1\u003C/code>, \u003Ccode>/tenant1/.well-known/openid-configuration\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Without a path, \u003Ccode>https://auth.example.com\u003C/code>\u003C/td>\n\u003Ctd>\u003Ccode>/.well-known/oauth-authorization-server\u003C/code>, \u003Ccode>/.well-known/openid-configuration\u003C/code>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>The \u003Ccode>issuer\u003C/code> value in the received document must be identical to the issuer identifier from which the URL was built. A document fetched from an attacker's host that claims another issuer must be rejected.\u003C/p>\n\u003Cp>A shortened example of authorization server metadata with the fields that matter for MCP:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;issuer&quot;: &quot;https://auth.example.com&quot;,\n  &quot;authorization_endpoint&quot;: &quot;https://auth.example.com/authorize&quot;,\n  &quot;token_endpoint&quot;: &quot;https://auth.example.com/token&quot;,\n  &quot;response_types_supported&quot;: [&quot;code&quot;],\n  &quot;grant_types_supported&quot;: [&quot;authorization_code&quot;, &quot;refresh_token&quot;],\n  &quot;code_challenge_methods_supported&quot;: [&quot;S256&quot;],\n  &quot;scopes_supported&quot;: [&quot;files:read&quot;, &quot;files:write&quot;, &quot;offline_access&quot;],\n  &quot;client_id_metadata_document_supported&quot;: true,\n  &quot;authorization_response_iss_parameter_supported&quot;: true\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Ch2 id=\"client-registration\" class=\"wiki-heading\">Client registration\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"client-registration\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Before the authorization flow the client must obtain a client ID. The specification defines three mechanisms. A client that supports all of them should use them in this order:\u003C/p>\n\u003Col>\n\u003Cli>pre-registered client information for this server, if the client has it;\u003C/li>\n\u003Cli>a Client ID Metadata Document, if the authorization server advertises \u003Ccode>client_id_metadata_document_supported\u003C/code>;\u003C/li>\n\u003Cli>Dynamic Client Registration, if the authorization server publishes \u003Ccode>registration_endpoint\u003C/code>;\u003C/li>\n\u003Cli>a prompt to the user to enter client information.\u003C/li>\n\u003C/ol>\n\u003Ch3 id=\"client-id-metadata-documents\" class=\"wiki-heading\">Client ID Metadata Documents\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"client-id-metadata-documents\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>With \u003Cstrong>Client ID Metadata Documents\u003C/strong> the client ID is an HTTPS URL that points to a JSON document with the client's metadata. The URL must use the \u003Ccode>https\u003C/code> scheme and contain a path. The document must contain at least \u003Ccode>client_id\u003C/code>, \u003Ccode>client_name\u003C/code> and \u003Ccode>redirect_uris\u003C/code>, and \u003Ccode>client_id\u003C/code> must match the URL of the document exactly.\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"json\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">JSON\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>{\n  &quot;client_id&quot;: &quot;https://app.example.com/oauth/client-metadata.json&quot;,\n  &quot;client_name&quot;: &quot;Example MCP Client&quot;,\n  &quot;client_uri&quot;: &quot;https://app.example.com&quot;,\n  &quot;redirect_uris&quot;: [&quot;http://127.0.0.1:3000/callback&quot;],\n  &quot;grant_types&quot;: [&quot;authorization_code&quot;, &quot;refresh_token&quot;],\n  &quot;response_types&quot;: [&quot;code&quot;],\n  &quot;token_endpoint_auth_method&quot;: &quot;none&quot;\n}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>When the authorization server sees a client ID in URL form, it fetches the document, checks \u003Ccode>client_id\u003C/code> and the redirect URI of the request and caches the document according to HTTP cache headers. The mechanism is based on an IETF draft.\u003C/p>\n\u003Ch3 id=\"pre-registration\" class=\"wiki-heading\">Pre-registration\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"pre-registration\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Clients should support static client credentials: a client ID built into the client for a specific authorization server, or a form where the user enters a client ID registered by the user.\u003C/p>\n\u003Ch3 id=\"dynamic-client-registration\" class=\"wiki-heading\">Dynamic Client Registration\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"dynamic-client-registration\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Dynamic Client Registration (RFC 7591) lets a client obtain a client ID with a request to the \u003Ccode>registration_endpoint\u003C/code> of the authorization server, without user interaction. It is deprecated since 2026-07-28 and kept for compatibility with authorization servers that do not support Client ID Metadata Documents. A client that uses it must specify an \u003Ccode>application_type\u003C/code>: \u003Ccode>native\u003C/code> for desktop, CLI and local web applications, \u003Ccode>web\u003C/code> for remote web applications.\u003C/p>\n\u003Ch3 id=\"binding-credentials-to-the-authorization-server\" class=\"wiki-heading\">Binding credentials to the authorization server\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"binding-credentials-to-the-authorization-server\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Pre-registered credentials and credentials saved after Dynamic Client Registration belong to the authorization server that issued them. The client must store them keyed by that server's \u003Ccode>issuer\u003C/code>. If the protected resource metadata starts naming another authorization server, the client must not reuse the old credentials and must register again. Client IDs based on Client ID Metadata Documents are portable: the authorization server resolves the URL on demand, so a change of server needs no new registration.\u003C/p>\n\u003Ch2 id=\"authorization-request-and-token\" class=\"wiki-heading\">Authorization request and token\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"authorization-request-and-token\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"pkce\" class=\"wiki-heading\">PKCE\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"pkce\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>\u003Cstrong>PKCE\u003C/strong> (Proof Key for Code Exchange, RFC 7636) protects the authorization code from interception. Before the request the client creates a random \u003Ccode>code_verifier\u003C/code> and sends its SHA-256 hash, the \u003Ccode>code_challenge\u003C/code>, in the authorization request. In the token request the client sends the \u003Ccode>code_verifier\u003C/code> itself, so only the client that started the flow can redeem the code.\u003C/p>\n\u003Cp>MCP clients must implement PKCE and must use the \u003Ccode>S256\u003C/code> method when technically capable. OAuth does not define how to discover PKCE support, so the client checks \u003Ccode>code_challenge_methods_supported\u003C/code> in the authorization server metadata. If the field is absent, the client must refuse to proceed. An authorization server that offers OpenID Connect Discovery must include this field for MCP compatibility.\u003C/p>\n\u003Ch3 id=\"resource-indicators\" class=\"wiki-heading\">Resource indicators\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"resource-indicators\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>A \u003Cstrong>resource indicator\u003C/strong> (RFC 8707) is the \u003Ccode>resource\u003C/code> parameter that names the server for which the token is requested. MCP clients must send it in both the authorization request and the token request, even if the authorization server does not support it. The value is the canonical URI of the MCP server: an absolute URI with a scheme and without a fragment, for example \u003Ccode>https://mcp.example.com/mcp\u003C/code> or \u003Ccode>https://mcp.example.com\u003C/code>. The form without a trailing slash is recommended.\u003C/p>\n\u003Cp>An authorization request with all required parameters:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>GET /authorize?response_type=code&amp;client_id=https%3A%2F%2Fapp.example.com%2Foauth%2Fclient-metadata.json&amp;redirect_uri=http%3A%2F%2F127.0.0.1%3A3000%2Fcallback&amp;scope=files%3Aread&amp;state=af0ifjsldkj&amp;code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM&amp;code_challenge_method=S256&amp;resource=https%3A%2F%2Fmcp.example.com%2Fmcp HTTP/1.1\nHost: auth.example.com\u003C/code>\u003C/pre>\u003C/div>\n\u003Ch3 id=\"issuer-validation\" class=\"wiki-heading\">Issuer validation\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"issuer-validation\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>In a \u003Cstrong>mix-up attack\u003C/strong> a malicious authorization server tries to make the client send it a code or token issued by another, honest server (RFC 9207). PKCE does not prevent this, because the client would send its \u003Ccode>code_verifier\u003C/code> to the attacker's token endpoint.\u003C/p>\n\u003Cp>Before opening the browser the client must record the \u003Ccode>issuer\u003C/code> from the validated metadata, together with the PKCE verifier and \u003Ccode>state\u003C/code>. Authorization servers should add the \u003Ccode>iss\u003C/code> parameter to authorization responses and advertise this with \u003Ccode>authorization_response_iss_parameter_supported\u003C/code>. The client checks the response before it sends the code to any token endpoint:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003Ccode>authorization_response_iss_parameter_supported\u003C/code>\u003C/th>\n\u003Cth>\u003Ccode>iss\u003C/code> in the response\u003C/th>\n\u003Cth>Client action\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>true\u003C/code>\u003C/td>\n\u003Ctd>present\u003C/td>\n\u003Ctd>Compare with the recorded issuer\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>true\u003C/code>\u003C/td>\n\u003Ctd>absent\u003C/td>\n\u003Ctd>Reject the response\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>false\u003C/code> or absent\u003C/td>\n\u003Ctd>present\u003C/td>\n\u003Ctd>Compare with the recorded issuer\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>false\u003C/code> or absent\u003C/td>\n\u003Ctd>absent\u003C/td>\n\u003Ctd>Proceed\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>The comparison is a simple string comparison without any normalization. It applies to error responses too: on a mismatch the client does not show \u003Ccode>error\u003C/code>, \u003Ccode>error_description\u003C/code> or \u003Ccode>error_uri\u003C/code>.\u003C/p>\n\u003Cp>A redirect that passes the check and the token request that follows it:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>HTTP/1.1 302 Found\nLocation: http://127.0.0.1:3000/callback?code=SplxlOBeZQQYbYS6WxSbIA&amp;state=af0ifjsldkj&amp;iss=https%3A%2F%2Fauth.example.com\u003C/code>\u003C/pre>\u003C/div>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>POST /token HTTP/1.1\nHost: auth.example.com\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=authorization_code&amp;code=SplxlOBeZQQYbYS6WxSbIA&amp;redirect_uri=http%3A%2F%2F127.0.0.1%3A3000%2Fcallback&amp;client_id=https%3A%2F%2Fapp.example.com%2Foauth%2Fclient-metadata.json&amp;code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk&amp;resource=https%3A%2F%2Fmcp.example.com%2Fmcp\u003C/code>\u003C/pre>\u003C/div>\n\u003Ch2 id=\"using-the-access-token\" class=\"wiki-heading\">Using the access token\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"using-the-access-token\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The client sends the token in the \u003Ccode>Authorization\u003C/code> header with the \u003Ccode>Bearer\u003C/code> scheme. The header must be present in every HTTP request to the server, not only in the first one. The token must not be placed in the query string of the URI. Since 2026-07-28 there is also no protocol session: each request carries its own authorization.\u003C/p>\n\u003Cp>A request to call a tool with a token:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>POST /mcp HTTP/1.1\nHost: mcp.example.com\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIs...\nContent-Type: application/json\nAccept: application/json, text/event-stream\nMCP-Protocol-Version: 2026-07-28\nMcp-Method: tools/call\nMcp-Name: read_file\n\n{&quot;jsonrpc&quot;: &quot;2.0&quot;, &quot;id&quot;: 7, &quot;method&quot;: &quot;tools/call&quot;, &quot;params&quot;: {&quot;name&quot;: &quot;read_file&quot;, &quot;arguments&quot;: {&quot;path&quot;: &quot;report.md&quot;}, &quot;_meta&quot;: {&quot;io.modelcontextprotocol/protocolVersion&quot;: &quot;2026-07-28&quot;, &quot;io.modelcontextprotocol/clientCapabilities&quot;: {}}}}\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>The server validates the token as OAuth 2.1 requires and checks that the token was issued for it as the audience. An invalid or expired token gets HTTP 401. The server must not accept or pass on tokens issued for other resources. The client must not send the server tokens issued by any other authorization server.\u003C/p>\n\u003Cp>When the MCP server calls another API, it acts as a separate OAuth client of that API with a separate token. Forwarding the client's token (\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"token-passthrough\">token passthrough\u003C/span>) is forbidden.\u003C/p>\n\u003Ch2 id=\"errors-and-scopes\" class=\"wiki-heading\">Errors and scopes\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"errors-and-scopes\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"status-codes\" class=\"wiki-heading\">Status codes\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"status-codes\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>The table lists the HTTP status codes that a server returns for authorization errors.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Code\u003C/th>\n\u003Cth>Meaning\u003C/th>\n\u003Cth>When it is used\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>401\u003C/td>\n\u003Ctd>Unauthorized\u003C/td>\n\u003Ctd>Authorization is required or the token is invalid\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>403\u003C/td>\n\u003Ctd>Forbidden\u003C/td>\n\u003Ctd>Invalid scopes or insufficient permissions\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>400\u003C/td>\n\u003Ctd>Bad Request\u003C/td>\n\u003Ctd>Malformed authorization request\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch3 id=\"scope-selection\" class=\"wiki-heading\">Scope selection\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"scope-selection\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>A \u003Cstrong>scope\u003C/strong> is a named permission that a token carries, such as \u003Ccode>files:read\u003C/code>. The server should include a \u003Ccode>scope\u003C/code> parameter in the \u003Ccode>WWW-Authenticate\u003C/code> header of the 401 response with the scopes needed for the resource. For the first authorization the client takes the scopes from this parameter. If the parameter is absent, it requests all scopes from \u003Ccode>scopes_supported\u003C/code> in the protected resource metadata, or omits \u003Ccode>scope\u003C/code> if that field is absent too.\u003C/p>\n\u003Cp>The client treats the scopes in a challenge as authoritative for the current operation, whatever their relation to \u003Ccode>scopes_supported\u003C/code>. \u003Ccode>scopes_supported\u003C/code> is meant to hold a minimal set for basic functionality. Servers should not list \u003Ccode>offline_access\u003C/code> there or in a challenge, because refresh tokens are not a requirement of the resource.\u003C/p>\n\u003Ch3 id=\"step-up-authorization\" class=\"wiki-heading\">Step-up authorization\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"step-up-authorization\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>\u003Cstrong>Step-up authorization\u003C/strong> is a request for a new token with more scopes when the current token is not sufficient for an operation. A server that receives such a token should answer HTTP 403 with \u003Ccode>error=&quot;insufficient_scope&quot;\u003C/code>, the required scopes and \u003Ccode>resource_metadata\u003C/code>:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"http\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">HTTP\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Copied\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Copy\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Copied\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>HTTP/1.1 403 Forbidden\nWWW-Authenticate: Bearer error=&quot;insufficient_scope&quot;, scope=&quot;files:write&quot;, resource_metadata=&quot;https://mcp.example.com/.well-known/oauth-protected-resource/mcp&quot;, error_description=&quot;File write permission required for this operation&quot;\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>The client computes the union of the scopes it requested before and the scopes from the challenge, starts authorization again and repeats the original request. The union keeps permissions that other operations still need. The server should name all scopes required for the operation in one challenge. Clients should limit retries; clients acting on their own behalf, with \u003Ccode>client_credentials\u003C/code>, may abort the request instead. Servers must take scope hierarchies into account, where a broader scope implies a narrower one.\u003C/p>\n\u003Ch2 id=\"refresh-tokens\" class=\"wiki-heading\">Refresh tokens\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"refresh-tokens\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>A refresh token lets the client obtain a new access token without the user. A client that wants refresh tokens must keep them confidential, should include \u003Ccode>refresh_token\u003C/code> in \u003Ccode>grant_types\u003C/code> of its metadata and may request \u003Ccode>offline_access\u003C/code> if the authorization server lists it. The client must not assume that a refresh token will be issued.\u003C/p>\n\u003Cp>Authorization servers should issue short-lived access tokens and must rotate refresh tokens for public clients.\u003C/p>\n\u003Ch2 id=\"security-requirements\" class=\"wiki-heading\">Security requirements\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"security-requirements\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>The Security Considerations of the specification cover these attacks:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>token theft\u003C/strong>: tokens are stored securely;\u003C/li>\n\u003Cli>\u003Cstrong>communication security\u003C/strong>: authorization server endpoints use HTTPS, redirect URIs are \u003Ccode>localhost\u003C/code> or HTTPS;\u003C/li>\n\u003Cli>\u003Cstrong>open redirection\u003C/strong>: redirect URIs are registered and compared exactly, the client checks \u003Ccode>state\u003C/code>;\u003C/li>\n\u003Cli>\u003Cstrong>mix-up attacks\u003C/strong>: the client validates \u003Ccode>iss\u003C/code>;\u003C/li>\n\u003Cli>\u003Cstrong>confused deputy\u003C/strong>: an \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mcp-proxy-server\">MCP proxy server\u003C/span> obtains user consent for each client;\u003C/li>\n\u003Cli>\u003Cstrong>Client ID Metadata Document risks\u003C/strong>: request forgery when documents are fetched, impersonation of \u003Ccode>localhost\u003C/code> redirect URIs.\u003C/li>\n\u003C/ul>\n\u003Cp>These and other risks are described in the article \u003Ca href=\"/en/wiki/mcp/mcp-security\" class=\"wiki-link wiki-link--article\">MCP security\u003C/a>, checks of a server's authorization behavior in \u003Ca href=\"/en/wiki/mcp/testing-mcp-servers\" class=\"wiki-link wiki-link--article\">Testing MCP servers\u003C/a>.\u003C/p>\n\u003Ch2 id=\"authorization-extensions\" class=\"wiki-heading\">Authorization extensions\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"authorization-extensions\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Two official extensions cover cases beyond interactive user consent. OAuth Client Credentials defines machine-to-machine access. \u003Cstrong>Enterprise-Managed Authorization\u003C/strong> (\u003Ccode>io.modelcontextprotocol/enterprise-managed-authorization\u003C/code>) lets an organization control access to MCP servers through its identity provider, so employees do not authorize each server separately. Extensions are described in the article \u003Ca href=\"/en/wiki/mcp/mcp-extensions\" class=\"wiki-link wiki-link--article\">MCP extensions\u003C/a>.\u003C/p>\n\u003Ch2 id=\"mcp-authorization-and-related-mechanisms\" class=\"wiki-heading\">MCP authorization and related mechanisms\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"mcp-authorization-and-related-mechanisms\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Several mechanisms in and around MCP deal with credentials. The table shows how they differ.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Mechanism\u003C/th>\n\u003Cth>Who is authorized\u003C/th>\n\u003Cth>Where the credentials come from\u003C/th>\n\u003Cth>Who holds them\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Credentials from the environment\u003C/td>\n\u003Ctd>A local stdio server at an external service\u003C/td>\n\u003Ctd>Environment variables, configuration of the host\u003C/td>\n\u003Ctd>The server process\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>MCP authorization\u003C/td>\n\u003Ctd>The MCP client at the MCP server\u003C/td>\n\u003Ctd>OAuth flow with the server's authorization server\u003C/td>\n\u003Ctd>The MCP client\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>URL mode elicitation\u003C/td>\n\u003Ctd>The MCP server at a third-party API\u003C/td>\n\u003Ctd>OAuth flow or form opened by the server in the browser\u003C/td>\n\u003Ctd>The MCP server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Enterprise-Managed Authorization\u003C/td>\n\u003Ctd>The MCP client at the MCP server\u003C/td>\n\u003Ctd>The organization's identity provider\u003C/td>\n\u003Ctd>The MCP client\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>MCP authorization protects the MCP server itself. A server that needs access to a third-party service on behalf of the user obtains it separately, through URL mode \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"elicitation\">elicitation\u003C/span>: the server sends the user to a URL, and the credentials never pass through the client. The server must not use URL mode elicitation to authorize users for itself.\u003C/p>\n\u003Cp>The two flows never share tokens. Elicitation requests travel through \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"mrtr\">Multi Round-Trip Requests\u003C/span>, described in the article \u003Ca href=\"/en/wiki/mcp/stateless-mcp\" class=\"wiki-link wiki-link--article\">Stateless MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"terms\" class=\"wiki-heading\">Terms\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"terms\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Term\u003C/th>\n\u003Cth>Meaning\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Resource server\u003C/td>\n\u003Ctd>Server that accepts requests with access tokens; in MCP, the protected MCP server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Authorization server\u003C/td>\n\u003Ctd>Service that authenticates the user and issues access tokens for the MCP server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Protected Resource Metadata\u003C/td>\n\u003Ctd>JSON document of the MCP server (RFC 9728) that names its authorization servers and scopes\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Client ID Metadata Document\u003C/td>\n\u003Ctd>JSON document at an HTTPS URL that serves as the client ID and describes the client\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>PKCE\u003C/td>\n\u003Ctd>Proof Key for Code Exchange: a verifier and its hash that bind the authorization code to the client that requested it\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Resource indicator\u003C/td>\n\u003Ctd>\u003Ccode>resource\u003C/code> parameter (RFC 8707) that names the MCP server for which a token is requested\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Scope\u003C/td>\n\u003Ctd>Named permission carried by an access token\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Step-up authorization\u003C/td>\n\u003Ctd>Request for a token with more scopes after a 403 response with \u003Ccode>insufficient_scope\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Mix-up attack\u003C/td>\n\u003Ctd>Attack in which a malicious authorization server obtains a code or token issued by another server\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Refresh token\u003C/td>\n\u003Ctd>Token that lets the client obtain a new access token without the user\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"sources\" class=\"wiki-heading\">Sources\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"sources\" aria-label=\"Copy link to section\" data-copied-label=\"Link to section copied\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Authorization, specification 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/authorization-server-discovery\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Authorization Server Discovery, specification 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Client Registration, specification 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/security-considerations\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Authorization Security Considerations, specification 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2026-07-28/changelog\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Key Changes, specification 2026-07-28\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Authorization, specification 2025-03-26\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2025-06-18/changelog\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Key Changes, specification 2025-06-18\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/specification/2025-11-25/changelog\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Key Changes, specification 2025-11-25\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Enterprise-Managed Authorization\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-13\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">The OAuth 2.1 Authorization Framework, draft-ietf-oauth-v2-1-13\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc6749\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 6749: The OAuth 2.0 Authorization Framework\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc9728\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 9728: OAuth 2.0 Protected Resource Metadata\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc8414\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 8414: OAuth 2.0 Authorization Server Metadata\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.rfc-editor.org/rfc/rfc8707.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 8707: Resource Indicators for OAuth 2.0\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc9207\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 9207: OAuth 2.0 Authorization Server Issuer Identification\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc7636\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 7636: Proof Key for Code Exchange by OAuth Public Clients\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/rfc7591\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-00\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">OAuth Client ID Metadata Document, draft-ietf-oauth-client-id-metadata-document-00\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(opens in a new tab)\u003C/span>\u003C/a>\u003C/li>\n\u003C/ul>\n",[10,14,17,20,23,26,29,32,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96],{"id":11,"level":12,"text":13},"overview",2,"Overview",{"id":15,"level":12,"text":16},"the-problem-it-solves","The problem it solves",{"id":18,"level":12,"text":19},"history","History",{"id":21,"level":12,"text":22},"roles","Roles",{"id":24,"level":12,"text":25},"when-authorization-applies","When authorization applies",{"id":27,"level":12,"text":28},"the-complete-flow","The complete flow",{"id":30,"level":12,"text":31},"discovery","Discovery",{"id":33,"level":34,"text":35},"protected-resource-metadata",3,"Protected resource metadata",{"id":37,"level":34,"text":38},"authorization-server-metadata","Authorization server metadata",{"id":40,"level":12,"text":41},"client-registration","Client registration",{"id":43,"level":34,"text":44},"client-id-metadata-documents","Client ID Metadata Documents",{"id":46,"level":34,"text":47},"pre-registration","Pre-registration",{"id":49,"level":34,"text":50},"dynamic-client-registration","Dynamic Client Registration",{"id":52,"level":34,"text":53},"binding-credentials-to-the-authorization-server","Binding credentials to the authorization server",{"id":55,"level":12,"text":56},"authorization-request-and-token","Authorization request and token",{"id":58,"level":34,"text":59},"pkce","PKCE",{"id":61,"level":34,"text":62},"resource-indicators","Resource indicators",{"id":64,"level":34,"text":65},"issuer-validation","Issuer validation",{"id":67,"level":12,"text":68},"using-the-access-token","Using the access token",{"id":70,"level":12,"text":71},"errors-and-scopes","Errors and scopes",{"id":73,"level":34,"text":74},"status-codes","Status codes",{"id":76,"level":34,"text":77},"scope-selection","Scope selection",{"id":79,"level":34,"text":80},"step-up-authorization","Step-up authorization",{"id":82,"level":12,"text":83},"refresh-tokens","Refresh tokens",{"id":85,"level":12,"text":86},"security-requirements","Security requirements",{"id":88,"level":12,"text":89},"authorization-extensions","Authorization extensions",{"id":91,"level":12,"text":92},"mcp-authorization-and-related-mechanisms","MCP authorization and related mechanisms",{"id":94,"level":12,"text":95},"terms","Terms",{"id":97,"level":12,"text":98},"sources","Sources",2819,1793718930777]