DeFade — Multi-Chain Memecoin Analyzer
Server Details
Rug pull risk and on-chain forensics for tokens on Solana, Ethereum, Base and Robinhood.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
15 toolsget_dev_trackerDev wallet trackingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| status | No | One-line verdict: STILL HOLDING, PARTIAL EXIT, FULLY EXITED, TRANSFERRED OUT, SOLD & TRANSFERRED, DISTRIBUTED, LOCKED and similar. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| recentSells | No | Transactions behind each bucket, newest first, capped. |
| statusColor | No | green, yellow, gray or red. A dev selling out is gray: the standard launch pattern, not a rug. |
| lastActivity | No | Unix seconds of the dev's most recent move of this token. |
| creatorSource | No | How the dev wallet was identified; creatorInferred is true when it may be a launchpad authority rather than a person. |
| totalMintedPct | No | Genesis allocation as percent of supply; totalBoughtPct, totalSoldPct, totalTransferredPct, totalLockedPct, totalLiquidityPct alongside. |
| currentHoldingPct | No | Percent of supply the dev holds now. |
| transferRecipients | No | Distinct wallets that received a transfer. |
| transferRecipientAnalysis | No | What large recipients did with the tokens: address, amountPct, stillHeldPct, verdict. |
TDQS
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.
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.
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.
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.
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.
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 fingerprintARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | No | Wallets seen, how many carried a readable fee setting, how many were linked, how many set none. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| groups | No | One entry per fee setting shared by two or more wallets, strongest first: wallets, supplyPct bought, confidence. |
| pending | No | True when no bundle scan has run for this token yet: nothing has looked, not nothing was found. |
| excluded | No | Fee values suppressed as client defaults, with the wallet count each covered. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| computedAt | No | When this result was read. |
TDQS
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.
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.
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.
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.
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.
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 provenanceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| risk | No | Verdict with label and severity. |
| tiers | No | The same supply grouped by certainty tier, as { tier, share }. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| origins | No | Where holder supply was funded from, as { name, share }, biggest first. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| computedAt | No | When this was computed; fromCache says whether it was served from a stored result. |
| coveragePct | No | Share of supply attributed to an origin; dexPct and bridgedPct are real states but not attribution. |
| walletCount | No | Wallets resolved, with resolvedCount and unknownCount. |
TDQS
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.
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.
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.
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.
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.
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 distributionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| bundles | No | Shallow bundle detection over the real wallets: detected, bundlePct, groups. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| topHolders | No | Top 20 accounts: rank, address, walletAddress, amount, percentage, solBalance, isProtocol, protocolLabel. |
| lockedSupply | No | pct plus a lockers array naming each escrow. |
| totalHolders | No | Holder count, estimated from the top accounts. |
| concentration | No | top5, top10, top20 as percent of supply, counting real wallets only. |
| deferredUnlock | No | Supply that unlocks back to the deployer later: pct, unlockDate, cancelablePct. Null when none. |
| protocolHoldings | No | What was excluded: count and totalPct. |
TDQS
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.
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.
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.
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.
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.
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 bundlesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| bundles | No | Each bundle: its wallets, what they spent, what they still hold, how they were funded. |
| summary | No | Totals across detected bundles, accounted on peak net exposure. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| hiddenBundleCount | No | Bundles the shallow detector does not see. |
TDQS
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.
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.
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.
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.
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.
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 snipersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | No | Cohort totals for the window. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| snipers | No | Wallets that bought inside the launch window, capped at 30 rows. |
| poweredBy | No | Always "DeFade.org". |
| terminals | No | Trading terminals the launch cohort came through; activeTerminals is who trades it now. |
| timestamp | No | ISO time the response was assembled. |
| reachedGenesis | No | Whether the walk reached the true first transaction. When false, partial is true and small snipers may be missing. |
| totalEarlyBuyers | No | How many were found in total; windowSeconds and firstTxTime describe the window. |
| migrationCrankersExcluded | No | Migration-crank MEV bots filtered out as infrastructure, named. |
TDQS
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.
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.
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.
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.
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.
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 analysisARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dex | No | Which DEX holds the deepest pool. |
| risk | No | Liquidity risk label; lpEvidence carries the on-chain evidence behind it. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| lpStatus | No | Headline pool verdict: BURNED, LOCKED, UNLOCKED, NO LP FOUND. |
| lpBurnPct | No | Percent of LP tokens burned; lpLockPct is the percent locked. |
| poolLocks | No | Per-pool lock detail with lpLockable and an lpNote in words. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| totalLiquidityUsd | No | Combined USD depth across pools; pools lists them and poolCount counts them. |
TDQS
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.
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.
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.
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.
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.
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 clustersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| risk | No | Verdict for the token with label and severity. |
| bands | No | Wallet clusters banded by how strongly they look like one operator. |
| stats | No | Totals across the bands: wallets clustered and the supply they hold. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| computedAt | No | When this was computed; fromCache says whether it was served from a stored result. |
TDQS
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.
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.
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.
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.
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.
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 probabilityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| fusion | No | Cross-signal wallet correlation; wallets list is empty on non-Pro keys. |
| signals | No | Each contributing signal: what fired, its weight and its explanation. |
| verdict | No | PROBABLY SAFE (<25), SOME RISK (25+), ELEVATED RISK (45+), HIGH RISK (60+), EXTREME RISK (75+), or RUGGED. |
| coverage | No | "full" when the Pro signal set contributed, "free" when only the free signals did — a "free" score has seen less evidence. |
| rugScore | No | Rug probability 0 (safe) to 100 (critical). HIGHER IS MORE DANGEROUS. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| bundleSubScore | No | The bundle component of the score. |
| proChecksLocked | No | How many Pro-only checks were withheld. |
TDQS
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.
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.
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.
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.
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.
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 moneyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| summary | No | analyzed, smartMoneyCount, verifiedCount, experiencedCount, activeTraderCount, retailCount, smartMoneyPct, avgWinRate, signal. |
| wallets | No | Profiled holders, each classified smart money, verified, experienced, active trader or retail, with win rate. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| activeBuys | No | Other tokens the smart wallets are currently buying. |
TDQS
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.
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.
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.
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.
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.
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 priceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| high | No | Window high as priceUsd plus ts; low is the same shape. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| candles | No | OHLCV candles, oldest first: ts (ms), open, high, low, close, volume and *Usd values. |
| current | No | Latest close as current.priceUsd. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| priceChange | No | Percent change from the first candle to the last. Null when it cannot be computed. |
| totalCandles | No | Number of candles; a token with no chart data answers 0. |
TDQS
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.
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.
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.
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.
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.
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 tokenARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| risk | No | The SAFETY score: score (0-100, 100 is clean), rating, color, flags. Opposite direction from get_rug_score. |
| token | No | Token metadata: name, symbol, mint, supply, decimals, creator, mintAuthority, freezeAuthority, marketCap, liquidity. |
| creator | No | Deployer wallet: address, walletAgeDays, solBalance, totalTransactions, tokenCreations, recentTokens, riskLevel. |
| holders | No | Same body as get_holders: totalHolders, topHolders, concentration, protocolHoldings, lockedSupply, deferredUnlock, bundles. |
| success | No | Whether the scan completed. |
| poweredBy | No | Always "DeFade.org". |
| scanCount | No | Scans of this token in the last 24h. |
| timestamp | No | ISO time the response was assembled. |
| analyzedAt | No | ISO time of the scan itself. |
TDQS
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.
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.
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.
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.
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.
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 usageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | No | 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. |
| units | No | How metering works: one request is one unit except the heaviest EVM modules, listed in heavyOnEvm with heavyCost. |
| usage | No | today, total, thisPeriod, remainingThisPeriod, periodResetsAt. |
| limits | No | perMinute, perDay, perMonth; perMonth is null on grandfathered keys. |
| credits | No | Overage: balance, overageEnabled, costPerRequest. |
TDQS
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.
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.
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.
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.
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.
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_wallet_linksProven insider linksARead-onlyIdempotentInspect
The graph of proven on-chain links between wallets around one token — who funded whom, who transferred to whom, and coordinated timing — typically the deployer's supply fanned out to look like organic demand. Use it when the holder list looks distributed and you want to know whether it really is. This is the hard-evidence member of the four "who is really behind this token" tools — call it only for PROVEN links: wallets that merely behave alike with no provable link are get_lookalike_clusters, where the money first entered the chain is get_funding_sources, and identical bot fee settings are get_fee_fingerprint. Not for the creator wallet's own sales and transfers (get_dev_tracker) or for market data of any kind. Arguments: address and chain; one API unit on any chain.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodes | No | Graph nodes; clusters groups them. |
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| locked | No | True on non-Pro keys, in which case only reason, upgradeUrl and message are present. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| connections | No | Wallet-to-wallet transfers that tie the cohort together; connectionsTotal is the count before truncation. |
| insiderCount | No | Wallets in the connected cohort; insiderHoldingPct is the supply they hold. |
| totalTransfers | No | Transfers behind the graph, moving transferredPct of supply. |
| walletConnections | No | Per-wallet connection counts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, openWorldHint, and an output schema exists, so the bar is lower. The description adds genuine context: the evidence standard ('call it only for PROVEN links'), the typical deception pattern the graph reveals (deployer supply fanned out to look organic), and the one-API-unit cost. Minor gap: no mention of graph depth limits or what an empty result means, though these are not critical given the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Longer than the archetypal two-sentence definition, but every sentence carries routing value: core output first, then trigger, then the four-way sibling disambiguation, then exclusions, then arguments/cost. The word 'proven' appears twice and the prose is dense, but the length is justified by the need to disambiguate four closely related sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full output schema, 100% parameter schema coverage, and safety annotations, the description completes the operational picture: what the graph contains, when to call it, what it costs, and which siblings to use instead. Explicitly defining the proof criteria or graph size limits would make it fully airtight, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema's parameter descriptions are already exceptionally rich (address formats, rejection behavior, EVM chain ambiguity, Solana default). The description only confirms the two arguments and adds the cost note, so it lands at the baseline 3 — the schema does the heavy lifting here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: builds a graph of proven on-chain links between wallets around one token, and enumerates exactly what those links are (who funded whom, who transferred to whom, coordinated timing). It also positions itself inside the four-tool 'who is really behind this token' family as the hard-evidence member, so an agent can distinguish it from siblings without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('Use it when the holder list looks distributed and you want to know whether it really is'), then names each sibling with the condition that selects it (get_lookalike_clusters for mere behavioral similarity, get_funding_sources for money entry, get_fee_fingerprint for bot fee settings), and closes with clear exclusions (get_dev_tracker, market data). 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_whalesWhale activityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | 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. | solana |
| address | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | The address that was scanned (on get_token_scan, the full token metadata object instead). |
| whales | No | Each whale: address, balance, percentage of supply, attribution label (KOL, dev-linked, exchange), txCount24h, recent buys and sells. |
| summary | No | totalWhales, totalWhalePct, dangerWhales, activeWhales, whaleRisk, whaleThreshold, largestHumanPct, protocol and Streamflow-lock totals. |
| poweredBy | No | Always "DeFade.org". |
| timestamp | No | ISO time the response was assembled. |
| terminalUsage | No | Which trading terminals the whale cohort trades through (Pro keys). |
| protocolAccounts | No | Pools, lockers, treasuries and custodial accounts held out of the whale list, named. |
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
get_usage1 field changed- changed
Output schema / properties / tier / descriptionPrevious 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."
1 tool update
- Changed
get_rug_score3 fields changed- removed
Output schema / properties / coverage / additionalPropertiesRemoved value: -true - changed
Output schema / properties / coverage / descriptionPrevious 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." - changed
Output schema / properties / coverage / typePrevious value: -[ - "object", - "null" -]New value: +[ + "string", + "null" +]
15 tool updates
- Changed
get_dev_tracker11 fields changed- changed
Output schema / properties / creatorSource / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / currentHoldingPct / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / lastActivity / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / recentSells / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / status / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / statusColor / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / totalMintedPct / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / transferRecipientAnalysis / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / transferRecipients / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_fee_fingerprint7 fields changed- changed
Output schema / properties / computedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / excluded / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / groups / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / pending / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / stats / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_funding_sources8 fields changed- changed
Output schema / properties / computedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / coveragePct / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / origins / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / risk / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / tiers / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / walletCount / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_holders9 fields changed- changed
Output schema / properties / bundles / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / concentration / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / deferredUnlock / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / lockedSupply / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / protocolHoldings / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / topHolders / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / totalHolders / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_launch_bundles5 fields changed- changed
Output schema / properties / bundles / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / hiddenBundleCount / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / summary / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_launch_snipers8 fields changed- changed
Output schema / properties / migrationCrankersExcluded / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / reachedGenesis / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / snipers / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / stats / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / terminals / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / totalEarlyBuyers / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_liquidity8 fields changed- changed
Output schema / properties / dex / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / lpBurnPct / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / lpStatus / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / poolLocks / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / risk / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / totalLiquidityUsd / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_lookalike_clusters6 fields changed- changed
Output schema / properties / bands / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / computedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / risk / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / stats / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_rug_score9 fields changed- changed
Output schema / properties / bundleSubScore / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / coverage / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / fusion / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / proChecksLocked / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / rugScore / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / signals / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / verdict / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_smart_money5 fields changed- changed
Output schema / properties / activeBuys / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / summary / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / wallets / typePrevious value: -"array"New value: +[ + "array", + "null" +]
- Changed
get_token_price7 fields changed- changed
Output schema / properties / candles / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / current / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / high / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / priceChange / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / totalCandles / typePrevious value: -"number"New value: +[ + "number", + "null" +]
- Changed
get_token_scan9 fields changed- changed
Output schema / properties / analyzedAt / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / creator / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / holders / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / risk / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / scanCount / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / success / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / token / typePrevious value: -"object"New value: +[ + "object", + "null" +]
- Changed
get_usage5 fields changed- changed
Output schema / properties / credits / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / limits / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / tier / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / units / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / usage / typePrevious value: -"object"New value: +[ + "object", + "null" +]
- Changed
get_wallet_links8 fields changed- changed
Output schema / properties / connections / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / insiderCount / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / locked / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / nodes / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / totalTransfers / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / walletConnections / typePrevious value: -"object"New value: +[ + "object", + "null" +]
- Changed
get_whales6 fields changed- changed
Output schema / properties / poweredBy / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / protocolAccounts / typePrevious value: -"array"New value: +[ + "array", + "null" +] - changed
Output schema / properties / summary / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / terminalUsage / typePrevious value: -"object"New value: +[ + "object", + "null" +] - changed
Output schema / properties / timestamp / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / whales / typePrevious value: -"array"New value: +[ + "array", + "null" +]
10 tool updates
- Removed
get_bundles - Removed
get_funding_origin - Added
get_funding_sources - Removed
get_insider_network - Added
get_launch_bundles - Added
get_launch_snipers - Added
get_lookalike_clusters - Removed
get_snipers - Removed
get_sybil_cluster - Added
get_wallet_links
15 tool updates
- Changed
get_bundles1 field changed- changed
Output 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" +}
- Changed
get_dev_tracker1 field changed- changed
Output 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" +}
- Changed
get_fee_fingerprint1 field changed- changed
Output 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" +}
- Changed
get_funding_origin1 field changed- changed
Output 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" +}
- Changed
get_holders1 field changed- changed
Output 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" +}
- Changed
get_insider_network1 field changed- changed
Output 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" +}
- Changed
get_liquidity1 field changed- changed
Output 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" +}
- Changed
get_rug_score1 field changed- changed
Output 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" +}
- Changed
get_smart_money1 field changed- changed
Output 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" +}
- Changed
get_snipers1 field changed- changed
Output 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" +}
- Changed
get_sybil_cluster1 field changed- changed
Output 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" +}
- Changed
get_token_price1 field changed- changed
Output 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" +}
- Changed
get_token_scan1 field changed- changed
Output 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" +}
- Changed
get_usage1 field changed- changed
Output 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" +}
- Changed
get_whales1 field changed- changed
Output 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" +}
14 tool updates
- Changed
get_bundles2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_dev_tracker2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_fee_fingerprint2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_funding_origin2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_holders2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_insider_network2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_liquidity2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_rug_score2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_smart_money2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_snipers2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_sybil_cluster2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_token_price2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_token_scan2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
- Changed
get_whales2 fields changed- changed
Input schema / properties / address / descriptionPrevious 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." - changed
Input schema / properties / chain / descriptionPrevious 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."
4 tool updates
- Removed
get_api_usage - Added
get_token_scan - Added
get_usage - Removed
scan_token
2 tool updates
- Removed
check_api_usage - Added
get_api_usage
2 tool updates
- Added
get_bundles - Removed
get_bundles_pro
4 tool updates
- Removed
compare_holder_overlap - Removed
get_bundles - Removed
get_socials - Removed
get_trending
19 tool updates
- First observed
check_api_usage - First observed
compare_holder_overlap - First observed
get_bundles - First observed
get_bundles_pro - First observed
get_dev_tracker - First observed
get_fee_fingerprint - First observed
get_funding_origin - First observed
get_holders - First observed
get_insider_network - First observed
get_liquidity - First observed
get_rug_score - First observed
get_smart_money - First observed
get_snipers - First observed
get_socials - First observed
get_sybil_cluster - First observed
get_token_price - First observed
get_trending - First observed
get_whales - First observed
scan_token
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Instant rug-check for any EVM or Solana token, distilled to one clear 0-10 risk verdict.
Solana token safety for AI agents — rug-pull, honeypot & Token-2022 trap detection before you buy.
Solana wallet & token reputation lookup. Risk verdict, score, DefiLlama TVL, Rugcheck.
Solana address risk grades and token scans for AI agents. Pay-per-call via x402 (USDC on Base).
Related MCP Servers
- AlicenseAqualityBmaintenanceRug 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.23150MIT
- AlicenseAqualityBmaintenanceOn-chain rug-pull & honeypot risk screen for ERC-20 tokens, providing a SAFE / CAUTION / HIGH-RISK verdict based on live public RPC reads.2MIT
- AlicenseAqualityAmaintenanceSolana 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.26161MIT
- AlicenseAqualityBmaintenanceOn-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.1431MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.