Errors
This server
Problems the MCP server reports itself, before it sends anything. The hint a tool returns names the specifics.
| Name | Retry later | When |
|---|---|---|
InvalidInput | no | a parameter is missing or out of range; issues names each field |
NotFound | no | an account the call reads does not exist on this cluster |
NotAMint | no | an address passed as a mint is not a token mint |
RateLimited | yes | the RPC node is rate limiting; call again in a few seconds |
Unreachable | yes | the RPC node could not be reached: the connection was refused, the name did not resolve or the request failed; call again once it is back, and check whether a send landed before sending it again |
CertificateUntrusted | no | this machine does not trust the RPC node's certificate, often because antivirus or a proxy inspects HTTPS |
Unfunded | no | your wallet has no SOL yet; fund it, then try again |
Failed | no | an unexpected error; the hint carries its message |
TransactionFailed | no | the transaction would fail for a reason this client does not name; read the logs |
WalletNotConfigured | no | a wallet tool was called on a server started without --wallet |
NoClock | no | wait was given to a server built without a clock; call again without wait |
WalletNotMainnet | no | the RPC serves mainnet; wallet tools work on devnet, testnet and localnet only |
NoWallet | no | the server has no wallet yet; call solive_wallet_setup first |
WalletEmpty | no | the wallet holds no SOL; fund it from a faucet, then try again |
WalletTokenNotAllowed | no | the server was started with sell limits that do not name this token |
WalletTradeLimit | no | the trade sells more than the server's --wallet-per-trade limit for this token |
ReleaseChanged | no | the release differs from the one previewed: its payee, amount, result, fee or the escrow itself changed; preview it again and show the user |
ReleaseTooLarge | no | this split has too many co-authors to fit in one transaction; pass a lookup_table or reduce recipients as the hint says |
WalletBusy | yes | another server using the same wallet holds its sale record for a moment; call again |
WalletHourLimit | yes | the wallet sold as much of this token in the last hour as the server's --wallet-per-hour limit allows; try later or sell less |
AgentNotConfigured | no | solive_agent_create was called on a server started without --agent |
OwnerNotServed | no | the owner is not in the server's --agent-owners list |
BudgetExhausted | yes | the agent or relayer key reached its hourly lamport budget; try again later |
NoFreeNonce | no | no free nonce is left in the owner's window or the mandate's lane |
NoFreeMandateId | no | this owner already granted this agent as many mandates as the client looks through; revoke one first |
NoncePromised | yes | the nonce is held for another pending request; leave nonce out or ask again later |
TooManyPending | yes | the owner has too many prepared requests waiting; submit some or let them expire |
SubmitInFlight | yes | another request is relaying the same intent; ask again in a moment |
RelayerNotConfigured | no | solive_submit_signed_intent was called on a server started without --relayer |
RelayMintNotAccepted | no | the relayer does not relay intents selling this token |
RelayFeeTooLow | no | the relayer fee is below what this relayer charges for the input token |
RelayTooCostly | no | relaying would cost more lamports than this relayer pays per intent |
RelayTooLong | no | the intent expires later than this relayer accepts |
RelayRateLimited | yes | the owner reached this relayer's hourly intent limit |
RelayTooLarge | no | the signed terms do not fit in one transaction with this relayer |
NonceTaken | no | a different intent already uses this nonce; these signed terms can never be submitted |
SignatureInvalid | no | the signature is not the owner's signature of these exact terms |
SignatureMalformed | no | the signature is not a base58 Ed25519 signature |
NotRentPayer | no | only the wallet that paid an intent's rent may close it; cancel without close |
NothingToCrank | yes | the intent is not yet expired, or settling it pays this cranker nothing |
FundingExceedsBounty | no | recreating the owner's token account costs more than the intent's bounty |
OwnerAccountMissing | no | the owner has no token account that can take the refund; crank with fund_accounts |
NotDeliverable | no | the intent is not an open proof escrow, so no work can be delivered to it |
NoSpecUrl | no | the escrow publishes no spec url, or is not a proof escrow; ask its owner where its acceptance spec lives |
NotInvited | no | pay_to was not invited to the job: its spec is sealed to other wallets |
SpecSealed | no | the spec is sealed to invited wallets, and this server's wallet is not one of them or it has no wallet |
SpecUnreadable | yes | the spec url could not be read this time: it failed or the node answered a temporary error; try again shortly |
SpecUnfetchable | no | the spec url cannot be read: it answered not-found, redirects, is larger than the limit, or is not a public http(s) address; ask the owner for a working spec url and do not retry this one |
WorkUnreadable | yes | the announced work could not be fetched this time: the request failed or the host answered a temporary error; try again shortly |
WorkUnfetchable | no | the announced work cannot be read here: its url is not sealed to this wallet, answers not-found, redirects, is larger than the limit, is not a public https address, or holds sealed work this wallet cannot open; do not retry it |
NotEarliestAnnouncer | no | another wallet announced the delivered work first; a release recording that work pays its earliest announcer |
SealedSalts | no | the announcements seal their salts to the attestor's key, and this wallet cannot open them here, so the earliest announcer cannot be known; use the attestor's key file, or start the server with mcp --encryption-keypair naming the encryption key file whose public key the attestor's profile publishes |
EncryptionKeyInvalid | no | the file mcp --encryption-keypair names is not an encryption key file that profile encryption-key new writes, so nothing sealed to it can be opened; start the server with the right file |
NoMessageSigner | no | the wallet cannot sign messages, and a delivery derives its salt from the wallet's signature; use a key file or give the signature the hint asks for |
NotAnnounced | no | no work with this sha256 was announced for the escrow, so it is not recorded as what the release paid for |
NotReleased | no | the escrow has no release in its history, so no delivery can be recorded for it |
NotARelease | no | the transaction named as the release is not a release of this escrow |
ReleaseUnread | yes | the RPC node could not return the named release transaction; call again in a few seconds |
HistoryLagging | yes | the RPC node has not returned every transaction the call reads yet; call again in a few seconds |
OtherLifecycle | no | the named release belongs to an earlier lifecycle of this escrow address, which was closed and made again at the same nonce, so it is not a release of the escrow there now |
AlreadyRecorded | no | the release already records a delivered sha256, in its own memo or a follow-up, and a receipt reads the first |
ConfirmMismatch | yes | the second RPC node the server was started with, by --confirm-url, reports another genesis hash, escrow or earliest announcer than the first, or could not be read, so nothing was signed or sent; call again once both nodes agree |
NeverSettles | no | no release of this escrow could pay: after the judge fee, too little is left for the rounded-up protocol and partner fees; escrow more or lower the judge fee, as the hint says |
ClaimListTooLarge | no | the escrow and the claim list its sealed spec sets do not fit in one transaction, and a Ledger signs only the one transaction it previewed; seal the spec to fewer workers, or escrow without claims and open them with intent-engine claims open --workers, which sends the list in parts |
Ledger | no | the wallet's Ledger did not sign: it was rejected on the device, or the device is locked, unplugged or not in the Solana app; nothing was sent, and the hint says which |
NoFeePayer | no | the wallet is a Ledger, which signs only the release message, and the server was started without --fee-payer, the key file that signs and pays the release transaction |
DeviceUnpreviewed | no | the wallet is a Ledger, which signs only the transaction a preview with the same arguments showed by message_hash: no such preview is kept, it expired, or this tool sends several at once; preview again, or send each piece with its own preview |
HistoryTooLong | no | the record a release depends on is incomplete, so it is refused rather than decided from part of it: the history is longer than the pages read, which more pages fix, or the RPC node's ledger does not reach back to the escrow's creation, or the transport cannot page signatures or report its first available slot, which more pages do not fix |
Engine program
| Code | Name | Retry later | What to do |
|---|---|---|---|
| 6000 | Overflow | no | an amount is too large for the arithmetic; use smaller amounts |
| 6001 | DivideByZero | no | the arithmetic divided by zero; validated order terms never reach this, so rebuild the transaction with this server |
| 6002 | Truncated | no | the instruction data was cut short; rebuild the transaction with this server |
| 6003 | NonCanonical | no | the instruction data was not encoded canonically; rebuild the transaction with this server |
| 6004 | UnknownKind | no | the intent kind is not one the program knows; use swap, limit, dutch or attested |
| 6005 | UnknownStatus | no | the intent holds a status this version does not know; update to the latest @intent-engine/cli and read it again |
| 6006 | InvalidParams | no | the order terms are inconsistent; check amounts are non-zero and the auction times are ordered |
| 6007 | AmountMismatch | no | the amounts do not match what the intent escrows; read the intent again and use its remaining amount |
| 6008 | InsufficientOutput | yes | the fill pays less than the intent requires right now; check what it requires with intent-engine quote --owner <address> --nonce <n> |
| 6009 | InvalidTransition | no | the intent is not in a state that allows this; read its status with intent-engine show intent --owner <address> --nonce <n> |
| 6010 | IntentExpired | no | the intent has expired and can no longer be filled; its owner can still cancel it; anyone can expire it with intent-engine expire --owner <address> --nonce <n> |
| 6011 | NotExpired | yes | the intent has not expired yet; wait until its expiry time and try again |
| 6012 | NonceUsed | no | this nonce is already used; omit the nonce so the next free one is chosen |
| 6013 | NonceOutOfWindow | no | this nonce is outside the owner's 256-nonce window or inside the agent nonce lanes; omit the nonce so the next free one is chosen |
| 6014 | NonceRegression | no | the nonce base can only move forward |
| 6015 | Unauthorized | no | a signer or a named account does not match the one recorded on-chain (owner, rent payer, mandate agent, admin, guardian or upgrade authority); let this server pick the accounts and sign with the recorded key |
| 6016 | CreatePaused | yes | creating intents is paused by the guardian or admin; try again later; intent-engine show config shows the pause bits in paused |
| 6017 | KindDisabled | no | this intent kind is not enabled; intent-engine show config shows the enabled kinds as bits in enabledKinds |
| 6018 | UnknownKindBits | no | the kind mask names kinds the program does not know |
| 6019 | InvalidPauseFlags | no | the pause flags are empty or name pauses the program does not know; use create, fill or all |
| 6020 | FeeTooHigh | no | the configured fee exceeds the program's maximum |
| 6021 | NotPendingAdmin | no | only the proposed admin can accept the admin role |
| 6022 | ExpiryNotInFuture | no | the expiry must be later than the current chain time; use a later expiry |
| 6023 | SameMint | no | the input and output mints must differ |
| 6024 | MintNotAllowed | no | this mint cannot be used: it has a token extension the program refuses |
| 6025 | RefundNotCanonical | no | refunds go only to the owner's canonical token account; let this server pick accounts |
| 6026 | ReceiverNotAllowed | no | the receiver account is not owned by the named receiver authority, the authority is an engine account, or (for a mandate) the receiver is not an account the owner controls |
| 6027 | AuctionOutlivesExpiry | no | the dutch auction must end at or before the intent expires |
| 6028 | FillPaused | yes | fills are paused by the guardian or admin, and with them new claims and stand-by joins; try again later; intent-engine show config shows the pause bits in paused |
| 6029 | FeeAccountNotCanonical | no | a fee must go to its payee's canonical token account (the treasury's, the agent's or the judge's); let this server pick it |
| 6030 | FeeAccountMissing | no | a fee account was not passed: the treasury's, agent's or judge's at fill, or the relayer's at a signed create; create that token account and pass it |
| 6031 | SolverOutputNotAllowed | no | the solver's output account is not acceptable for this fill |
| 6032 | SigProgram | no | the signature instruction must come from the Ed25519 program |
| 6033 | SigHeader | no | the Ed25519 instruction is malformed; rebuild it with this server |
| 6034 | SigPubkey | no | the signature was made by a different key than the owner |
| 6035 | SigMessage | no | the signed message does not match this intent; sign the exact message solive_prepare_signed_intent returns on a server started with --relayer |
| 6036 | KindMismatch | no | the instruction does not match the intent's kind |
| 6037 | ResultOutOfBounds | no | the attested result is outside the intent's bounds |
| 6038 | SigMissing | no | the Ed25519 signature instruction is missing; rebuild the transaction with this server |
| 6039 | InvalidDomain | no | the config domain must not be zero; init-config takes it from the RPC's genesis hash, so point --url at the cluster you set up |
| 6040 | SignatureExpired | no | the signed intent passed its submit-by time; ask the owner to sign a new one |
| 6041 | FlashCpi | no | a flash fill cannot be started from inside another program |
| 6042 | FlashEndProgram | no | the flash fill must end with this program's end_fill |
| 6043 | FlashEndDiscriminator | no | the flash fill's closing instruction is not end_fill |
| 6044 | FlashEndIntent | no | the flash fill ends a different intent than it began |
| 6045 | FlashEndOrder | no | the flash fill's begin and end are out of order |
| 6046 | ReceiverCannotReceive | no | the receiver token account cannot receive: frozen, closed, not initialized, for another mint or owner, or with an extension other than ImmutableOwner; use another receiver |
| 6047 | RefundCannotReceive | no | the refund account cannot take the refund: frozen, for another mint or owner, or with a foreign delegate, close authority or extension; refund to another account the owner controls, or wait for a frozen one to be thawed |
| 6048 | FeeAboveBound | no | the current fees exceed the bound the solver accepted |
| 6049 | ExtTooLong | no | the extension data is too long |
| 6050 | ExtMalformed | no | the extension data is malformed: badly encoded, tags unsorted or repeated, or a partner with a zero key or zero bps |
| 6051 | ExtUnknown | no | the extension data holds a field the program does not know |
| 6052 | FlagsUnknown | no | the intent flags name options the program does not know; leave flags unset |
| 6053 | FillKindDisabled | no | the admin stopped fills of this kind, and with them new claims and stand-by joins; intent-engine show config shows the stopped kinds as bits in fillDisabledKinds |
| 6054 | UnsupportedVersion | no | an account has a version this program does not support |
| 6055 | AmountInMismatch | no | the fill must sell exactly the intent's remaining amount; read the intent again |
| 6056 | EpochRegression | no | the signing epoch can only move forward |
| 6057 | TreasuryMismatch | no | the treasury account must be the configured fee recipient; let this server pick it |
| 6058 | CrankBountyTooHigh | no | the crank bounty exceeds the program's maximum |
| 6059 | CreateFeeTooHigh | no | the create fee exceeds the program's maximum |
| 6060 | PartnerCutTooHigh | no | the partner cut must be at most 10000 bps |
| 6061 | PartnerFeeTooHigh | no | a partner fee can be at most 100 bps |
| 6062 | PartnerAccountMissing | yes | the partner has no token account for the input mint yet; it must be created before a fill |
| 6063 | PartnerAccountNotCanonical | no | the partner fee must go to the partner's canonical token account |
| 6064 | MandateInvalid | no | the mandate's terms are unsound: kinds must be swap, limit or dutch; per-intent cap above the agent fee; total at least the per-intent cap; max intents, max lifetime and floors non-zero; valid until a future time; a partner needs both key and bps; the agent neither empty nor the owner; or the owner has used every grant lane |
| 6065 | MandateExpired | no | the mandate has expired; the owner must grant a new one with intent-engine mandate grant |
| 6066 | MandateKind | no | the mandate does not allow this kind of intent |
| 6067 | MandateTtl | no | the intent lives longer than the mandate allows; choose an earlier expiry within it |
| 6068 | MandateCap | no | the intent draws more than the mandate's per-intent cap (amount sold plus agent fee); the owner set that cap, so stay within it or ask the owner, and never split or reword an order to get around it |
| 6069 | MandateBudget | no | the mandate's total budget would be exceeded; check what remains with solive_get_mandate, served with --agent |
| 6070 | MandateCount | no | the mandate has already created as many intents as it allows |
| 6071 | MandatePrice | no | the minimum output is below the price floor the owner set; do not weaken the person's price on your own: tell them the order is cheaper than the owner allows, or ask for at least the floor |
| 6072 | MandateRevoked | no | this mandate no longer stands: the owner revoked it, granted that id again, or advanced their signing epoch; the owner must grant a new one |
| 6073 | MandateMismatch | no | the intent differs from the mandate's fixed terms: same mints, no flags, the owner's partner only, and proceeds to an account the owner holds |
| 6074 | CreateCostAboveCeiling | yes | the engine's create fee or crank bounty rose above what this transaction allows; prepare it again and check the new cost before signing |
| 6075 | NonceJumpTooLarge | no | one advance may move the nonce base at most 2^32 past its current value and never into the agent nonce lanes; advance in smaller steps |
| 6076 | EpochJumpTooLarge | no | one advance may raise the signing epoch at most 2^48; advance-epoch always picks an allowed one, so rebuild the transaction with it |
| 6077 | NotAProof | no | the collaborative split settles only a proof intent that commits a spec hash; use the plain attested fill for a non-proof intent |
| 6078 | SplitCountMismatch | no | the recipient wallets, their weights, and the passed token accounts must be equal in number and within the engine's recipient cap |
| 6079 | RecipientNotCanonical | no | each split recipient account must be the recipient wallet's canonical associated token account for the input mint |
| 6080 | SplitNotConserved | no | the split left lamports in the escrow; the recipient weights must sum to the whole and cover the entire net after fees |
| 6081 | MintCapMissing | no | this create or exit did not pass the input mint's cap account, which the engine needs when it requires caps and whenever escrow it counted leaves; the mint may have no cap yet, in which case the engine accepts no intents selling it |
| 6082 | MintCapMismatch | no | the account passed as the mint cap is not the engine's writable cap account for the input mint |
| 6083 | MintCapPerOrder | no | the amount escrowed exceeds the per-order cap the engine set for the input mint; lower the amount |
| 6084 | MintCapWindow | yes | intents selling this mint have used the engine's escrow cap for the current window; try again once the window rolls, or lower the amount |
| 6085 | MintCapInvalid | no | a mint cap needs a per-order cap above zero, a window cap at least the per-order cap, and a window of at least 60 seconds |
| 6086 | CommitteeInvalid | no | a committee needs 1 to 8 distinct members in ascending order, a threshold from 1 to its member count, a fee wallet, and an address that is the hash of exactly those terms |
| 6087 | CommitteeSigners | no | the votes name fewer members than the committee's threshold, or a member it does not have; gather votes from at least the threshold of its members |
| 6088 | CommitteeMismatch | no | the committee passed is not the judge the escrow names; release it with the committee its attestor field holds |
| 6089 | ClaimTerms | no | a claim's terms are out of bounds: at most 7 days and 100 SOL of stake, and a claim cannot run past the escrow's expiry |
| 6090 | ClaimHeld | yes | another worker holds this job's claim; only that worker can be paid until the claim lapses, then anyone can claim or be paid |
| 6091 | ClaimsMissing | no | this escrow takes claims, so a release or cancel must pass its claims board; let this server build it |
| 6092 | ClaimsOpen | no | this escrow already takes claims |
| 6093 | NotClaimant | no | only the worker holding the claim can drop it |
| 6094 | StakeAccountMismatch | no | the stake goes to the claimant when it is paid, otherwise to the escrow's owner; pass that account |
| 6095 | ProfileInvalid | no | a profile needs 1 to 8 distinct lowercase skill tags of at most 16 letters, digits or dashes, an https endpoint of at most 128 printable characters, and a document url only together with its sha256 |
| 6096 | ClaimCooldown | yes | this worker dropped its claim on the job and may claim it again once that claim would have ended; any other worker may claim it now |
| 6097 | ReleaseCannotSettle | no | the judge fee leaves less of the escrow than the rounded-up protocol and partner fees, so no release could pay; lower the judge fee or escrow more |
| 6098 | LineWaiting | yes | workers stand by for this job, so it goes to them in line order and cannot be claimed directly; stand by to join the line |
| 6099 | LineEmpty | no | nobody stands by for this job, so no line is left to advance |
| 6100 | JobNotHeld | no | nobody holds this job and nobody stands by, so claim it instead of standing by |
| 6101 | LineEntryMismatch | no | a line entry passed is not the line's next one, or a drop or advance passed none while workers wait; let this server build it |
| 6102 | MintCapTotal | yes | intents selling this mint already hold the engine's total escrow limit for it; try again once open intents settle, or lower the amount |
| 6103 | CommitteeRequired | no | this escrow reaches the committee floor the engine sets for its token, so its attestor must be a committee of at least 2 judges, passed with the create; name such a committee as attestor, or escrow less |
| 6104 | CommitteeFloorsFull | no | the engine already keeps a committee floor for as many tokens as it can; set one of them to zero first |
| 6105 | AccountOutdated | no | an account has an earlier layout or version than this program reads; upgrade it with intent-engine migrate, or close it with intent-engine close-legacy and create it again |
| 6106 | NotLegacy | no | close-legacy closes only accounts of an earlier layout or version, and this one is current |
| 6107 | LegacyPayeeMismatch | no | close-legacy pays the wallet the account's layout records as its payer, or the config's fee recipient when it records none; let intent-engine close-legacy build it |
| 6108 | LegacyVaultOpen | no | close-legacy closes an intent only once its vault is gone; cancel, expire or close the intent first so its owner gets every token back |
| 6109 | LegacyMigrates | no | close-legacy never closes a config or user state; intent-engine migrate upgrades them in place |
| 6110 | AlreadyCurrent | no | migrate rewrites only accounts of an earlier layout or version, and this one is current |
| 6111 | UnknownLayout | no | migrate reads only the layouts earlier programs wrote; close this account with intent-engine close-legacy |
| 6112 | ConfigMissing | no | migrating an open escrow reads the fee schedule from the config; let intent-engine migrate build it |
| 6113 | LegacyLineOpen | no | close-legacy never closes a claim board or stand-by entry of an open escrow, so the line keeps its order; intent-engine migrate upgrades it in place |
| 6114 | ClaimListInvalid | no | a claim list names 1 to 32 distinct wallets, none of them the empty address, and never more than the size its owner set |
| 6115 | ClaimListIncomplete | yes | the owner has not yet added every wallet its claim list names, so nobody can claim or stand by until the list is complete |
| 6116 | NotListed | no | the escrow's owner named the wallets that may claim it, and this wallet is not one of them |
| 6117 | ClaimListMissing | no | this escrow's claims board records a claim list, so a claim, stand-by or closing settle must pass it; let this server build it |
| 6118 | ClaimListSet | no | this escrow's claim list is already set, and a set list never changes |
Token programs
| Code | Name | Retry later | What to do |
|---|---|---|---|
| 1 | InsufficientFunds | no | a token account, or the allowance a signed or agent create draws through, holds less than the amount; lower the amount or fund the account |
| 3 | MintMismatch | no | a token account belongs to a different mint than the intent uses |
| 4 | OwnerMismatch | no | a token account is not owned by the expected wallet |
| 17 | AccountFrozen | yes | a token account is frozen by its issuer; try again once it is thawed |
| 36 | NoMemo | no | a token account requires a memo on incoming transfers; its owner must turn that off before it can receive |
| 42 | CpiGuardTransferBlocked | no | the owner's token account has CPI Guard on, which stops the engine moving tokens on the owner's signature; turn CPI Guard off, or create a signed intent with intent-engine signed prepare, which draws through the engine's allowance |