Skip to main content
Glama

Pre-sign risk check with explanation ($0.03 via x402)

presign_check_explain
Read-only

Paid ($0.03 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): the same verdict and reason codes as presign_check, plus a 3 to 5 sentence plain-language explanation a person can read before approving (lang en or nl). Same as POST /v1/check/explain. 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)
langNoLanguage of the explanation (default en)
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
explanationNoPlain-language explanation for a person

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"
      +    },
      +    "explanation": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "lang": {
      +              "type": "string"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "lang",
      +            "text"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Plain-language explanation for a person"
      +    },
      +    "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

A3.6/5.0
Behavior4/5

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

Annotations only say readOnlyHint and openWorldHint; the description adds genuinely useful behavior beyond that: it is a paid call ($0.03), lists accepted payment rails and currencies, notes the response carries an EIP-191 signed receipt bound to the arguments, and offers en/nl output. It doesn't contradict readOnlyHint since the tool only evaluates, but it could have said more about latency or what happens on failed payment.

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

Conciseness3/5

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

The single dense sentence front-loads an exhaustive list of nine chains and three stablecoins, which is payment detail rather than the reason an agent would pick this tool, pushing the actual purpose past the colon. It is not bloated in length but the ordering is backwards for tool selection.

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

Completeness4/5

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

For a 24-parameter, multi-chain signing-risk tool with an output schema and full schema coverage, the description covers the essentials an agent needs: it is paid, what it returns versus presign_check, language options, and that a verifiable receipt is attached. Given the output schema exists, the absence of return-value detail is acceptable.

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?

With 24 parameters at 100% schema description coverage, the schema already carries the burden, so 3 is the baseline. The description adds only 'lang en or nl' (already in the enum) and otherwise restates what the schema documents in far greater detail.

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 names the concrete output ('the same verdict and reason codes as presign_check, plus a 3 to 5 sentence plain-language explanation') and explicitly contrasts with the sibling presign_check, so an agent can tell the two apart. The core purpose statement, however, is buried after a long payment-rails clause, and it never distinguishes itself from presign_quick_check.

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

Usage Guidelines3/5

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

Usage is only implied: the '3 to 5 sentence plain-language explanation a person can read before approving' signals the case where a human needs to review, but there is no explicit 'use this instead of presign_check when X' statement and no mention of when the cheaper/quick siblings should be preferred.

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.