Skip to main content
Glama

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

presign_check_explain
Read-only

Paid ($0.03 USDC via x402 on Base or Solana): 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

TableJSON Schema
NameRequiredDescriptionDefault
toNotransaction: the target contract
txNoxrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …)
dataNotransaction: 0x-prefixed calldata
fromNotransaction 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)
langNoLanguage of the explanation (default en)
typeYesWhat 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
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
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
originNooptional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange
chainIdNoEVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (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)
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
transactionsNoalgorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
acceptsNoOnly on an unpaid call: the x402 payment options
reasonsNoWhy the verdict is what it is
receiptNoSigned receipt (EIP-191) binding the verdict to your arguments
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
    • 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"
      +  }
      +]
  2. 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"
      +]
  3. 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"
      +]
  4. 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"
      +}
  5. 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"
      +}
  6. 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"
      +}
  7. 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"
      +]
  8. 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"
      +}
  9. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.