Rate Limits & Quotas
How Scrubby protects the API from accidental overload, and the per-plan quotas on indexing, MCP calls, and PR reviews.
Scrubby applies rate limits and per-plan quotas to keep the system responsive for everyone. Most users never hit them. This page is reference for when you do.
Rate limits
Rate limits are short-window protections against accidental loops. They apply per-token (or per-user when calling the dashboard).
| Surface | Limit |
|---|---|
| MCP tool calls | 60 per minute per session |
/v1/repositories/* reads (GET) | 120 per minute |
/v1/repositories/*/analyze* writes | 30 per minute |
/v1/repositories/*/index_repo | 5 per hour per repo |
/v1/account/* | 60 per minute |
A request that exceeds a limit returns 429 Too Many Requests with a Retry-After header. Back off based on the header value (in seconds) before retrying.
Quotas
Quotas are longer-window allotments that depend on your plan.
| Quota | Pro | Team | Enterprise |
|---|---|---|---|
| Indexed repositories | Unlimited | Unlimited | Unlimited |
| Repository re-index frequency | Once / minute / repo | Once / minute / repo | Configurable |
| MCP-driven analyses per month | Generous fair-use cap | Generous fair-use cap | Custom |
| GitHub PR reviews | Unlimited on indexed repos | Unlimited on indexed repos | Unlimited |
| Stored history depth | 100 most-recent commits | 100 most-recent commits | Custom (longer with deep-history backfill) |
Pro and Team have a generous fair-use limit on cloud analysis volume to protect against runaway loops; legitimate usage rarely approaches it. Enterprise plans are sized to your workload.
Index limits
Re-indexing a repository is rate-limited to once per minute per repo. This applies to both incremental and full re-indexes.
The first full index is the heavy one (LLM-driven domain classification, segment discovery, convention extraction); subsequent incremental indexes only re-process changed files and skip reclassification unless dependency files changed or 20+ new files were added.
What happens when you hit a limit
- Rate limit (429). Request returns immediately. Back off based on
Retry-After. Your editor’s MCP client should handle this transparently in most cases. - Quota exhausted. Request returns
402 Payment Requiredwith a body explaining which quota and how to upgrade. PR reviews on a quota-exhausted account post a status check noting the issue rather than failing silently.
Best practices
- Cache results in your AI editor’s session when sensible — don’t re-call
scrubby_get_domainsevery prompt. - Use incremental indexing (
incremental: true) for routine refreshes; reserve full re-indexes for after significant restructures. - Don’t poll the index status more than once every 5 seconds; the indexing job emits notifications when it completes.
Last updated