Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

MCP errors

Every code a looot MCP tool call can return as isError, whatever tool or layer produced it, and the fix.

Every tool error is isError: true with structuredContent.data shaped {code, message, retryable, requestId, error, ...context} (context can add fields like tool, runId or endpointId). See Errors: MCP tool errors for the shape. message always says what to do next; read it before matching on code alone.

Three layers produce this same shape: a tool handler’s own refusal, the SDK’s own input-schema validation before a handler ever runs, and a catch-all boundary around every handler that turns an unexpected throw into internal_error.

validation_error

Arguments didn’t match the tool’s input schema, or an application-level check inside the handler rejected them. Retryable: no. Fix: check each field against tools/list, fix the named one, and call again. See inspect.

unknown_tool

The tool name isn’t one this server has, or it’s disabled. Retryable: no. Fix: call tools/list and use one of the names it returns. See MCP tools.

internal_error

Something failed on looot’s side that isn’t one of the named codes below. Retryable: yes. Fix: retry once; if it fails again, report the requestId. See Support.

not_found

Nothing matched the tool’s arguments in this workspace (for example runs_get with a runId from another workspace, or one that never existed). Retryable: no. Fix: use an id this tool or runs_list actually returned, then call again. See runs_list.

endpoint_not_found

The endpointId argument doesn’t match a catalog entry. Retryable: no. Fix: find a current id with search_catalog or discover, then call again. See search.

workflow_not_found

The workflow id in the arguments doesn’t exist in this workspace. Retryable: no. Fix: check the workflow id and call again. See run.

idempotency_conflict

The idempotencyKey on a run call was already used with a different body. Retryable: no. Fix: reuse the exact same body to replay the original run, or pick a new idempotencyKey for a new one. See Idempotency.

forbidden

The signed-in token lacks the scope this tool needs (usually runs.execute for run). Retryable: no. Fix: sign in again and keep the needed scope checked on the consent page, or use a token that has it. See Access.

insufficient_balance

run when the reservation would exceed the workspace’s available balance. The data carries a topUp object with a checkout link, the same as the REST 402; see REST errors: insufficient_balance. Retryable: no. See Top up.

too_many_inflight_runs

run when this workspace already has too many runs in flight. Retryable: yes. Fix: wait for some to finish, then call run again with the same idempotency key. See Idempotency.

rows_mode_unsupported

The request needs a storage capability this gateway isn’t running in (for example output.mode: "canonical" in production). Retryable: no. Fix: drop the option, or use output.mode: "raw". See inspect.

catalog_loading

The catalog hasn’t finished loading in this gateway process yet. Retryable: yes. Fix: wait a few seconds and call again.

storage_busy

The storage backend is briefly overloaded. Retryable: yes. Fix: wait a few seconds and call again with the same idempotency key. See Idempotency.

runs_cursor_invalid

The cursor argument to runs_list is invalid or stale. Retryable: no. Fix: call runs_list again with no cursor. See runs_list.

top_up_amount_out_of_range

top_up’s amountUsd is below the minimum (or above the maximum). Retryable: no. Fix: call top_up again with at least minimumUsd from the error, or omit amountUsd entirely and let looot pick a suggested amount. See Top up.

top_up_unavailable

No payment link could be created for this workspace right now (reasons include billing being disabled, a read-only token, or too many attempts in the last hour). Retryable: sometimes; read the message. Fix: give whoever holds the account the dashboardUrl from the error, so they can top up from looot.ai/usage. See Top up.

unknown_category

catalog_overview {category: "..."} named a category id that doesn’t exist. The data lists the valid categories. Retryable: no. See catalog_overview.

unknown_platform

catalog_overview {platform: "..."} named a platform id that doesn’t exist, or one outside the given category. Retryable: no. See catalog_overview.

Service unavailable codes

A handful of internal service names can appear as "<service>_unavailable" (for example a control-plane dependency being briefly down). These say which service and that a retry is safe. Retryable: yes. Fix: wait a few seconds and call again; nothing was charged.

Was this page helpful?