- wire spec: lifecycle, stdio + Streamable HTTP transports, tools, utilities, legacy SSE, versioning, changelog (14 Tier 1) - client ecosystem: Claude Code/VS Code/Cursor/Codex configs, mcp-remote, Smithery, registries, Glama (12 Tier 1) - security/ops: authorization draft, trust model, poisoning, rug pulls, production hardening (12 Tier 1) + 68 Tier 2 cards - conclusions: minimal stdlib client on 2025-11-25, normalizer + resolver agent for pasted configs/GitHub URLs, untrusted-until- consent trust model; nothing built yet - audit PASS (14 subjects, 797 sources, 32 conclusions)
4.3 KiB
Authorization - Model Context Protocol
Metadata
| Field | Value |
|---|---|
| Institute | Molodetz Institute - Research & Retrieval Division |
| Subject | mcp-client-support |
| Document type | Source Dossier |
| Tier | 1 |
| Source title | Authorization - Model Context Protocol |
| Source URL | https://modelcontextprotocol.io/specification/draft/basic/authorization |
| Source publisher / author | MCP specification authors (modelcontextprotocol.io) |
| Source type | standard |
| Source date (published) | Unknown - not stated (draft revision; fetched Oct 2026) |
| Date researched | 2026-10-18 |
| Researched by | tai (agent), model: Claude Sonnet 5, on behalf of retoor |
| Research method | gather-subagent direct page fetch, parent synthesis from evidence pack |
| Confidence | High |
| Status | Active |
Summary
The draft MCP authorization specification layers MCP auth on OAuth 2.1 plus a set of RFCs for metadata, dynamic registration, and resource indicators. Authorization is OPTIONAL for MCP implementations: HTTP transports SHOULD conform, while STDIO transports SHOULD NOT follow the spec and should get credentials from the environment instead. The hard client rules are RFC 8707 resource indicators on every authorization and token request, strict audience binding in both directions, and issuer validation against authorization-response mix-up.
Key findings
- "Authorization is OPTIONAL for MCP implementations": HTTP-based transports SHOULD conform to the spec, but "Implementations using an STDIO transport SHOULD NOT follow this specification, and instead retrieve credentials from the environment."
- The spec builds on OAuth 2.1 draft (
draft-ietf-oauth-v2-1-13) plus RFC 6750 (Bearer usage), RFC 8414 (authorization server metadata), RFC 7591 (dynamic client registration), RFC 8707 (resource indicators), RFC 9728 (protected resource metadata), RFC 9207 (issuer identification), and CIMD (Client ID Metadata Documents). - "MCP clients MUST implement Resource Indicators for OAuth 2.0 as defined in RFC 8707": the
resourceparameter "MUST be included in both authorization requests and token requests" and "MUST use the canonical URI of the MCP server". - Audience binding is mandatory in both directions: "MCP clients MUST NOT send tokens to the MCP server other than ones issued by the MCP server's authorization server", and "MCP servers MUST NOT accept or transit any other tokens."
- Scope step-up flow: on
insufficient_scopethe client computes "the union of the client's previously requested scope set and the scopes from the current challenge", then retries "no more than a few times". - Authorization-response mix-up defense: clients MUST record the issuer and validate
issper RFC 9207 before sending the code to any token endpoint; "A future revision... is expected to upgrade authorization server inclusion ofissfrom SHOULD to MUST." - Client registration priority: Client ID Metadata Documents are preferred; DCR "is deprecated and retained for backwards compatibility".
Pros / strengths
- Normative and specific: the MUST/MUST NOT rules on resource indicators and audience binding give the client an exact implementation checklist.
- Explicitly scopes STDIO out, which settles the local-server credential question at the spec level instead of leaving it ambiguous.
- The scope step-up and issuer-validation rules address concrete attack classes (over-scoped tokens, mix-up) rather than gesturing at security generally.
Cons / limitations / caveats
- Draft status with no stated date: requirements (such as the planned
issSHOULD-to-MUST upgrade) can still change under the client. - Authorization being OPTIONAL means spec compliance alone never guarantees a server is authenticated; the client must still handle deliberately unauthenticated servers.
- DCR deprecation is soft ("retained for backwards compatibility"), so the client must still decide how much legacy registration behavior to support.
Relevance to tai
Normative baseline for the tai MCP client's OAuth implementation: always send the RFC 8707 resource parameter, enforce audience discipline on every token, implement scope step-up with bounded retries, validate iss before code redemption, and prefer CIMD-first registration.
Changelog
| Date | Change |
|---|---|
| 2026-10-18 | Initial dossier created. |