Errors

Every error is JSON with success: false and an error object: code (stable identifier), message (what went wrong and how to fix it), field (offending parameter, when applicable), hint (allowed values or example), retryable, and retry_after_seconds when retryable.

HTTPcodeMeaningFix
400MISSING_PARAMETERA required input is absentSupply the field named in field
400INVALID_JSONPOST body is not valid JSONSend {"inputs": {…}}
400INVALID_REQUESTMalformed request (e.g. JSON-RPC shape)See message
404UNKNOWN_CALCULATORNo calculator with that idUse /api/v1/search
404NOT_FOUNDUnknown routeSee /api/v1
405METHOD_NOT_ALLOWEDWrong HTTP methodUse the method listed in OpenAPI
422INVALID_PARAMETERWrong type/formatFollow the type in the schema
422OUT_OF_RANGEValue outside the allowed rangeRespect min/max in hint
422INVALID_ENUM_VALUENot one of the allowed valuesUse a listed value
422INVALID_DATENot a valid ISO dateUse YYYY-MM-DD
422INVALID_LISTList malformed or wrong lengthComma-separated numbers
422UNKNOWN_UNITUnit symbol not recognised or quantities differSee /api/v1/units
422CALCULATION_ERRORInputs valid but mathematically impossible (e.g. triangle inequality)Read message
429RATE_LIMITEDToo many requestsWait retry_after_seconds / Retry-After header
500INTERNAL_ERRORUnexpected failureRetry once; report if persistent

MCP: input/validation failures are returned as tool results with isError: true (not JSON-RPC protocol errors), so the model can correct the call. A2A: failures produce a task in state failed with the error in status.message.

Markdown source: /docs/errors.md