Streamlining MCP Authentication with Cross-App Access (XAA)
workos · Tech · 2026 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.6 (schema v2)
Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.
Problem
Domain: Enterprise MCP authentication and AI-agent access governance
WorkOS describes MCP authentication friction where every MCP client-to-server connection repeats OAuth consent, while enterprise IT teams lack centralized visibility, control, and revocation for AI-agent access to sensitive systems.
Constraints:
- Developers can use half a dozen to a dozen MCP servers, multiplying consent screens across teams.
- Standard OAuth assumes apps do not know or trust each other, which conflicts with enterprise SSO expectations.
- IT teams cannot easily see which MCP clients and servers users connect or revoke lingering tokens after offboarding or compromise.
- The solution must work across MCP clients, MCP servers, resource authorization servers, identity providers, and regular OAuth access tokens.
Architecture
WorkOS proposes Cross-App Access for MCP using the ID JAG identity JWT authorization grant. An MCP client such as Claude or Cursor logs into an enterprise IdP such as Okta, requests an ID JAG token for a target MCP server such as Figma, sends it to the server's authorization server, receives a standard short-lived OAuth access token, and then talks to the MCP server. IT configures managed connections that allow one app to request access to another.
Diagram confidence: explicit (topology described by the source).
flowchart LR it_admin["IT admin"] --> managed_connections_policy["Managed connections policy"] managed_connections_policy --> identity_provider["Identity provider"] mcp_client["MCP client"] --> identity_provider mcp_client --> resource_authorization_server["Resource authorization server"] identity_provider --> resource_authorization_server resource_authorization_server --> mcp_server["MCP server"] mcp_client --> mcp_server
Components
| Component | Role | Interacts with |
|---|---|---|
MCP client |
Claude Code, Cursor, or another AI client requesting access to MCP servers. | Identity provider, Resource authorization server, MCP server |
Identity provider |
Enterprise IdP such as Okta that authenticates users, issues ID/refresh tokens, and issues ID JAG tokens. | MCP client, Managed connections policy, Resource authorization server |
Managed connections policy |
IT-managed policy defining which client app may request access to which resource app. | Identity provider |
Resource authorization server |
Authorization component for the target MCP server that validates ID JAG and issues OAuth access tokens. | MCP client, Identity provider, MCP server |
MCP server |
Resource server such as Figma's MCP server/API that receives regular OAuth access tokens. | MCP client, Resource authorization server |
IT admin |
Configures allowed cross-app connections and revokes access through the IdP. | Managed connections policy, Identity provider |
Data flow
A user logs into the MCP client through Okta and receives ID/refresh tokens. The client asks Okta for an ID JAG token for the target MCP server. Okta checks whether the user belongs to both apps and whether the client may request that access. The client sends the ID JAG token to the MCP server's authorization server, which validates it with Okta, issues a regular OAuth access token, and the client uses that token for normal MCP calls.
4 supporting quotes
Why this architecture
XAA uses the enterprise IdP as the trust bridge because both the MCP client and target application already trust SSO. This removes repeated consent screens, centralizes IT policy, and improves security because short-lived access tokens stop refreshing once the SSO session or app membership is revoked.
3 supporting quotes
Models used: MCP clients · Claude Code · Cursor
Scale
- A user might log into half a dozen or a dozen MCP servers.“as a user you might log into a half dozen or a dozen MCP servers.”transcript, stated
- Across a team this becomes dozens of people repeatedly managing consent screens.“you basically have dozens and dozens of people spending all this time managing all these consent screens”transcript, stated
- Most applications issue access tokens around five minutes.“most applications issue access tokens around 5 minutes.”transcript, stated
- Lingering MCP OAuth tokens can last days, weeks, or months under the old flow.“that means that, uh, you have this like lasting access problem that IT doesn't have any visibility over.”transcript, stated“that give you standing access to these services. That means you might have access for, uh, days or weeks or even months.”transcript, stated
Alternatives considered (roads not taken)
Standard MCP OAuth consent per server
Rejected because: It creates repeated consent screens and persistent access tokens that IT cannot centrally see or revoke.
Manual IT setup plus user reauthentication
Rejected because: IT might set up MCP servers in Claude or Cursor, but users still need to authenticate and manage connections manually.
Long-lived standing credentials on local machines
Rejected because: The presenter describes compromise/offboarding scenarios where API keys and refresh tokens create revocation problems.
Patterns
safety-policy-enforcement (identity governance)
XAA lets IT configure which client app may request access to which resource app and revoke access through the IdP.
tool-use-orchestration (agent integration)
The flow enables MCP clients to authenticate to MCP servers automatically and then use normal MCP calls with a regular OAuth access token.
privacy-preserving-processing (credential security)
Short-lived access tokens tied to SSO reduce lingering local access after compromise or offboarding.
human-in-the-loop-gate (administration)
IT admins explicitly configure managed connections in the IdP before one app can request access to another.
Tradeoffs
Use the identity provider as a trust bridge.
Chose XAA with ID JAG tokens over Independent OAuth consent between each MCP client and server.
Rationale: The IdP already authenticates both applications and can enforce enterprise policy without repeated user consent.
Keep standard OAuth access tokens at the MCP server boundary.
Chose ID JAG exchange followed by regular OAuth access token over Inventing a new credential type for MCP resource access.
Rationale: After exchange, the MCP server flow remains standard, minimizing integration changes.
Prefer short-lived access tokens with automatic refresh.
Chose Five-minute-style access tokens refreshed through SSO-backed ID JAG exchange over Long-lived local refresh tokens and API keys.
Rationale: Short-lived tokens reduce standing access after revocation while keeping user experience automatic.
Gotchas (what bit them)
MCP's OAuth flow creates consent-screen fatigue.
Root cause: OAuth assumes two applications do not trust each other, so each MCP client/server connection asks for consent.
Resolution: Use XAA so the identity provider bridges trust between applications without manual consent per server.
IT lacks visibility into arbitrary MCP client/server connections.
Root cause: Users can connect AI agents to sensitive systems without going through the IdP for every connection.
Resolution: Route cross-app access through managed IdP policy so IT knows which apps can request access.
Offboarding or device compromise can leave MCP tokens alive.
Root cause: Standard MCP OAuth leaves access and refresh tokens outside central SSO revocation paths.
Resolution: Use short-lived access tokens refreshed only while the SSO session and ID JAG flow remain valid.
Evaluation
The talk demonstrates an XAA-compatible Claude Code flow and evaluates the design qualitatively against user-friction, IT visibility, and security-posture problems.
Metrics: A user may connect to half a dozen or a dozen MCP servers. · Access tokens are commonly around five minutes. · The demo removes per-server consent screens after the initial Okta login.
Outcomes
- The XAA-compatible Claude Code demo automatically connected the Figma MCP server after Okta login.
- The flow centralizes policy in managed IdP connections.
- Short-lived tokens improve revocation behavior compared with standing access tokens and refresh tokens.
The source discusses enterprise teams where many developers each connect to multiple MCP servers, not a deployed production metric from a single customer.