MCP Clients Can't Easily Authenticate With Entra: mcp-sso Bridges It
MCP servers can't easily complete OAuth with Entra ID or Cloudflare Access because they lack Dynamic Client Registration; mcp-sso bridges the gap.
Engineers deploying MCP servers inside enterprises often default to a static API key for auth — a plaintext secret with no expiry, no per-user identity, and no clean revocation, making it a prime target for leaks. The MCP spec recommends OAuth 2.1, and clients like Claude Code and claude.ai rely on Dynamic Client Registration (DCR) so a pasted server URL can self-register and just work. The catch: mainstream identity providers such as Entra ID and Cloudflare Access don't expose a DCR endpoint, breaking that seamless onboarding and forcing manual OAuth wiring per deployment.
mcp-sso is an open-source bridge built to close this gap. It speaks DCR, PKCE, and consent to MCP clients as if it were a native OAuth server, verifies identity against the real upstream IdP (Cloudflare Access or Entra ID), and mints its own scoped tokens so the IdP's actual tokens never reach the client. The tool has been driven end-to-end against five real clients — Claude Code, Codex CLI, claude.ai, ChatGPT, and the official MCP SDK — using a live Cloudflare Access tenant, and Entra ID was separately validated through Claude Code and Claude Desktop in a real enterprise setup.
On the security side, the project keeps dependencies minimal (jose only), fails closed on any ambiguous or replayed request, hashes and single-uses all codes and tokens, publishes a STRIDE threat model, and ships npm releases with Sigstore provenance. It's MIT-licensed, currently supports Cloudflare Access and Entra ID, with generic OIDC, Google/GitHub presets, and device flow on the roadmap. If your identity provider already supports DCR natively, this tool isn't needed — it specifically targets the common case where it doesn't.