Limits
Rate limits on the Distru MCP server, and how to pace an agent.
The limits below are counted per Distru user, so ordinary traffic from one user never spends another's. A user's call limits are shared across all of that user's API keys, OAuth connections and saved-agent runs. The limit on calls in flight at once applies to each key or connection separately. Limits on the source address are described at the end.
| Limit | Value |
|---|---|
| Tool calls back to back | 40 |
| Tool calls per minute | 120 |
| Tool calls per hour | 3,000 (the limit that binds over time) |
| Write tool calls per minute | 20 |
| PDF tool calls per minute (download or email a PDF) | 20 |
| PDF tool calls over the day | bursts of up to 1,000, refilling at 1,000 per 24 hours |
| Tool calls in flight at once, batched or parallel | 6 |
Limits are included in your Distru subscription. There is no metered charge and no overage.
How to pace an agent
Run calls in parallel, up to 6 in flight at once. That is one budget covering both parallel requests and batched calls: a batch of 6 takes every slot, so it cannot overlap anything else.
You start with 40 calls available and earn more at 120 per minute, so a burst of 40 is fine but 50 back to back is not, even though both sit under 120 for the minute.
Over a longer run the hourly cap is what binds, not the per-minute rate: pacing at 120 a minute runs it down in about 42 minutes. An agent working for an hour should pace to about 50 calls a minute, which it can hold indefinitely.
Reading your budget
A tool call charged against your budget answers with RateLimit-Remaining and RateLimit-Reset for whichever limit is closest, so a client can pace itself without waiting to be refused. When we can't read your budget the headers are left off rather than guessed, so treat their absence as unknown, not as zero. They describe your user's budget. When we can't tell which user a credential belongs to, its calls are counted on a budget of their own and the figures describe that. A credential we refuse gets a 401 with no figures.
When you hit a limit
Over a limit you get HTTP 429 with Retry-After in seconds and a JSON-RPC error naming the limit you hit. Always wait the time it names. A 429 from the limit on calls in flight carries no RateLimit-* quota, because how many calls may run at once is not a per-window allowance.
A batch of more than 6 tool calls returns 400, not 429: split it rather than retrying it.
Limits on the source address
Some limits are counted on the source address, not your user. Hosted AI tools connect from a small range of shared addresses, so one of these can occasionally refuse you while you are well inside your own limits.
Every 429 says which limit it is. A refusal against your user's budget names one of the limits above. Any other refusal is on the source address: wait the time in Retry-After, and don't treat any RateLimit-* figures on it as your budget.
Repeated 429s that mention authentication mean your credential is not arriving. Fix the header rather than backing off, because retrying won't help.