Skip to main content
JoggAI MCP uses OAuth 2.0 Authorization Code with PKCE. The browser flow authenticates your JoggAI account, lets you select a Space, and asks you to approve scopes before the client receives a token. Public MCP access does not require copying a JoggAI API key into an agent.

OAuth flow

1

Discover the protected resource

The client connects to https://api.jogg.ai/mcp. An unauthenticated response points it to JoggAI protected resource and authorization metadata.
2

Authorize the client

The client opens the JoggAI authorization page with PKCE S256, resource=https://api.jogg.ai/mcp, and its exact registered redirect URI.
3

Choose a Space and approve scopes

The selected Space determines which private resources are visible and which billing account generation tools use.
4

Receive a resource-bound token

The access token audience is https://api.jogg.ai/mcp. The client stores access and refresh tokens in its own credential store.
The resource value must remain identical during authorization, code exchange, and refresh. A token issued for a JoggAI plugin or REST API has a different audience and cannot be used with MCP.

Discovery endpoints

Tool scopes

tools/list only returns tools allowed by the current token. JoggAI checks the scope again on every tools/call.
Approving a scope makes matching tools discoverable; it does not bypass JoggAI Space membership, ownership, plan, quota, resource, or request validation.

Registered client redirects

JoggAI does not accept wildcard redirect URIs or arbitrary dynamic client registration during controlled beta. Codex should choose its own loopback port and path. Do not override it with localhost, a private devbox hostname, or a custom HTTPS callback.

Authorization errors

  • 401 Unauthorized: credentials are missing, invalid, expired, revoked, or bound to the wrong resource. Run the client’s login flow again.
  • 403 Forbidden: authentication succeeded but the required scope or Space permission is missing. Reauthorize only if that permission should be granted.
  • Redirect mismatch: the client sent a callback that was not registered exactly. Confirm the client and deployment configuration before retrying.
Never send access tokens, refresh tokens, authorization codes, API keys, or signed upload URLs to support.