Quotas and errors
How calls are counted
MCP calls count against your NameBeta plan, in the same buckets as the website. A WHOIS lookup on namebeta.com and a lookup_whois call spend the same allowance, and both appear on the usage page of your account panel.
- Only
tools/callcounts.initialize,tools/list,pingand other protocol requests are free. - One call counts once, whatever it contains. A
check_availabilitycall with 20 domains counts as one. suggest_domainsis free, as suggestions are on the website.- The call counts when it is accepted, before the tool runs. A call that ends in a tool error — an invalid domain, a WHOIS server that does not answer — still counts.
- A rejected call does not count. When you are over a limit, the
429response costs nothing. - Your plan decides the limits. MCP always runs as a signed-in user, so the anonymous limits of the website never apply.
Limits
Each bucket has an hourly and a daily limit. A call has to fit within both.
| Tool | Bucket | Free (hour / day) | Pro (hour / day) | Business (hour / day) | Enterprise (hour / day) |
|---|---|---|---|---|---|
check_availability with any bare label | query | 90 / 450 | 360 / 1,800 | 600 / 3,000 | Unlimited |
check_availability with full domain names only | check | 45 / 135 | 120 / 360 | 300 / 900 | Unlimited |
compare_prices | single | 150 / 250 | 1,200 / 3,600 | 2,000 / 8,000 | Unlimited |
suggest_domains | Not counted | ||||
lookup_whois | whois | 5 / 15 | 60 / 200 | 150 / 500 | Unlimited |
lookup_dns | dns | 20 / 50 | 200 / 400 | 500 / 1,000 | Unlimited |
check_availability lands in one of two buckets: query if any entry in domains is a bare label such as kettlory, and check if every entry is a full domain name. Plans and prices are on namebeta.com/pricing.
When limits reset
:::warning Windows are in UTC
Quota windows are fixed and aligned to UTC, whatever your time zone:
- Hourly limits reset at the start of every UTC hour: 13:00, 14:00, 15:00 UTC and so on.
- Daily limits reset at 00:00 UTC. That is 08:00 in Beijing, 09:00 in Tokyo, and 16:00 or 17:00 the previous day in San Francisco.
:::
The windows are not rolling. Calls made at 13:59 UTC and 14:00 UTC fall into different hours, so a full hourly allowance becomes available again at the top of every UTC hour.
Over the limit: 429 and Retry-After
A call over either limit is rejected at the HTTP level, before it reaches the tool:
HTTP/1.1 429 Too Many Requests
Retry-After: 1260
Content-Type: application/json
{
"jsonrpc": "2.0",
"error": {
"code": -32000,
"message": "MCP hourly quota exceeded.",
"data": { "retryAfter": 1260 }
},
"id": 7
}
| Part | Value |
|---|---|
| Status | Always 429 Too Many Requests, for hourly and daily limits alike |
Retry-After header | Seconds until the exceeded window resets: 1–3600 for hourly, 1–86400 for daily |
error.code | -32000 |
error.message | MCP hourly quota exceeded. or MCP daily quota exceeded. |
error.data.retryAfter | The same number of seconds as Retry-After |
id | The id of your request |
The daily limit is checked first. When both limits are spent, the response reports the daily one, and Retry-After points at 00:00 UTC — retrying at the next hour would fail again.
What clients should do
- Wait at least
Retry-Afterseconds before calling the same tool again. Retrying sooner is rejected with another429. - Other buckets are unaffected. After
lookup_whoishits its limit,lookup_dnsandcompare_priceskeep working. - Tell the user when the limit resets rather than retrying in a loop. For a daily limit, the wait can be most of a day.
Error reference
MCP clients can see three kinds of error. They arrive in different places, so handle each one where it appears.
HTTP errors
The request never reaches the tool. The body is a JSON-RPC error with code -32000.
| Status | When | What to do |
|---|---|---|
401 | No token, or the token is invalid or expired | Follow the WWW-Authenticate challenge; see Authorization |
405 | GET or DELETE on the endpoint | Send POST. The endpoint has no SSE stream and no sessions |
429 | A quota limit is exceeded | Wait Retry-After seconds; see above |
Tool errors
The tool ran, or tried to, and failed. The response is a normal 200 with a tools/call result that has isError: true and the reason as text:
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{ "type": "text", "text": "Invalid domain format" }],
"isError": true
}
}
| Message | Cause |
|---|---|
Input validation error: … | The arguments do not match the tool's input schema — a missing field, a value out of range, a domain without a dot |
Invalid domain format | The input cannot be parsed as a domain name |
Tool <name> not found | The tool name is misspelled or does not exist |
| Any other message | The lookup behind the tool failed, for example a WHOIS or DNS server that did not answer; it may succeed if retried later |
A tool error still counts against your quota, except for an unknown tool name.
Malformed requests
A request the MCP transport cannot accept is rejected with a 4xx status before any tool runs — for example 406 when the Accept header does not list both application/json and text/event-stream, or a JSON-RPC parse error (-32700) for a body that is not valid JSON-RPC. Fix the request rather than retrying it.
Service level
:::caution No SLA
The NameBeta MCP server comes without a service level agreement. We do not commit to any availability, uptime, response time or support response time, and quotas, tools and response fields may change. Results come from live registry, WHOIS and DNS queries and can be incomplete or out of date.
:::