MCP WorkOS OAuth Policy
Authenticate MCP gateway requests using a gateway-issued OAuth access token, with browser login delegated to WorkOS.
This is a WorkOS-friendly wrapper around McpOAuthInboundPolicy. Provide
clientId + clientSecret, and the WorkOS OIDC issuer, JWKS URL, and browser
login endpoints are derived automatically.
Configuration
The configuration shows how to configure the policy in the 'policies.json' document.
config/policies.json
Policy Configuration
name<string>- The name of your policy instance. This is used as a reference in your routes.policyType<string>- The identifier of the policy. This is used by the Zuplo UI. Value should bemcp-workos-oauth-inbound.handler.export<string>- The name of the exported type. Value should beMcpWorkosOAuthInboundPolicy.handler.module<string>- The module containing the policy. Value should be$import(@zuplo/runtime).handler.options<object>- The options for this policy. See Policy Options below.
Policy Options
The options for this policy are specified below. All properties are optional unless specifically marked as required.
clientId(required)<string>- The WorkOS client_id registered for the gateway's browser login flow. The OIDC issuer and JWKS URL are derived from this client ID.clientSecret(required)<string>- The WorkOS client_secret. Use $env(...) to source from a secret environment variable.scope<string>- OIDC scopes requested during browser login. Defaults to"openid profile email".gateway<object>- Gateway-side OAuth token settings. The gateway issuer and advertised URLs are derived from the incoming request origin.accessTokenTtlSeconds<integer>- Lifetime of access tokens issued by /oauth/token. Defaults to900.refreshTokenTtlSeconds<integer>- Lifetime of refresh tokens issued by /oauth/token. Defaults to2592000.cimdEnabled<boolean>- Whether to advertise client_id_metadata_document_supported in AS metadata. Defaults totrue.
browserLoginOverrides<object>- Optional overrides for the derived browser-login settings.remoteTimeoutMs<integer>- No description available. Defaults to10000.stateTtlSeconds<integer>- No description available. Defaults to900.sessionTtlSeconds<integer>- No description available. Defaults to28800.
Using the Policy
MCP WorkOS OAuth Inbound
Authenticate MCP gateway requests using a gateway-issued OAuth access token, with browser login delegated to WorkOS.
This is a thin WorkOS-friendly wrapper around the generic
McpOAuthInboundPolicy. Use it when you want to configure browser login with
just clientId + clientSecret instead of the full set of OIDC URLs.
Derived configuration
Given clientId: "client_01KC6057N3C66XJAXZ65YHAC72", the wrapper derives:
| Generic field | Derived value |
|---|---|
oidc.issuer | https://api.workos.com/user_management/client_01KC6057N3C66XJAXZ65YHAC72 |
oidc.jwksUrl | https://api.workos.com/sso/jwks/client_01KC6057N3C66XJAXZ65YHAC72 |
browserLogin.url | https://api.workos.com/user_management/authorize |
browserLogin.tokenUrl | https://api.workos.com/user_management/authenticate |
browserLogin.clientId / clientSecret / scope | from policy options (clientSecret is required) |
These endpoint shapes come from WorkOS OIDC discovery at
https://api.workos.com/user_management/{clientId}/.well-known/openid-configuration.
Configuration
Code
clientId must be the WorkOS client ID, such as
client_01KC6057N3C66XJAXZ65YHAC72. The policy rejects issuer URLs, WorkOS API
hostnames, and values that do not use the client_ ID shape.
Pairing
Pair this policy with McpTokenExchangeInboundPolicy and McpProxyHandler, the
same as McpOAuthInboundPolicy. Only one MCP OAuth policy is allowed per
project; attach the same policy by name to every MCP route.
Read more about how policies work