Skip to main content
Glama

Stablecoin Scanner

get_address_approvals

Read-onlyIdempotent

Open ERC-20 and Permit2 allowances one address has granted on one chain, one row per spender and token with the raw value, unlimited/oversized/old flags, spender_class and a band (critical|high|low|expired|none): unlimited to a flagged or unknown spender is the main drain vector, a known service spender (DEX router, Permit2) is normal, an expired Permit2 sub-allowance reads 'expired'. Use it when the question is what a wallet has approved and who could pull its stablecoins. Not for a risk tier — the band is informational and never moves get_address_risk. Not for issuer freezes: get_address_compliance. Not for taint: get_address_exposure. address is the allowance owner (the granter), never the spender. Heavy read: under load it answers busy or timeout — retry with backoff. No auth; 1200 requests/min shared by all tools. A heuristic band over decoded on-chain Approval facts, not an AML or legal determination.

Input Schema

NameRequiredDescriptionDefault
chainNoChain, in any of four spellings: the id (8453 Base — default for 0x addresses; a T… address defaults to Tron and a base58 one to Solana, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused, and so is a network this scanner knows but does not index — by name, never with an empty clean verdict. The answer is about ONE chain: chain_id says which, chain_source says how it was chosen (explicit|default|address_form) and chains_with_data lists where else this address has data — read it before concluding, then ask again with chain set
addressYesThe address to check. The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / address / description
      Previous value: -"the address to check (0x hex for EVM, or base58 for Solana)"New value: +"The address to check. The address in its network's own spelling: 0x… for EVM chains, T… for Tron, base58 for Solana. The answer writes it in the spelling of chain_id (address) and echoes what you sent (requested_address); address_respelled true means your spelling belongs to another kind of chain than chain_id (a T… address asked about an EVM chain, a 0x… address asked about Tron) — answered about the same bytes there, not refused, and the same owner only for a plain key account."
    • changedInput schema / properties / chain / description
      Previous value: -"Chain, in any of four spellings: the id (8453 Base — default for 0x addresses; a T… address defaults to Tron and a base58 one to Solana, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Unknown spellings are refused, and so is a network this scanner knows but does not index — by name, never with an empty clean verdict. The answer is about ONE chain: chain_id says which, chain_source says how it was chosen (explicit|default|address_form) and chains_with_data lists where else this address has data — read it before concluding, then ask again with chain set"New value: +"Chain, in any of four spellings: the id (8453 Base — default for 0x addresses; a T… address defaults to Tron and a base58 one to Solana, 1 Ethereum, 10 Optimism, 42161 Arbitrum, 56 BNB Chain, 728126428 Tron, -1 Solana), the same id as a string, the network slug (base, ethereum, optimism, arbitrum, bnb-chain, tron, solana) or its CAIP-2 id (eip155:1, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Surrounding whitespace, a leading + and leading zeros are ignored, a JSON number counts by its value (1.0 is 1), slugs and CAIP-2 ids match in any letter case, and an empty, blank or null chain is no chain at all. Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference) is refused, and so is a network this scanner knows but does not index — by name, never with an empty clean verdict. The answer is about ONE chain: chain_id says which, chain_source says how it was chosen (explicit|default|address_form) and chains_with_data lists where else this address has data — read it before concluding, then ask again with chain set"
    • changedInput schema / properties / chain / type
      Previous value: -[
      -  "integer",
      -  "string"
      -]New value: +[
      +  "integer",
      +  "string",
      +  "null"
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds behavior beyond them: heavy read that can return 'busy or timeout' under load with retry-with-backoff guidance, no auth, and a 1200 req/min shared rate limit. It also discloses the interpretive caveat that the band is a heuristic over decoded Approval facts, not an AML/legal determination.

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?

Front-loaded with the purpose before the exclusions and operational caveats, and every clause carries signal. It is dense and long, but the sentences are load-bearing rather than padding, so it stops short of a 5 only because of sheer density.

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?

With no output schema, the description fully carries the return contract: one row per spender/token, raw value, unlimited/oversized/old flags, spender_class, and the band vocabulary (critical|high|low|expired|none). It also documents failure modes and rate limits, so an agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description meaningfully exceeds it by clarifying that 'address is the allowance owner (the granter), never the spender' — a semantic distinction the schema's generic 'The address to check' does not convey, and one that materially affects correct invocation.

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

Purpose5/5

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

States a specific verb+resource with scope: 'Open ERC-20 and Permit2 allowances one address has granted on one chain, one row per spender and token.' It also enumerates the returned fields (raw value, flags, spender_class, band), so the agent knows exactly what this produces and how it differs from the risk/compliance/exposure siblings.

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

Usage Guidelines5/5

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

Explicit when-to-use ('what a wallet has approved and who could pull its stablecoins') plus three explicit when-NOT clauses routing to named alternatives: not for risk tier (get_address_risk), not for issuer freezes (get_address_compliance), not for taint (get_address_exposure). Nothing is left to inference.

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.

Resources