Skip to main content
Glama

Pre-sign risk check ($0.01 via x402)

presign_check
Read-only

Paid ($0.01 via x402 in USDC on Base, Solana, Monad, Polygon, Arbitrum, Avalanche, Algorand or Stellar, in RLUSD on the XRP Ledger or in USD₮0 on X Layer): call this before you sign. Send the transaction, token approval, EIP-712 signature (Permit, Permit2, EIP-3009 x402 payment, Seaport) or EIP-7702 authorization (type authorization: delegating the wallet to a contract, the sweeper trap) your agent is about to sign; get back green, orange or red with reason codes: who gets access, whether the spender or recipient is flagged, sanctioned (OFAC SDN) or unverified, unlimited allowances, the token itself (honeypot, fake look-alike, high tax), and for a Uniswap v4 swap or position what the pool's hook may do (keep part of the swap, set the fee, block a withdrawal, be upgraded). On Solana (type solana, the base64 wire transaction): every instruction decoded and the transaction simulated (token account takeovers, System Assign, unlimited delegates, durable nonces, hidden owner or delegate changes). On the XRP Ledger (type xrpl, the unsigned tx JSON): account takeovers (SetRegularKey, SignerListSet, disabling the master key), fake RLUSD, partial payments, missing destination tags, trust-line and issuer risks, and DEX offers far below market. On Algorand (type algorand, base64 msgpack transaction or group in transactions): rekeys, closing the account or an asset to someone else, clawbacks, fake USDC, app update/delete/clear, simulated. On Stellar (type stellar, base64 XDR envelope in transaction): account merges, added signers, a disabled master key, fake USDC/EURC, look-alike recipients (address poisoning), missing required memos, Soroban token approvals (also inside x402 payment authorizations), simulated. Only proceed on green; on orange ask your user; never sign on red. Each orange or red reason carries a fix (what to change to get green; retry "change" means rebuild the request that way and check it again, "never" means don't sign at all). The answer also lists checked and not_checked (each with because: unavailable, not_sent with the field to send, or out_of_scope); green covers only what was checked. Same as POST /v1/check. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.

Input Schema

NameRequiredDescriptionDefault
toNotransaction: the target contract
txNonear: { signerId, receiverId, actions } as wallet-selector builds it (actions like { type: "FunctionCall", params: { methodName, args, gas, deposit } }). xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet, Batch (every inner transaction is judged), vault deposits and withdrawals (VaultDeposit, VaultWithdraw) and loans (LoanSet, LoanPay)
dataNotransaction: 0x-prefixed calldata
fromNotransaction, message or authorization, optional: your wallet address (authorization: its current delegation is shown); the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)
typeYesWhat the agent is about to sign; near = a NEAR transaction in transaction (base64 borsh) or tx (signerId, receiverId, actions), or a NEAR Intents message in nep413; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions; stellar = a Stellar transaction envelope in transaction
x402Nooptional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain
nonceNoauthorization, optional: the authorization nonce
tokenNoapproval: the token contract
valueNotransaction: native value in wei
amountNoapproval: amount in base units (0 = revoke)
intentNooptional: what you are trying to do, in one sentence (e.g. "swap 10 USDC for ETH on Uniswap"); orange INTENT_MISMATCH when signing would do more or something else
methodNomessage: how it is signed (default personal_sign); eth_sign is always red
nep413Nonear: a NEAR Intents message about to be signed, as passed to signMessage: { message, recipient: "intents.near", nonce } (message = the JSON { signer_id, verifying_contract, deadline, nonce, intents }), or the signed { standard: "nep413", payload }. Red NEAR_INTENTS_GIVES_FOR_NOTHING (a token_diff that only gives), NEAR_INTENTS_KEY_ADDED, NEAR_FAKE_TOKEN received, NEAR_LOOKALIKE_ACCOUNT; orange NEAR_INTENTS_UNKNOWN_VERIFIER, NEAR_INTENTS_LONG_DEADLINE
originNooptional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange
addressNoauthorization: the contract the EIP-7702 authorization delegates the wallet to (0x0…0 clears a delegation). Any delegation hands the contract the whole wallet: orange EIP7702_AUTHORIZATION unless the contract is on GoPlus's trust list; red AUTHORIZATION_TO_NO_CONTRACT, AUTHORIZATION_TO_UNVERIFIED_CONTRACT, AUTHORIZATION_TO_FLAGGED_CONTRACT, SANCTIONED_ADDRESS
chainIdNoEVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 143, 196, 8453, 42161, 4663, 43114 (8453 = Base); optional for message
messageNomessage: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange
networkNoxrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet); stellar: stellar:pubnet (default) or stellar:testnet; near: near:mainnet (default) or near:testnet
spenderNoapproval: who gets the allowance
typedDataNosignature: the exact eth_signTypedData_v4 payload (Permit, Permit2, EIP-3009 x402 payment, Seaport)
transactionNosolana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. near: a base64 borsh NEAR transaction (unsigned or signed); red NEAR_FULL_ACCESS_KEY_ADDED, NEAR_ACCOUNT_DELETED, NEAR_CONTRACT_DEPLOYED_ON_WALLET, NEAR_LAST_FULL_ACCESS_KEY_DELETED, NEAR_INTENTS_KEY_ADDED, NEAR_FAKE_TOKEN, NEAR_LOOKALIKE_ACCOUNT; orange NEAR_KEY_UNLIMITED_ALLOWANCE, NEAR_NFT_APPROVAL, NEAR_INTENTS_DEPOSIT_FOR_OTHER. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN, ADDRESS_POISONING; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated.
transactionsNoalgorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked. near: several transactions (base64 borsh or { signerId, receiverId, actions }), as signAndSendTransactions
authorizationChainIdNoauthorization, optional: the chain id inside the authorization, chainId (default) or 0 = valid on every chain (orange AUTHORIZATION_ALL_CHAINS)

Output Schema

NameRequiredDescriptionDefault
acceptsNoOnly on an unpaid call: the x402 payment options
reasonsNo
receiptNo
verdictNogreen: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)
versionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 196, 8453, 42161, 4663, 43114 (8453 = Base); optional for message"New value: +"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 143, 196, 8453, 42161, 4663, 43114 (8453 = Base); optional for message"
  2. Changed11 schema fields changed
    • addedInput schema / properties / nep413
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "near: a NEAR Intents message about to be signed, as passed to signMessage: { message, recipient: \"intents.near\", nonce } (message = the JSON { signer_id, verifying_contract, deadline, nonce, intents }), or the signed { standard: \"nep413\", payload }. Red NEAR_INTENTS_GIVES_FOR_NOTHING (a token_diff that only gives), NEAR_INTENTS_KEY_ADDED, NEAR_FAKE_TOKEN received, NEAR_LOOKALIKE_ACCOUNT; orange NEAR_INTENTS_UNKNOWN_VERIFIER, NEAR_INTENTS_LONG_DEADLINE",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / network / description
      Previous value: -"xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet); stellar: stellar:pubnet (default) or stellar:testnet"New value: +"xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet); stellar: stellar:pubnet (default) or stellar:testnet; near: near:mainnet (default) or near:testnet"
    • changedInput schema / properties / network / enum
      Previous value: -[
      -  "xrpl:0",
      -  "xrpl:1",
      -  "stellar:pubnet",
      -  "stellar:testnet"
      -]New value: +[
      +  "xrpl:0",
      +  "xrpl:1",
      +  "stellar:pubnet",
      +  "stellar:testnet",
      +  "near:mainnet",
      +  "near:testnet"
      +]
    • changedInput schema / properties / transaction / description
      Previous value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN, ADDRESS_POISONING; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated."New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. near: a base64 borsh NEAR transaction (unsigned or signed); red NEAR_FULL_ACCESS_KEY_ADDED, NEAR_ACCOUNT_DELETED, NEAR_CONTRACT_DEPLOYED_ON_WALLET, NEAR_LAST_FULL_ACCESS_KEY_DELETED, NEAR_INTENTS_KEY_ADDED, NEAR_FAKE_TOKEN, NEAR_LOOKALIKE_ACCOUNT; orange NEAR_KEY_UNLIMITED_ALLOWANCE, NEAR_NFT_APPROVAL, NEAR_INTENTS_DEPOSIT_FOR_OTHER. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN, ADDRESS_POISONING; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated."
    • changedInput schema / properties / transactions / description
      Previous value: -"algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked"New value: +"algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked. near: several transactions (base64 borsh or { signerId, receiverId, actions }), as signAndSendTransactions"
    • addedInput schema / properties / transactions / items / anyOf
      Added value: +[
      +  {
      +    "maxLength": 12000,
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "propertyNames": {
      +      "type": "string"
      +    },
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / transactions / items / maxLength
      Removed value: -12000
    • removedInput schema / properties / transactions / items / type
      Removed value: -"string"
    • changedInput schema / properties / tx / description
      Previous value: -"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet, Batch (every inner transaction is judged), vault deposits and withdrawals (VaultDeposit, VaultWithdraw) and loans (LoanSet, LoanPay)"New value: +"near: { signerId, receiverId, actions } as wallet-selector builds it (actions like { type: \"FunctionCall\", params: { methodName, args, gas, deposit } }). xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet, Batch (every inner transaction is judged), vault deposits and withdrawals (VaultDeposit, VaultWithdraw) and loans (LoanSet, LoanPay)"
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions; stellar = a Stellar transaction envelope in transaction"New value: +"What the agent is about to sign; near = a NEAR transaction in transaction (base64 borsh) or tx (signerId, receiverId, actions), or a NEAR Intents message in nep413; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions; stellar = a Stellar transaction envelope in transaction"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature",
      -  "authorization",
      -  "message",
      -  "solana",
      -  "xrpl",
      -  "algorand",
      -  "stellar"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "authorization",
      +  "message",
      +  "solana",
      +  "xrpl",
      +  "algorand",
      +  "stellar",
      +  "near"
      +]
  3. Changed14 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / authorizationChainId / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / authorizationChainId / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / chainId / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / chainId / minimum
      Added value: +-9007199254740991
    • addedInput schema / properties / tx / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • changedInput schema / properties / typedData / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "type": "object"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "propertyNames": {
      +      "type": "string"
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • addedInput schema / properties / x402 / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / accepts / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": {},
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / reasons / anyOf
      Previous value: -[
      -  {
      -    "description": "Why the verdict is what it is",
      -    "items": {
      -      "additionalProperties": true,
      -      "properties": {
      -        "code": {
      -          "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT",
      -          "type": "string"
      -        },
      -        "severity": {
      -          "description": "info, warn or critical",
      -          "type": "string"
      -        },
      -        "subject": {
      -          "description": "The address or item the reason is about (null or absent when it is about the whole request)",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "code"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Why the verdict is what it is",
      +    "items": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "code": {
      +          "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT",
      +          "type": "string"
      +        },
      +        "severity": {
      +          "description": "info, warn or critical",
      +          "type": "string"
      +        },
      +        "subject": {
      +          "description": "The address or item the reason is about (null or absent when it is about the whole request)",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "code"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / reasons / description
      Removed value: -"Why the verdict is what it is"
    • changedOutput schema / properties / receipt / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "description": "Signed receipt (EIP-191) binding the verdict to your arguments",
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "description": "Signed receipt (EIP-191) binding the verdict to your arguments",
      +    "propertyNames": {
      +      "type": "string"
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / receipt / description
      Removed value: -"Signed receipt (EIP-191) binding the verdict to your arguments"
  4. Changed1 schema field changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161, 4663, 43114 (8453 = Base); optional for message"New value: +"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 196, 8453, 42161, 4663, 43114 (8453 = Base); optional for message"
  5. Changed1 schema field changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161, 4663 (8453 = Base); optional for message"New value: +"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161, 4663, 43114 (8453 = Base); optional for message"
  6. Changed1 schema field changed
    • changedInput schema / properties / transaction / description
      Previous value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated."New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN, ADDRESS_POISONING; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated."
  7. Changed5 schema fields changed
    • changedInput schema / properties / network / description
      Previous value: -"xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet)"New value: +"xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet); stellar: stellar:pubnet (default) or stellar:testnet"
    • changedInput schema / properties / network / enum
      Previous value: -[
      -  "xrpl:0",
      -  "xrpl:1"
      -]New value: +[
      +  "xrpl:0",
      +  "xrpl:1",
      +  "stellar:pubnet",
      +  "stellar:testnet"
      +]
    • changedInput schema / properties / transaction / description
      Previous value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated"New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated. stellar: a base64 XDR transaction envelope (unsigned, signed or a fee bump, as an x402 payment on Stellar); red STELLAR_ACCOUNT_MERGE, STELLAR_SIGNER_ADDED, STELLAR_MASTER_KEY_DISABLED, STELLAR_FAKE_STABLECOIN; orange STELLAR_TOKEN_APPROVE, STELLAR_HIDDEN_APPROVE, STELLAR_MEMO_REQUIRED; Soroban calls simulated."
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions"New value: +"What the agent is about to sign; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions; stellar = a Stellar transaction envelope in transaction"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature",
      -  "authorization",
      -  "message",
      -  "solana",
      -  "xrpl",
      -  "algorand"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "authorization",
      +  "message",
      +  "solana",
      +  "xrpl",
      +  "algorand",
      +  "stellar"
      +]
  8. Changed1 schema field changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message"New value: +"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161, 4663 (8453 = Base); optional for message"
  9. Changed1 schema field changed
    • changedInput schema / properties / tx / description
      Previous value: -"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet and Batch (every inner transaction is judged)"New value: +"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet, Batch (every inner transaction is judged), vault deposits and withdrawals (VaultDeposit, VaultWithdraw) and loans (LoanSet, LoanPay)"
  10. Changed1 schema field changed
    • changedInput schema / properties / tx / description
      Previous value: -"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate and CredentialAccept"New value: +"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate, CredentialAccept, DelegateSet and Batch (every inner transaction is judged)"
  11. Changed1 schema field changed
    • changedInput schema / properties / tx / description
      Previous value: -"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)"New value: +"xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …), including CredentialCreate and CredentialAccept"
  12. Changed7 schema fields changed
    • addedInput schema / properties / address
      Added value: +{
      +  "description": "authorization: the contract the EIP-7702 authorization delegates the wallet to (0x0…0 clears a delegation). Any delegation hands the contract the whole wallet: orange EIP7702_AUTHORIZATION unless the contract is on GoPlus's trust list; red AUTHORIZATION_TO_NO_CONTRACT, AUTHORIZATION_TO_UNVERIFIED_CONTRACT, AUTHORIZATION_TO_FLAGGED_CONTRACT, SANCTIONED_ADDRESS",
      +  "type": "string"
      +}
    • addedInput schema / properties / authorizationChainId
      Added value: +{
      +  "description": "authorization, optional: the chain id inside the authorization, chainId (default) or 0 = valid on every chain (orange AUTHORIZATION_ALL_CHAINS)",
      +  "type": "integer"
      +}
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message"New value: +"EVM chain id, required for approval, transaction, signature and authorization: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message"
    • changedInput schema / properties / from / description
      Previous value: -"transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)"New value: +"transaction, message or authorization, optional: your wallet address (authorization: its current delegation is shown); the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)"
    • addedInput schema / properties / nonce
      Added value: +{
      +  "description": "authorization, optional: the authorization nonce",
      +  "type": "string"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions"New value: +"What the agent is about to sign; authorization = an EIP-7702 authorization delegating the wallet to the contract in address; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature",
      -  "message",
      -  "solana",
      -  "xrpl",
      -  "algorand"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "authorization",
      +  "message",
      +  "solana",
      +  "xrpl",
      +  "algorand"
      +]
  13. Changed1 schema field changed
    • changedOutput schema / properties / reasons / anyOf
      Previous value: -[
      -  {
      -    "description": "Why the verdict is what it is",
      -    "items": {
      -      "additionalProperties": true,
      -      "properties": {
      -        "code": {
      -          "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT",
      -          "type": "string"
      -        },
      -        "severity": {
      -          "description": "info, warn or critical",
      -          "type": "string"
      -        },
      -        "subject": {
      -          "description": "The address or item the reason is about",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "code"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "description": "Why the verdict is what it is",
      +    "items": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "code": {
      +          "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT",
      +          "type": "string"
      +        },
      +        "severity": {
      +          "description": "info, warn or critical",
      +          "type": "string"
      +        },
      +        "subject": {
      +          "description": "The address or item the reason is about (null or absent when it is about the whole request)",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "code"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  14. Changed5 schema fields changed
    • changedInput schema / properties / transaction / description
      Previous value: -"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)"New value: +"solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated"
    • changedInput schema / properties / transaction / maxLength
      Previous value: -2400New value: +12000
    • addedInput schema / properties / transactions
      Added value: +{
      +  "description": "algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked",
      +  "items": {
      +    "maxLength": 12000,
      +    "type": "string"
      +  },
      +  "maxItems": 16,
      +  "type": "array"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature",
      -  "message",
      -  "solana",
      -  "xrpl"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "message",
      +  "solana",
      +  "xrpl",
      +  "algorand"
      +]
  15. Changed7 schema fields changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message"
    • changedInput schema / properties / from / description
      Previous value: -"transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)"New value: +"transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike)"
    • addedInput schema / properties / message
      Added value: +{
      +  "description": "message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange",
      +  "maxLength": 16384,
      +  "type": "string"
      +}
    • addedInput schema / properties / method
      Added value: +{
      +  "description": "message: how it is signed (default personal_sign); eth_sign is always red",
      +  "enum": [
      +    "personal_sign",
      +    "eth_sign"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / transaction
      Added value: +{
      +  "description": "solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS)",
      +  "maxLength": 2400,
      +  "type": "string"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx"New value: +"What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature",
      -  "xrpl"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "message",
      +  "solana",
      +  "xrpl"
      +]
  16. Changed2 schema fields changed
    • addedInput schema / properties / from
      Added value: +{
      +  "description": "transaction, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS)",
      +  "type": "string"
      +}
    • addedInput schema / properties / x402
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain",
      +  "type": "object"
      +}
  17. Changed1 schema field changed
    • addedInput schema / properties / intent
      Added value: +{
      +  "description": "optional: what you are trying to do, in one sentence (e.g. \"swap 10 USDC for ETH on Uniswap\"); orange INTENT_MISMATCH when signing would do more or something else",
      +  "maxLength": 500,
      +  "type": "string"
      +}
  18. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "accepts": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": {},
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Only on an unpaid call: the x402 payment options"
      +    },
      +    "reasons": {
      +      "anyOf": [
      +        {
      +          "description": "Why the verdict is what it is",
      +          "items": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "code": {
      +                "description": "Reason code, e.g. SPENDER_FLAGGED, UNLIMITED_ALLOWANCE, TOKEN_HONEYPOT",
      +                "type": "string"
      +              },
      +              "severity": {
      +                "description": "info, warn or critical",
      +                "type": "string"
      +              },
      +              "subject": {
      +                "description": "The address or item the reason is about",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "code"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Why the verdict is what it is"
      +    },
      +    "receipt": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "description": "Signed receipt (EIP-191) binding the verdict to your arguments",
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Signed receipt (EIP-191) binding the verdict to your arguments"
      +    },
      +    "verdict": {
      +      "anyOf": [
      +        {
      +          "description": "green: go ahead; orange: ask the user; red: do not sign or buy",
      +          "enum": [
      +            "green",
      +            "orange",
      +            "red"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement)"
      +    },
      +    "version": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  19. Changed6 schema fields changed
    • changedInput schema / properties / chainId / description
      Previous value: -"EVM chain id: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"New value: +"EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base)"
    • addedInput schema / properties / network
      Added value: +{
      +  "description": "xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet)",
      +  "enum": [
      +    "xrpl:0",
      +    "xrpl:1"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / tx
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)",
      +  "type": "object"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"What the agent is about to sign"New value: +"What the agent is about to sign; xrpl = an unsigned XRP Ledger transaction in tx"
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "approval",
      -  "transaction",
      -  "signature"
      -]New value: +[
      +  "approval",
      +  "transaction",
      +  "signature",
      +  "xrpl"
      +]
    • changedInput schema / required
      Previous value: -[
      -  "type",
      -  "chainId"
      -]New value: +[
      +  "type"
      +]
  20. Changed1 schema field changed
    • addedInput schema / properties / origin
      Added value: +{
      +  "description": "optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange",
      +  "type": "string"
      +}
  21. First observed

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behavior: the $0.01 x402 payment, supported payment tokens and chains, the green/orange/red verdict model, reason codes, fix retry semantics, checked/not_checked limitations, and a signed receipt bound to the arguments. It also explains what each chain-specific check covers, including simulation and sanction screening. This is unusually rich behavioral context and does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the cost and the core instruction to call it before signing, then proceeds through supported inputs, verdicts, and per-chain checks. It is dense and long, and some chain-specific reason-code detail duplicates the schema, but the length is defensible for a tool covering many chains and signature types. Structure could be improved with clearer separation, but there is little outright filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 23 parameters, nested objects, an output schema, and broad multi-chain coverage, the description supplies the essential context an agent needs: payment model, when to call, what to send, how to interpret verdicts, what to do on orange/red, what checked/not_checked means, and the receipt guarantee. Nothing critical for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself gives extensive per-parameter detail, including enum meanings and chain-specific fields. The description provides a high-level narrative of what to send and what types exist, but it largely repeats information already present in the schema rather than adding new syntax, constraints, or parameter-specific guidance. Baseline 3 is appropriate when the schema already carries the detailed semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and action: a pre-sign risk check that returns green/orange/red verdicts with reason codes for transactions, approvals, signatures, and authorizations. It is highly specific about supported chains and what is analyzed, so an agent can tell what the tool does. However, it never mentions sibling tools such as presign_quick_check or presign_check_explain, so it does not explicitly distinguish this comprehensive check from the quicker or explanatory variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: 'call this before you sign' and then act only on green, ask the user on orange, and never sign on red. That is strong when-to-use guidance for the signing workflow. It does not mention alternatives or exclusions, such as when presign_quick_check would be more appropriate, so it falls short of the explicit alternative routing that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.