Kong/insomnia · error
)}
Error message
${JSON.stringify({ error, error_description, error_uri })} What it means
OAuth failure reporting in the MCP provider's redirectToAuthorization: the redirect back from the authorization server carried OAuth error parameters (error, error_description, error_uri). All three are JSON-stringified into the message so the cause of the denial is preserved.
Solutions
- Read error_description for the authorization server's reason
- Re-attempt authorization
- Verify client ID, scopes, and redirect configuration
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at packages/insomnia/src/main/mcp/oauth-client-provider.ts:189 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Kong/insomnia@d9bb2b0142 (2026-08-26).
Data as JSON: /api/errors/7ea61c096c5c5e60.
Report an issue: GitHub.
Appendix: source
Thrown at packages/insomnia/src/main/mcp/oauth-client-provider.ts:189
throw new Error('MCP Connection aborted');
}
const { relayUrl, decryptOAuthResult } = encryptOAuthUrl(authorizationUrl.toString());
BrowserWindow.getAllWindows().forEach(window => {
window.webContents.send('show-oauth-authorization-modal', relayUrl);
});
const shouldOpenDefaultBrowser =
'grantType' in this.authentication && this.authentication.grantType === 'mcp_auth_flow'
? !this.authentication.launchBrowserManually
: true;
const redirectedResult = await authorizeUserInDefaultBrowser({
url: relayUrl,
openDefaultBrowser: shouldOpenDefaultBrowser,
});
const redirectedTo = decryptOAuthResult(redirectedResult);
const redirectParams = Object.fromEntries(new URL(redirectedTo).searchParams);
const { code: authorizationCode, error, error_description, error_uri } = redirectParams;
if (error) {
throw new Error(JSON.stringify({ error, error_description, error_uri }));
} else if (!authorizationCode) {
throw new Error('Authorization code not found');
}
await this._redirectEndListener?.(authorizationCode);
}
onRedirectEnd(listener: (authorizationCode: string) => void) {
this._redirectEndListener = listener;
return () => {
this._redirectEndListener = null;
};
}
async saveCodeVerifier(codeVerifier: string) {
this._codeVerifier = codeVerifier;
}
async codeVerifier() {
if (!this._codeVerifier) {
throw new Error('Code verifier not set');
}View on GitHub (pinned to d9bb2b0142)