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.