Skip to content

What is AuthPlane?

AuthPlane is the self-hosted authorization server for the Model Context Protocol. It ships as one Go binary — authserver — that implements OAuth 2.1 and the MCP Authorization spec (2025-11-25) end to end. You run it in your own infrastructure, next to your MCP servers.

Building an MCP server is now a one-afternoon job. Securing it isn’t. You need to issue tokens, validate them, federate to your existing IdP, and let agents act on each other’s behalf without losing the user behind the chain. AuthPlane is the one piece of infrastructure that answers all of that:

  • Spec-compliant access tokens for any MCP server in any language — discovery, scopes, audience binding, refresh rotation, in token formats your existing resource servers already understand.
  • Federation to your existing IdP — Google, Okta, Azure AD, Auth0, anyone OIDC-compliant. AuthPlane handles the OAuth side; you keep the access policy.
  • Agent-to-agent delegation — one agent calls another on a user’s behalf, with every hop recorded as an act-claim chain in the issued token and the audit log.
  • Upstream provider vaulting — store GitHub / Google / Slack / Linear refresh tokens encrypted at rest and vend fresh access tokens via RFC 8693 token exchange, with per-user / per-agent / per-resource consent enforced at every hop.
  • DPoP proof-of-possession — bind tokens to a client-held key so a leaked token can’t be replayed from another machine.
  • Built-in Admin UI — a React dashboard embedded in the same binary. No separate frontend, no extra container.
  • Production storage and observability — PostgreSQL with cross-instance LISTEN/NOTIFY, OpenTelemetry traces and metrics, Prometheus, a Helm chart, and HashiCorp Vault Transit for HSM-grade signing.
  • Zero-config dev — SQLite by default, auto-generated signing keys, sensible defaults.

For every resource (MCP server) you register, AuthPlane acts in one of two modes:

  • Mint — AuthPlane is the issuer. It signs the JWT access token that your MCP server validates offline against the JWKS.
  • Broker — AuthPlane stores upstream tokens (GitHub, Slack, Okta, …) encrypted at rest and vends them to your MCP server via RFC 8693 token exchange, gated by consent at every hop.

See How It Works for the full flow.

The authorization server is only half the story. The MCP server on the other side still has to validate tokens, expose the discovery endpoint, enforce scopes per tool, handle DPoP, and decode consent errors. The AuthPlane SDKs do all of that in about 5 lines of integration code:

LanguagePackage(s)Adapters
Goauthplane/go-sdkOfficial MCP Go SDK (go-sdk/mcp)
TypeScriptauthplane/ts-sdkOfficial MCP TypeScript SDK (@authplane/mcp), FastMCP (@authplane/fastmcp)
Pythonauthplane/python-sdkOfficial MCP Python SDK (authplane-mcp), FastMCP (authplane-fastmcp)
Rust · C# · Javaroadmap

Every SDK provides the same baseline: JWT validation against the authserver JWKS (with caching), scope enforcement per route or per tool, the RFC 9728 Protected Resource Metadata document, DPoP proof verification, a full OAuth client (client credentials, token exchange, introspection, revocation), and structured ConsentRequiredError decoding for the Broker flow.

On the client side, AuthPlane is tested against Claude Code, Claude Desktop, and MCP Inspector.

AuthPlane implements the MCP Authorization specification (2025-11-25) and the OAuth 2.1 ecosystem standards behind it:

StandardWhat it provides
MCP Authorization 2025-11-25The contract MCP clients and servers expect: discovery, dynamic client registration, audience-bound tokens.
OAuth 2.1The base authorization flow. PKCE-S256 is mandatory; the older insecure flows aren’t supported.
PKCE (RFC 7636)Prevents stolen authorization codes from being redeemed.
DPoP (RFC 9449)Binds tokens to a client-held key — a leaked token can’t be replayed from another machine.
Resource Indicators (RFC 8707)Audience-binds every token to one resource URI — a token for one MCP server can’t be replayed against another.
Protected Resource Metadata (RFC 9728)MCP servers advertise where their authorization server lives.
Dynamic Client Registration (RFC 7591)Runtime client registration, in three security modes: open, approved-redirects, admin-only.
Client ID Metadata Documents (CIMD)Auto-registration by fetching client metadata from the client’s URL.
AS Metadata (RFC 8414) + OIDC DiscoveryThe /.well-known/oauth-authorization-server and /.well-known/openid-configuration documents.
Token Exchange (RFC 8693)Delegated identity — powers agent-to-agent chains and the upstream-provider Broker flow.
JWT Bearer (RFC 7523)Trusted external IdPs assert identity directly into AuthPlane (Cross-App Access / XAA).
JWT Access Tokens (RFC 9068)Default token format (at+jwt) — verifiable offline against the JWKS.
Introspection (RFC 7662) · Revocation (RFC 7009)Runtime token validation and standard revocation of refresh-token families.

Full details in the RFC compliance reference and the upstream compliance matrix.

Manage clients, users, resources, broker providers, signing keys, grants, and the audit log from a React console embedded in the same binary — no separate frontend to deploy. It listens on the admin port (http://localhost:9001/admin/ui/ in dev).

The AuthPlane admin console — clients view

  • AuthPlane Auth Server — the open-source core documented on this site. One Go binary, licensed AGPL-3.0.
  • AuthPlane EE — the self-hosted enterprise edition, under a commercial license.
  • AuthPlane Cloud — the managed SaaS. Coming soon.

Need a different license for the open-source core? Write to hello@authplane.ai.