Skip to main content
Glama

Pre-sign risk check ($0.01 via x402)

presign_check
Read-only

Paid ($0.01 USDC via x402 on Base or Solana): call this before you sign. Send the transaction, token approval or EIP-712 signature (Permit, Permit2, EIP-3009 x402 payment, Seaport) 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, and the token itself (honeypot, fake look-alike, high tax). 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. Only proceed on green; on orange ask your user; never sign on red. 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

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)
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

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"
      +    },
      +    "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.