Skip to main content
Glama

DeFade — Multi-Chain Memecoin Analyzer

Server Details

Rug pull risk and on-chain forensics for tokens on Solana, Ethereum, Base and Robinhood.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

15 tools
get_dev_trackerDev wallet trackingA
Read-onlyIdempotent
Inspect

What the token's creator has done with their supply: the share they still hold, what left through sales versus transfers, and where the transfers went. Read the state carefully: still holding is neutral, fully exited on a fresh token is a warning, and transferred out to fresh wallets is the single strongest rug signal DeFade tracks. Not for wallets other than the creator (get_whales, get_wallet_links); the creator's earlier launches are already served by get_token_scan's creator block (tokenCreations, recentTokens). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
statusNoOne-line verdict: STILL HOLDING, PARTIAL EXIT, FULLY EXITED, TRANSFERRED OUT, SOLD & TRANSFERRED, DISTRIBUTED, LOCKED and similar.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
recentSellsNoTransactions behind each bucket, newest first, capped.
statusColorNogreen, yellow, gray or red. A dev selling out is gray: the standard launch pattern, not a rug.
lastActivityNoUnix seconds of the dev's most recent move of this token.
creatorSourceNoHow the dev wallet was identified; creatorInferred is true when it may be a launchpad authority rather than a person.
totalMintedPctNoGenesis allocation as percent of supply; totalBoughtPct, totalSoldPct, totalTransferredPct, totalLockedPct, totalLiquidityPct alongside.
currentHoldingPctNoPercent of supply the dev holds now.
transferRecipientsNoDistinct wallets that received a transfer.
transferRecipientAnalysisNoWhat large recipients did with the tokens: address, amountPct, stillHeldPct, verdict.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing the API-unit cost and explaining how to interpret the output states, including which pattern is the strongest rug signal. This is meaningful behavioral context without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: the first defines the output, the second provides interpretive guidance, the third routes to siblings, and the fourth covers arguments and cost. It is front-loaded with the core purpose and contains no filler or repetition.

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?

The description is complete given the rich schema and annotations: it explains what the tool returns, how to interpret the result, when not to use it, which alternatives exist, and what the API call costs. The presence of an output schema and read-only/idempotent annotations means no critical behavioral or return-format information 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?

The input schema covers both parameters at 100% and includes rich detail such as address formats, chain enum values, defaults, and rejection behavior. The description only briefly mentions 'address and chain; one API unit on any chain,' adding little beyond the schema, so the baseline score of 3 applies.

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?

The description states a specific verb and resource: it reports what a token's creator did with their supply, including share still held, sales versus transfers, and transfer destinations. It also distinguishes itself from sibling tools by explicitly stating it is not for arbitrary wallets and that creator launch history is covered by get_token_scan.

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?

The description gives explicit when-not-to-use guidance: it is not for wallets other than the creator, and get_whales/get_wallet_links are named as the alternatives for those cases. It also routes adjacent needs (earlier launches) to get_token_scan's creator block, leaving no ambiguity about which tool to choose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fee_fingerprintShared fee-setting fingerprintA
Read-onlyIdempotent
Inspect

Wallets whose transactions pin an identical compute-unit price or Jito tip — one operator's bot settings showing up across every wallet it drives. This is the shared-CONFIGURATION member of the "who is really behind this token" family (proven transfers: get_wallet_links; funding origin: get_funding_sources; behavioural twins: get_lookalike_clusters), not a timing link: it never proves bundling, and two wallets can match days apart. Use it to corroborate get_lookalike_clusters, and to catch the operator who sold their launch wallets and re-entered through fresh ones. Solana only. Do not call it for EVM addresses — pass chain solana or omit chain — and do not read a match as proof of coordinated buying; it is corroboration only. Arguments: address only in practice — chain must be solana or omitted, and an EVM chain is rejected with an error before any request is spent. One API unit.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
statsNoWallets seen, how many carried a readable fee setting, how many were linked, how many set none.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
groupsNoOne entry per fee setting shared by two or more wallets, strongest first: wallets, supplyPct bought, confidence.
pendingNoTrue when no bundle scan has run for this token yet: nothing has looked, not nothing was found.
excludedNoFee values suppressed as client defaults, with the wallet count each covered.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
computedAtNoWhen this result was read.

TDQS

A4.1/5.0
Behavior4/5

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

The description adds substantial behavioral context beyond the readOnly/idempotent annotations: matches can occur days apart, it is corroboration only, and an unsupported chain is rejected before an API unit is spent. However, the claim that EVM chains are rejected conflicts with the input schema's EVM support, so the behavioral disclosure is not fully reliable.

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?

The description is dense and front-loaded with the core concept, then adds family context, limitations, and usage guidance. It earns most of its length, but the Solana-only point is repeated in slightly different forms and the parameter note is tangled with the misleading EVM claim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema and strong annotations, the description is otherwise remarkably complete: it covers purpose, use cases, alternatives, caveats, and cost. The unresolved contradiction between the description's 'Solana only / EVM rejected' stance and the schema's explicit EVM support leaves the agent without a trustworthy complete picture.

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

Parameters2/5

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

Schema coverage is 100% and the schema already documents address and chain in detail, so the baseline is 3. The description's 'chain must be solana or omitted' and 'EVM chain is rejected' notes directly contradict the schema's enum of ethereum/base/robinhood and its guidance for 0x addresses. Instead of adding useful parameter semantics, this mixed guidance is likely to mislead an agent.

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?

The description clearly identifies what the tool computes — wallets sharing an identical fee-setting fingerprint — and explicitly positions it as the shared-CONFIGURATION member of a known tool family. It also distinguishes it from timing-link analysis by stating it never proves bundling. This is specific enough to select correctly without opening the 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?

Usage guidance is explicit: use it to corroborate get_lookalike_clusters and to catch operators who re-entered through fresh wallets. It also says when not to use it — not as proof of bundling or coordinated buying — and names sibling alternatives. The exclusion of EVM calls is stated clearly, even if it conflicts with the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funding_sourcesFunding provenanceA
Read-onlyIdempotent
Inspect

Multi-hop tracing of where the money behind this token's key wallets actually came from, walking each funding chain back and tiering the source by whether it is a KYC'd exchange. Use it to test whether several "unrelated" holders share one funding source. It answers provenance only — money in, one dimension: it does not build the wallet-to-wallet transfer graph (get_wallet_links), group look-alike behaviour (get_lookalike_clusters), or match shared bot fee settings (get_fee_fingerprint). Not for the creator's own activity (get_dev_tracker) or launch-window buying (get_launch_bundles, get_launch_snipers). Arguments: address and chain; on an EVM chain this call costs 5 API units instead of 1, because the trace runs against paid indexers.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
riskNoVerdict with label and severity.
tiersNoThe same supply grouped by certainty tier, as { tier, share }.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
originsNoWhere holder supply was funded from, as { name, share }, biggest first.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
computedAtNoWhen this was computed; fromCache says whether it was served from a stored result.
coveragePctNoShare of supply attributed to an origin; dexPct and bridgedPct are real states but not attribution.
walletCountNoWallets resolved, with resolvedCount and unknownCount.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it walks funding chains back, tiers sources, answers 'provenance only — money in, one dimension', and notes the 5 API unit cost on EVM chains. This goes beyond what annotations express without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core function is front-loaded in the first clause, and the lengthy sibling-exclusion list is justified given 14 sibling tools. Every sentence contributes distinct information: function, use case, exclusions, and cost, with no filler.

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 a rich input schema, output schema, and read-only annotations, the only remaining contextual gaps are when-to-use and cost, both of which are addressed. The description fully equips an agent to select the tool correctly and anticipate the EVM charge.

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 description coverage is 100%, so the parameters are already thoroughly documented with address formats, chain enum/default, and rejection conditions. The description only adds 'Arguments: address and chain' and the EVM cost note, which adds marginal value beyond the schema.

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?

The description opens with a specific verb and resource: 'Multi-hop tracing of where the money behind this token's key wallets actually came from', which clearly identifies the operation. It also names the differentiating behavior (tiering sources by KYC'd exchange) and explicitly distinguishes itself from several sibling tools.

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?

It gives a concrete use case ('test whether several "unrelated" holders share one funding source') and states what the tool does not do, naming alternatives: get_wallet_links, get_lookalike_clusters, get_fee_fingerprint, get_dev_tracker, get_launch_bundles, and get_launch_snipers. It also includes a cost caveat for EVM chains, helping agents decide whether to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_holdersHolder distributionA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
bundlesNoShallow bundle detection over the real wallets: detected, bundlePct, groups.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
topHoldersNoTop 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel.
lockedSupplyNopct plus a lockers array naming each escrow.
totalHoldersNoHolder count, estimated from the top accounts.
concentrationNotop5, top10, top20 as percent of supply, counting real wallets only.
deferredUnlockNoSupply that unlocks back to the deployer later: pct, unlockDate, cancelablePct. Null when none.
protocolHoldingsNoWhat was excluded: count and totalPct.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish this is a safe, read-only, idempotent operation. The description goes further by disclosing key behaviors: excluded wallet categories, the fact that each wallet's supply share is included, that the full result comes in a single response without pagination, and that it costs one API unit on any chain. This adds real context beyond the annotations and contains no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact but information-dense. Each sentence earns its place: one for what the tool returns, one for the no-pagination behavior, one for usage guidance with alternatives, and one for argument/cost summary. Nothing is wasted and the most important information is front-loaded.

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?

Combined with rich parameter descriptions and annotations, the description fully equips an agent to call the tool correctly: what is classified out, what the response contains, cost, supported chains, and explicit sibling exclusions. There are no major gaps for a read-only list tool with a schema this detailed.

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 description coverage is 100%, so the input schema already fully documents address format, chain enum, defaults, validation, and cross-chain ambiguity. The description merely names the arguments and adds the cost note; it does not need to compensate for a schema gap. Baseline 3 is appropriate.

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?

The description clearly states the tool's function: it produces a holder distribution for one token, with non-real holders (liquidity pools, burn addresses, lockers, exchange wallets, contracts) classified out. It also distinguishes itself from siblings like get_whales, get_wallet_links, and get_liquidity by explicitly saying what it is not for.

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?

The description tells the agent exactly when to use this tool (to assess supply concentration and whether a few wallets could collapse the chart) and when not to, naming alternatives: get_whales, get_wallet_links, get_lookalike_clusters, and get_liquidity. This is explicit, actionable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_launch_bundlesLaunch-window bundlesA
Read-onlyIdempotent
Inspect

Bundle detection for one token: coordinated buys in the launch window plus delayed sweeps, accounted on peak net exposure rather than raw buy count, so wallets that bought and flipped are not counted as holders. Heavy bundling that is still held is one of the strongest rug predictors. Use it for any "was this launch bundled" question. Not for lone fast buyers with no coordination (get_launch_snipers), clusters that formed after launch (get_lookalike_clusters), or the creator's own selling (get_dev_tracker). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
bundlesNoEach bundle: its wallets, what they spent, what they still hold, how they were funded.
summaryNoTotals across detected bundles, accounted on peak net exposure.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
hiddenBundleCountNoBundles the shallow detector does not see.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses the actual counting methodology ('accounted on peak net exposure rather than raw buy count, so wallets that bought and flipped are not counted as holders'), the interpretive significance (rug predictor), and the cost ('one API unit on any chain'). This materially changes how an agent should interpret the result and is exactly the kind of context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: definition with methodology, why it matters, when to use versus alternatives, and arguments/cost. The core purpose is front-loaded before the differentiation and parameter summary, with zero filler.

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?

Complete for a 2-parameter tool with an output schema and safety annotations: the description covers methodology, usage boundaries, cost, and named fallbacks, while the schema covers parameter formats and validation. Nothing an agent needs to invoke 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 description coverage is 100%, so the schema already fully documents both parameters, including address formats, chain enum values, rejection behavior, and plan requirements. The description only summarizes them as 'address and chain,' which adds no meaning beyond the schema — hence the baseline 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Bundle detection for one token: coordinated buys in the launch window plus delayed sweeps.' It defines the scope precisely (launch window, peak net exposure) and differentiates itself from three named siblings, so an agent can distinguish it without opening any 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 an explicit when-to-use rule ('Use it for any "was this launch bundled" question'), plus three explicit exclusions with the correct sibling names (get_launch_snipers, get_lookalike_clusters, get_dev_tracker). This is the gold standard for usage guidance — no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_launch_snipersFirst-block snipersA
Read-onlyIdempotent
Inspect

Bots that bought in the first block or first seconds of this token's launch, and whether they are connected to the deployer. The window is the first 120 seconds after the first transaction; at most 30 rows are returned and totalEarlyBuyers carries the full count. Migration-crank MEV bots are excluded and named rather than silently dropped. Check reachedGenesis: when false the walk did not reach the true first transaction, the result is partial, and it is cached for only 10 minutes instead of 2 hours. Use it to tell an organic launch from a pre-arranged one. Not for coordinated multi-wallet launch buying (get_launch_bundles) or the deployer's funding of other wallets (get_wallet_links). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
statsNoCohort totals for the window.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
snipersNoWallets that bought inside the launch window, capped at 30 rows.
poweredByNoAlways "DeFade.org".
terminalsNoTrading terminals the launch cohort came through; activeTerminals is who trades it now.
timestampNoISO time the response was assembled.
reachedGenesisNoWhether the walk reached the true first transaction. When false, partial is true and small snipers may be missing.
totalEarlyBuyersNoHow many were found in total; windowSeconds and firstTxTime describe the window.
migrationCrankersExcludedNoMigration-crank MEV bots filtered out as infrastructure, named.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description discloses the 120-second window, the 30-row cap with totalEarlyBuyers carrying the full count, and that migration-crank MEV bots are excluded but named rather than silently dropped. It also flags the partial-result condition via reachedGenesis=false and its cache-freshness consequence (10 minutes vs 2 hours), giving the agent real operational context for interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, each load-bearing: definition, window/limits, exclusion policy, partial-result caveat, use case, and explicit non-use cases. Dense but front-loaded with the core purpose, with behavioral caveats ordered before routing guidance.

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 an output schema present and annotations covering the safety profile, the description still covers limits, exclusions, partial-result detection, cache freshness, cost, and sibling differentiation. No important operational gap remains for an agent selecting or invoking this tool.

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%, with both address and chain fully documented (formats, examples, chain-matching requirement, plan requirement), so the baseline of 3 applies. The description only restates the two argument names and adds a per-call cost note (one API unit), which is operational context rather than new parameter meaning.

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?

The description opens with a concrete statement of what the tool returns — first-block/first-seconds launch buyers and whether they are connected to the deployer — naming the resource and scope precisely. It further distinguishes itself from siblings by naming get_launch_bundles and get_wallet_links as what it is NOT, so an agent can disambiguate without opening schemas.

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?

'Use it to tell an organic launch from a pre-arranged one' states the intended decision explicitly, while 'Not for coordinated multi-wallet launch buying (get_launch_bundles) or the deployer's funding of other wallets (get_wallet_links)' lists the named alternatives and the conditions that rule them out. 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.

get_liquidityLiquidity analysisA
Read-onlyIdempotent
Inspect

Liquidity pool analysis for one token, including burn and lock verification and pool depth. Use it to answer whether liquidity is locked, how deep it is, and whether the position could be pulled. Not for price, market cap or volume (get_token_price) or holder concentration (get_holders). A token with no pool returns empty liquidity data, which is itself a warning on a token that is trading. Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
dexNoWhich DEX holds the deepest pool.
riskNoLiquidity risk label; lpEvidence carries the on-chain evidence behind it.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
lpStatusNoHeadline pool verdict: BURNED, LOCKED, UNLOCKED, NO LP FOUND.
lpBurnPctNoPercent of LP tokens burned; lpLockPct is the percent locked.
poolLocksNoPer-pool lock detail with lpLockable and an lpNote in words.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
totalLiquidityUsdNoCombined USD depth across pools; pools lists them and poolCount counts them.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavior beyond annotations: a token with no pool returns empty liquidity data, which is itself a warning for a trading token, plus the API cost of one unit. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well organized: purpose first, then the exact questions it answers, exclusions with sibling names, edge-case behavior, and a one-line argument summary. Every sentence earns its place with no redundancy.

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?

Given the rich input schema, full annotations, and an existing output schema, the description covers everything an agent needs to invoke the tool correctly: purpose, use cases, exclusions, no-pool behavior, and cost. There is no meaningful gap left for the agent to guess.

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?

Input schema coverage is 100%, with both address and chain having detailed descriptions including formats, examples, and constraints. The description only restates that the arguments are address and chain, adding the API unit cost but no new parameter-level semantics, so the baseline of 3 is appropriate.

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?

The description states a specific resource and scope: liquidity pool analysis for a single token, including burn and lock verification and pool depth. It explicitly distinguishes itself from get_token_price and get_holders, so an agent can tell it apart from nearby siblings without opening schemas.

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?

It gives explicit when-to-use guidance: answer whether liquidity is locked, how deep the pool is, and whether the position can be pulled. It also names what it is not for and names the alternative tools, providing clear routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lookalike_clustersBehavioural sybil clustersA
Read-onlyIdempotent
Inspect

Clusters of wallets around one token that behave as a single actor — buys sized and timed alike so demand looks organic — even when no transfer or funding trail connects them. That behavioural inference is what separates it from get_wallet_links, which only reports proven links. Use it when supply looks distributed across many small wallets and the insider graph comes back clean; corroborate with get_fee_fingerprint on Solana. Not for proven transfer links (get_wallet_links), the funding source behind the wallets (get_funding_sources), or launch-window coordination (get_launch_bundles). Arguments: address and chain; on an EVM chain this call costs 5 API units instead of 1, because the trace runs against paid indexers.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
riskNoVerdict for the token with label and severity.
bandsNoWallet clusters banded by how strongly they look like one operator.
statsNoTotals across the bands: wallets clustered and the supply they hold.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
computedAtNoWhen this was computed; fromCache says whether it was served from a stored result.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds value beyond that by explaining the behavioral-inference nature of the result, noting that EVM calls cost 5 API units instead of 1 due to paid indexers, and stating that unsupported values are rejected before any request is spent. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core concept, then differentiates from siblings, gives usage and exclusion guidance, and ends with a cost note. Every sentence earns its place; the length is justified by the amount of actionable routing information.

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?

For a two-parameter tool with a detailed input schema and an output schema present, the description fully covers what the tool does, when to use it, when not to use it, and one critical cost caveat. Nothing an agent needs to correctly select and invoke this tool 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?

The input schema already documents both parameters thoroughly, including formats, examples, validation rules, and chain requirements. The description only mentions 'address and chain' in passing and adds cost context per chain, but does not materially improve on the schema's already excellent parameter explanations. Baseline 3 is appropriate given 100% schema coverage.

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?

The description clearly defines the tool's function: finding wallet clusters that behaviorally act as a single actor around one token, even without transfer/funding links. It explicitly distinguishes itself from get_wallet_links, which reports only proven links, so an agent can immediately tell what makes this tool unique.

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 explicit conditions for use: when supply looks distributed across many small wallets and the insider graph comes back clean. It also names alternatives for excluded use cases — get_wallet_links, get_funding_sources, get_launch_bundles — and suggests corroboration with get_fee_fingerprint on Solana.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rug_scoreRug pull probabilityA
Read-onlyIdempotent
Inspect

Rug pull probability for one token: a 0-100 score where HIGHER MEANS MORE DANGEROUS, a verdict label, and the individual signals that drove it. This is the opposite direction from get_token_scan's safety score. Call this tool ONLY when the user explicitly asks for a rug probability or rug likelihood; every general "is this safe" or "should I buy" question goes to get_token_scan instead. Not for the evidence behind the number — it names the signals but does not list the wallets; for who is behind the risk call get_wallet_links, get_dev_tracker or get_launch_bundles. Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
fusionNoCross-signal wallet correlation; wallets list is empty on non-Pro keys.
signalsNoEach contributing signal: what fired, its weight and its explanation.
verdictNoPROBABLY SAFE (<25), SOME RISK (25+), ELEVATED RISK (45+), HIGH RISK (60+), EXTREME RISK (75+), or RUGGED.
coverageNo"full" when the Pro signal set contributed, "free" when only the free signals did — a "free" score has seen less evidence.
rugScoreNoRug probability 0 (safe) to 100 (critical). HIGHER IS MORE DANGEROUS.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
bundleSubScoreNoThe bundle component of the score.
proChecksLockedNoHow many Pro-only checks were withheld.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds value beyond them: the danger-score direction is inverted relative to get_token_scan, it names signals but does not list wallets, and it costs one API unit on any chain. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense, front-loaded sentences: purpose, direction, when-to-use, when-not-to-use, exclusions, and cost. Every sentence carries actionable routing information and there is no filler.

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 a rich input schema, output schema, and safety annotations, the description covers all that remains: when to call, when to avoid, what it does not provide, and cost. An agent has everything needed to select and invoke correctly.

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 description coverage is 100%, so the schema fully documents address format, chain enum, defaults, and rejection behavior. The description merely repeats 'address and chain' and adds the API unit cost, which is marginal beyond the schema.

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, and output: rug pull probability with a 0-100 danger score, verdict label, and driving signals. It explicitly contrasts with get_token_scan's safety score, so an agent can immediately distinguish this tool from its closest sibling.

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 an explicit conditional: call ONLY when the user asks for rug probability/likelihood, and routes every general safety or buy question to get_token_scan instead. It also names alternative tools for wallet-level evidence, leaving no ambiguity about scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_smart_moneySmart moneyA
Read-onlyIdempotent
Inspect

Wallets with a track record of profitable entries that are holding or trading this token, classified from their historical trade win rates — a "verified" smart-money tag requires a known win rate of 50% or better. Computed live from the current holder set and cached for about five minutes. Use it for the bullish side of a scan: who informed is in, and when they got in. Not for risk assessment — informed wallets present never offsets a rug signal, and a clean result is not a buy signal — and not for wallet size (get_whales). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
summaryNoanalyzed, smartMoneyCount, verifiedCount, experiencedCount, activeTraderCount, retailCount, smartMoneyPct, avgWinRate, signal.
walletsNoProfiled holders, each classified smart money, verified, experienced, active trader or retail, with win rate.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
activeBuysNoOther tokens the smart wallets are currently buying.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses the live computed and cached behavior ('Computed live from the current holder set and cached for about five minutes'), the classification threshold for 'verified' smart money (50% win rate), and an important interpretive caveat ('a clean result is not a buy signal'). This adds meaningful behavioral context not available from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: definition, behavioral caveats, usage guidance, and argument summary are all present. It is well-structured and front-loaded with the core purpose before moving to exclusions and cost. No filler or redundancy detected.

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 an output schema present, the description need not enumerate return fields. It covers what the tool does, when to use it, when not to, how results are computed, caching behavior, and required arguments. This is complete enough for an agent to invoke the tool correctly and interpret its role.

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 description coverage is 100%, so the input schema already fully documents the address and chain parameters with format examples and validation rules. The description only restates 'Arguments: address and chain' and adds API cost information, but no additional parameter semantics. Baseline of 3 is appropriate given complete schema coverage.

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?

The description clearly states that the tool identifies wallets with a track record of profitable entries, holding or trading a given token, based on historical win rates. It explicitly distinguishes itself from get_whales ('not for wallet size') and indirectly from risk-assessment tools ('not for risk assessment'). This is a specific verb-resource pairing with clear sibling differentiation.

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?

The description explicitly states when to use the tool: 'Use it for the bullish side of a scan: who informed is in, and when they got in.' It also provides direct when-not guidance: 'not for risk assessment' and 'not for wallet size (get_whales),' naming an alternative tool. This gives an agent clear decision criteria for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_priceToken priceA
Read-onlyIdempotent
Inspect

Current market data for one token — price, market cap, liquidity, volume and recent OHLCV candles — aggregated from DEX market sources and cached for about a minute, so figures are near-live but not a tick-by-tick trading feed. A token with no liquidity pool returns empty market data rather than an error. Use it for the market context around a risk verdict. Not for risk of any kind — market data carries no forensic signal — and not for long price history beyond the recent candles. Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
highNoWindow high as priceUsd plus ts; low is the same shape.
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
candlesNoOHLCV candles, oldest first: ts (ms), open, high, low, close, volume and *Usd values.
currentNoLatest close as current.priceUsd.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
priceChangeNoPercent change from the first candle to the last. Null when it cannot be computed.
totalCandlesNoNumber of candles; a token with no chart data answers 0.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context beyond those: caching for about a minute, near-live but not tick-by-tick, empty market data returned for a token with no liquidity pool rather than an error, and the one-API-unit cost per call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then gives edge-case behavior, usage guidance, exclusions, and cost in a tight sequence. Every sentence adds new information (or the cost detail absent from the schema), with no fluff or repetition.

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?

Given the 2-parameter schema, rich annotations, and an output schema, the description covers all needed call-time context: what data is returned, staleness/caching behavior, empty-result edge case, intended usage, exclusions, and per-call cost. Nothing an agent needs to invoke 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%, with the schema already providing detailed meanings for `address` and `chain`. The description only restates 'Arguments: address and chain' and adds the cost detail, which does not deepen parameter understanding.

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?

The description states a specific resource and scope: current market data for one token — price, market cap, liquidity, volume, and recent OHLCV candles. It explicitly carves out what it is not for ('Not for risk of any kind' and 'not for long price history'), which separates it from the sibling risk and analytics tools.

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?

It gives an explicit positive use case ('Use it for the market context around a risk verdict') and explicit negative use cases ('Not for risk of any kind... not for long price history'). This tells an agent both when to call it and when to look elsewhere, even without naming a specific alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_scanScan a tokenA
Read-onlyIdempotent
Inspect

Run a full DeFade scan on one token contract: token metadata, holder distribution, creator history (wallet age, previous token launches) and the headline risk verdict. Start here for any "is this token safe", "is this a rug pull" or "should I buy this" question. Returns risk.score as a SAFETY score where 100 is clean and low numbers are dangerous, with a rating label. For the inverse — a rug pull probability where high means dangerous — call get_rug_score. Not for a single module in isolation (call that module's tool directly), price or market-cap questions (get_token_price), or checking the caller's own quota (get_usage). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
riskNoThe SAFETY score: score (0-100, 100 is clean), rating, color, flags. Opposite direction from get_rug_score.
tokenNoToken metadata: name, symbol, mint, supply, decimals, creator, mintAuthority, freezeAuthority, marketCap, liquidity.
creatorNoDeployer wallet: address, walletAgeDays, solBalance, totalTransactions, tokenCreations, recentTokens, riskLevel.
holdersNoSame body as get_holders: totalHolders, topHolders, concentration, protocolHoldings, lockedSupply, deferredUnlock, bundles.
successNoWhether the scan completed.
poweredByNoAlways "DeFade.org".
scanCountNoScans of this token in the last 24h.
timestampNoISO time the response was assembled.
analyzedAtNoISO time of the scan itself.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish read-only, open-world, idempotent, non-destructive behavior. The description adds important operational context beyond that: the risk.score semantics (100 = clean, low = dangerous), the one API unit cost, rejection before spending a request, and the All-Chains plan requirement for EVM chains. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose and then systematically covers use cases, return semantics, alternatives, exclusions, and cost. Every sentence carries distinct information, and there is no filler or redundant restating of the title.

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?

Given the output schema exists and the annotations cover safety semantics, the description provides everything an agent needs to decide when to invoke this tool and how to interpret its headline result. It covers input scope, cost, score direction, naming of sibling alternatives, and explicit non-use cases.

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 description coverage is 100%, so the schema already fully documents both address and chain, including formats, defaults, and the 'never a pool/wallet' rule. The description adds minimal parameter information beyond the schema, only restating that address and chain are the arguments, which matches the baseline of 3.

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?

The description opens with a specific verb and resource: 'Run a full DeFade scan on one token contract' and then enumerates exactly what that scan covers. It clearly differentiates itself from siblings like get_rug_score, get_token_price, and get_usage by saying what this tool is and what each alternative is for.

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?

The description explicitly says 'Start here' for safety-related questions and names the inverse tool get_rug_score for the opposite framing. It also lists concrete exclusions: single modules, price/market-cap questions, and quota checks, telling the agent exactly when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageAPI usageA
Read-onlyIdempotent
Inspect

Report the calling API key's plan, rate limits and how much of its monthly allowance is left. Takes no arguments. Use it when a call fails on quota, or when the user asks what their DeFade plan includes. Not for anything about a token — every other tool takes an address; this one reports on the key itself.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tierNoThe tier this key is on. web_mcp is the connector key included with a DeFade Pro web subscription; its allowance is the plan's monthly scans, reported in plan/limits.perMonth.
unitsNoHow metering works: one request is one unit except the heaviest EVM modules, listed in heavyOnEvm with heavyCost.
usageNotoday, total, thisPeriod, remainingThisPeriod, periodResetsAt.
limitsNoperMinute, perDay, perMonth; perMonth is null on grandfathered keys.
creditsNoOverage: balance, overageEnabled, costPerRequest.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already mark it read-only, idempotent, and non-destructive. The description adds useful context beyond annotations: the operation is scoped to the caller's key, takes no arguments, and reports quota/allowance state. It does not enumerate possible response fields, but the presence of an output schema lowers that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the first states the core purpose, the second gives practical triggers, the third excludes token-related uses. It is front-loaded with the most important information and contains no filler.

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?

For a zero-argument, read-only reporting tool with a rich output schema and annotations, the description covers purpose, usage triggers, scope, and exclusions. There are no meaningful gaps that would prevent an agent from selecting and invoking it correctly.

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?

With zero parameters and 100% schema description coverage, the schema leaves nothing undocumented. The description reinforces 'Takes no arguments,' which is redundant but clear. Baseline for zero-parameter tools is 4, and nothing here reduces that.

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?

The description opens with a specific verb and resource: 'Report the calling API key's plan, rate limits and how much of its monthly allowance is left.' It clearly distinguishes itself from the sibling tools by explicitly stating it reports on the API key itself, not on a token or address. This makes its role unambiguous.

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?

It gives explicit trigger conditions: 'Use it when a call fails on quota, or when the user asks what their DeFade plan includes.' It also provides a clear when-not: 'Not for anything about a token — every other tool takes an address; this one reports on the key itself.' This is strong routing guidance relative to the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalesWhale activityA
Read-onlyIdempotent
Inspect

Wallets holding at least 1% of supply once pools, lockers, treasuries and custodial accounts are removed. Each row carries the balance, share of supply, any attribution label (known KOL, dev-linked stash, exchange), the 24-hour transaction count and recent buys and sells; the summary counts dangerous and active whales and gives a whale-risk verdict. Cached for 15 minutes, so activity figures can lag by that much. A token with nothing above the threshold returns an empty list and largestHumanPct, so the empty state is explainable rather than silent. Use it after get_holders when the question is about who can dump and whether they are already dumping. Not for the full ranked holder list (get_holders), historically profitable wallets (get_smart_money), or the creator's own wallet (get_dev_tracker). Arguments: address and chain; one API unit on any chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChain 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.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

ParametersJSON Schema
NameRequiredDescription
tokenNoThe address that was scanned (on get_token_scan, the full token metadata object instead).
whalesNoEach whale: address, balance, percentage of supply, attribution label (KOL, dev-linked, exchange), txCount24h, recent buys and sells.
summaryNototalWhales, totalWhalePct, dangerWhales, activeWhales, whaleRisk, whaleThreshold, largestHumanPct, protocol and Streamflow-lock totals.
poweredByNoAlways "DeFade.org".
timestampNoISO time the response was assembled.
terminalUsageNoWhich trading terminals the whale cohort trades through (Pro keys).
protocolAccountsNoPools, lockers, treasuries and custodial accounts held out of the whale list, named.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark this as readOnly, idempotent, and non-destructive, lowering the burden on the description. The description adds meaningful behavioral context beyond annotations: a 15-minute cache causing lag, an explainable empty state with largestHumanPct, and a one-API-unit cost. It does not mention any pagination or rate limits, but it is otherwise transparent.

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?

The description is information-dense but well organized: definition, row contents, caching behavior, empty-state behavior, usage guidance, and cost. Every sentence adds value; it is slightly long but justified by the amount of useful context.

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?

The description covers what the rows contain, what the summary verdict provides, caching lag, empty-state behavior, when to use it, and cost. Since an output schema exists, detailed return-value documentation is unnecessary; this description fully equips an agent to decide when to call it and what to expect.

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 description coverage is 100%, so the input schema already fully documents address and chain, including formats, examples, and validation rules. The description only repeats 'Arguments: address and chain' and adds cost context, which is fine but adds no new parameter semantics beyond the schema.

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?

The description defines exactly what the tool does: identifies wallets holding at least 1% of supply after removing pools, lockers, treasuries, and custodial accounts. It also distinguishes itself from siblings by explicitly naming get_holders, get_smart_money, and get_dev_tracker as different tools, so an agent can select it confidently.

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?

The description gives explicit when-to-use guidance: call it after get_holders when the question is about who can dump and whether they are already dumping. It also states what it is not for, naming the alternative tools for those cases, which is ideal routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool update
    • Changedget_usage1 field changed
      • changedOutput schema / properties / tier / description
        Previous value: -"The tier this key is on."New value: +"The tier this key is on. web_mcp is the connector key included with a DeFade Pro web subscription; its allowance is the plan's monthly scans, reported in plan/limits.perMonth."
  2. 1 tool update
    • Changedget_rug_score3 fields changed
      • removedOutput schema / properties / coverage / additionalProperties
        Removed value: -true
      • changedOutput schema / properties / coverage / description
        Previous value: -"Which inputs were available; a score without liquidity or holder data is weaker and says so."New value: +"\"full\" when the Pro signal set contributed, \"free\" when only the free signals did — a \"free\" score has seen less evidence."
      • changedOutput schema / properties / coverage / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  3. 15 tool updates
    • Changedget_dev_tracker11 fields changed
      • changedOutput schema / properties / creatorSource / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / currentHoldingPct / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / lastActivity / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / recentSells / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / status / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / statusColor / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / totalMintedPct / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / transferRecipientAnalysis / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / transferRecipients / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_fee_fingerprint7 fields changed
      • changedOutput schema / properties / computedAt / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / excluded / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / groups / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / pending / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / stats / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_funding_sources8 fields changed
      • changedOutput schema / properties / computedAt / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / coveragePct / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / origins / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / risk / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / tiers / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / walletCount / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_holders9 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"
        +]
    • Changedget_launch_bundles5 fields changed
      • changedOutput schema / properties / bundles / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / hiddenBundleCount / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / summary / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_launch_snipers8 fields changed
      • changedOutput schema / properties / migrationCrankersExcluded / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / reachedGenesis / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / snipers / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / stats / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / terminals / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / totalEarlyBuyers / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_liquidity8 fields changed
      • changedOutput schema / properties / dex / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / lpBurnPct / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / lpStatus / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / poolLocks / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / risk / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / totalLiquidityUsd / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_lookalike_clusters6 fields changed
      • changedOutput schema / properties / bands / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / computedAt / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / risk / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / stats / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_rug_score9 fields changed
      • changedOutput schema / properties / bundleSubScore / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / coverage / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / fusion / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / proChecksLocked / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / rugScore / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / signals / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / verdict / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_smart_money5 fields changed
      • changedOutput schema / properties / activeBuys / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / summary / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / wallets / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
    • Changedget_token_price7 fields changed
      • changedOutput schema / properties / candles / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / current / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / high / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / priceChange / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / totalCandles / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_token_scan9 fields changed
      • changedOutput schema / properties / analyzedAt / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / creator / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / holders / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / risk / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / scanCount / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / success / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / token / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
    • Changedget_usage5 fields changed
      • changedOutput schema / properties / credits / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / limits / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / tier / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / units / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / usage / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
    • Changedget_wallet_links8 fields changed
      • changedOutput schema / properties / connections / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / insiderCount / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / locked / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / nodes / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / totalTransfers / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / walletConnections / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
    • Changedget_whales6 fields changed
      • changedOutput schema / properties / poweredBy / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / protocolAccounts / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
      • changedOutput schema / properties / summary / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / terminalUsage / type
        Previous value: -"object"New value: +[
        +  "object",
        +  "null"
        +]
      • changedOutput schema / properties / timestamp / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / whales / type
        Previous value: -"array"New value: +[
        +  "array",
        +  "null"
        +]
  4. 10 tool updates
    • Removedget_bundles
    • Removedget_funding_origin
    • Addedget_funding_sources
    • Removedget_insider_network
    • Addedget_launch_bundles
    • Addedget_launch_snipers
    • Addedget_lookalike_clusters
    • Removedget_snipers
    • Removedget_sybil_cluster
    • Addedget_wallet_links
  5. 15 tool updates
    • Changedget_bundles1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "bundles": {
        +      "description": "Each bundle: its wallets, what they spent, what they still hold, how they were funded.",
        +      "type": "array"
        +    },
        +    "hiddenBundleCount": {
        +      "description": "Bundles the shallow detector does not see.",
        +      "type": "number"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": true,
        +      "description": "Totals across detected bundles, accounted on peak net exposure.",
        +      "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)."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_dev_tracker1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "creatorSource": {
        +      "description": "How the dev wallet was identified; creatorInferred is true when it may be a launchpad authority rather than a person.",
        +      "type": "string"
        +    },
        +    "currentHoldingPct": {
        +      "description": "Percent of supply the dev holds now.",
        +      "type": "number"
        +    },
        +    "lastActivity": {
        +      "description": "Unix seconds of the dev's most recent move of this token.",
        +      "type": "number"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "recentSells": {
        +      "description": "Transactions behind each bucket, newest first, capped.",
        +      "type": "array"
        +    },
        +    "status": {
        +      "description": "One-line verdict: STILL HOLDING, PARTIAL EXIT, FULLY EXITED, TRANSFERRED OUT, SOLD & TRANSFERRED, DISTRIBUTED, LOCKED and similar.",
        +      "type": "string"
        +    },
        +    "statusColor": {
        +      "description": "green, yellow, gray or red. A dev selling out is gray: the standard launch pattern, not a rug.",
        +      "type": "string"
        +    },
        +    "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)."
        +    },
        +    "totalMintedPct": {
        +      "description": "Genesis allocation as percent of supply; totalBoughtPct, totalSoldPct, totalTransferredPct, totalLockedPct, totalLiquidityPct alongside.",
        +      "type": "number"
        +    },
        +    "transferRecipientAnalysis": {
        +      "description": "What large recipients did with the tokens: address, amountPct, stillHeldPct, verdict.",
        +      "type": "array"
        +    },
        +    "transferRecipients": {
        +      "description": "Distinct wallets that received a transfer.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_fee_fingerprint1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "computedAt": {
        +      "description": "When this result was read.",
        +      "type": "string"
        +    },
        +    "excluded": {
        +      "description": "Fee values suppressed as client defaults, with the wallet count each covered.",
        +      "type": "array"
        +    },
        +    "groups": {
        +      "description": "One entry per fee setting shared by two or more wallets, strongest first: wallets, supplyPct bought, confidence.",
        +      "type": "array"
        +    },
        +    "pending": {
        +      "description": "True when no bundle scan has run for this token yet: nothing has looked, not nothing was found.",
        +      "type": "boolean"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": true,
        +      "description": "Wallets seen, how many carried a readable fee setting, how many were linked, how many set none.",
        +      "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)."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_funding_origin1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "computedAt": {
        +      "description": "When this was computed; fromCache says whether it was served from a stored result.",
        +      "type": "string"
        +    },
        +    "coveragePct": {
        +      "description": "Share of supply attributed to an origin; dexPct and bridgedPct are real states but not attribution.",
        +      "type": "number"
        +    },
        +    "origins": {
        +      "description": "Where holder supply was funded from, as { name, share }, biggest first.",
        +      "type": "array"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "risk": {
        +      "additionalProperties": true,
        +      "description": "Verdict with label and severity.",
        +      "type": "object"
        +    },
        +    "tiers": {
        +      "description": "The same supply grouped by certainty tier, as { tier, share }.",
        +      "type": "array"
        +    },
        +    "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)."
        +    },
        +    "walletCount": {
        +      "description": "Wallets resolved, with resolvedCount and unknownCount.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_holders1 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"
        +}
    • Changedget_insider_network1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "connections": {
        +      "description": "Wallet-to-wallet transfers that tie the cohort together; connectionsTotal is the count before truncation.",
        +      "type": "array"
        +    },
        +    "insiderCount": {
        +      "description": "Wallets in the connected cohort; insiderHoldingPct is the supply they hold.",
        +      "type": "number"
        +    },
        +    "locked": {
        +      "description": "True on non-Pro keys, in which case only reason, upgradeUrl and message are present.",
        +      "type": "boolean"
        +    },
        +    "nodes": {
        +      "description": "Graph nodes; clusters groups them.",
        +      "type": "array"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "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)."
        +    },
        +    "totalTransfers": {
        +      "description": "Transfers behind the graph, moving transferredPct of supply.",
        +      "type": "number"
        +    },
        +    "walletConnections": {
        +      "additionalProperties": true,
        +      "description": "Per-wallet connection counts.",
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_liquidity1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "dex": {
        +      "description": "Which DEX holds the deepest pool.",
        +      "type": "string"
        +    },
        +    "lpBurnPct": {
        +      "description": "Percent of LP tokens burned; lpLockPct is the percent locked.",
        +      "type": "number"
        +    },
        +    "lpStatus": {
        +      "description": "Headline pool verdict: BURNED, LOCKED, UNLOCKED, NO LP FOUND.",
        +      "type": "string"
        +    },
        +    "poolLocks": {
        +      "description": "Per-pool lock detail with lpLockable and an lpNote in words.",
        +      "type": "array"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "risk": {
        +      "description": "Liquidity risk label; lpEvidence carries the on-chain evidence behind it.",
        +      "type": "string"
        +    },
        +    "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)."
        +    },
        +    "totalLiquidityUsd": {
        +      "description": "Combined USD depth across pools; pools lists them and poolCount counts them.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_rug_score1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "bundleSubScore": {
        +      "description": "The bundle component of the score.",
        +      "type": "number"
        +    },
        +    "coverage": {
        +      "additionalProperties": true,
        +      "description": "Which inputs were available; a score without liquidity or holder data is weaker and says so.",
        +      "type": "object"
        +    },
        +    "fusion": {
        +      "additionalProperties": true,
        +      "description": "Cross-signal wallet correlation; wallets list is empty on non-Pro keys.",
        +      "type": "object"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "proChecksLocked": {
        +      "description": "How many Pro-only checks were withheld.",
        +      "type": "number"
        +    },
        +    "rugScore": {
        +      "description": "Rug probability 0 (safe) to 100 (critical). HIGHER IS MORE DANGEROUS.",
        +      "type": "number"
        +    },
        +    "signals": {
        +      "description": "Each contributing signal: what fired, its weight and its explanation.",
        +      "type": "array"
        +    },
        +    "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)."
        +    },
        +    "verdict": {
        +      "description": "PROBABLY SAFE (<25), SOME RISK (25+), ELEVATED RISK (45+), HIGH RISK (60+), EXTREME RISK (75+), or RUGGED.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_smart_money1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "activeBuys": {
        +      "description": "Other tokens the smart wallets are currently buying.",
        +      "type": "array"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": true,
        +      "description": "analyzed, smartMoneyCount, verifiedCount, experiencedCount, activeTraderCount, retailCount, smartMoneyPct, avgWinRate, signal.",
        +      "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)."
        +    },
        +    "wallets": {
        +      "description": "Profiled holders, each classified smart money, verified, experienced, active trader or retail, with win rate.",
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_snipers1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "migrationCrankersExcluded": {
        +      "description": "Migration-crank MEV bots filtered out as infrastructure, named.",
        +      "type": "array"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "reachedGenesis": {
        +      "description": "Whether the walk reached the true first transaction. When false, partial is true and small snipers may be missing.",
        +      "type": "boolean"
        +    },
        +    "snipers": {
        +      "description": "Wallets that bought inside the launch window, capped at 30 rows.",
        +      "type": "array"
        +    },
        +    "stats": {
        +      "additionalProperties": true,
        +      "description": "Cohort totals for the window.",
        +      "type": "object"
        +    },
        +    "terminals": {
        +      "additionalProperties": true,
        +      "description": "Trading terminals the launch cohort came through; activeTerminals is who trades it now.",
        +      "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)."
        +    },
        +    "totalEarlyBuyers": {
        +      "description": "How many were found in total; windowSeconds and firstTxTime describe the window.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_sybil_cluster1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "bands": {
        +      "description": "Wallet clusters banded by how strongly they look like one operator.",
        +      "type": "array"
        +    },
        +    "computedAt": {
        +      "description": "When this was computed; fromCache says whether it was served from a stored result.",
        +      "type": "string"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "risk": {
        +      "additionalProperties": true,
        +      "description": "Verdict for the token with label and severity.",
        +      "type": "object"
        +    },
        +    "stats": {
        +      "additionalProperties": true,
        +      "description": "Totals across the bands: wallets clustered and the supply they hold.",
        +      "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)."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_token_price1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "candles": {
        +      "description": "OHLCV candles, oldest first: ts (ms), open, high, low, close, volume and *Usd values.",
        +      "type": "array"
        +    },
        +    "current": {
        +      "additionalProperties": true,
        +      "description": "Latest close as current.priceUsd.",
        +      "type": "object"
        +    },
        +    "high": {
        +      "additionalProperties": true,
        +      "description": "Window high as priceUsd plus ts; low is the same shape.",
        +      "type": "object"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "priceChange": {
        +      "description": "Percent change from the first candle to the last. Null when it cannot be computed.",
        +      "type": "number"
        +    },
        +    "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)."
        +    },
        +    "totalCandles": {
        +      "description": "Number of candles; a token with no chart data answers 0.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_token_scan1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "analyzedAt": {
        +      "description": "ISO time of the scan itself.",
        +      "type": "string"
        +    },
        +    "creator": {
        +      "additionalProperties": true,
        +      "description": "Deployer wallet: address, walletAgeDays, solBalance, totalTransactions, tokenCreations, recentTokens, riskLevel.",
        +      "type": "object"
        +    },
        +    "holders": {
        +      "additionalProperties": true,
        +      "description": "Same body as get_holders: totalHolders, topHolders, concentration, protocolHoldings, lockedSupply, deferredUnlock, bundles.",
        +      "type": "object"
        +    },
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "risk": {
        +      "additionalProperties": true,
        +      "description": "The SAFETY score: score (0-100, 100 is clean), rating, color, flags. Opposite direction from get_rug_score.",
        +      "type": "object"
        +    },
        +    "scanCount": {
        +      "description": "Scans of this token in the last 24h.",
        +      "type": "number"
        +    },
        +    "success": {
        +      "description": "Whether the scan completed.",
        +      "type": "boolean"
        +    },
        +    "timestamp": {
        +      "description": "ISO time the response was assembled.",
        +      "type": "string"
        +    },
        +    "token": {
        +      "additionalProperties": true,
        +      "description": "Token metadata: name, symbol, mint, supply, decimals, creator, mintAuthority, freezeAuthority, marketCap, liquidity.",
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_usage1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "credits": {
        +      "additionalProperties": true,
        +      "description": "Overage: balance, overageEnabled, costPerRequest.",
        +      "type": "object"
        +    },
        +    "limits": {
        +      "additionalProperties": true,
        +      "description": "perMinute, perDay, perMonth; perMonth is null on grandfathered keys.",
        +      "type": "object"
        +    },
        +    "tier": {
        +      "description": "The tier this key is on.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "additionalProperties": true,
        +      "description": "How metering works: one request is one unit except the heaviest EVM modules, listed in heavyOnEvm with heavyCost.",
        +      "type": "object"
        +    },
        +    "usage": {
        +      "additionalProperties": true,
        +      "description": "today, total, thisPeriod, remainingThisPeriod, periodResetsAt.",
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_whales1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "poweredBy": {
        +      "description": "Always \"DeFade.org\".",
        +      "type": "string"
        +    },
        +    "protocolAccounts": {
        +      "description": "Pools, lockers, treasuries and custodial accounts held out of the whale list, named.",
        +      "type": "array"
        +    },
        +    "summary": {
        +      "additionalProperties": true,
        +      "description": "totalWhales, totalWhalePct, dangerWhales, activeWhales, whaleRisk, whaleThreshold, largestHumanPct, protocol and Streamflow-lock totals.",
        +      "type": "object"
        +    },
        +    "terminalUsage": {
        +      "additionalProperties": true,
        +      "description": "Which trading terminals the whale cohort trades through (Pro keys).",
        +      "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)."
        +    },
        +    "whales": {
        +      "description": "Each whale: address, balance, percentage of supply, attribution label (KOL, dev-linked, exchange), txCount24h, recent buys and sells.",
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  6. 14 tool updates
    • Changedget_bundles2 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."
    • Changedget_dev_tracker2 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."
    • Changedget_fee_fingerprint2 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."
    • Changedget_funding_origin2 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."
    • Changedget_holders2 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."
    • Changedget_insider_network2 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."
    • Changedget_liquidity2 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."
    • Changedget_rug_score2 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."
    • Changedget_smart_money2 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."
    • Changedget_snipers2 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."
    • Changedget_sybil_cluster2 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."
    • Changedget_token_price2 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."
    • Changedget_token_scan2 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."
    • Changedget_whales2 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."
  7. 4 tool updates
    • Removedget_api_usage
    • Addedget_token_scan
    • Addedget_usage
    • Removedscan_token
  8. 2 tool updates
    • Removedcheck_api_usage
    • Addedget_api_usage
  9. 2 tool updates
    • Addedget_bundles
    • Removedget_bundles_pro
  10. 4 tool updates
    • Removedcompare_holder_overlap
    • Removedget_bundles
    • Removedget_socials
    • Removedget_trending
  11. 19 tool updates
    • First observedcheck_api_usage
    • First observedcompare_holder_overlap
    • First observedget_bundles
    • First observedget_bundles_pro
    • First observedget_dev_tracker
    • First observedget_fee_fingerprint
    • First observedget_funding_origin
    • First observedget_holders
    • First observedget_insider_network
    • First observedget_liquidity
    • First observedget_rug_score
    • First observedget_smart_money
    • First observedget_snipers
    • First observedget_socials
    • First observedget_sybil_cluster
    • First observedget_token_price
    • First observedget_trending
    • First observedget_whales
    • First observedscan_token

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Rug pull risk scores and on-chain forensics for memecoins on Solana, Ethereum, Base and Robinhood Chain - launch-bundle detection, funding-origin tracing, deployer history, insider networks and whale flow. 15 read-only tools.
    23
    15
    0
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Solana memecoin rug check and token risk for trading agents in the trenches: pump.fun launches, calibrated rug probability with a published hit rate, sniper, insider and bundle detection, holder clusters, KOL trades, wallet history and a live sellability check for memecoins. Available as a remote MCP endpoint (OAuth or API key) and as an npm stdio package.
    26
    161
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    On-chain Solana token safety for trading agents — traces coordinated wallet funding, same-block Jito bundles, serial-rug deployers and live coordinated dumps into one Exit-Liquidity Risk verdict before a swap. Free tier, then $0.02 USDC/query via x402.
    1
    43
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.6/5.0
Disambiguation5/5

Every tool targets a distinct forensic question — creator behavior, launch coordination, lone snipers, proven wallet links, behavioral similarity, config matching — and each description explicitly names which sibling tools it is NOT for. Even the near-inverse pair get_rug_score (danger probability) and get_token_scan (safety score) is handled with explicit call-routing rules. No two tools have unclear boundaries.

Naming Consistency5/5

All 15 tools follow the identical get_<noun> pattern with snake_case throughout: get_holders, get_whales, get_token_scan, get_usage. The verb is uniform and the noun precisely names the resource or analysis domain, making the surface trivially predictable.

Tool Count5/5

15 tools sits at the upper edge of the well-scoped range, and each tool earns its place as a distinct analysis module for the broad multi-chain memecoin forensics domain. Nothing feels redundant — the count reflects the genuine breadth of the domain: launch, holders, liquidity, forensics, market data, and quota.

Completeness4/5

The token risk-assessment lifecycle is thoroughly covered: scan → rug score → holders → whales → dev tracker → launch → liquidity → forensics → price → usage form a complete investigation pathway with no dead ends. Minor gaps exist: no long historical price data (get_token_price only returns recent candles) and no token discovery/search — the server assumes you already have an address. These are work-aroundable but arguably core for a full analyzer.

Resources