Errors

Refusal codes

15 codes, closed vocabulary (MCP charter 2026-09-04)·shape: status: refused + refusal.code + recover_with·an absence is never a zero

The fifteen codes

CodeMeansWay out
BAKED_TOOL_REQUIREDThe question has a typed tool that carries rules raw SQL gets wrong (one payment basis per median, floors, cut points).Call the tool named in recover_with with the arguments it shows.
RAW_SQL_REQUIREDNo typed tool answers this; the raw door does.Re-ask through query_substrate with the SQL in recover_with.
VINTAGE_REQUIREDThe table is annual or versioned and the question did not pin a year or version.Add the year, quarter or version_id recover_with names.
REQUIRED_FILTER_MISSINGThe table needs a filter before it can be read within budget (a state on hospital prices, a contract on Stars).Add the filter recover_with names and re-issue.
AMBIGUOUS_ENTITYA name matched more than one thing, or nothing we serve.Use one of the accepted names in the message, or resolve_entity / resolve_provider first.
UNSAFE_JOINThe join would blend grains or bases that must stay apart.Join through the key how_to_join names, or ask for each side separately.
NO_COVERAGEWe do not hold what was asked for: the payer is not indexed, the tool is withdrawn, the year is outside the files.recover_with names the nearest thing we do hold. This is an absence we can prove, never a zero.
NO_DATAThe question was understood and the filters matched nothing.Widen one filter at a time; the answer names what was searched.
METHOD_MISMATCHThe request would compare two payment bases (per diem with fee schedule, percent of charges with a dollar).Pick one basis; compare_hospital_rates segments them for you.
SCAN_LIMIT_EXCEEDEDThe query would scan more than the budget allows, or ran past the 40 s synchronous window.Narrow the predicate (one state, one code, one year), aggregate in SQL, or use the async lane on a paid plan.
SUPPRESSEDThe source suppresses this cell (CMS prints * for 10 or fewer).Ask at a coarser grain; the bounds are in the answer.
QUARANTINED_METHODThe tool is quarantined by the live audit for a measured defect and will not execute.recover_with names the tool that serves the same purpose.
INVALID_ARGUMENTSThe arguments did not match the tool's input model.fields says what each one accepts and recover_with carries a corrected example. HTTP 400 on REST.
DATA_ALLOWANCE_REACHEDThis account has been delivered its monthly data allowance.detail.resets_on says when; ask for the aggregate rather than the rows. HTTP 429 on REST.
PLAN_REQUIREDThis account's plan does not include the door asked for (the async lane, paging).detail.upgrade_url; the sync door still answers questions. HTTP 402 on REST.

A refusal, as served

{
  "status": "refused",
  "refusal": {
    "code": "REQUIRED_FILTER_MISSING",
    "message": "compare_hospital_rates reads hospital files one state at a time; pass state.",
    "recover_with": [{ "tool": "compare_hospital_rates", "args": { "billing_code": "70553", "state": "OH" } }]
  }
}

HTTP statuses on the REST door

StatusCodesMeans
401unauthenticated / invalid_keyMissing, empty or unrecognised bearer key.
403entitlement_denied / scope_forbiddenThe key may not call this tool.
404unknown_toolNo tool of that name on this door.
400INVALID_ARGUMENTS, invalid_inputThe body did not match the tool's input model.
402PLAN_REQUIREDThe plan does not include this door.
422every other charter refusalUnderstood and declined, with recover_with.
429DATA_ALLOWANCE_REACHED, rate_limit_exceededThe monthly allowance or the per-second rate limit.
500TOOL_FAILED, ENGINE_*Our failure; the correlation id in the answer is what we read.

This page as markdown: /docs-md/errors.md · every page in one file: /llms-full.txt