Guides
Plans and limits
What each limit means, the Free plan's numbers, how calls are counted, and what happens as you approach and pass your monthly allowance.
Plans set how many projects and keys you can have, how many agents can connect, how many calls you can make each month, how long logs are kept, and how fast a project can be called. This page lists those limits with the Free plan's numbers, explains exactly what counts as a call, and says what you see as you approach and pass your allowance.
Plans
There are four plans: Free, Pro, Team and Enterprise. New accounts start on Free. Moving to another plan is not self-service yet. The Billing & plan page says "Self-serve upgrades are not open yet; ask us and we will move your account", and its upgrade buttons are disabled.
The limits
These are the Free plan's numbers.
| Limit | Free | What it counts |
|---|---|---|
| Calls per month | 2,000 | Calls that reached an agent, per account, across all projects, per UTC calendar month |
| Past the allowance | Calls are refused | Paid plans keep working and are counted instead |
| Log and trace history | 3 days | How long Logs and Traces rows stay readable |
| Projects | 1 | Projects in your account |
| API keys per project | 2 | Active keys (not revoked, not expired) in one project |
| Agent connections per project | 3 | Agents (processes) connected to one project at once |
| Tools per agent | 256 | Tools one agent registers |
| Size of one tool's schema | 64 KiB (65,536 bytes) | The JSON Schema of one tool, as text |
| Requests per minute, per project | 600 | Every request to the project's MCP endpoint |
| Agent connection attempts per minute, per project | 60 | connect requests to one project |
| Playground runs | 10 a week, per account | Tool runs from the Playground or the project page's tester |
| Call timeout | 30 seconds | How long the gateway waits for your agent to answer one call |
Paid plans have higher limits. Contact us for the numbers.
What each limit looks like when you reach it
| Limit | What you see |
|---|---|
| Calls per month | The client gets 429 with JSON-RPC code -32002. See At 80% and at 100% |
| Projects | Creating a project fails with The <plan> plan is limited to <n> projects. |
| Keys per project | Creating a key fails with The <plan> plan is limited to <n> active keys per project. |
| Agent connections | Your agent's connect request fails with 429, Too many agent connections: the <plan> plan allows <n>. |
| Tools per agent | Registration fails with 400, Too many tools: limit is <n>. |
| Schema size | Registration fails with 400, Schema for "<tool>" exceeds <n> bytes. |
| Requests per minute | 429 with a Retry-After header. See Rate limits |
| Connection attempts per minute | 429 with a Retry-After header |
| Playground runs | The playground allows <n> runs a week and they are used up. It resets <date> UTC. |
| Call timeout | The call fails with Request for tool "<name>" timed out after <ms>ms. and is counted |
The exact text of every message is in Errors.
The call timeout
The gateway waits up to 30 seconds for your agent to answer a call. You can lower it for a project, to a whole number of seconds from 1 to 30, under Project settings, Call timeout (seconds). Leave it blank for 30. The same timeout applies to resource reads and prompts. When it runs out, the client gets an error result, your handler keeps running, and a late result is dropped. For work that takes longer, return a job reference and add a second tool to poll it.
Limits on every plan
| Limit | Value |
|---|---|
| Webhooks per account | 5 |
| Tool overrides (disable, description, cache, reads or writes) per project | 256 |
| Client allow-list entries per project | 20 addresses or ranges |
| Tool patterns in one client key's allow-list | 50 |
| Key lifetime | 1 to 365 days, or none |
| Result cache time per tool | 0 (off) to 3,600 seconds |
| Resources per agent | 1,000 |
| Tool and prompt names | Letters, digits, _ and -, 1 to 64 characters |
| Size of one registration request | 512 KB |
| Size of one tool result, and of one MCP request | 4 MB |
| CSV exports | 6 a minute per account, at most a year per export, 100,000 rows for logs |
| Failed key attempts from one address | 30 a minute, then 429 |
What counts as a call
A call is billable when it reaches your agent: a tools/call, resources/read or prompts/get that your agent answered, answered with an error, or did not answer in time. A call that times out is counted, because it ran your code.
These are free and not counted:
- Requests refused before reaching an agent: a bad or missing key, a rate limit, a suspended project, an allowance already used up, or no agent connected.
- Calls whose arguments fail the tool's schema. They never reach your handler.
- Calls that found no connected agent serving that tool, even though they were logged.
- Calls answered from the gateway's result cache.
initialize,tools/list,resources/list,prompts/listandping.- Playground and project-page tester runs.
The count is kept per account per UTC month and resets on the 1st of each month at 00:00 UTC, with no action from you. It is enforced to within a few seconds of traffic, not to the single call, so you can slightly exceed your limit before it blocks, and the meter on screen can trail the truth by a moment.
At 80% and at 100%
| Point | What happens |
|---|---|
| 80% | The meter in the sidebar turns amber and Billing & plan gets a Near badge. A banner on the Dashboard reads <used> of <limit> calls used this month. Check connection on a project warns Most of the monthly allowance is used. You get one email and one allowance.warning webhook |
| 100% on Free | The meter and banner turn red and the badge reads Limit. Billable requests are refused with 429 and code -32002 until the 1st (UTC). You get one email and one allowance.exceeded webhook |
| 100% on paid plans | The same meter, banner and notifications, but calls keep working and are counted as overage. Nothing is actually charged, because billing is not live |
The refusal on Free looks like this:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32002,
"message": "Monthly allowance of 2,000 calls on the Free plan is used up. It resets on the 1st (UTC), or upgrade the plan."
}
}
Only billable methods are refused. Listing tools stays free, so a client can still connect and show this message instead of failing mysteriously. A batch request that contains any billable call is refused as a whole. A call that would be answered from the cache is still refused once the allowance is used up, because the check runs first.
The email and webhook checks run every 10 minutes and fire once per level per month. See Alerts and webhooks.
Rate limits
Requests to a project's MCP endpoint are limited per minute per project, not per key, so every client of the project shares one budget. Every request counts, including initialize and tools/list, and ones that later fail. Cache hits count too.
The limit is a token bucket: the full per-minute budget is available at once and refills continuously. A burst up to the budget is fine, and a steady rate above it gets a 429:
HTTP/1.1 429 Too Many Requests
Retry-After: 1
Content-Type: application/json
{"error":"Rate limit exceeded: 600 requests per minute."}
Retry-After is the number of whole seconds until the next request will be accepted. Wait that long before retrying. Note that this body is {"error": ...}, not JSON-RPC.
Agent connection attempts are limited the same way, with the same message and a Retry-After header. The SDKs honour Retry-After and add jitter to their reconnect delays. Results returning from an agent are never rate limited, because limiting them would time out calls already accepted.
Failed key attempts are limited separately, per address: 30 a minute, then 429 Too many failed authentication attempts. A valid key is never refused by it.
See how much you have used
- Sidebar meter. On every page: your plan, percent used,
used / limit callsand the reset date. It links to Billing & plan. - Billing & plan. Your plan and its status, the calls-this-month bar, an On pace for forecast, cards for projects, active API keys and log history, and a comparison of the plans. The invoices panel says "No invoices yet".
- Usage. The This month bar, with calls per day and per tool. See Observability.
- Projects. A meter of projects used against your limit.
- Playground.
N of M runs left this week, with the reset time. - Logs and Traces. The page header says how many days your plan keeps.
What is not built yet
- No payment provider. No card is taken and no invoice is produced. On paid plans, "billed as overage" means counted, not charged.
- No published prices or paid-plan numbers. Contact us.
- No self-service plan change. We move your account between plans.
- No spend controls. Alerts at 80% and 100% exist. Caps and budgets for overage do not.
Next steps
- Alerts and webhooks: get told at 80% and 100%.
- Observability: Usage, Logs and how long history is kept.
- Troubleshooting: when a call is refused for your allowance.