Reference

Errors

Every error a client, an agent or the dashboard can show you, with its HTTP status, JSON-RPC code, exact text, cause and fix.

This page lists the errors you can run into, grouped by where you meet them: the MCP endpoint your clients call, the agent endpoints your SDK calls, tool call results, OAuth, the dashboard, and webhook deliveries. Messages are copied from the service. Where a message contains a value it is shown in angle brackets. For a walk-through by symptom, see Troubleshooting.

How errors are shaped

SurfaceShape
Agent endpoints (/agent/*), and the checks that run before a request reaches the MCP engine{ "error": "<message>" }
The MCP endpoint once a request is past authenticationJSON-RPC 2.0: { "jsonrpc": "2.0", "id": <id or null>, "error": { "code": <int>, "message": <string> } }
A tool that failsNot an error response: a successful JSON-RPC result with isError: true. See Tool call outcomes
OAuth failures on the MCP endpoint{ "error": "<oauth code>", "error_description": "<text>" } with a WWW-Authenticate header
Dashboard pagesAn HTML error page. Forms show the message from the service

Every 401 carries a WWW-Authenticate challenge. Every 429 from a rate limit carries Retry-After, in seconds.

JSON-RPC codes at a glance

CodeHTTPMeaning
-32600400Invalid request: not a JSON-RPC message
-32601200Method not found (a list with nothing in it is an empty list, not this error)
-32602200Invalid params: unknown tool, unknown resource, bad prompt arguments, bad tools/call params
-32603200Internal error: a resource read or prompt render failed. The message is your agent's, or the timeout text
-32000400, 405, 406, 415Transport-level refusal: missing Accept, wrong method, wrong content type, unsupported protocol version
-32001503No agent connected, or every agent disabled
-32002429Monthly allowance used up
-32003403Project or account suspended
-32004403Caller address not on the project's client allow-list

-32001 to -32004 are this service's own codes.

General errors

These can come from any route.

StatusBodyCauseFix
503{"error":"Service is shutting down."}The gateway is restarting and refusing new work while running calls finishRetry. The SDKs reconnect by themselves
400{"error":"<parser message>"}, for example Unexpected token 'n', "not json" is not valid JSONThe body is not valid JSON on a route that reads JSONSend valid JSON with Content-Type: application/json
413{"error":"request entity too large"}Body over the limit: 512 KB on /agent/connect, 4 MB elsewhereSend less
500{"error":"Internal error."}An unexpected failure on our sideRetry, and if it persists contact us with the time and the request
404{"error":"Not found."}A path that does not existUse a documented path

API-key authentication

For /agent/connect, /agent/result, /agent/telemetry (an agent or full key) and /mcp/<project-id> (a client or full key).

StatusBodyCauseFix
401{"error":"Missing API key."}, header WWW-Authenticate: Bearer realm="mcp"No Authorization headerSend Authorization: Bearer <key>. For an SDK, SPACEFIX_API_KEY is not set
401{"error":"Invalid API key."}, header WWW-Authenticate: Bearer realm="mcp", error="invalid_token", error_description="Invalid API key."The key is unknown, revoked or expired, or it was truncated or has a stray spaceCreate a new key on the project page. Revoked and expired keys cannot be restored. Use Check connection with the pasted key to see which
403{"error":"This is a client key. Agents connect with an agent key."}A client key was used on an agent endpointUse an agent or full key in the SDK
403{"error":"This is an agent key. MCP clients connect with a client key."}An agent key was used on the MCP endpointUse a client or full key in the MCP client
429{"error":"Too many failed authentication attempts."}More than 30 rejected keys a minute from one address. A valid key is never countedStop retrying the bad key (a stale key in a restart loop is the usual cause), fix it, and wait for Retry-After

MCP endpoint errors

POST /mcp/<project-id>, in the order the checks run. The endpoint is described in MCP endpoint.

StatusJSON-RPCMessageCauseFix
401, 403, 429noneSee API-key authentication
400noneThe JSON parser's messageThe body is not valid JSONSend valid JSON
413nonerequest entity too largeThe body is over 4 MBSend less
403-32003This project is suspended: <reason>The project or its account is suspendedContact us. The dashboard shows the reason
403-32004This address is not on the project's client allow-list.The project has an Allowed client addresses list and the caller's address is outside itAdd the address or range in Project settings. A client behind a proxy presents the proxy's address
429noneRate limit exceeded: <n> requests per minute.More than the plan's requests per minute for the project (Free 600). Every client of the project shares the budgetWait Retry-After seconds, send fewer requests, or use a larger plan
403noneForbidden - agent identity mismatch.The key (or OAuth token) belongs to a different project than the URLUse the right project id in the URL, or the right key
429-32002Monthly allowance of <n> calls on the <Plan> plan is used up. It resets on the 1st (UTC), or upgrade the plan.Free plan, allowance spent. Applies to tools/call, resources/read and prompts/get onlyWait for the 1st (UTC), or ask us for a larger plan. tools/list still works
503-32001No agent connected for server "<id>".No agent is connected for the projectStart the agent. Check SPACEFIX_API_KEY and SPACEFIX_SERVICE_URL. Use Check connection
503-32001Every agent for server "<id>" is disabled.Agents are connected but all were disabled on the Agents pageEnable one. A disable lasts only as long as the connection
406-32000Not Acceptable: Client must accept both application/json and text/event-streamAccept lacks one of the two typesSend Accept: application/json, text/event-stream
415-32000Unsupported Media Type: Content-Type must be application/jsonWrong Content-Type on a POSTSend application/json
405-32000Method not allowed.GET, DELETE and the rest: the endpoint only accepts POSTUse POST. A client that tries to open a GET stream may ignore this 405
400-32000Bad Request: Unsupported protocol version: <v> (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)MCP-Protocol-Version names an unknown revisionUse a supported version
400-32600Bad Request: the request body is not a valid JSON-RPC messageValid JSON that is not a JSON-RPC request, for example {"foo":1}Send jsonrpc, id and method
200-32601Method not foundA method the endpoint does not implement (logging/setLevel, completion/complete, resources/subscribe)Do not call it
200-32602Tool <name> not foundThe tool is not registered, is disabled by you, is outside the key's allow-list, or does not read and the caller is read-only (a read-only key, Client access set to Read only, or an mcp:read token)Check tools/list for that key. Enable the tool, widen the allow-list, or label the tool readOnlyHint: true (or mark it Read under Tools) if it only reads
200-32602Resource not found: <uri>, with data: {"uri":"<uri>"}No registered resource has that uriUse a uri from resources/list
200-32602Invalid arguments for prompt <name>: <details>A required prompt argument is missingSend it
200-32602Invalid tools/call request: <details>params or arguments has the wrong type, for example arguments is a stringSend arguments as an object
200-32603Your agent's error text, or Request for resource "<uri>" timed out after <ms>ms. / Request for prompt "<name>" timed out after <ms>ms.A resource read or prompt render failed or timed out on the agentFix the handler, or raise the project's call timeout

Tool, resource and prompt call outcomes

A tools/call that reaches your agent and fails comes back as HTTP 200 with a result of { "content": [ { "type": "text", "text": "<message>" } ], "isError": true }, so the model can see it. The message is also written to the call log (first 300 characters), and Logs classes it as a failure type: Timed out when it contains timed out after, No agent connected when it starts with No connected agent or Every connected agent, and Agent error otherwise.

Message (the text)CauseFix
Input validation error: Invalid arguments for tool <name>: <details>The arguments do not match the schema your agent registered. The call never reaches your agent and is not countedFix the call. If a schema has an argument named format or pattern, rename it
Request for tool "<name>" timed out after <ms>ms.Your agent did not answer within the project's call timeout (30 seconds by default). A late result is dropped. The call is countedMake the handler faster, or raise the project's timeout up to 30 seconds
Agent disconnected before returning a result.The agent process, its network, or a proxy dropped the stream while the call was runningCheck the agent's logs and idle timeouts along the path
Key revoked.The key the agent connected with was revoked, and its stream was closedCreate a new key and redeploy the agent
Key rotated.The project's full keys were rotatedUse the new key
Project deleted. / Account deleted.The project or account was deletedn/a
Project suspended. / Account suspended.The project or account was suspendedContact us
Service is shutting down.The gateway is restartingRetry. The SDK reconnects
No connected agent serves tool "<name>".At the moment of dispatch no enabled agent had that tool. Also seen as ... resource "<uri>" and ... prompt "<name>". Logged, but not countedWait for the agent to reconnect
Every connected agent for this project is disabled.Every agent was disabled between the checks and dispatchEnable one
Tool failed.Your agent reported a failure with no messageReturn an error message from the handler
Your own error textYour tool threw or returned an errorFix the tool

Agent endpoint errors

/agent/connect, /agent/result and /agent/telemetry. The wire protocol is in Agent protocol. After the key checks above:

RouteStatusBodyCauseFix
any415{"error":"Content-Type must be application/json."}The request has no JSON content typeSend Content-Type: application/json
/agent/connect403{"jsonrpc":"2.0","id":null,"error":{"code":-32003,"message":"This project is suspended: <reason>"}}The project or its account is suspended. The body is JSON-RPC shaped even though this is not an MCP callContact us
/agent/connect429{"error":"Rate limit exceeded: <n> requests per minute."}More than the plan's connection attempts a minute for the project (Free 60). A reconnect loop is the usual causeBack off. Find why the agent keeps reconnecting. Honour Retry-After
/agent/connect400{"error":"\"tools\" must be an array."}The body has no tools array. It is required, even if emptySend tools: [] at minimum
/agent/connect400{"error":"\"resources\" must be an array."} / {"error":"\"prompts\" must be an array."}Sent, but not an arrayFix the type
/agent/connect400{"error":"Invalid prompt <json name>."}A prompt name outside letters, digits, _, - (1 to 64 characters), or arguments that is not an arrayRename or fix the prompt
/agent/connect400{"error":"Invalid resource <json uri>."}A resource that is not an object, or has a missing, empty or over-long (more than 2,048 characters) uriFix the resource
/agent/connect400{"error":"Invalid name for resource \"<uri>\"."}A resource name that is not a stringSend a string
/agent/connect400{"error":"Duplicate resource \"<uri>\"."}Two resources share a uriMake them unique
/agent/connect400{"error":"Too many resources: limit is 1000."}More than 1,000 resourcesRegister fewer
/agent/connect400{"error":"Too many tools: limit is <n>."}More tools than the plan's limit (Free 256)Register fewer
/agent/connect400{"error":"Invalid tool name <json name>."}A tool name outside letters, digits, _, - (1 to 64 characters). A . or a space is invalidRename the tool
/agent/connect400{"error":"Schema for \"<name>\" exceeds <n> bytes."}The tool's inputSchema is larger than the plan's limit (Free 65,536 bytes)Simplify the schema
/agent/connect400{"error":"Schema for \"<name>\" is not valid JSON Schema: <detail>"}The schema does not compile, for example type must be JSONType or JSONType[]: nonsenseFix the schema
/agent/connect429{"error":"Too many agent connections: the <Plan> plan allows <n>."}The project already has the plan's maximum number of open agent streams (Free 32)Close idle agents, run fewer replicas, or use a larger plan
/agent/connect413{"error":"request entity too large"}Registration over 512 KBRegister fewer or smaller schemas
/agent/result413sameResult over 4 MB. The call then times outReturn less data
/agent/result204noneNot an error. An unknown, late or foreign connection or call id is silently dropped
/agent/telemetry204noneAlways, once the key and content type pass, even for an empty or malformed body

OAuth errors

Only where OAuth is turned on for your deployment. The body is { "error": "<code>", "error_description": "<text>" } and the header is WWW-Authenticate: Bearer error="<code>", error_description="<text>", ....

Statuserrorerror_descriptionCauseFix
401invalid_tokenMissing Authorization headerNo header. This is the first step of the client's sign-in discovery, not a faultLet the client run its OAuth flow
401invalid_tokenInvalid Authorization header format, expected 'Bearer TOKEN'Not a bearer headerSend Authorization: Bearer <token>
401invalid_tokenThe verifier's message (signature, issuer, audience or expiry)The token failed verification: wrong issuer, wrong audience, expired, or signed by another keyGet a fresh token from the right identity provider
401invalid_tokenToken has no "server_id" claim.The access token does not name a projectThe identity provider must add the claim
401invalid_tokenToken has no expiration time / Token has expiredMissing or past expRefresh the token
403insufficient_scopeThe token needs one of these scopes: mcp:write, mcp:invoke, mcp:read. (with the defaults)The token has none of the accepted scopes. Any one is enough: a write scope reads and writes, mcp:read reads onlyRequest mcp:write, or mcp:read for read-only use
403none{"error":"Forbidden - agent identity mismatch."}The token's project is not the one in the URLGet a token for that project
500server_errorInternal Server ErrorVerification failed for a reason other than the token, for example the identity provider is unreachableContact us
503none{"error":"Authorization Server metadata is unavailable."}The sign-in discovery document could not be fetchedContact us

Dashboard errors

These are the messages the dashboard shows in forms and dialogs.

Everywhere

StatusMessageCauseFix
401Not signed in.No session, or it expired or was revokedSign in again
403Cross-site request refused.A change request without the X-Requested-With header, or from another siteOnly the dashboard's own pages may change things. A script must send that header and the session cookie
403Confirm your email address first. We sent a link when you signed up; you can ask for another in the banner. (code email_unverified)Creating a project or key before confirming your email, where verification is requiredOpen the link, or press Resend link
429Too many attempts. Try again in a minute.The per-address limit on sign-in and similar routes (20 a minute)Wait for Retry-After
404No such project.The project id is unknown or belongs to another accountCheck the id
502The service is unreachable. Try again in a moment.The dashboard could not reach the service, or it did not answer in timeRetry
anyAn error page reading Page not found, or Something went wrongNo such page, or an unexpected failureRetry. If it persists, contact us
404Trace not found. It may be older than your plan keeps history.A trace id that is unknown or older than your log retentionCheck the id and your plan's history

Sign-up, sign-in and credentials

WhereMessageCauseFix
Sign-upA valid email and a password of 8 to 1024 characters.The email has no @, or the password is too short or too longFix it
Sign-upAccept the Terms of Service and Privacy Policy to create an account.The box is not tickedTick it
Sign-upThat email is already registered.Duplicate addressSign in or reset the password
Sign-upToo many accounts created from this address today. Try again tomorrow.More than 10 sign-ups from one address in a UTC dayTry tomorrow
Sign-inIncorrect email or password.Unknown email or wrong password (indistinguishable on purpose)Check both, or reset the password
Sign-inEnter the 6-digit code from your authenticator app, or a recovery code.Two-factor is on and no code was sentEnter the code
Sign-inThat code is not right.A wrong, expired or already-used codeUse the next code, and check your phone's clock
Sign-inToo many attempts. Wait a minute and try again.5 code guesses a minute per accountWait
Sign-inTwo-factor sign-in is unavailable right now. ...We cannot read your second factor at the moment. The message goes on to name a server settingContact us
Verification linkA link was just sent. Give it a minute, then try again.A link was sent less than 60 seconds agoWait a minute
Verification, reset and email-change linksThat link has expired or was already used.Expired (verification and email change 24 hours, password reset 1 hour), already used, replaced by a newer one, or the email changed sinceRequest another link
Reset passwordPassword must be 8 to 1024 characters.Checked before the link is spentChoose another
Confirm email changeThat email is already registered.Someone registered the new address in the meantimeChoose another
SettingsA valid email.The new address has no @Fix it
SettingsUnknown brand colour.Not one of the offered coloursPick one
Settings"off" is a list of: offline, allowance, expiry.A bad notification settingUse the toggles
Change passwordCurrent password is incorrect.Retry
Change passwordNew password must be 8 to 1024 characters.Choose another
Delete accountPassword is incorrect.Retry
Delete accountType your email address to confirm.The typed address is not your account'sType it exactly

Two-factor and devices

MessageCause
Two-factor authentication is already on.You tried to set it up again
Start setup first.No setup is pending
That code is not right. Check the time on your phone and try the next one.The code did not match. One 30-second step either side is accepted
That code is not right.A wrong code when turning it off
Password is incorrect.A wrong password when turning it off
Too many attempts. Wait a minute.The second-factor limit
No such session.The device you tried to sign out is already gone

Projects, keys and tools

MessageCauseFix
A project name is required.Missing or blank nameEnter one
The <Plan> plan is limited to <n> projects. (code plan_limit)At the plan's project limit (Free 5)Delete one, or ask for a larger plan
A name of 1 to 60 characters.Renaming a projectShorten it
The call timeout is a whole number of seconds from 1 to <n>.n is 30Enter a whole number from 1 to 30
Up to 20 IP addresses or CIDR ranges, such as 203.0.113.7 or 10.0.0.0/8.A bad entry, or more than 20Fix the list
A label of 1 to 60 characters is required.Creating a keyEnter a label
Key type must be agent, client or full.Pick a type
Expiry must be between 1 and 365 days.Pick an expiry
A tool allow-list applies to client and full keys.You gave an Agent key an allow-listRemove the list, or use a client or full key
Access must be "read" or "write".Creating a key with another Access valuePick Read and write or Read only
Read-only access applies to client and full keys.You made an Agent key read-onlyLeave Access off, or use a client or full key
Tool patterns are up to 50 names of letters, digits, "_", "-" and "*".More than 50 patterns, one over 64 characters, or an illegal characterFix the patterns
The <Plan> plan is limited to <n> active keys per project. (code plan_limit)At the plan's key limit (Free 10)Revoke a key
No such key.The key is not an active key of this projectReload
Not a valid tool name.A tool-settings name outside letters, digits, _, ., :, - (1 to 128 characters)Check the name
"disabled" must be true or false.Use the switch
A description is text of up to 1000 characters.Shorten it
Cache time is a whole number of seconds from 0 (off) to 3600.Fix it
Access must be "read", "write", or empty to follow the agent.Saving a tool's Reads or writes with another valuePick one of the options
Client access must be "read" or "write".Saving Client access in Project settings with another valuePick Read and write or Read only
Too many tool overrides. (code plan_limit)256 tools already have saved settingsClear some

Agents

MessageCause
` disabled must be true or false. `A bad value sent when disabling or enabling an agent
No such agent. It may have disconnected.An agent's id exists only while it is connected

Logs, Traces, Usage and exports

MessageCauseFix
No such trace.A malformed id (not 32 hex characters), no calls with it within your retention, or it is not yoursCheck the id
Too many exports. Try again in a minute.More than 6 exports a minute per accountWait
Use from and to as YYYY-MM-DD, at most a year apart.A bad date, from after to, or a span over a yearFix the range

Webhooks

MessageCause
A URL is required.No URL
Not a valid URL.It cannot be parsed
The URL is too long.Over 500 characters
Put credentials in the signature check, not the URL.The URL has a username or password
The URL must start with https://.Plain http://
That address is not reachable from the internet.A private, loopback, link-local or reserved address
That host is not reachable from the internet.localhost, *.localhost or *.internal
Events are any of: agent.connected, agent.disconnected, key.created, key.revoked, allowance.warning, allowance.exceeded.An unknown event, or ping
At most 5 webhooks per account. (code plan_limit)The limit
No such webhook.Deleting, testing or re-enabling one that is gone

Playground

StatusMessageCauseFix
429Too many test calls. Try again in a minute.More than 30 runs a minute per accountWait
404That tool is not registered right now.No agent has itConnect the agent
403That tool is disabled. Enable it to try it.You disabled itEnable it
400Arguments must be a JSON object.The arguments are an array, string or nullSend an object
422The arguments do not match the tool's schema., with the reasons listedSchema validation failedFix the arguments
429The playground allows <n> runs a week and they are used up. It resets <YYYY-MM-DD HH:MM> UTC. (code playground_limit)The weekly allowance (10 on Free) is spentWait for the reset time

A Playground tool that fails is not an HTTP error: the run completes and the result shows the error your handler returned.

Webhook delivery errors

These are not HTTP responses. They are shown on the Webhooks page as the webhook's last delivery. A delivery fails when it does not get a 2xx.

Last deliveryCause
failed (<status>), for example failed (405)Your endpoint answered a non-2xx status. A 4xx other than 429 is not retried. 5xx and 429 are retried after 10 seconds and 2 minutes
failed: Timed out.No response within 5 seconds
failed: Resolved to a private address.The name resolved to a private, loopback or link-local address
failed: Not a valid URL., The URL must start with https://., That address is not reachable from the internet., That host is not reachable from the internet., The URL is too long., Put credentials in the signature check, not the URL.The stored URL no longer passes the checks
failed: <network error>, for example getaddrinfo ENOTFOUND ... or connect ECONNREFUSED ...A network failure (first 200 characters of the error)

After 20 deliveries in a row fail, the webhook is switched off until you press Re-enable. See Alerts and webhooks.

Next steps