Authorization: Bearer <MCP_ACCESS_TOKEN> on every /mcp request. The
GraphQL API key and Firebase ID token flows have separate credential boundaries.
Discover endpoints
An unauthenticated MCP request returns a BearerWWW-Authenticate challenge
with resource_metadata and the required mcp:access scope. Fetch that metadata
URL to obtain the exact resource URI and authorization-server issuer.
Use the endpoint URLs returned by discovery rather than constructing them from
the GraphQL URL. These paths are available only in an MCP-enabled environment.
Discovery follows the
MCP authorization specification.
Supported client and token policy
CIMD support is advertised in authorization-server metadata. A CIMD document
must identify the same client URL and define permitted redirect URIs. Deployment
policy can restrict which CIMD clients are accepted. There is no dynamic client
registration endpoint; do not assume an arbitrary opaque client ID is registered.
Authorization code flow
1
Create the authorization request
Generate a verifier and its S256 challenge, plus a state value bound to your
client interaction. Open the discovered authorization endpoint in a browser
with the parameters below.
2
Sign in and consent
Follow the APOB sign-in and consent pages. Verify the account and client.
Keep the browser’s authorization session through the redirect flow.
3
Validate the callback
Check the returned state against the original interaction. On approval,
exchange the returned code once using the original redirect URI and verifier.
4
Use the access token
Store the returned token securely and send it in the Bearer header. Follow
the HTTP and JSON-RPC reference to initialize and discover tools.
Redirect matching is constrained to registered callbacks. For an explicitly
registered portless HTTP
localhost callback, a canonical port from 1 to 65535
is accepted while the scheme, host, path, and raw query remain exact. Fixed-port
localhost and HTTPS callbacks match exactly. Token exchange must use the
original authorization request’s redirect URI, including its port.
Exchange example, with values obtained from discovery and the callback:
Browser sign-in and consent helpers
These endpoints support the APOB authorization frontend. An ordinary MCP client follows the browser redirects; it does not log in by sending a Firebase token to/mcp.
After successful login, resume with a query-free
GET /oauth/authorize using
the same session. The consent form supplies action, method, clientId,
state, approveScope, csrfParameterName, and csrfToken. Use those values
instead of reconstructing the pending authorization from URL parameters.
Browser sessions have a 30-minute inactivity timeout; pending authorization
expires after 10 minutes. These session/context responses use Cache-Control: no-store. Session cookies authenticate the browser flow and do not authenticate
MCP tool requests.
Inspect or revoke a connection
The GraphQL connected-app API provides:listMcpClientInstructionsfor setup metadata.listPersonalMcpConnectionsfor the authenticated account’s connected clients.revokeMcpConnectionto remove that account’s consent and invalidate the client’s stored access tokens and authorization codes.