MCP client
Acts on behalf of a resource owner. It discovers metadata, registers through an approved mechanism, uses PKCE and requests authority for a specific canonical MCP resource.
Field guide / MCP authorization assurance
A remote MCP server is an OAuth resource server, not a transparent token pipe. The safe design discovers trusted metadata, binds authorization to the canonical resource, validates audience and issuer, minimizes scopes, separates downstream credentials and preserves explicit user consent.
For an HTTP MCP server, discover the protected resource and authorization server, request the smallest scopes for the current operation, include the exact resource parameter, and validate issuer, audience, expiry and scope on every request. Token passthrough is forbidden: when the MCP server calls a downstream API, it uses a separate token issued for that API.
Acts on behalf of a resource owner. It discovers metadata, registers through an approved mechanism, uses PKCE and requests authority for a specific canonical MCP resource.
Acts as the OAuth resource server. It validates every inbound token and applies operation-level authorization before returning data or invoking a tool.
Authenticates the principal, records consent and issues a token bound to the intended MCP resource and scopes. It can be operated separately from the MCP server.
Is a separate resource boundary. The MCP server acts as its client and obtains a separate upstream token; the inbound MCP token never becomes an ambient credential for that API.
Decide whether the server is remote HTTP or local stdio, define the canonical MCP resource URI and identify every downstream API boundary.
For protected HTTP servers, use OAuth Protected Resource Metadata and validated authorization-server metadata rather than user-supplied endpoint guesses.
Prefer Client ID Metadata Documents or controlled pre-registration, bind credentials to their issuer and validate exact redirect URIs. Dynamic Client Registration is deprecated in the 2026-07-28 specification.
Use PKCE, state, HTTPS or localhost redirects and authorization-response issuer validation before redeeming a code.
Send the resource parameter, validate audience, issuer, expiry and required operation scopes on every request, and use bounded step-up authorization instead of catch-all grants.
Never pass the MCP client token through to a third-party API. Obtain a separate upstream token and preserve per-client consent and attribution.
Test 401, 403, scope upgrade, logout and revocation paths; redact tokens and record attributable decisions without treating session IDs as authorization.
Authorization servers should return iss; clients validate it against the issuer recorded from trusted metadata before redeeming the code.
Dynamic Client Registration is deprecated and retained for backward compatibility. Client ID Metadata Documents or controlled pre-registration should be evaluated first.
Client credentials are bound to the issuer that created them. Reusing them across authorization servers crosses a trust boundary the protocol now names directly.
Streamable HTTP requests carry Mcp-Method and Mcp-Name, giving gateways and rate limiters a protocol-aware input without parsing JSON bodies.
The server accepts a client-supplied third-party token and forwards it unchanged, bypassing the MCP resource boundary and weakening attribution.
A token for “api” or another service is accepted because signature validation succeeded even though the MCP server is not the intended resource.
A proxy with a static upstream client identity reuses consent or authority for a different MCP client without a distinct, visible approval decision.
A client requests every scope up front or retries step-up indefinitely, turning a narrow operation into durable ambient authority.
An implementation ties authorization to Mcp-Session-Id, even though the identifier is untrusted protocol state rather than proof of identity.
Tokens appear in query strings, redirects, traces or error details, extending the credential into systems that were never authorized to hold it.
The MCP authorization specification applies to HTTP-based transports. It says a stdio implementation should not run this HTTP OAuth flow and should obtain credentials from its environment instead. That is not permission for ambient authority: isolate process credentials, scope them to one provider and purpose, keep them out of tool responses and logs, and prove their revocation path.
If a local proxy exposes stdio tools backed by a remote account, model both boundaries: host→local process and local process→provider. Do not describe a local transport as authentication for the upstream service.
Bind each access token to the MCP server it was issued for, validate it on every request and never forward that inbound token unchanged to a downstream API. The MCP server should obtain a separate downstream token for its own upstream client role.
Token passthrough erases the boundary between the MCP resource server and the downstream resource. It can bypass audience-dependent controls, weaken attribution and let a token issued for one service be replayed through another. The MCP authorization specification forbids accepting or transiting tokens not intended for the server.
An MCP proxy becomes a confused deputy when a malicious client abuses the proxy's trusted relationship or static upstream client identity to obtain or use authority the user did not grant to that client. Per-client consent, exact redirect validation and separate token audiences reduce this risk.
The MCP 2026-07-28 authorization specification says stdio implementations should not use the HTTP authorization specification and should retrieve credentials from the environment instead. Those credentials still need least privilege, isolation, secure storage, redaction and revocation.
No. As verified on August 11, 2026, the OWASP MCP Top 10 is in beta release and pilot testing. It is a useful living taxonomy, not a final standard, certification or substitute for the normative MCP specification and system-specific threat modeling.