ruvnet/ruflo · error

-32000

-32000

Error message

Rate limit exceeded

What it means

rateLimitMiddleware() checked the session/ip bucket and result.allowed was false — the client exceeded the configured request rate for the window. The response carries X-RateLimit-Remaining/Reset headers; the client should wait until resetIn elapses before retrying rather than treat this as a server fault.

Source

Thrown at v3/@claude-flow/mcp/src/rate-limiter.ts:251

  config?: Partial<RateLimitConfig>
): RateLimiter {
  return new RateLimiter(logger, config);
}

/**
 * Express/Connect middleware for rate limiting
 */
export function rateLimitMiddleware(rateLimiter: RateLimiter) {
  return (req: any, res: any, next: () => void) => {
    const sessionId = req.headers['x-session-id'] || req.ip;
    const result = rateLimiter.check(sessionId);

    res.setHeader('X-RateLimit-Remaining', result.remaining);
    res.setHeader('X-RateLimit-Reset', Math.ceil(Date.now() / 1000) + Math.ceil(result.resetIn / 1000));

    if (!result.allowed) {
      res.setHeader('Retry-After', result.retryAfter);
      res.status(429).json({
        jsonrpc: '2.0',
        id: null,
        error: {
          code: -32000,
          message: 'Rate limit exceeded',
          data: { retryAfter: result.retryAfter },
        },
      });
      return;
    }

    rateLimiter.consume(sessionId);
    next();
  };
}

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. Back off and retry after the rate limit window resets (respect Retry-After if provided).
  2. Reduce request frequency, batch operations, or request a higher rate limit quota.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at v3/@claude-flow/mcp/src/rate-limiter.ts:251 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/d3c3be1ec7b5aee5. Report an issue: GitHub.