Documentation Index
Fetch the complete documentation index at: https://docs.usechar.com/llms.txt
Use this file to discover all available pages before exploring further.
Private Beta — Remote MCP authentication is currently in private beta. Contact us to get access.
Standards
ID-JAG (Identity Assertion Authorization Grant) uses four OAuth/OIDC specifications:Authentication Flow
Step 1: Token Exchange Request
The Hub requests an ID-JAG from the IDP:Step 2: ID-JAG Structure
The IDP returns a JWT with typeoauth-id-jag+jwt:
Step 3: JWT Bearer Grant
The Hub exchanges the ID-JAG for an access token at the MCP server:Step 4: Access Token Response
IDP Requirements
ID-JAG authentication requires your identity provider to support:- RFC 8693 Token Exchange — The ability to exchange tokens at the
/tokenendpoint - ID-JAG Token Type — Issuing JWTs with
typ: "oauth-id-jag+jwt"and acceptingrequested_token_type=urn:ietf:params:oauth:token-type:id-jag
| Requirement | Notes |
|---|---|
| Token Exchange (RFC 8693) | Required |
| ID-JAG Token Type | Required for full compatibility |
| Configurable resource servers | For audience scoping |
| JWKS endpoint | For signature validation |
IDP Support Matrix
ID-JAG requires both RFC 8693 (Token Exchange) and support for theoauth-id-jag+jwt token type. Support varies significantly across providers.
| Provider | RFC 8693 | ID-JAG Token Type | Status | Tracking |
|---|---|---|---|---|
| Okta | ✅ | ⚠️ Early Access | XAA Early Access | Active development |
| PingFederate | ✅ | ❓ Unconfirmed | Full RFC 8693, ID-JAG unverified | — |
| PingOne | ✅ | ❓ Unconfirmed | Full RFC 8693, ID-JAG unverified | — |
| Auth0 | ✅ | ⚠️ Beta | XAA Resource App Beta | Active development |
| Keycloak | ✅ (v26.2+) | ❌ Not yet | Token Exchange GA, ID-JAG pending | #43971 |
| Azure AD / Entra | ❌ | ❌ | Uses proprietary On-Behalf-Of | — |
| AWS Cognito | ❌ | ❌ | No RFC 8693 support | — |
| Google Workspace | ⚠️ Limited | ❌ | Workload Identity Federation only | — |
Legend: ✅ = Supported, ⚠️ = Partial/Early Access, ❌ = Not supported, ❓ = UnconfirmedThis matrix reflects the state as of January 2026. ID-JAG is an emerging IETF draft specification (draft-ietf-oauth-identity-assertion-authz-grant). Provider support is evolving rapidly.
MCP Server Requirements
Protected Resource Metadata (RFC 9728)
MCP servers must expose/.well-known/oauth-protected-resource:
Token Endpoint
MCP servers must implement a token endpoint accepting JWT Bearer Grants:ID-JAG Validation
| Check | Requirement |
|---|---|
| Signature | Validate against IDP’s JWKS |
typ header | Must be oauth-id-jag+jwt |
iss | Must match trusted IDP issuer |
aud | Must match MCP server’s resource ID |
client_id | Must match expected Tool Hub client |
exp | Must be in future (60s clock skew tolerance) |
Access Token Validation
MCP servers validate incoming access tokens on protected endpoints:| Claim | Validation |
|---|---|
iss | Must match MCP server’s token endpoint |
aud | Must match MCP server’s resource ID |
sub | User identifier for authorization |
exp | Must be in future (60s clock skew) |
Optional Claims
| Claim | Purpose |
|---|---|
email | User email address |
groups | Group memberships |
roles | Role assignments |
scope | Granted capabilities |
Token Properties
| Token Type | Issuer | Audience | Typical Lifetime |
|---|---|---|---|
| User ID Token | Enterprise IDP | Frontend app | 1 hour |
| ID-JAG | Enterprise IDP | MCP server | 5 minutes |
| Access Token | MCP server | MCP server | 5-60 minutes |
Hub Token Caching
Cache key format:token:{org_id}:{connector_id}:{user_id}
min(token_expiry - 300, 3600) seconds.
Tokens are stored in encrypted KV. Never stored in queryable databases.
Transaction Tokens
For MCP server internal service calls, use downscoped Transaction Tokens:| Property | Requirement |
|---|---|
| Audience | Bound to specific internal service |
| Scope | Limited to specific operation |
| Lifetime | Seconds to minutes |
| User context | Embedded in signed claims |
External MCP Servers
For MCP servers operated by third parties (not your organization), use OAuth 2.1 with PKCE:- User explicitly consents via OAuth flow
- Requires registration with the external MCP’s auth server (not your enterprise IDP)
- User identity is established through the external provider’s OAuth, not your SSO
ID-JAG is for internal MCP servers that trust your enterprise IDP. External MCP servers have their own identity systems and require explicit user consent.
Specification Status
| Component | Status |
|---|---|
| RFC 8693 (Token Exchange) | Stable |
| RFC 7523 (JWT Bearer Grant) | Stable |
| RFC 8707 (Resource Indicators) | Stable |
| RFC 9728 (Protected Resource Metadata) | Stable |
| ID-JAG Draft | Draft, implementations emerging |
| MCP Enterprise-Managed Authorization | Draft |
References
OAuth/OIDC:- RFC 8693 - Token Exchange
- RFC 7523 - JWT Bearer Grant
- RFC 8707 - Resource Indicators
- RFC 9728 - Protected Resource Metadata
- Identity Assertion Authorization Grant (draft)
See Also
Why Char Exists
Architecture and design rationale
Federated Authentication
Identity delegation concepts
Trust Boundaries
Internal vs external MCP classification
Security Reference
Token validation specifications

