paperclipai/paperclip · error · ToolGatewayHttpError
gateway_auth_throttled
gateway_auth_throttled
Error message
MCP gateway authentication was throttled
What it means
Repeated named-gateway authentication failures tripped the authFailures limiter: within the sliding window the token/gateway failure counter reached protocolLimits.authFailures.max, so further attempts are refused with a throttle response carrying retryAfterMs. The audit entry records the original failedReasonCode plus limiter details; legitimate clients must wait out the window and then use a valid token.
Solutions
- Authentication attempts were throttled. Stop retrying briefly, verify the token is correct, and retry after the throttle window.
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at server/src/services/tool-gateway.ts:3571 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-08-18).
Data as JSON: /api/errors/90fc98a8d74721a8.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/services/tool-gateway.ts:5063
protocolVersion: "2024-11-05",
capabilities: {},
clientInfo: { name: "paperclip-tool-gateway", version: "0.3.1" },
});
child.stdin.write(
`${JSON.stringify({ jsonrpc: "2.0", method: "notifications/initialized", params: {} })}\n`,
);
return await request(
input.protocolMethod ?? "tools/call",
input.protocolParams ?? {
name: input.entry?.toolName,
arguments: input.parameters ?? {},
},
);
} finally {
clearTimeout(timer);
child.stdin.end();
child.kill("SIGTERM");
await exitPromise.catch(() => undefined);
}
}
async function fullyAssignedMcpConnections(session: ToolGatewaySession) {
if (!session.gatewayProfileId) return [];
return db
.select({ connection: toolConnections })
.from(toolProfileEntries)
.innerJoin(
toolConnections,
eq(toolProfileEntries.connectionId, toolConnections.id),
)
.where(
and(
eq(toolProfileEntries.companyId, session.companyId),
eq(toolProfileEntries.profileId, session.gatewayProfileId),
eq(toolProfileEntries.selectorType, "connection"),
eq(toolProfileEntries.effect, "include"),View on GitHub (pinned to 3f1d897a7c)