MCP: Start registered-client authorization
Validate exact registered redirect URI and explicit allowlisted scopes before any redirect. Require response_type=code, high-entropy state (16–512 bytes), S256 and a 43-character base64url challenge. Unauthenticated users continue through existing login/onboarding using a five-minute opaque request bound to the eventual browser session. GET always requires explicit consent; no automatic approval. Return errors locally for unknown/untrusted callbacks. Clients must verify state and response iss. A resumed request uses only request, with no other query parameters.
Response headers:
Cache-Control(200).Referrer-Policy(200): Native consent form Origin proof; never sends referrers cross-origin.Pragma(200).
MCP accepts the configured resource URI for identity.read, offline_access, translation.list, translation.get, translation.read, translation.search, live.list and live.get. Registered client scopes, current actor permissions and explicit fresh consent bound each grant; existing grants cannot gain scopes through refresh. Exact fixed-port localhost HTTP callbacks are supported alongside literal loopback addresses. Uses the dedicated MCP issuer https://bibleit.app/oauth/mcp. Existing REST OAuth endpoints and error contracts remain unchanged.
Query parameters
Space-separated explicit registered personal scopes. No empty scope. offline_access alone is invalid.
Optional MCP resource indicator. Must equal the configured MCP resource URI and remain identical at code and refresh exchange. Omit for existing REST-only grants. MCP permits identity.read, offline_access and the read-only scopes advertised by its issuer metadata. Newly requested scopes require client approval and fresh user consent; existing grants are never widened automatically.
Optional bounded space-separated language tags, as sent by ChatGPT. Advisory only; consent currently retains its existing language.
Response headers
Native consent form Origin proof; never sends referrers cross-origin.
Response
Escaped server-rendered consent/connected-app page. No token is issued by GET.
