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.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.

