Skip to main content
Everything that can stop a tool call short: the ceilings it runs into, and the errors it returns when it does.

Throughput and result limits

A throttled request returns 429 Too Many Requests with Retry-After: 1 alongside the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. The window is one second, not one minute — retry after roughly a second rather than backing off for a full minute. See Rate Limiting for the header semantics.

Parameter length limits

All string parameters are validated server-side before any backend call. A request that exceeds a limit is rejected immediately with an INVALID_ARGUMENT error — no partial processing occurs.
sub1sub10, adv1adv10, and source_id are affiliate-controlled tracking values written directly to database columns. Their limits match the underlying column constraint.
These limits apply across every tool where the parameter appears.

Errors

When a tool call fails, the MCP Server returns a result with isError: true. The text field of that result is a JSON object with two fields:
The message is human-readable and safe to surface directly to an end user or AI agent. The code is a stable string your code can branch on without parsing prose. When a parameter limit is exceeded, the message always names the offending parameter, the allowed maximum, and the actual length received — and the server returns before any backend call is made:

Error codes

Two fields that are not errors

Two top-level keys can appear on a successful response and are easy to mistake for a problem: Neither sets isError. See Response safety.

Handling errors in a script

Check isError before processing content. The code lets you handle each class of error differently without string-matching the message:
AI agents read the message field automatically and will describe the problem in natural language without any extra handling on your part. Error code parsing is only necessary when you are processing MCP tool results programmatically in a script.