Skip to main content
About this page · Updated 2026-11-05 16:07 UTC

What this page is: The error codes a Motorical MCP connection can return, what each means, and what an agent should do next. Branch on code, not on message text.

How far to trust this page: the build checked 19 names, paths, tools, scopes and error codes against the real product (0 do not match). Not yet reviewed claim by claim.

Updated 2026-11-05 16:07 UTCLatest change: MCP docs: an error catalogue, smaller tool pages, and when each tool is not listedRecently updated pages

MCP errors and what to do

Every failed Motorical tool call returns a structured result with isError: true and this body. Branch on code, never on the message text, which can change.

FieldMeaning
codeA stable string. Compare it exactly: the codes below are case-sensitive.
errorA plain message. It never contains an internal route.
statusThe HTTP status behind the failure, or null.
hintThe next move, in one sentence.
detailsThe upstream body when there is one, for example missingScopes, retryAfterSeconds or nextAction.
candidatesOnly on MOTOR_BLOCK_REQUIRED: the Motor Blocks you can pass, each as { id, name }.

Two families of codes exist, because some are assigned by Motorical's authentication layer (lowercase, passed through unchanged) and the rest by the tool layer (uppercase).

Connection and permission codes (lowercase)​

CodeStatusMeaningWhat to do
insufficient_scope403The connection does not hold a permission the tool needs. details.missingScopes names it.Call motorical_whoami to see what is held. Tell the person which permission to add (Motorical dashboard, Settings, API access), then start a new chat or reconnect. Do not retry unchanged.
missing_scope403Same cause, from the REST API rather than the MCP layer.As above.
authorization_revoked401The person revoked this connection. It takes effect on the next call.Stop and ask the person to reconnect the connector.
invalid_access_token, access_token_required, invalid_token_type401The token is expired, missing or the wrong kind. Clients normally refresh and retry on their own.If it persists, ask the person to reconnect.
grant_mismatch, delegation_grant_mismatch, wrong_resource403The token was issued for another server or grant.Reconnect to the server whose address you are using.
motor_block_not_authorized, workspace_not_authorized403The id you passed is not covered by this connection.Use an id from a list tool; if the person wants it covered, they add it under the connection's settings.
motor_block_not_found, motor_block_not_owned403The Motor Block does not exist for this account.List blocks with motorical_list_motor_blocks and use one of those ids.
account_suspended403The account is suspended.Tell the person; nothing you do will fix it.
subscription_required403The feature needs a plan.Only the person can subscribe. Read live plans from GET https://motorical.com/api/billing/plans.
catalog_outdated, coverage_unavailable503Motorical could not decide safely and refused (it fails closed).Wait a moment and retry once; if it persists, tell the person Motorical is having trouble.
sandbox_outbound_locked, sandbox_recipient_denied403A sandbox account tried to email a recipient who is not unlocked.Unlock the recipient with motorical_free_recipient_add, then send again.

Tool-layer codes (uppercase)​

CodeStatusMeaningWhat to do
MOTOR_BLOCK_REQUIREDnoneThe connection covers several Motor Blocks and the call named none.Call again with motorBlockId set to one of candidates. With exactly one granted block you never need to pass it.
NO_MOTOR_BLOCKSnoneThe connection covers no Motor Block yet.Ask the person to reconnect and approve access to their Motor Blocks.
NOT_AVAILABLE_OVER_OAUTHnoneThe action exists only in the dashboard.Ask the person to do it there.
NOT_FOUND404The id does not exist in this scope.Re-check it with a list tool; it may belong to another block or account.
VALIDATION_FAILED400, 422An input is wrong. The message names the field.Fix that field and call again.
UNAUTHENTICATED401The connection is no longer signed in.Ask the person to reconnect.
FORBIDDEN403Refused for a reason without a more specific code.Call motorical_whoami, then explain what is missing.
PLAN_REQUIRED402The plan does not include this.Only the person can change plan.
CONFLICT409The state changed or the action clashes with it.Re-read the current state, then decide again.
RATE_LIMITED429Too many calls or sends. details.retryAfterSeconds and details.nextAction say how to proceed.Wait, or call motorical_get_account_rate_limits, then retry.
UPSTREAM_ERROR5xxMotorical had a problem.Retry once after a short wait; otherwise tell the person.
TOOL_ERRORnoneAnything else.Read error; correct the call if it names a problem.

Confirmation requests​

Some tools change or delete things and ask the person to confirm. A client that supports it shows the person a prompt; a result with input_required means the call is waiting for that answer and has not run. Pass confirm: true only after the person said yes.

Communications codes​

Marketing tools return their own domain codes (for example AMBIGUOUS_TEMPLATE and LIST_CARD_INVALID), each with a hint. They are described beside the tools on the Communications tools page and in the Communications guide.