Skip to content

Error Code Registry

When cMCP refuses a request or fails, it returns a short code such as POLICY_DENY that says why. This page is the full list, with the HTTP status and log level for each code and the page that defines it. Use it to look up an error you have seen or to handle errors in your own code.

This is the normative registry for all error codes used across the cMCP Runtime. Every error code MUST be registered here before it is referenced in code, configuration, or other spec documents. Implementations MUST NOT emit error codes that do not appear in this registry.

Runtime Errors

error_code HTTP status log level description spec reference
ATTESTATION_REPORT_UNAVAILABLE 503 FATAL TEE provider did not return an attestation report within timeout failure-modes.md FM-1
ATTESTATION_PROVIDER_UNSUPPORTED 500 FATAL No supported TEE provider detected and CMCP_DEV_MODE is not set attestation.md §1.1
POLICY_HASH_MISMATCH 500 FATAL Measured policy bundle hash does not match deployment manifest failure-modes.md FM-4
POLICY_RELOAD_PINNED_HASH 500 FATAL policy_reload_interval_seconds > 0 configured alongside a pinned CMCP_POLICY_HASH. Every reload is validated against that hash, so a changed bundle could never be installed; refused at startup rather than appearing to work policy-hot-reload.md
POLICY_SIGNATURE_INVALID 500 FATAL A policy bundle's manifest signature is absent, malformed, or does not verify under the pinned CMCP_POLICY_SIGNING_KEY; or its version did not increase, which would allow a genuinely signed older bundle to be replayed policy-hot-reload.md
POLICY_SIGNING_KEY_INVALID 500 FATAL CMCP_POLICY_SIGNING_KEY or CMCP_POLICY_SUCCESSOR_SIGNING_KEY is not a 32-byte Ed25519 public key, the two are equal, or a successor is set without a current key configuration.md
POLICY_SIGNING_KEY_REVOKED 403 / startup FATAL at startup, WARN at runtime A policy bundle verifies only under a revoked policy signing key and is refused; or the policy in force was signed by a key revoked since it was installed, so every tool call is refused in every enforcement mode until a bundle signed by a trusted key is installed; or every pinned key is revoked policy-hot-reload.md
POLICY_KEY_REVOCATION_INVALID none (logged) WARN A statement in signing-key-revocations.json was refused: malformed, not signed by the current or successor key, or naming a key other than the current one. It is skipped; other statements and the bundle reload still proceed policy-hot-reload.md
CONFORMANCE_PROFILE_UNSATISFIED 500 FATAL A named conformance_profile requires something the deployment has not configured; aarm requires an Agent Manifest binding (AARM R6) STATUS.md
CATALOG_HASH_MISMATCH 500 FATAL Measured catalog hash does not match deployment manifest attestation.md §5
CATALOG_RESTART_REQUIRED startup FATAL Runtime catalog mutation was configured, but routing authority remains immutable until a newly pinned gateway restart catalog-lifecycle.md
AGENT_MANIFEST_BINDING_FAILED 500 FATAL Signed Agent Manifest signature, authenticated subject, policy hash, or catalog hash did not match the runtime session inputs session-policy.md
TOOL_NOT_IN_CATALOG 403 WARN Agent requested a tool not present in the attested catalog cedar-policy.md
POLICY_DENY 403 INFO Cedar policy evaluation returned deny for this call cedar-policy.md
CATALOG_TOOL_NAME_COLLISION 500 FATAL Two catalog entries register the same tool_name tool-identity.md
CATALOG_DRIFT_DETECTED 409 ERROR Upstream server changed a tool definition since catalog was sealed attestation.md §5
MCP_PARSE_FAILURE 400 WARN Incoming MCP JSON-RPC message failed to parse failure-modes.md FM-5
MCP_INVALID_REQUEST 400 WARN Parsed JSON is not a valid JSON-RPC request shape failure-modes.md FM-5
RESPONSE_SIZE_EXCEEDED 413 WARN Tool response exceeds max_response_size_bytes response-inspection.md Stage 1
RESPONSE_INJECTION_DETECTED 403 ERROR Response inspection detected indirect injection pattern response-inspection.md Stage 4
RESPONSE_SCHEMA_VIOLATION_STRICT 409 WARN Tool response contains fields outside approved output_schema (strict mode) response-inspection.md Stage 2
SESSION_SENSITIVITY_POLICY_DENY 403 INFO Call denied due to session sensitivity state session-policy.md
SESSION_RESET_REQUIRED 428 INFO Agent attempted call that requires session reset first session-policy.md
SESSION_STATE_STORE_UNAVAILABLE startup FATAL A configured session_state_path could not be opened, so the gateway would run without the cross-instance session-state persistence the operator configured configuration.md
TEE_FAULT 500 ERROR TEE process fault during call execution failure-modes.md FM-3
ATTESTATION_STALE 412 WARN Attestation report validity period has expired attestation.md §3
BREAK_GLASS_ACTIVE 200 WARN Call allowed via catalog exception (break-glass procedure active) tool-identity.md

Verification Library Errors

The following error codes are defined and documented in verification-library.md. They are listed here for cross-reference completeness; the verification library spec is authoritative for their semantics.

error_code
UNSUPPORTED_PROVIDER
SIGNATURE_INVALID
PUBLIC_KEY_NOT_BOUND
POLICY_HASH_MISMATCH
CATALOG_HASH_MISMATCH
AGENT_MANIFEST_MISMATCH
ATTESTATION_STALE
CHAIN_BROKEN
CLAIM_MALFORMED
EXTERNAL_EVIDENCE_VERIFICATION_FAILED

Note: POLICY_HASH_MISMATCH, CATALOG_HASH_MISMATCH, and ATTESTATION_STALE appear in both tables. The Runtime emits them during startup or request handling; the verification library emits them during offline or client-side verification. The semantics are consistent across both contexts.