Skip to main content
Glama

Wallet approval audit ($0.02 via x402)

wallet_approvals
Read-only

Paid ($0.02 USDC via x402 on Base or Solana): audit the open token approvals of a wallet on an EVM chain (base, ethereum, arbitrum, optimism, polygon, bsc) or on Solana, for example your agent's own wallet as a periodic check. Get back green/orange/red, a grade, a one-line summary and every approval with its spender. EVM, every ERC-20 allowance: flagged malicious (red), a plain wallet, on a doubt list, an unverified contract or an unlimited allowance to a spender not on the GoPlus trust list (orange), with a revoke.cash link. Solana, every SPL token delegation (Approve): a delegate on the OFAC SDN list (red), a delegate that is a plain wallet or an unlimited delegation (orange), with the token account to revoke on; Token-2022 tokens with a permanent delegate are listed too. NFT approvals are not covered. Same as GET /v1/approvals. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
chainYesChain to audit: an EVM chain (ERC-20 allowances) or solana (SPL token delegations)
addressYesWallet address (0x... on EVM, base58 on Solana)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
gradeNoSAFE, CAUTION, RISKY or AVOID
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
approvalsNoEvery open ERC-20 allowance (EVM) or SPL token delegation (Solana) with its spender
one_linerNoOne-line summary
revokeUrlNorevoke.cash link for this wallet (EVM; null on Solana)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / address / description
      Previous value: -"Wallet address (0x...)"New value: +"Wallet address (0x... on EVM, base58 on Solana)"
    • changedInput schema / properties / chain / description
      Previous value: -"EVM chain to audit"New value: +"Chain to audit: an EVM chain (ERC-20 allowances) or solana (SPL token delegations)"
    • changedInput schema / properties / chain / enum
      Previous value: -[
      -  "base",
      -  "ethereum",
      -  "arbitrum",
      -  "optimism",
      -  "polygon",
      -  "bsc"
      -]New value: +[
      +  "base",
      +  "ethereum",
      +  "arbitrum",
      +  "optimism",
      +  "polygon",
      +  "bsc",
      +  "solana"
      +]
    • changedOutput schema / properties / approvals / description
      Previous value: -"Every open ERC-20 allowance with its spender"New value: +"Every open ERC-20 allowance (EVM) or SPL token delegation (Solana) with its spender"
    • changedOutput schema / properties / revokeUrl / description
      Previous value: -"revoke.cash link for this wallet"New value: +"revoke.cash link for this wallet (EVM; null on Solana)"
  2. 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"
      +  }
      +]
  3. 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"
      +    },
      +    "approvals": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": {},
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Every open ERC-20 allowance with its spender"
      +    },
      +    "grade": {
      +      "description": "SAFE, CAUTION, RISKY or AVOID",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "one_liner": {
      +      "description": "One-line summary",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "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"
      +    },
      +    "revokeUrl": {
      +      "description": "revoke.cash link for this wallet",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "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"
      +}
  4. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.