client_id, client_secret, approved scopes, optional redirect URIs, and optional organization access limits.
Use OAuth when an external product must run an authorization flow — for example, Claude custom connectors connecting to the Forecastable MCP server.
When to use OAuth
Use an OAuth app when:- users sign in to Forecastable and approve access themselves
- a third-party client exchanges an authorization code for an access token
- you need per-user delegated access instead of a single static API key
Prerequisites
- a Forecastable account with the developer role
- access to the organization the OAuth app should be scoped to
Create an OAuth app
Open Settings → Developer → OAuth Apps.- Click Create OAuth App.
- Enter an app name and select the organization.
- On the app detail page, copy the Client ID and Client secret from Credentials.
- Add redirect URLs the client will use after authorization.
- Select the scopes the app may request.
- Optionally configure display information (icon, name, descriptions) shown on the consent screen.
redirect_uri that is not registered on the app.
You can regenerate the client secret or signing secret from the app detail page. Regeneration invalidates the previous value immediately.
Dynamic client registration
OAuth-aware MCP clients can create OAuth apps automatically with Dynamic Client Registration. Cursor and Claude custom connectors use this flow so users only enter the connector name and MCP server URL. Clients discover the registration endpoint from:- any
https://URL (for example Claude or Cursor Agents) - loopback HTTP (
http://localhost…,http://127.0.0.1…,http://[::1]…) - Cursor desktop callbacks:
cursor://anysphere.cursor-mcp/oauth/callbackandcursor-nightly://anysphere.cursor-mcp/oauth/callback
client_id and, when token_endpoint_auth_method is not none, a client_secret. The client stores those credentials and uses them during the token exchange.
OAuth JSON errors use RFC 6749 shapes ({ "error": "invalid_request", "error_description": "…" }), not the Integration API error envelope.
Authorization code flow (PKCE)
Forecastable supports OAuth 2.0 authorization code with PKCE (S256). This is the flow Claude and other interactive MCP clients use.
Authorize
Unauthenticated users are redirected to Forecastable login, then returned to the authorize URL.
After the user clicks Allow, Forecastable redirects to
redirect_uri with ?code=…&state=….
Token exchange
grant_type=authorization_code, send:
Successful response:
Client credentials flow
OAuth apps also supportclient_credentials for server-to-server access using the app’s client ID and secret, without an end-user login.
Discovery metadata
OAuth-aware clients can read Forecastable metadata from:Consent screen
During authorization, users see:- app name, icon, and description from the OAuth app Display info
- the workspace (organization) context
- grouped scopes with short explanations
- Allow and Cancel actions
Use access tokens
Send issued tokens the same way as API keys:Claude custom connector
For step-by-step Claude setup with screenshots, see the MCP server guide → Claude Desktop tab.Troubleshooting
Redirect URI mismatch
Redirect URI mismatch
Add the exact callback URL the client uses to the OAuth app Redirect URLs list and save.
Invalid client credentials
Invalid client credentials
Confirm the client ID and secret match the OAuth app. Regenerate the secret in Forecastable if
needed, then update the client.
PKCE or resource errors
PKCE or resource errors
Authorization requests must use
code_challenge_method=S256 and
resource=https://app.forecastable.com/mcp for MCP integrations.Insufficient scope
Insufficient scope
Add the missing scopes on the OAuth app, save, and have the user reconnect so they can approve the updated permissions.
Related guides
API keys
Static bearer tokens for integrations you control directly.
Scopes
Approved scopes and what each permission allows.
Rate limits
Per-token limits, 429 responses, and retry behavior.