Skip to content

Error codes

Every error this gateway returns carries a stable, machine-readable code. Match on the code, not on the message: messages are written for humans, carry request-specific detail, and are free to change. Codes are part of the API contract.

The envelope

Errors share one shape across the admin API, the MCP planes and the WebSocket proxy. request_id is repeated in the X-Request-ID response header and in the audit log, so an operator can tie a message a user is looking at to the exact request that produced it.

json
{
  "error": {
    "code": "CLIENT_NOT_FOUND",
    "message": "Client not found",
    "request_id": "01J8Z5X9WQ4H0T6C3N2K7M1P8R"
  }
}

Codes

CodeMeaning
ALERT_NOT_FOUNDNo alert rule with that id.
ALREADY_EXISTSAn entity with that name already exists.
ALREADY_REVOKEDThe API key was revoked already.
APPROVAL_NOT_FOUNDNo approval request with that id.
BACKUP_FAILEDThe database backup could not be created.
BACKUP_STREAM_FAILEDThe backup was created but failed while streaming to the client.
BAD_REQUESTGeneric 4xx fallback for a request the gateway could not process.
BUNDLE_NOT_FOUNDNo bundle by that name.
CATALOG_ENTRY_NOT_FOUNDNo catalog entry with that slug.
CLIENT_NOT_FOUNDNo registered client by that name — also returned when another team owns it.
COMPOSITE_NOT_FOUNDNo composite (macro) tool by that name.
CONSUMER_EXISTSA consumer with that name already exists.
CONSUMER_NOT_FOUNDNo consumer with that id — also returned when another team owns it.
CSRF_VALIDATION_FAILEDA session-authenticated mutation arrived without a matching X-CSRF-Token header.
DISCOVERY_ERRORTool discovery against the backend returned nothing usable.
EMPTY_BUNDLEThe bundle has no tools, so no install link can be minted for it.
EXAMPLE_NOT_FOUNDNo saved example with that id for this tool.
FORBIDDENThe caller is authenticated but lacks the role this action requires.
IMMUTABLE_ENTRYBuilt-in catalog entries cannot be edited or deleted at runtime.
IMPORT_ERRORA config import failed to parse or apply; the message carries the reason.
INSTALL_LINK_NOT_FOUNDThe install link does not exist, or has expired.
INTERNAL_ERRORAn unhandled server-side failure; details are in the logs under this request id.
INVALID_ARGSA saved example's arguments do not match the tool's input schema.
INVALID_CREDENTIALSThe username/password pair was rejected at login.
INVALID_CRONA schedule's cron expression could not be parsed.
INVALID_INTERVALA monitor's polling interval is outside the accepted range.
INVALID_MODEAn unrecognized canary mode was supplied.
INVALID_NAMEA name field breaks the naming rules for its entity.
INVALID_SCHEMAA supplied JSON Schema is not a valid object schema.
INVALID_SESSION_IDThe Mcp-Session-Id header is not a UUID v4.
INVALID_SLUGA catalog slug does not match the required lowercase/dash format.
INVALID_STEPSA composite tool's step list is empty or otherwise unusable.
INVALID_STRATEGYAn unrecognized load-balancing strategy was supplied.
INVALID_TARGETA schedule or monitor names a target that does not fit its kind.
INVALID_URLA supplied URL is malformed, uses a rejected scheme, or resolves to a blocked address.
INVALID_WEIGHTA load-balancer or canary weight is outside the accepted range.
JSON_TOO_DEEPThe JSON body nests deeper than the configured limit (a parser-exhaustion guard).
LAST_ADMIN_PROTECTEDThe change would leave the instance with no admin user, so it was refused.
LAST_SUPERADMIN_PROTECTEDThe change would leave the instance with no teamless super-admin, so it was refused.
MCP_KEY_NOT_FOUNDNo managed MCP API key with that id.
NAME_COLLISIONThe name is already taken by a different kind of entity in the same namespace.
NOT_CONFIGUREDThe feature being addressed has no configuration on this client yet.
NOT_FOUNDGeneric 404 for a resource with no more specific code.
NOT_PENDINGThe approval is no longer pending, so it can't be approved or rejected.
NOT_RESTThe operation only applies to REST clients, and this client is not one.
ORIGIN_NOT_ALLOWEDThe browser Origin header is missing or is not in the configured allowlist.
POLICY_EXISTSA guard policy with that name already exists.
POLICY_NOT_FOUNDNo guard policy by that name.
RATE_LIMITEDThe caller exceeded a rate limit; retry after the interval in the response.
SCHEDULE_NOT_FOUNDNo maintenance schedule with that id.
SCHEMA_UNAVAILABLEThe backend's OpenAPI/GraphQL schema could not be fetched or parsed.
SECRETS_PROVIDER_ERRORThe external secrets provider (e.g. Vault) rejected or could not serve the request.
SECRETS_PROVIDER_UNCONFIGUREDThe operation needs an external secrets provider and none is configured.
SECRET_BOX_NOT_CONFIGUREDSECRET_ENCRYPTION_KEY is unset, so the gateway refuses to store or mint a secret.
SESSION_NOT_FOUNDNo MCP session with that id.
SNAPSHOT_NOT_FOUNDNo config snapshot with that id.
SSO_DISCOVERY_FAILEDThe OIDC provider's discovery document could not be fetched.
SSO_NOT_CONFIGUREDAn SSO endpoint was called while OIDC is not configured.
TARGET_NOT_FOUNDNo load-balancer upstream target with that id.
TEAM_NOT_FOUNDNo team with that id.
TOOL_ALIAS_CONFLICTThe alias is already in use by another tool.
TOOL_ALIAS_INVALIDA tool alias breaks the alias naming rules.
TOOL_NOT_FOUNDThe client exists but exposes no tool by that name.
TOOL_NOT_LIVEThe tool is catalogued but not currently live in the registry.
TRACE_NOT_FOUNDNo trace with that id.
TRAFFIC_NOT_FOUNDNo traffic record with that id.
UNAUTHORIZEDNo valid credentials were presented, or the session has expired.
UNKNOWN_TOOLA bundle or composite references a tool that does not exist.
UPSTREAM_AUTH_VAULT_UNSUPPORTEDThis upstream-auth mode cannot be stored in the configured Vault provider.
USER_EXISTSAn admin user with that username already exists.
USER_NOT_FOUNDNo admin user with that id.
VALIDATION_ERRORThe request body or query string failed validation; the message names the field.
WS_PROXY_TARGET_NOT_FOUNDNo WebSocket proxy target by that name.

The HTTP status is deliberately not listed: several codes are emitted at more than one status. CLIENT_NOT_FOUND, for instance, is the 404 for a client that does not exist and — by design — the identical 404 for one that belongs to another team, so a scoped caller cannot probe for its existence.

Released under the MIT License · Built with Bun + Vue.