Limits
Input sizes and rate limits for quarry's MCP server and HTTP routes, and what your agent gets when it hits one.
Sizes
| Input | Limit |
|---|---|
search question | 1 to 500 characters |
search category | Up to 40 characters |
search results (limit) | 1 to 10, default 5 |
ask or HTTP question (query) | 1 to 2,000 characters |
Passages returned (top_k) | 1 to 20, default 5 |
request_id | 1 to 128 characters: letters, digits, _, ., :, or - |
username, slug | Up to 60 and 80 characters |
Free preview (snippet) | Up to 200 characters, top five search results only |
Rate limits
All windows are sliding: a limit counts the requests of the last minute, or day, at any moment.
| What | Limit | Counted per |
|---|---|---|
| Requests to the MCP server | 60 a minute | IP address, or token when you send one (API key or OAuth) |
| Requests that carry a token | 600 a minute | IP address, across all tokens |
Requests to /api/agent/access, quote, subscription, and query | 60 a minute | Account |
search | 20 a minute and 300 a day | Account when signed in, otherwise IP address |
| Free previews | 30 a day | Caller and dataset |
| Questions to a free dataset | 30 a minute | Account when signed in over MCP, otherwise IP address |
| Requests to a paid dataset without a payment | 30 a minute | IP address |
| Paid questions, per question | 30 a minute | Paying wallet |
| Paid questions, with a subscription | 30 a minute | Account |
Free search and previews also have global daily ceilings shared by all callers, and each dataset caps how many previews it serves per hour.
Assistants and model APIs that reach quarry from their own servers, like Claude, ChatGPT, or the OpenAI and Anthropic APIs, share those servers' IP addresses with their other users. Send an API key or sign in, and most limits count only your own account or key.
When you hit one
- HTTP: status 429 with
{ "error": { "code": "RATE_LIMITED" } }and aRetry-Afterheader, in seconds. - MCP server limits (the first two rows): the same HTTP 429, before any tool runs. Your MCP client reports it as a transport error, not a tool result.
- MCP tool:
isError: truewith the codeRATE_LIMITEDanddetails.retry_after, in seconds. A paid question over x402 gives the wait in the message only. - Preview: the
snippetisnull, and the search still answers.
Wait the given number of seconds before retrying. Retrying sooner counts against the same limit.