Errors and limits
HTTP status codes
| Status | When | What to do |
|---|---|---|
200 |
The message was handled. A tool that itself failed still returns 200 with isError: true in the result. |
Read the result. |
202 |
The message was a notification (no id), so there is no response body. |
Nothing. |
400 |
Malformed JSON, a batch array, an unknown method, bad tool arguments, an unsupported protocol version, or routing headers that disagree with the body. | Fix the request. The JSON-RPC error code says which. |
401 |
No credential, or one that is unknown, revoked or expired. Response carries WWW-Authenticate: Bearer. |
Mint a new token. |
403 |
The token is valid but lacks the required scope, or the request carried a browser Origin header. |
Use a token with read scope; do not call this endpoint from a browser. |
405 |
The request was not a POST. | MCP is POST-only. The GET event stream was removed in protocol revision 2026-07-28. |
429 |
Rate limit exceeded. Response carries Retry-After in seconds. |
Back off for the stated interval. |
500 |
Server-side failure. The message is deliberately generic. | Retry; if it persists it is not something the caller can fix. |
503 |
The data store could not be reached. | Retry with backoff. |
JSON-RPC error codes
| Code | Meaning |
|---|---|
-32700 |
Parse error — the body was not valid JSON. |
-32600 |
Invalid request — not a JSON-RPC message, a batch, or an unsupported protocol version. |
-32601 |
Method not found. |
-32602 |
Invalid params — missing params.name, or a tool that is not exposed. |
-32603 |
Internal error. |
-32020 |
Header mismatch — Mcp-Method or Mcp-Name disagreed with the body, or was absent when the declared protocol version requires it. |
Rate limits
The MCP endpoint allows 120 requests per 60 seconds, counted per user rather than per token. Each JSON-RPC message is one HTTP request, so a multi-step agent run consumes calls quickly; the limit is set to accommodate that while still bounding a runaway loop.
Limits are held in memory per serverless instance, so the practical ceiling can be slightly higher across a cold start. Do not rely on that.
Result size
A single tool result is capped at 100,000 characters, roughly 25k tokens. Beyond that the payload is truncated and an explicit [TRUNCATED: ...] marker is appended, so a clipped series can never read as a complete one. If you hit it, narrow the date window or name fewer metrics.
Protocol versions
Send your revision in the MCP-Protocol-Version header. Supported, newest first:
2026-07-282025-11-252025-06-182025-03-26
An unrecognised version is refused with a 400 that carries the full supported list in error.data.supported, so a client can pick one instead of guessing. Omitting the header entirely is read as 2025-03-26, the last revision that predates the header.
From 2026-07-28 onward, every request must also carry Mcp-Method, and Mcp-Name when the message addresses something (tools/call). The server checks them against the body and rejects disagreement, so an intermediary cannot route on one operation while the server performs another.
Scopes
Tokens carry explicit scopes: read, write. They are not cumulative — a write token does not imply read. Every MCP method today requires read, including initialize and ping.