Skip to main content
Glama

DeFade — Multi-Chain Memecoin Analyzer

Holder distribution

get_holders
Read-onlyIdempotent

Holder distribution for one token, with liquidity pools, burn addresses, lockers, exchange wallets and contracts classified out, so the top-holder list reflects actual holders. Returns the classified top holders with each wallet's supply share in a single response — no pagination. Use it to answer how concentrated the supply is and whether a few wallets could collapse the chart. Not for what large holders are doing right now (get_whales), whether holders are secretly one actor (get_wallet_links or get_lookalike_clusters), or pool depth and locks (get_liquidity). Arguments: address and chain; one API unit on any chain.

Input Schema

NameRequiredDescriptionDefault
chainNoChain the token is deployed on: solana (default), ethereum, base, bsc, robinhood, arc, hyperevm, monad. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan.solana
addressYesThe token's own contract address, exactly as an explorer shows it. Solana: the base58 mint, 32-44 characters (e.g. 6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN). EVM: 0x followed by 40 hex characters, case-insensitive (e.g. 0x6982508145454ce325ddbe47a25d4ec3d2311933). Never a pool, pair, wallet or deployer address — those come back as not found. Set `chain` to match the address: a 0x address alone cannot say which EVM chain it lives on, and a Solana mint sent with an EVM chain is rejected.

Output Schema

NameRequiredDescriptionDefault
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
bundlesNoAlways { detected: false, bundlePct: "0.00", groups: [] }, kept for older readers: similar balances are not a cluster. Launch bundles are get_launch_bundles.
vestingNoSolana: vesting a launch program holds (Jupiter Lock, LaunchLab, Meteora DBC): lockedPct, claimablePct, reclaimablePct, unlocking30dPct, nextUnlock, fullyUnlockedAt, recipients, schedules, summary. Null when none. EVM (a Virtuals token on Base or Robinhood): its TokenTable vesting read on chain: available, protocol, unlockers, lockedPct, unlockedPct, claimedPct, claimablePct, unlock30dPct, unlock90dPct, nextUnlock, lockedUntil, claimers, revocable, line; { available: false, reason } while the read is pending, incomplete or failed, or the token has no unlocker; absent on other tokens.
leftoverNoSolana: a Meteora DBC fixed supply leftover: pct, receiver (the config's leftover receiver: the burn address 1nc1nerator11111111111111111111111111111111 when it can only be paid there), role, platform, withdrawable (now, at graduation, or null when only the burn address can receive it or it was withdrawn), withdrawn, recipients, summary, and how it scores: counted (in concentration as the receiver's: the creator or one wallet can withdraw it now), overhang (a platform's wallet can withdraw it now, or withdrew it and still holds it: its own line, not counted) or burned. Null when none.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
topHoldersNoTop 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel. A launch vault or escrow is split into parts (partOf); a part one wallet can take now has heldBy, and vesting, leftover, launchLeftover and supplyDetail say what it is.
mayhemAgentNoSolana: what pump.fun's Mayhem agent wallet holds of the token: address, pct (of supply), amount. On a coin launched in Mayhem mode (get_token_scan token.timeline.mayhem) the create minted it 1B beside the curve's 1B; it can sell into the curve (the pool once graduated) until timeline.mayhem.endsAt, 24 hours from launch, and what it holds then is burned. Out of concentration like a pool; the rug score charges +4 while it can trade and holds 1% or more. On any other coin it is only what the wallet was sent, such as an airdrop, and nothing scores it. Null when it holds none.
lockedSupplyNopct plus a lockers array naming each escrow; a vesting lock counts what is not claimable yet and adds unlocksTo, nextUnlock, fullyUnlockedAt.
totalHoldersNoHow many of the largest accounts were read, at most 20. Not the holder count: that is totalHolderCount.
concentrationNotop5, top10, top20 as percent of supply, counting real wallets only, plus the parts one wallet can take now (heldBy).
deferredUnlockNoSupply that unlocks back to the deployer later: pct, unlockDate, cancelablePct. Null when none.
protocolHoldingsNoWhat was excluded: count and totalPct.
totalHolderCountNoSolana: every holder of the token, counted. 10,000 with holderCountCapped true when there are more. Null when the count was not in yet; ask again a few seconds later.
holderCountCappedNoTrue when the count stopped at 10,000: the token has at least that many holders.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / vesting / description
      Previous value: -"Solana: vesting a launch program holds (Jupiter Lock, LaunchLab, Meteora DBC): lockedPct, claimablePct, reclaimablePct, unlocking30dPct, nextUnlock, fullyUnlockedAt, recipients, schedules, summary. Null when none."New value: +"Solana: vesting a launch program holds (Jupiter Lock, LaunchLab, Meteora DBC): lockedPct, claimablePct, reclaimablePct, unlocking30dPct, nextUnlock, fullyUnlockedAt, recipients, schedules, summary. Null when none. EVM (a Virtuals token on Base or Robinhood): its TokenTable vesting read on chain: available, protocol, unlockers, lockedPct, unlockedPct, claimedPct, claimablePct, unlock30dPct, unlock90dPct, nextUnlock, lockedUntil, claimers, revocable, line; { available: false, reason } while the read is pending, incomplete or failed, or the token has no unlocker; absent on other tokens."
  2. Changed6 schema fields changed
    • changedOutput schema / properties / concentration / description
      Previous value: -"top5, top10, top20 as percent of supply, counting real wallets only."New value: +"top5, top10, top20 as percent of supply, counting real wallets only, plus the parts one wallet can take now (heldBy)."
    • addedOutput schema / properties / leftover
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Solana: a Meteora DBC fixed supply leftover: pct, receiver (the config's leftover receiver: the burn address 1nc1nerator11111111111111111111111111111111 when it can only be paid there), role, platform, withdrawable (now, at graduation, or null when only the burn address can receive it or it was withdrawn), withdrawn, recipients, summary, and how it scores: counted (in concentration as the receiver's: the creator or one wallet can withdraw it now), overhang (a platform's wallet can withdraw it now, or withdrew it and still holds it: its own line, not counted) or burned. Null when none.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / lockedSupply / description
      Previous value: -"pct plus a lockers array naming each escrow."New value: +"pct plus a lockers array naming each escrow; a vesting lock counts what is not claimable yet and adds unlocksTo, nextUnlock, fullyUnlockedAt."
    • addedOutput schema / properties / mayhemAgent
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Solana: what pump.fun's Mayhem agent wallet holds of the token: address, pct (of supply), amount. On a coin launched in Mayhem mode (get_token_scan token.timeline.mayhem) the create minted it 1B beside the curve's 1B; it can sell into the curve (the pool once graduated) until timeline.mayhem.endsAt, 24 hours from launch, and what it holds then is burned. Out of concentration like a pool; the rug score charges +4 while it can trade and holds 1% or more. On any other coin it is only what the wallet was sent, such as an airdrop, and nothing scores it. Null when it holds none.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / topHolders / description
      Previous value: -"Top 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel."New value: +"Top 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel. A launch vault or escrow is split into parts (partOf); a part one wallet can take now has heldBy, and vesting, leftover, launchLeftover and supplyDetail say what it is."
    • addedOutput schema / properties / vesting
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Solana: vesting a launch program holds (Jupiter Lock, LaunchLab, Meteora DBC): lockedPct, claimablePct, reclaimablePct, unlocking30dPct, nextUnlock, fullyUnlockedAt, recipients, schedules, summary. Null when none.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / bundles / description
      Previous value: -"Shallow bundle detection over the real wallets: detected, bundlePct, groups."New value: +"Always { detected: false, bundlePct: \"0.00\", groups: [] }, kept for older readers: similar balances are not a cluster. Launch bundles are get_launch_bundles."
  4. Changed2 schema fields changed
    • changedInput schema / properties / chain / description
      Previous value: -"Chain the token is deployed on: solana (default), ethereum, base, bsc, robinhood, arc, hyperevm. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan."New value: +"Chain the token is deployed on: solana (default), ethereum, base, bsc, robinhood, arc, hyperevm, monad. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan."
    • changedInput schema / properties / chain / enum
      Previous value: -[
      -  "solana",
      -  "ethereum",
      -  "base",
      -  "bsc",
      -  "robinhood",
      -  "arc",
      -  "hyperevm"
      -]New value: +[
      +  "solana",
      +  "ethereum",
      +  "base",
      +  "bsc",
      +  "robinhood",
      +  "arc",
      +  "hyperevm",
      +  "monad"
      +]
  5. Changed3 schema fields changed
    • addedOutput schema / properties / holderCountCapped
      Added value: +{
      +  "description": "True when the count stopped at 10,000: the token has at least that many holders.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / totalHolderCount
      Added value: +{
      +  "description": "Solana: every holder of the token, counted. 10,000 with holderCountCapped true when there are more. Null when the count was not in yet; ask again a few seconds later.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / totalHolders / description
      Previous value: -"Holder count, estimated from the top accounts."New value: +"How many of the largest accounts were read, at most 20. Not the holder count: that is totalHolderCount."
  6. Changed2 schema fields changed
    • changedInput schema / properties / chain / description
      Previous value: -"Chain the token is deployed on: solana (default), ethereum, base, robinhood. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan."New value: +"Chain the token is deployed on: solana (default), ethereum, base, bsc, robinhood, arc, hyperevm. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan."
    • changedInput schema / properties / chain / enum
      Previous value: -[
      -  "solana",
      -  "ethereum",
      -  "base",
      -  "robinhood"
      -]New value: +[
      +  "solana",
      +  "ethereum",
      +  "base",
      +  "bsc",
      +  "robinhood",
      +  "arc",
      +  "hyperevm"
      +]
  7. Changed9 schema fields changed
    • changedOutput schema / properties / bundles / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / concentration / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / deferredUnlock / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / lockedSupply / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / poweredBy / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / protocolHoldings / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / timestamp / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / topHolders / type
      Previous value: -"array"New value: +[
      +  "array",
      +  "null"
      +]
    • changedOutput schema / properties / totalHolders / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
  8. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "bundles": {
      +      "additionalProperties": true,
      +      "description": "Shallow bundle detection over the real wallets: detected, bundlePct, groups.",
      +      "type": "object"
      +    },
      +    "concentration": {
      +      "additionalProperties": true,
      +      "description": "top5, top10, top20 as percent of supply, counting real wallets only.",
      +      "type": "object"
      +    },
      +    "deferredUnlock": {
      +      "additionalProperties": true,
      +      "description": "Supply that unlocks back to the deployer later: pct, unlockDate, cancelablePct. Null when none.",
      +      "type": "object"
      +    },
      +    "lockedSupply": {
      +      "additionalProperties": true,
      +      "description": "pct plus a lockers array naming each escrow.",
      +      "type": "object"
      +    },
      +    "poweredBy": {
      +      "description": "Always \"DeFade.org\".",
      +      "type": "string"
      +    },
      +    "protocolHoldings": {
      +      "additionalProperties": true,
      +      "description": "What was excluded: count and totalPct.",
      +      "type": "object"
      +    },
      +    "timestamp": {
      +      "description": "ISO time the response was assembled.",
      +      "type": "string"
      +    },
      +    "token": {
      +      "description": "The address that was scanned (on get_token_scan, the full token metadata object instead)."
      +    },
      +    "topHolders": {
      +      "description": "Top 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel.",
      +      "type": "array"
      +    },
      +    "totalHolders": {
      +      "description": "Holder count, estimated from the top accounts.",
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  9. Changed2 schema fields changed
    • changedInput schema / properties / address / description
      Previous value: -"Token contract address. A base58 mint for Solana, or 0x-prefixed for EVM chains. Set `chain` to match — a 0x address alone cannot say which EVM chain it lives on."New value: +"The token's own contract address, exactly as an explorer shows it. Solana: the base58 mint, 32-44 characters (e.g. 6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN). EVM: 0x followed by 40 hex characters, case-insensitive (e.g. 0x6982508145454ce325ddbe47a25d4ec3d2311933). Never a pool, pair, wallet or deployer address — those come back as not found. Set `chain` to match the address: a 0x address alone cannot say which EVM chain it lives on, and a Solana mint sent with an EVM chain is rejected."
    • changedInput schema / properties / chain / description
      Previous value: -"Which chain the address lives on. Defaults to solana."New value: +"Chain the token is deployed on: solana (default), ethereum, base, robinhood. Required for any 0x address, because the same contract address can exist on several EVM chains. Omit it for Solana. An unsupported value is rejected before any request is spent; EVM chains need a key on an All-Chains plan."
  10. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower; the description still adds real value by disclosing the classification-and-filtering behavior, that results come back in a single non-paginated response, and the cost ('one API unit on any chain'). It stops short of describing ordering or edge cases (e.g. what a token with very few holders returns), so not a full 5.

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 purpose, then returns, then use case, then exclusions — a sensible order. A bit dense as one long sentence chain, and the trailing 'Arguments: address and chain' is largely redundant with the schema, but nothing is wasted elsewhere.

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?

Output schema exists, annotations cover the safety profile, and the schema documents both parameters exhaustively. The description adds only what structured fields cannot convey: the classification logic, non-paginated single response, and query cost. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100% and the chain enum with its EVM-address caveat is fully documented in the schema itself. The description only restates 'Arguments: address and chain', adding nothing beyond naming them plus the unit cost. Baseline 3 is correct when the schema carries the semantics.

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 ('Holder distribution for one token') and immediately qualifies scope: liquidity pools, burn addresses, lockers, exchange wallets and contracts are classified out. An agent can tell exactly what this returns versus get_whales or get_liquidity without opening a schema.

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?

Gives a positive use case ('answer how concentrated the supply is and whether a few wallets could collapse the chart') and then explicitly excludes three sibling tools by name with the condition that selects each (get_whales, get_wallet_links/get_lookalike_clusters, get_liquidity). Routing is fully determined.

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