Phase 13: Tools & Protocols

MCP Authorization: CIMD, Issuer Binding, PKCE, and Step-Up

A remote MCP request is stateless, but its authorization is not anonymous. Bind every credential to the issuer that created it and every token to the resource that receives it. Discover authorization servers through protected-resource metadata. Prefer Client ID Metadata Documents over deprecated Dynamic Client Registration. Declare the correct applicationtype when a DCR compatibility path is unavoidable. Validate authorization response iss and isolate credentials by issuer. Use PKCE, resource indicators, audience validation, and incremental scopes. Send authorized MCP 2026-07-28 requests without protocol sessions. A remote MCP server may read private records, write external systems, or trigger costly work. Authentication tells it who presented a credential. Authorization must also answer: Which authorization server issued the credential? Which MCP resource is the token for? Which client and redirect URI completed the flow? Which operations did the user approve? Does this exact request still fit that approval? The 2026-07-28 authorization profile hardens client enrollment and issuer handling. It prefers Client ID Metadata Documents, deprecates Dynamic Client Registration, requires the right applicationtype on DCR, validates RFC 9207 issuer responses, and forbids credential reuse across issuers. These rules complement the stateless core. They do not restore a core handshake or Mcp-Session-Id. MCP client: sends requests on behalf of a resource owner. MCP resource server: accepts the access token and serves the MCP endpoint. Authorization server:…

MCP Authorization: CIMD, Issuer Binding, PKCE, and Step-Up: A remote MCP request is stateless, but its authorization is not anonymous. Bind every credential…

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.