Zuplo
Current as of MCP 2026-07-28

MCP authentication

Every remote MCP server needs a way for callers to prove who they are, and the specification leaves most of that choice to you.

Choosing a method

The specification makes authorization OPTIONAL, and says HTTP transports SHOULD rather than MUST use its OAuth flow. So decide by what your callers can present. A static key works with every agent SDK. Between workloads you own, platform identity removes the stored secret. Only the specification's OAuth flow gets a server into the ChatGPT and Claude connector directories.

Compare

How the methods differ

Anthropic-hosted agents Read the guide Claude Managed Agents
Specification
Mixed — claude.ai and Claude Code run the specification's OAuth flow; a vault token or a static header sits outside it, not against it
Works with
Four surfaces, four credential fields; only Claude Code, which runs locally, sends a header name of your choosing
Effort
An afternoon per surface
API key Read the guide Any platform
Specification
Outside the specification's OAuth flow, which the specification makes OPTIONAL
Works with
Every agent SDK on this page; hosted connectors are more limited
Effort
An afternoon
AWS IAM (SigV4) Read the guide AWS
Specification
Platform request signing rather than MCP authorization; the specification doesn't cover it
Works with
Your own agents. No MCP client signs SigV4; AWS ships a local proxy that does
Effort
An afternoon with AWS's transport, a day with the IAM policies
Client credentials (M2M) Read the guide Any platform
Specification
An official MCP extension, still Draft — shipped in the TypeScript and Python SDKs
Works with
Your own agents — the extension support matrix lists no client that implements it
Effort
An afternoon, if your identity provider already issues client-credentials tokens
Google Cloud IAM Read the guide Google Cloud
Specification
Platform identity rather than MCP authorization; the specification doesn't cover it
Works with
Your own workloads only; no MCP client can mint these tokens
Effort
A day, mostly IAM bindings
Microsoft Entra ID Read the guide Azure
Specification
Outside the specification's OAuth flow, which the specification makes OPTIONAL
Works with
Your own workloads, plus Microsoft Foundry Agent Service; no chat or desktop client can mint one
Effort
A day, mostly the app registration and role assignments
mTLS Read the guide Any platform
Specification
Transport-layer authentication, outside the specification's OAuth profile — which the specification makes OPTIONAL
Works with
Your own agents only; no chat or desktop client config exposes a certificate field
Effort
An afternoon in code, longer if the PKI does not exist yet
OAuth 2.1 Read the guide Any platform
Specification
The specification's own flow — though the specification still makes authorization OPTIONAL
Works with
Claude, ChatGPT, Cursor, and VS Code run it themselves; among agent SDKs, only those shipping an OAuth provider
Effort
Days — most of it is the authorization server, not MCP
Identity providers

What your identity provider supports

The specification's OAuth flow needs dynamic client registration (RFC 7591) and resource indicators (RFC 8707). Support varies, so check yours before you commit to that flow.

The Registration column records what each provider does, not what the specification recommends. As of the 2026-07-28 revision, dynamic client registration is deprecated in favour of client ID metadata documents, so read a Yes as "this provider will register a client for you" rather than as advice to use it. Specification: client registration.

Microsoft Entra ID

Registration
No
Resource indicators
No

No dynamic client registration, and no RFC 8414 metadata endpoint. Ask for an audience with scope={resource}/.default rather than the resource parameter.

Source

Amazon Cognito

Registration
No
Resource indicators
No

Cognito's own docs state it does not support dynamic client registration. Pre-register the client.

Source

Keycloak

Registration
Yes
Resource indicators
No

Keycloak documents that it "cannot recognize the resource parameter". Use the scope parameter plus an audience mapper on a client scope.

Source

Auth0

Registration
Yes
Resource indicators
Partial

Dynamic registration must be enabled per tenant. Auth0 accepts resource on the standard authorization flow, pushed and JWT-secured authorization requests, backchannel authentication, and the refresh grant — but when a request carries both resource and audience, the audience value is the one used.

Source

Ory Hydra

Registration
Yes
Resource indicators
No

Dynamic registration is off by default. Its registration response includes empty client_uri and logo_uri fields, which some clients reject during validation.

Source

Zitadel

Registration
No
Resource indicators
No

Dynamic client registration is not implemented; the tracking issue has been open since April 2025.

Source

authentik

Registration
No
Resource indicators
No

Not shipped. An implementation for the enterprise OAuth2 provider is in review.

Source

Provider support last verified July 24, 2026

For what each MCP client supports on the other side of the same flow, see the MCP compatibility matrix.

Errors

When a connection fails

One policy engine for APIs, AI, and MCP

Put your MCP servers behind a gateway that handles the OAuth details providers leave out, filters tools per role, and logs every call.