whale-insights
Server Details
Free read-only crypto whale-tracking & market-data MCP tools across 14 chains. No auth.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
The live/history/monthly suffix pattern makes most tools easy to tell apart, and descriptions explicitly cross-reference sibling tools to steer agents correctly. However, the whale_* family (activity, daily_summary, movements, movements_summary, recent_whales) and the analyst/analysts_* family have overlapping aggregate-signal purposes that could still cause misselection.
Most domains follow a consistent base/_history/_monthly convention (fear_greed, funding_rates, stablecoin_flows, sentiment, golden_alerts). Deviations exist: the analysts vs analyst prefix is inconsistent, whale_activity vs whale_daily_summary vs whale_movements_summary lacks a uniform pattern, and golden_alerts_snapshot is the only tool using a _snapshot suffix.
56 tools far exceeds the threshold for a well-scoped server and will significantly burden prompt context and tool selection. The three-layer live/history/monthly pattern multiplies the count, and several tools could be merged (e.g., analysts_signals vs analysts_signals_all) or unified with a granularity parameter.
The platform covers an unusually wide set of crypto-analytics domains — whales, analysts, funding, sentiment, stablecoins, gas, leverage, arbitrage, narratives, market pulse — with live, daily-history, and monthly-archive layers for nearly all of them. Minor gaps exist (no historical airdrops or burn-tracker archive, some Pro-only fields stripped), but the core read-only surface is notably complete.
Available Tools
56 toolsairdropsARead-onlyIdempotentInspect
Get curated active and upcoming crypto airdrops — 35 hand-verified entries with chain, status, eligibility info — Curated list of active airdrop opportunities. updatedAt reflects the last manual content revision, not request time. Cached ~1hr.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| airdrops | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior, so the bar is lower. The description adds meaningful behavioral context by explaining the manual curation process, the meaning of updatedAt, and the ~1hr cache behavior, which helps the agent interpret data freshness and expect a stable, hand-maintained dataset.
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 short and front-loaded with the core purpose. There is some redundancy ('Curated list of active airdrop opportunities' restates the opening clause), but the additional freshness and cache details are valuable and concise.
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 parameterless, read-only tool with an output schema, the description is complete: it states content, scope, freshness semantics, and caching. An agent has everything needed to decide whether to call this tool and to interpret its results 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?
There are zero parameters and the schema is empty, so parameter ambiguity is not a concern. The description compensates by outlining what the response contains (chain, status, eligibility info), giving the agent useful context about the returned data without needing to inspect the output 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 ('Get') and a clearly scoped resource ('curated active and upcoming crypto airdrops'), and adds concrete detail about the content (35 hand-verified entries, chain, status, eligibility). This makes the tool's purpose and scope immediately distinct from the analytics-heavy 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?
The description clearly implies when to use it: when the agent needs active or upcoming airdrop opportunities rather than history or analytics. It also sets freshness expectations ('updatedAt reflects the last manual content revision, not request time. Cached ~1hr.'), though it does not explicitly name alternative tools for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyst_archiveARead-onlyIdempotentInspect
Analyst signal archive — paginated 1-year history (public, MCP-compatible) — Returns a paginated archive of signals attributed to a single analyst, covering up to 1 year (365 days). This is the MCP-tool-compatible variant of the analyst archive — it uses query params instead of path params so AI agents can call it directly without resolving a URL template. Analyst IDs: chain_hawk (ChainHawk, BTC & macro on-chain), whale_watch (WhaleWatch, multi-chain whale moves), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence), rate_hawk (RateHawk, funding rates & derivatives), flow_tracer (FlowTracer, stablecoin & capital flows), unlock_guard (UnlockGuard, token unlock risk), sentiment_edge (SentimentEdge, social sentiment extremes), narrative_pulse (NarrativePulse, sector rotation & narratives). Filters: period (7d | 30d | 90d | 365d, default 90d), outcome (all | win | loss | neutral | pending, default all), page (1-indexed, default 1)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed, default 1). | |
| limit | No | Results per page (10–100, default 100). | |
| period | No | Time window: 7d | 30d | 90d | 365d (default 90d). Use 365d to access up to 1 year of history. | 90d |
| outcome | No | Filter by outcome: all | win | loss | neutral | pending (default all). | all |
| analystId | Yes | Analyst slug. Valid values: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Current page number (1-indexed) |
| tier | No | Always 'starter' (up to 365-day depth) for this public endpoint |
| pages | No | Total number of pages |
| total | No | Total number of matching signals in the window |
| signals | No | Signals attributed to the requested analyst in reverse-chronological order. |
| analystId | No | Echoed analyst slug |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds useful behavioral context beyond annotations: it is 'public', MCP-compatible, paginated, capped at 1 year of history, and uses query params for direct agent invocation. No contradiction with annotations is present.
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 its purpose and well-organized, but it contains redundancy: 'paginated 1-year history' is repeated as 'Returns a paginated archive ... covering up to 1 year (365 days).' The filter list also largely duplicates what the input schema already documents. It is still readable, but not every word earns its place.
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 tool with 5 parameters, 3 enums, and an output schema, the description covers the essential operational details: required analystId, all valid analyst slugs, filter options and defaults, page semantics, the 1-year history cap, and the public MCP-compatible access mode. Annotations cover safety, and the output schema covers return shape, so no critical detail appears 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%, so the baseline is 3. The description adds value by providing human-readable analyst labels (e.g., chain_hawk as 'BTC & macro on-chain', whale_watch as 'multi-chain whale moves') and clarifies that period 365d maps to the full 1-year cap. These enrichments go beyond the raw enum names and schema descriptions.
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 'Returns a paginated archive of signals attributed to a single analyst, covering up to 1 year (365 days).' It names a specific verb, resource, and scope, and explicitly highlights the single-analyst limitation, which separates it from all-analyst siblings like analysts_signals_all. The MCP-compatible query-param variant framing further distinguishes it from path-param alternatives.
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 clear context on when to use this tool: to fetch a single analyst's signal history, and specifically calls out that it is the MCP-compatible variant AI agents should use to avoid resolving URL templates. However, it does not explicitly say when NOT to use it in favor of related siblings such as analysts_signals, analyst_daily_summary, or signal_history_monthly, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyst_daily_summaryARead-onlyIdempotentInspect
Get today's AI-generated commentary for all 10 analysts — 2-sentence summaries with signal count, confluence score, BTC trend (generated 9:00 UTC) — Returns today's AI-generated daily commentary for all 10 analyst personas. Summaries are generated each morning at 9:00 UTC using gpt-4o-mini based on the previous 24h of signals, Fear & Greed score, BTC trend, and cross-analyst confluence. Public endpoint — no authentication required. Only shortSummary is returned (2 sentences). Full commentary is available via the authenticated Pro endpoint /api/analysts/:id/daily-summary. Fields per analyst: analystId, analystName, summaryDate (YYYY-MM-DD), shortSummary, signalCount (signals in the past 24h), confluenceScore (0-100: % of other analysts with overlapping tokens in last 2h), fearGreedScore (0-100), btcTrend ('up'|'down'|'sideways'|null). Cached 30 minutes. Returns empty summaries array before 9:00 UTC on any given day. 60 req/min rate limit.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| summaries | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, but the description goes well beyond that: generation time (9:00 UTC), model (gpt-4o-mini), no auth required, only shortSummary returned, caching (30 min), empty-array behavior before 9:00 UTC, and rate limit (60 req/min). This is rich behavioral disclosure with 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 front-loaded with the key verb and scope, but it repeats itself: 'Get today's AI-generated commentary' is restated as 'Returns today's AI-generated daily commentary', and '9:00 UTC' appears three times. The extra details are useful, but the redundancy makes it longer than necessary.
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 output schema exists, so return values are covered. The description adds everything else needed: timing (generated 9:00 UTC, empty before), caching (30 min), rate limit, auth status, and the exact fields returned. Nothing an agent needs to call this tool 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?
The input schema has zero properties, so there are no parameters to document. Baseline 4 applies. The description appropriately spends its space on response fields and behavior instead of parameter semantics, which is exactly right for a no-input tool.
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: 'Get today's AI-generated commentary for all 10 analysts'. It specifies the exact scope (today's, all 10 analysts, 2-sentence summaries) and clearly distinguishes this from sibling tools like analyst_archive or analyst_summary_history, which cover historical data.
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 provides clear context: use for today's generated commentary, public endpoint, no auth, and it notes the fallback for full commentary via the authenticated Pro endpoint. It also gives timing constraints (empty before 9:00 UTC, cached 30 min). However, it does not explicitly name sibling tools as alternatives or state when to prefer them over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyst_monthly_performanceARead-onlyIdempotentInspect
Monthly performance summary for all analysts (last 6 months) — Returns win_rate, avg_return, and total_signals per analyst per calendar month for exactly the last 6 calendar months (current month + 5 prior full months, enforced with DATE_TRUNC('month') boundaries — never more than 6 month buckets). All 10 canonical analysts (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse) are always present in the response with an empty array [] when they have no signals in the window. Data is computed directly from the signal_history PostgreSQL table — no separate snapshot table required. winRate is a fraction (0–1, e.g. 0.71 = 71%) and is null when fewer than 5 resolved signals exist for that month. avgReturn is in percentage points (e.g. 12.3 = +12.3% average return) and is null when no resolved+priced signals exist for that month. Useful for AI agents answering 'How did WhaleWatch perform in May?' or 'Who was the best analyst last month?'
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| months | No | Look-back window in months (always 6). |
| updatedAt | No | |
| attribution | No | |
| performance | No | Keys are analyst slugs (chain_hawk, whale_watch, …); values are arrays of monthly performance objects ordered newest-first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: exact calendar-month boundary enforcement via DATE_TRUNC, the guarantee that all 10 analysts appear even with empty arrays, direct querying of signal_history, and null conditions for winRate and avgReturn. This is rich operational context that annotations alone do not provide.
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 purpose, and nearly every detail earns its place. It is slightly verbose due to the parenthetical DATE_TRUNC explanation, the repeated 'never more than 6 month buckets' guarantee, and the full analyst list, but it remains readable and well organized.
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-parameter read-only tool with an output schema and complete annotations, the description covers invocation context, edge cases (few signals => null winRate; no resolved+priced signals => null avgReturn), the deterministic analyst set, and example user queries. Nothing needed to select or interpret 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 tool accepts zero parameters and schema description coverage is 100%, so there are no parameter semantics to document. The baseline for zero-parameter tools is 4; the description appropriately invests in return-value semantics instead.
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 ('Returns'), a specific resource ('performance summary for all analysts'), and a precise scope ('exactly the last 6 calendar months'). It also distinguishes itself from sibling tools like analyst_daily_summary by explicitly describing monthly granularity and enumerating the 10 canonical analysts covered.
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 concrete query examples ('How did WhaleWatch perform in May?' or 'Who was the best analyst last month?') and clearly defines the 6-month window, making when to use it clear. It does not explicitly name alternatives or state when not to use this tool, so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analystsARead-onlyIdempotentInspect
Analyst personas with live performance stats — Returns all 10 pseudonymous CryptoWhaleInsights analyst personas — ChainHawk (BTC & Macro On-Chain), WhaleWatch (Multi-Chain Whale Tracking), AlphaScout (Emerging Tokens & Narratives), DeFiPulse (DeFi, Stablecoins & Bridges), QuantEdge (Signal Performance & Risk), RateHawk (Funding Rates & Derivatives), FlowTracer (Stablecoin & Capital Flows), UnlockGuard (Token Unlock Risk & Recovery), SentimentEdge (Social Sentiment Extremes), NarrativePulse (Sector Rotation & Narratives). These are algorithmic signal-attribution identities, not human analysts: every signal generated by the platform's on-chain monitoring engine is automatically attributed to the analyst whose domain matches the alert type and chain. Stats are 100% real — computed from the live signalHistory PostgreSQL table using the same resolved-signal logic as the Signal Performance Proof page. winRate is a fraction (0.71 = 71% win rate); avgReturn is a percentage (12.3 = +12.3% average return per signal). B
| Name | Required | Description | Default |
|---|---|---|---|
| analyst | No | Optional analyst slug filter. When provided, only the matching analyst is returned. One of: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| analysts | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the read-only annotations by explaining that analysts are algorithmic attribution identities rather than humans, that stats are computed from the live signalHistory PostgreSQL table with resolved-signal logic, and that winRate is a fraction while avgReturn is a percentage. This gives the agent a strong behavioral and data-integrity picture.
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 its core purpose and every clause adds meaningful context, including domain areas and metric units. The list of ten personas is long but necessary for identification; the only structural defect is the unexplained trailing 'B', which appears to be a truncation artifact.
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 annotations and an output schema present, the description covers data provenance, non-human attribution, and metric semantics well. However, it does not address the mismatch between the 10 named personas and the 5 enum values, nor does it provide guidance for choosing this over sibling analyst tools, so the picture is not fully complete.
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 schema fully documents the optional analyst slug filter, so the baseline is 3. The description adds useful persona context but does not map friendly names to schema slugs, and it claims all 10 personas while the enum only exposes 5 slugs, which creates ambiguity about whether the other five can be filtered.
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 uses a specific verb ('Returns') and resource ('all 10 pseudonymous CryptoWhaleInsights analyst personas') and then enumerates all ten with their domains. This clearly distinguishes the tool from signal-level siblings and makes the scope immediately obvious.
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 phrase 'live performance stats' and the reference to the Signal Performance Proof page imply this is for current analyst-level performance snapshots, but no alternative tools are named and no when-to-use/when-not-to-use conditions are given. Sibling names like analysts_top and analyst_daily_summary suggest alternatives, but the description itself does not route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analysts_signalsARead-onlyIdempotentInspect
Analyst signal history — single or multi-analyst (public, free-tier, MCP-compatible) — Returns the last 7 days of signals for one or more analysts in a single request. Pass a single id (e.g. ?id=chain_hawk) for one analyst or a comma-separated list (e.g. ?id=chain_hawk,whale_watch) to compare multiple analysts without extra round-trips. Analyst ids: chain_hawk (ChainHawk, BTC & macro), whale_watch (WhaleWatch, multi-chain whales), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence). Always free-tier depth (last 7 days, up to 200 signals per analyst). No authentication required. Single-id response: { analystId, tier, signals[], updatedAt }. Multi-id response (comma-separated): { results: { [analystId]: signals[] }, tier, updatedAt }. To fetch all 10 analysts at once, use GET /api/public/analysts/signals/all. Each signal: id (number), tokens (array), typeLabel, outcome ('win'|'loss'|null), returnPct (null if unresolved), create
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Analyst slug(s). Single: chain_hawk. Comma-separated for multi: chain_hawk,whale_watch. Valid values: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | No | Always 'free' for this public endpoint |
| results | No | Present in multi-id mode. Keys are analyst slugs; values are arrays of signal objects. |
| signals | No | Present in single-id mode. Array of signal objects for the requested analyst. |
| analystId | No | Echoed analyst slug (single-id mode only), e.g. chain_hawk |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only/idempotent/non-destructive, and the description adds valuable behavioral context: free-tier depth, the 7-day window, the 200-signal cap per analyst, no authentication requirement, and the exact response shapes for both single- and multi-id calls. It clearly discloses limits and output behavior beyond the structured 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 long but organized around distinct pieces of information: usage, analyst IDs, limits, authentication, and response formats. The core purpose is front-loaded, and most sentences earn their place, though the inclusion of full response shapes and signal field listings makes it denser than strictly necessary.
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 one-parameter read-only tool with an output schema, the description is remarkably complete: it covers single vs multi behavior, the all-analysts alternative, data depth limits, auth expectations, and response structures. An agent has everything needed to invoke it correctly without opening the schema.
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 schema already describes id as an analyst slug and lists valid values, yielding 100% schema coverage, so the baseline is 3. The description adds extra meaning by explaining comma-separated multi-analyst usage, providing concrete URL examples, and mapping each slug to a human-readable analyst and focus area, which improves parameter understanding without redundancy.
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 object ('Analyst signal history') and a clear action ('Returns the last 7 days of signals'), then states both single- and multi-analyst modes. It also names the sibling endpoint for fetching all analysts at once, so an agent can distinguish it from analysts_signals_all without inferring.
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 explicitly tells the agent when to use a single id versus a comma-separated list, notes that multi-id avoids extra round-trips, and directs the agent to the /all endpoint for fetching all 10 analysts. This provides actionable selection criteria, including the key alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analysts_signals_allARead-onlyIdempotentInspect
All analysts' signal history in one request (public, free-tier, MCP-compatible) — Returns the last 7 days of signals for all 10 analysts grouped by analystId in a single response — ideal for AI agents that need a cross-analyst comparison without 10 round-trips. Analyst ids in the response: chain_hawk (ChainHawk, BTC & macro), whale_watch (WhaleWatch, multi-chain whales), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence). Always free-tier depth (last 7 days, up to 200 signals per analyst). No authentication required. No query parameters needed. Response: { results: { [analystId]: signals[] }, tier: 'free', updatedAt }. Each signal: id (number), tokens (array), typeLabel, outcome ('win'|'loss'|null), returnPct (null if unresolved), createdAt (ISO-8601), analystId. To fetch a subset of analysts, use GET /api/public/analysts/signals?id=chain_hawk,whale_watch. — Use this for all analyst signals in one response; use analysts_sign
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | No | Always 'free' for this public endpoint |
| results | No | Keys are analyst slugs (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge); values are arrays of signal objects. |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses free-tier depth, the 7-day window, up to 200 signals per analyst, lack of authentication, and the exact response envelope. This goes well beyond the readOnly/idempotent hints and gives an accurate model of runtime behavior.
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 purpose is front-loaded and the description packs in meaningful details like response fields, auth, and alternatives. It is one long flowing paragraph with some redundancy (last 7 days repeated twice), but not wastefully long for the amount of context provided.
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?
Covers auth, scope, response format, signal fields, and the alternative subset endpoint. It is slightly incomplete because it claims to list analyst IDs but only enumerates 5 of the 10, and the final sentence is cut off; still, the core calling context is fully explained.
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 tool has zero parameters and the schema already reflects that, so the baseline is 4. The description adds useful confirmation that no query parameters are needed, which removes any ambiguity about optional inputs.
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?
Clearly states it returns all analysts' signal history in one request, covering the last 7 days for all 10 analysts grouped by analystId. It distinguishes itself from a subset endpoint and makes the resource and response shape explicit.
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?
Explicitly says this tool is for getting all analyst signals in one response and gives the alternative endpoint for fetching a subset of analysts. It also notes no authentication and no query parameters, so an agent knows exactly when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analysts_topARead-onlyIdempotentInspect
Get the highest win-rate analyst right now — one analyst with win rate, avg return, last 3 signals (min 5 resolved trades required) — Returns the single analyst with the highest win rate among those with at least 5 resolved signals, plus their last 3 recent signals (using the free 7-day window). Useful for AI agents that want to surface the best-performing signal source without iterating over all 10 analysts. Returns { analyst: null } when no analyst yet has 5+ resolved signals. Analyst IDs map to: chain_hawk=ChainHawk (BTC), whale_watch=WhaleWatch (multi-chain), alpha_scout=AlphaScout (emerging tokens), defi_pulse=DeFiPulse (DeFi/stables), quant_edge=QuantEdge (risk/convergence). winRate is a fraction (0.71 = 71%); avgReturn is percentage points (12.3 = +12.3%). Cached ~10min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| analyst | No | The analyst with the highest win rate (min 5 resolved signals). Null if no analyst qualifies yet. |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the read-only, idempotent annotations by disclosing the null-return edge case, the 5-signal minimum, the 7-day window, the ~10-minute cache, and units for winRate and avgReturn. No contradiction with annotations exists.
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?
Core behavior is front-loaded and most sentences contribute useful context such as caching, units, ID mapping, and null behavior. However, the second sentence largely repeats information already given in the first sentence, preventing a perfect score.
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 no-parameter read-only tool with an output schema, the description covers selection criteria, edge cases, units, analyst ID mappings, and freshness. Nothing material is missing for an agent to invoke and interpret this tool 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?
The tool has zero parameters, so schema coverage is trivially high and there is no parameter syntax for the description to clarify. Under the rubric, a 0-parameter tool gets a baseline of 4.
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?
Description clearly states a specific function: return the single analyst with the highest win rate among those with 5+ resolved signals, including win rate, avg return, and last 3 signals. It also distinguishes its purpose from siblings by noting it exists to avoid iterating over all 10 analysts.
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?
Provides a clear use case: surface the best-performing signal source without iterating over all analysts. However, it does not explicitly name alternative tools or state when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyst_summary_historyARead-onlyIdempotentInspect
Get historical daily AI analyst summaries — query by date or by analyst+days (max 90 days; use analyst_daily_summary for today's data) — Returns a paginated history of daily AI analyst summaries. Query by specific date (?date=YYYY-MM-DD) to see all analyst summaries for one day, or by analystId (?analystId=chain_hawk&days=30) to get the last N days for one analyst. Maximum 90 days. Only shortSummary is returned (full commentary is Pro-only). Fields per record: analystId, analystName, summaryDate (YYYY-MM-DD), shortSummary, summaryAr, summaryHi, summaryZh, summaryRu, signalCount, confluenceScore, fearGreedScore, btcTrend. No auth required. 60 req/min. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| days | No | |
| total | No | |
| analystId | No | |
| summaries | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnly, idempotent, and non-destructive behavior, the description adds substantial context: pagination, 90-day limit, Pro-only full commentary, returned field list, no-auth requirement, and 60 req/min rate limit. None of these contradict 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?
The description is long but information-dense, with the main purpose front-loaded and query patterns laid out clearly. There is minor redundancy between 'historical daily AI analyst summaries' and the closing 'Use this for daily historical data', but no wasted sentences.
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 empty input schema and the need to differentiate among many siblings, the description is complete: it covers query modes, limits, auth, rate limits, response fields, access restrictions, and alternatives. An agent has everything needed to call 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?
The input schema has zero properties, so the description fully carries parameter semantics. It documents query parameters including ?date=YYYY-MM-DD, ?analystId=...&days=30, and the 90-day cap, and even lists the fields returned per record. This goes beyond what the schema provides.
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-resource pair ('Get historical daily AI analyst summaries') and gives exact query modes. It explicitly distinguishes itself from analyst_daily_summary, the monthly tool, and live snapshot tools, so an agent can tell it apart from siblings.
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: use for daily historical data, use analyst_daily_summary for today's data, the live snapshot tool for current conditions, and the monthly tool for long-term trends. It also states the 90-day maximum and the two query patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyst_top_tokensARead-onlyIdempotentInspect
Top predicted tokens per analyst — win-rate aggregates over last 90 days (MCP-compatible) — Returns the top 5 tokens (by win rate) attributed to a single analyst over the last 90 days. Only tokens with ≥ 3 resolved (win/loss) signals are included — this ensures the win-rate figures are statistically meaningful and not based on a single lucky trade. Use ?analystId= with one of: chain_hawk (ChainHawk, BTC & macro on-chain), whale_watch (WhaleWatch, multi-chain whale moves), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence), rate_hawk (RateHawk, funding rates & derivatives), flow_tracer (FlowTracer, stablecoin & capital flows), unlock_guard (UnlockGuard, token unlock risk), sentiment_edge (SentimentEdge, social sentiment extremes), narrative_pulse (NarrativePulse, sector rotation & narratives). Each token entry returns: token (symbol string), total (all signals in window including pending), resolved (signals with a win/loss ou
| Name | Required | Description | Default |
|---|---|---|---|
| analystId | No | Analyst slug. Valid values: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | Guidance string returned when analystId was omitted; null otherwise. |
| tokens | No | Top 5 tokens by win rate for this analyst (last 90 days, min 3 resolved signals each). Empty when no qualifying tokens exist or analystId was omitted. |
| analystId | No | Echoed analyst slug, e.g. chain_hawk. Null when analystId param was omitted. |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description adds meaningful behavioral detail: only tokens with ≥3 resolved signals are included, the window is 90 days, and entries include total and resolved signal counts. This clarifies the filtering logic an agent can expect, although it does not address behavior when analystId is omitted.
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 behavior is front-loaded and the ordering is logical, but the description is padded with a long analyst list that largely duplicates the schema enum and a redundant opening phrase. The sentence describing return fields is truncated mid-phrase ('win/loss ou'), making the structure feel incomplete.
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?
Annotations and output schema carry much of the burden, and the description covers the main filtering behavior. However, the tool declares analystId as not required while the description says it is for 'a single analyst,' leaving a notable gap: what happens if analystId is omitted? This ambiguity prevents the definition from being fully self-sufficient.
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 schema already fully documents the enum and requiredness, so the baseline is 3. The description adds extra semantic value by pairing each analyst slug with a human-readable label and domain focus, which helps an agent choose the right analystId. The '?analystId=' phrasing is slightly inconsistent with the MCP input schema, but the intent is clear.
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 a specific function: returning the top 5 tokens by win rate attributed to a single analyst over the last 90 days, with a statistical significance filter. It is specific enough to convey the resource and action, but it does not explicitly distinguish itself from sibling tools like analysts_top or analyst_daily_summary.
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 provides useful context such as the 90-day window, the 3-signal minimum, and the allowed analystId values with domain descriptions. However, it does not state when to prefer this tool over its siblings or when not to use it, leaving the routing decision largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arbitrage_historyARead-onlyIdempotentInspect
Historical arbitrage opportunities — top 5 per day (MCP-compatible) — Returns a daily history of the top 5 cross-exchange arbitrage opportunities detected by the platform. Each day entry lists the 5 highest-spread opportunities saved by the cron job, including token symbol, spread percentage, buy/sell exchanges, and average USD volume. Useful for AI agents answering questions like 'which tokens appear most frequently in arbitrage?' or 'what is the average daily spread?'. Data is accumulated daily; older than 180 days is automatically purged. Response: { days, history: [{date, opportunities: [{symbol, spreadPct, buyExchange, sellExchange, usdVolume}]}], total, updatedAt }. Query parameter: ?days=7 (default 7, max 180). No authentication required. 60 requests/min rate limit. 5-min in-process cache. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default 7, max 180). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | Total number of individual opportunity rows returned. |
| history | No | Per-day list of top arbitrage opportunities, newest first. |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds substantial behavioral context beyond that: data is accumulated daily, older than 180 days is purged, no authentication is required, there is a 60 requests/min rate limit, and a 5-min in-process cache exists. 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 every clause earns its place: purpose, data granularity, example use cases, retention policy, response shape, parameter semantics, operational limits, and routing guidance. It is front-loaded with the most important differentiator ('top 5 per day') and closes with explicit sibling routing.
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 simple read-only tool with one parameter and an output schema, the description is complete. It covers what the tool returns, why an agent would call it, how to parameterize it, how long data is retained, rate and cache behavior, and when to prefer a sibling tool instead. 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?
The input schema already fully documents the `days` parameter with default, min, max, and description, so the baseline is 3. The description adds meaningful context by linking the 180-day max to the automatic data purge, and by restating the query parameter in a usage context. This is a modest but genuine increment over 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 and resource: 'Returns a daily history of the top 5 cross-exchange arbitrage opportunities detected by the platform.' The scope ('top 5 per day', 'daily historical data') clearly distinguishes it from the monthly arbitrage tool and the live snapshot tool mentioned.
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?
Explicitly says when to use it: for daily historical data and for AI-agent questions about frequency and average spreads. It also names alternatives: 'use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' This gives the agent both inclusion and exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arbitrage_monthlyARead-onlyIdempotentInspect
Cross-exchange arbitrage permanent monthly archive — Returns the permanent monthly archive of cross-exchange arbitrage opportunities — one row per symbol per calendar month, aggregated from daily snapshots before they are purged after 180 days. This archive is never deleted and grows indefinitely, enabling AI agents to answer historical questions like 'which token consistently had the highest arbitrage spread?' across months of data. Each row includes: month (YYYY-MM-01), symbol, avgSpreadPct (average % spread that cycle), occurrenceCount (how many daily snapshots contributed), buyExchange, sellExchange, avgUsdVolume, daysInMonth. Months with fewer than 5 daily records are excluded. Data source: CryptoWhaleInsights arbitrage scanner (DexScreener allPairs, 158 tokens). No authentication required. 60 req/min. 1-hr cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, open-world, idempotent, and non-destructive behavior, and the description adds substantial behavioral context beyond that: data is aggregated from daily snapshots before purging, the archive is never deleted, it grows indefinitely, and records are excluded if they have fewer than 5 daily contributions. It also discloses the data source, authentication requirements, rate limit, and cache behavior.
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 well-organized, front-loading the core purpose before adding details about aggregation, exclusion rules, source, and usage guidance. Minor redundancy exists in repeating 'cross-exchange arbitrage permanent monthly archive' twice at the start, but every other sentence earns its place.
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 definition is complete for a parameterless tool: it describes the data granularity, listed output fields, exclusion rules, data source, authentication needs, rate limits, cache behavior, and explicit comparison to sibling tools. The presence of an output schema also relieves the description from needing to detail return structure.
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 has zero parameters, so the baseline is 4. The description adds no parameter-level detail because none is needed; it instead describes the fixed output shape and filtering rules, which is appropriate for a parameterless tool.
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 explicitly states it 'Returns the permanent monthly archive of cross-exchange arbitrage opportunities' with one row per symbol per calendar month. It precisely differentiates itself from sibling tools by specifying monthly aggregation and permanent retention, making the purpose unmistakable.
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 explicitly instructs when to use this tool: 'Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.' It further clarifies data exclusions, like months with fewer than 5 daily records, and provides practical constraints such as rate limits and cache duration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_flow_historyARead-onlyIdempotentInspect
Get daily cross-chain bridge flow history — total volume USD, transaction count, protocol count, and top protocol over up to 90 days — Daily historical cross-chain bridge activity aggregated from LI.FI API (covering 9+ protocols). One row per day: total bridged volume in USD, transaction count, number of active protocols, and the dominant protocol by volume. Useful for tracking cross-chain capital flow trends. DB-backed, 5-min cache. Powered by bridge_flow_daily table (365d retention, permanent monthly archive). — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structure. The description adds meaningful behavioral context beyond annotations: DB-backed with a 5-minute cache, 365-day retention with permanent monthly archive, and aggregation from LI.FI API. These details inform expectations about freshness and data availability without contradicting any annotation.
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 longer than strictly necessary but front-loads the core purpose and outputs before implementation details. The main redundancy is repeating the output fields in both the opening sentence and the 'One row per day' clause. However, every sentence contributes useful context, and the usage guidance is clearly positioned at the end.
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?
This is a simple single-parameter read tool, and the description covers the output row shape, data source, caching, retention, and when to choose an alternative. An output schema exists, so return-value details are already structured. Nothing essential is missing for an agent to select and invoke the tool 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?
The single 'days' parameter is fully documented in the schema (1–90, default 30), so schema coverage is 100%. The description adds only marginal semantic value by saying 'over up to 90 days', which largely repeats the schema. This meets the baseline but does not elevate beyond it.
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: 'Get daily cross-chain bridge flow history', then enumerates exact output fields (volume USD, transaction count, protocol count, top protocol) and the data source. It clearly distinguishes this as the daily historical variant, implicitly separating it from the sibling 'bridge_flows' live snapshot tool.
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 this tool: 'Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' This directly routes an agent between alternatives and provides clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_flowsARead-onlyIdempotentInspect
Get recent large cross-chain bridge transfers — Stargate Finance, Socket/Bungee via LI.FI (top 3 free; capital-rotation signal) — Recent large cross-chain bridge transfers and per-bridge volume summaries sourced from LI.FI. Free preview: top 3 flows + 2 bridge summaries; the full flow history requires a Weekly Alpha subscription. Cached ~10min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| flows | No | |
| total | No | |
| summaries | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No | |
| requiredTierForFull | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the call read-only/idempotent/non-destructive. The description adds genuinely useful behavioral details beyond that: free-tier truncation to 'top 3 flows + 2 bridge summaries', auth gating for full history via 'Weekly Alpha subscription', and data staleness via 'Cached ~10min'.
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 short and front-loaded, but it repeats 'recent large cross-chain bridge transfers' and buries 'top 3 free; capital-rotation signal' in an awkward em-dash aside. It could be tightened to one or two clear sentences without losing meaning.
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 zero parameters, an output schema, and annotations covering the safety profile, the description is mostly complete: it covers source, scope, subscription limits, and cache freshness. It is slightly incomplete in not naming the obvious sibling history tool and not explaining the 'capital-rotation signal' label.
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 has zero properties, so there are no parameters to clarify; this is the baseline-4 case. The 'top 3 free' note refers to output truncation, not an input parameter, so no additional parameter semantics are needed.
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 concrete read operation: 'Get recent large cross-chain bridge transfers' and adds 'per-bridge volume summaries sourced from LI.FI.' It is clear in scope (recent, large, top-3 free) and implies it is a snapshot rather than full history, though it never explicitly names the sibling tool bridge_flow_history.
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?
Provides helpful context: 'Free preview: top 3 flows + 2 bridge summaries' and 'Cached ~10min' signal that this is a lightweight, limited snapshot. However, it does not explicitly state when to prefer bridge_flow_history or when this tool is insufficient beyond the subscription mention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
burn_trackerARead-onlyIdempotentInspect
Get token burn events and 14-day burn history — ETH, SOL, BNB burns from Etherscan + Blockchair + Solana RPC (top 3 free) — Recent on-chain token burn events (with explorer-verifiable tx) plus a 14-day daily burn-volume history, sourced from Etherscan, Blockchair, and Solana RPC. Free preview: top 3 events; the full list requires a Weekly Alpha subscription. Served from cache (no per-request AI cost). Cached ~5min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| events | No | |
| history | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No | |
| requiredTierForFull | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations marking the tool read-only and idempotent, the description adds valuable non-obvious behavior: only the top 3 events are available for free, the full list requires a Weekly Alpha subscription, responses are served from cache with no per-request AI cost, and the cache is refreshed every ~5 minutes. This goes well beyond what the annotations convey.
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 action and then introduces important caveats, which is effective. It loses some points for redundancy: the sources are listed twice ('from Etherscan + Blockchair + Solana RPC' and 'sourced from Etherscan, Blockchair, and Solana RPC'), and 'burn events' is repeated in both main clauses.
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-parameter, read-only tool with an output schema and strong annotations, the description is complete. It specifies sources, the historical window, explorer-verifiable transactions, subscription limits, and cache behavior — an agent has everything needed to invoke 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?
The input schema has zero parameters, so the baseline of 4 applies. There are no parameter details to elaborate, though the description does clarify what a no-input call returns: recent burn events, a 14-day history, and the free/full preview boundary.
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 — 'Get token burn events and 14-day burn history' — and clearly enumerates the assets (ETH, SOL, BNB), data sources, and the two output components (recent events and daily burn-volume history). This makes it easy for an agent to distinguish from the many analyst, whale, and market 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?
The intended use is clear: call this when token burn events or 14-day burn history is needed. It does not explicitly name alternatives or state when not to use it, but no sibling tool appears to cover burns, so the description provides enough context for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fear_greedARead-onlyIdempotentInspect
Get the Crypto Fear & Greed index — composite 0-100 score, label, 7-factor breakdown, recent history (use fear_greed_monthly for long-term trends) — 7-factor crypto Fear & Greed sentiment index with the current score, label, contributing factors, and recent history. Cached ~5min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| label | No | |
| score | No | |
| factors | No | |
| history | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the bar for added value is lower. The description adds the caching behavior (~5min), which is genuinely useful operational context beyond the annotations. No contradiction between description and 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 somewhat redundant: '7-factor breakdown' and 'contributing factors' are the same concept, and the second sentence repeats the score/label/history listing from the first sentence. The key usage hint is front-loaded, but the repetition costs it a higher score.
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 parameterless read-only tool with an output schema and annotations covering safety, the description covers the return contents, caching behavior, and points to a sibling for long-term trends. It is complete enough for correct invocation; it could mention what 'recent history' means but the output schema likely fills that gap.
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 tool has zero parameters, so there is nothing for the description to explain beyond the schema. Schema description coverage is trivially 100% and the description correctly spends no space on parameters, warranting the baseline 4 for parameter-free tools.
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 ('Get') and resource ('Crypto Fear & Greed index'), then enumerates the content: composite 0-100 score, label, 7-factor breakdown, and recent history. It also disambiguates from the sibling fear_greed_monthly by noting that one is for long-term trends, so an agent can tell this tool apart immediately.
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?
Explicitly tells the agent to use fear_greed_monthly for long-term trends, which is a clear usage condition. It does not mention the sibling fear_greed_history, so the routing guidance is good but not exhaustive. Overall, the description provides clear context on when to choose this tool over at least one alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fear_greed_historyARead-onlyIdempotentInspect
Get daily Fear & Greed score history — 0-100 score + Extreme Fear/Greed label per day over up to 180 days (use fear_greed_monthly for 2-year trends) — Daily historical Fear & Greed score and classification for the last N days (default 30, max 180). One row per day saved from the platform's 7-factor composite index. Useful for trend analysis and AI agent context. DB-backed, 5-min cache. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–180, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful non-obvious behavior: DB-backed storage, 5-minute caching, and that data comes from a 7-factor composite index. No contradiction with annotations exists.
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 essential purpose, but it contains redundancy: 'daily historical' appears twice, and 'one row per day' and the label details are repeated. It earns its place overall, but tighter editing would improve clarity.
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 output schema covers return values, and the description provides data source, cache behavior, and use cases, which is mostly sufficient. However, the contradictory maximum-day value (180 in description vs 90 in schema) leaves the agent unable to determine the real boundary, creating a meaningful completeness gap.
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%, so the baseline is 3, and the description does add meaning by explaining the per-row output and default/max behavior. However, it introduces a harmful inconsistency: the description says 'max 180' and the schema's "days" property has "maximum": 90, while the schema description also says '1–180.' This directly confuses the parameter boundary and undermines reliable invocation.
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 names a specific verb ('Get'), a clear resource ('daily Fear & Greed score history'), and the return contents ('0-100 score + Extreme Fear/Greed label per day'). It also differentiates itself from nearby siblings by explicitly scoping to daily history over up to 180 days, distinguishing it from fear_greed_monthly and the live snapshot tool.
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 this tool: 'Use this for daily historical data', and names alternatives: 'use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' It also mentions usefulness for trend analysis, giving an agent clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fear_greed_monthlyARead-onlyIdempotentInspect
Fear & Greed permanent monthly archive — Returns the permanent monthly archive of the Fear & Greed index — one row per calendar month, aggregated from daily snapshots before they are purged. Never deleted; grows indefinitely providing AI agents with macro sentiment context across months and years. Each month includes: avgScore (0–100 average), minScore, maxScore, dominantClassification (Extreme Fear / Fear / Neutral / Greed / Extreme Greed), fearDays (days with score<40), greedDays (score>60), neutralDays, daysInMonth. Months with fewer than 20 daily records are excluded. No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds meaningful behavioral details: 'Never deleted; grows indefinitely', 'Months with fewer than 20 daily records are excluded', 'No authentication required. 60 req/min. 5-min cache.' 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 definition, then covers row structure, exclusions, access limits, and use-case routing without fluff. Each sentence adds distinct value.
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-parameter read-only tool with output schema and safe annotations, the description is complete: it explains aggregation source, purge timing, exclusions, rate limits, caching, and the appropriate sibling choice.
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?
There are zero parameters, so the baseline of 4 applies. The description adds no parameter constraints (there are none), but it does explain the returned row composition (avgScore, minScore, etc.) which is helpful context even though it isn't parameter semantics.
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?
Clearly identifies a specific verb ('returns') and resource ('permanent monthly archive of the Fear & Greed index'), with specifics like 'one row per calendar month, aggregated from daily snapshots'. It also distinguishes itself from live/daily-history counterparts, so an agent can differentiate it from siblings like fear_greed or fear_greed_history.
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?
Explicitly states 'Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.' This provides both a positive use case and an alternative direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feed_archiveARead-onlyIdempotentInspect
News feed archive — paginated 30-day history (public, MCP-compatible) — Returns a paginated archive of crypto news articles, analysis, and AI-generated summaries from the CryptoWhaleInsights feed, covering the last 30 days. Whale movement events are excluded — use /api/public/whale-movements for on-chain flow data. AI agents can use this to read the latest crypto news, market analysis, and AI-generated summaries without any credentials. Optional type filter: news (RSS articles), ai (AI-generated summaries), manual (analyst notes). Default: all non-whale-move items. Optional keyword search: q (max 100 chars) filters by token name or keyword — case-insensitive match on title and summary (e.g. q=ETH returns only ETH-related items). Pagination: page (1-indexed, default 1), pageSize fixed at 20. period filter: 7d | 30d (default 30d — maximum public window). Response: { items[], total, page, pageSize, hasMore, updatedAt }. Each item: id (number), title (string), summary (string), source (string — feed source name e
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keyword or token name search (max 100 chars). Case-insensitive match on title and summary. Example: q=ETH returns only items mentioning ETH. | |
| page | No | Page number (1-indexed, default 1). | |
| type | No | Filter by article type: news (RSS), ai (AI-generated), manual (analyst notes). Default: all types. | |
| period | No | Time window: 7d | 30d (default 30d — the maximum public window). | 30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Current page (1-indexed) |
| items | No | News articles and analysis items in reverse-chronological order. |
| total | No | Total matching articles in the window |
| hasMore | No | Whether more pages are available |
| pageSize | No | Fixed at 20 records per page |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive behavior, and the description adds substantial context beyond them: no credentials required, pageSize fixed at 20, 30-day maximum public window, case-insensitive q matching, and the response/item shape. There is no contradiction with 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?
The description is front-loaded with purpose and efficiently covers filters, pagination, and response details. It is slightly redundant at the opening ('News feed archive — paginated 30-day history... Returns a paginated archive...' repeats paginated/30-day/archive), and the final field explanation appears truncated, but overall each section earns its place.
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 four-parameter read-only feed tool with an output schema, the description covers every invocation concern: all parameters with defaults, max window, fixed page size, credential-free access, exclusions/alternatives, and response fields. No required call-time information appears to be 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 already 100%, but the description adds meaningful value by explaining q with an example and case-insensitivity, defining type values (news RSS, ai AI-generated, manual analyst notes), noting page is 1-indexed, and revealing that 30d is the maximum public window. This goes well beyond the schema baseline.
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 uses a specific verb ('Returns') and names the exact resource: a paginated archive of crypto news, analysis, and AI-generated summaries from the CryptoWhaleInsights feed. It also explicitly carves out whale-movement events and points to a different endpoint, which distinguishes it from the whale-related siblings.
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 clearly frames when to use the tool ('AI agents can use this to read the latest crypto news... without any credentials') and gives a direct alternative for whale-movement data ('use /api/public/whale-movements'). However, it does not distinguish this archive from the closely related analyst_archive sibling for analyst-note content, so the routing guidance is not fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funding_rate_monthlyARead-onlyIdempotentInspect
Funding rate permanent monthly archive — Returns the permanent monthly archive of perpetual funding rates per token — one row per token per calendar month, aggregated from daily snapshots before purge. Never deleted; covers the top 10 tokens by volume. Optional ?symbol=BTC to filter. Each row includes: month, symbol, avgRate, minRate, maxRate, dominantSentiment (bullish/neutral/bearish based on avg rate), daysInMonth. Months with fewer than 20 daily records are excluded. No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Token symbol to filter by (e.g. BTC, ETH). Omit to return all top-10 tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| symbol | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds substantial context beyond that: data is aggregated before purge, never deleted, limited to top 10 tokens by volume, months with fewer than 20 records are excluded, no authentication required, 60 req/min rate limit, and 5-min cache. These are exactly the behavioral traits an agent needs to invoke it safely and interpret 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?
The description is dense and front-loaded with the core purpose, followed by row structure, coverage constraints, operational limits, and usage guidance. It is somewhat redundant with the phrase "permanent monthly archive" appearing twice early on, but every sentence otherwise carries useful 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 one-optional-parameter read-only tool with an output schema, this description is complete. It covers what data is returned, aggregation logic, exclusions, coverage scope, authentication, rate limits, caching, and the appropriate alternative tool. Nothing essential is missing for an agent to call 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?
Schema description coverage is 100%, so the schema already documents the optional symbol parameter. The description adds only a concrete example (?symbol=BTC) and confirms omission returns all top-10 tokens, which is useful but not a major semantic expansion 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 specifies a clear verb and resource: "Returns the permanent monthly archive of perpetual funding rates per token" with one row per token per month. It also distinguishes itself from siblings by explicitly positioning this as the long-term monthly archive versus the corresponding live or daily-history tool.
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 directs usage: "Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data." This tells an agent exactly when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funding_ratesARead-onlyIdempotentInspect
Get live perpetual futures funding rates — top tokens across Gate.io, MEXC, Kraken with bullish/bearish sentiment — Perpetual futures funding rates aggregated from Gate.io, MEXC, and Kraken, with a derived sentiment label. 3-min cache; check meta.cacheAgeSeconds for exact age. meta.exchangeCount tells how many exchanges contributed data this cycle (up to 3).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Response freshness metadata. 3-min cache; check `meta.cacheAgeSeconds` for exact age. |
| tokens | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful behavior beyond that: the 3-minute cache, the cacheAgeSeconds field for exact freshness, and exchangeCount for judging how many exchanges contributed data this cycle. 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 opening phrase is front-loaded and the cache/exchangeCount sentences carry valuable operational detail. However, the em-dash clause restates the following sentence: exchange sources and the sentiment label are both mentioned twice, which wastes words.
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-parameter, read-only endpoint with an output schema, the description covers the essentials: what data is returned, from which exchanges, the sentiment label, and how to interpret freshness and exchange coverage. It does not explain sentiment derivation, but that is not required to invoke the tool 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?
The tool has zero parameters, so the input schema fully covers the parameter space and the baseline of 4 applies. The description adds no parameter info, but none is needed; it usefully documents output metadata fields instead.
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 ('Get'), a precise object ('live perpetual futures funding rates'), and names the exchanges and the derived sentiment label. It is distinguishable from sibling history/monthly tools by the word 'live', though it does not explicitly contrast with them.
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 clear context: this is for current live funding rates rather than historical data, and the 3-minute cache tells agents not to expect instant updates. However, it never names alternatives like funding_rates_history or funding_rate_monthly, nor states 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.
funding_rates_historyARead-onlyIdempotentInspect
Funding rates history (daily snapshots) — Returns the daily historical perpetual futures funding rate for a single token over the last N days (default 30, max 180). Rates are sourced from Gate.io, MEXC, and Kraken, recorded once per day from the live 5-min funding-rate cycle. Top 10 tokens by volume are snapshotted: BTC, ETH, SOL, BNB, XRP, DOGE, ADA, AVAX, LINK, DOT. Each day includes per-exchange rates (gateio/mexc/kraken) plus a derived avg and sentiment label. Sentiment: avg > 0.05% = bearish (leveraged longs paying shorts → market top signal); avg < -0.01% = bullish (shorts paying longs → market bottom signal); otherwise neutral. Use ?symbol=BTC&days=30 (symbol defaults to BTC; days is 1–180). Cold-start days with no data are omitted. Cached 5min. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent days to return (1–180, default 30). | |
| symbol | No | Token symbol to look up (BTC, ETH, SOL, BNB, XRP, DOGE, ADA, AVAX, LINK, DOT). Case-insensitive. Defaults to BTC. | BTC |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| symbol | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable context beyond annotations: data sources (Gate.io, MEXC, Kraken), daily snapshot method, cold-start omission, cache duration, and the sentiment-label thresholds. 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 and front-loaded with the core purpose, and nearly every sentence adds useful context. It is somewhat long and repeats default/max information, but the content is relevant and organized in a logical flow from result to semantics to usage.
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, return-value documentation is not needed. The description covers token universe, data sources, sampling frequency, derived fields, sentiment meaning, caching, edge cases like cold-start days, and alternative tools, making it complete for an agent deciding to call it.
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 high, so the baseline is 3, but the description adds meaningful usage details: case-insensitive symbols, example query, default values, and sentiment threshold interpretation. However, it introduces a discrepancy by saying max 180 while the schema maximum is 90, preventing a perfect score.
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: returns daily historical perpetual futures funding rates for a single token over N days. It also distinguishes itself from sibling tools by naming the live snapshot tool and monthly tool as covering different time horizons.
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?
Explicitly says 'Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' It also gives defaults, ranges, and an example query, leaving no doubt about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gasARead-onlyIdempotentInspect
Get real-time gas prices across 7 chains — ETH, SOL, BNB, Base, ARB, Polygon, AVAX with USD fee estimates — Current gas/transaction fees across ETH, SOL, BNB, Base, ARB, Polygon, and AVAX, with USD estimates per speed tier. 30s cache; check meta.cacheAgeSeconds for exact age. meta.chainCount tells how many networks are in the current response.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Response freshness metadata. 30s cache; check `meta.cacheAgeSeconds` for exact age. |
| networks | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavior beyond that: the 30-second cache, the meta.cacheAgeSeconds freshness check, and the meta.chainCount semantics. 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 chain list and 'USD estimates' are repeated almost verbatim: the first clause lists the 7 chains with USD fee estimates, and the following clause repeats the chains and USD estimates. This redundancy wastes a sentence, though the key cache and meta information is still 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?
For a parameterless, read-only tool with an output schema present, the description is complete: it lists the chains, explains freshness semantics, and documents the relevant meta fields. Nothing an agent needs to invoke this 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?
The input schema has zero parameters, so the baseline for this dimension is 4. The description reinforces that no input is required by describing exactly what the response covers.
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 uses a specific verb and resource ('Get real-time gas prices') and enumerates the seven supported chains, so an agent knows exactly what the tool returns. It does not contrast itself with the sibling gas_price_history, so it stops short of a 5.
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 phrase 'real-time gas prices' plus the '30s cache' clearly establishes this tool as the current-state counterpart to historical tools. However, it never explicitly says 'use this instead of gas_price_history when you need current fees', so exclusion guidance is implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gas_price_historyARead-onlyIdempotentInspect
Get daily gas price history — ETH/BNB/ARB/POLY/BASE fast gwei + SOL lamports over up to 90 days — Daily historical gas prices across 7 blockchain networks. One row per day: ETH fast gwei, ETH standard gwei, BNB fast gwei, ARB fast gwei, POLYGON fast gwei, BASE fast gwei, and SOL priority fee in lamports. Useful for tracking gas fee trends and identifying high/low gas periods. DB-backed, 5-min cache. Powered by gas_price_daily table (365d retention, permanent monthly archive). — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: DB-backed, 5-min cache, 365-day retention, permanent monthly archive, and one-row-per-day format.
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 and then expands into data details and usage guidance. It is somewhat dense with repeated mentions of 'gwei' and a long network list, but every sentence contributes value and the structure is logical.
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, annotations covering safety, and a single fully documented parameter, the description supplies all needed context: data scope, retention, freshness, and routing to sibling tools. An agent can correctly invoke this tool with no missing information.
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 the 'days' parameter with min, max, default, and a clear description, giving 100% schema coverage. The description mentions 'up to 90 days' but adds no new semantic meaning beyond what the schema provides, so the baseline score 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 opens with a specific verb and resource: 'Get daily gas price history' and enumerates the exact networks and metrics (ETH/BNB/ARB/POLY/BASE fast gwei, SOL lamports). It clearly differentiates from siblings by explicitly contrasting with the live snapshot tool and monthly tool.
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?
Explicit usage guidance is provided: 'Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' This tells an agent exactly when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
golden_alerts_historyARead-onlyIdempotentInspect
Golden Alerts history (daily summaries) — Returns a daily summary of Golden Alerts for the last N days (default 30, max 180). Each day's entry includes the total alert count plus a breakdown by severity (high/medium/low) derived from alert confidence scores (≥75 = high, ≥50 = medium, <50 = low), and the top tokens that appeared most frequently in alerts that day. Backfilled from 17 days of real signal_history data (confidence scores from 49,000+ on-chain signals). Data is persisted once per 5-min alert cycle via ON CONFLICT DO UPDATE so each day's entry reflects the latest alert state at last refresh. Days with no data are omitted from the history array. Use ?days=N to control the look-back window (1–180, default 30). Cached 5min. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent days to return (1–180, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's extra detail is genuinely additive: it discloses the 5-minute refresh cadence, 5-minute cache, omission of days with no data, severity thresholds based on confidence scores, and backfill provenance. No contradiction with annotations exists.
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 main purpose is front-loaded and the structure is readable, but several details are not needed for correct invocation, such as '49,000+ on-chain signals' and the SQL-level 'ON CONFLICT DO UPDATE' implementation. These add bloat even though the overall shape is organized.
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 look-back control, data currency, empty-day behavior, severity derivation, and sibling routing, while the output schema handles return-value details. It is nearly complete, but the contradictory max-days value prevents a perfect score because it undermines safe autonomous usage.
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 description adds context about default and range, but it introduces a critical inconsistency: the description says 'max 180' and '1–180, default 30,' while the input schema declares 'maximum': 90. An agent reasoning from the description could issue an invalid request, so the parameter guidance is actively misleading.
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: 'Returns a daily summary of Golden Alerts for the last N days.' It also clearly distinguishes this tool from siblings by positioning it against 'the corresponding live snapshot tool' and 'the monthly tool,' so the agent understands exactly what this history variant provides.
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 final sentence gives explicit routing guidance: 'Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' It also explains the ?days=N look-back control, so when to call this tool versus alternatives is directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
golden_alerts_monthlyARead-onlyIdempotentInspect
Golden Alerts permanent monthly archive — Returns the permanent monthly archive of Golden Alert activity — one row per calendar month, aggregated from daily snapshots before they are purged. This archive is never deleted and grows indefinitely, providing AI agents with long-term trend data on alert severity and top tokens across months and years. Each month includes: totalCount (total alerts that month), highCount/mediumCount/lowCount (severity breakdown), topTokens (5 most-active tokens), daysInMonth (days with data), avgPerDay (daily average). Months with fewer than 20 daily records are excluded to ensure statistical accuracy. Data source: CryptoWhaleInsights own signal_history database (49,000+ on-chain signals). No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, and the description adds substantial behavior beyond that: the archive never gets deleted, data is aggregated from daily snapshots before purging, no auth required, 60 req/min rate limit, 5-min cache, and a statistical-minimum exclusion threshold. No contradiction exists.
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 long but every sentence carries distinct information: purpose, aggregation behavior, field list, exclusion rule, data source, auth/rate/cache constraints, and sibling routing. The most important identity information is front-loaded before contextual details.
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-parameter read-only tool with an output schema, the description is complete: it covers what the resource is, how it is computed, what fields it returns, when not to use it, rate limits, caching, authentication, and data provenance. Nothing an agent needs to select or invoke the tool 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?
There are zero parameters, so the baseline is 4. The description goes beyond this by enumerating every output field (totalCount, severity counts, topTokens, daysInMonth, avgPerDay), explaining the monthly aggregation semantics, and stating the minimum-record threshold. This fully compensates for the empty input 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?
Description starts with a specific verb and resource: 'Returns the permanent monthly archive of Golden Alert activity.' It explicitly distinguishes itself from live/daily-history tools and clarifies the monthly aggregation granularity, making it unmistakable among siblings like golden_alerts_history and golden_alerts_snapshot.
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?
Explicitly states when to use this tool: 'Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.' It also documents the 20-record exclusion rule, which is a concrete selection criterion for using the data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
golden_alerts_snapshotARead-onlyIdempotentInspect
Golden Alerts snapshot — latest market intelligence alerts (public, MCP-compatible) — Returns the latest snapshot of CryptoWhaleInsights Golden Alerts — up to 27 high-signal market alerts refreshed every 5 minutes by the platform's cron job. Each alert represents a confluence of whale on-chain activity, volume momentum, and Fear & Greed context. This endpoint reads directly from the in-process cache (no new AI query triggered per request). Pro-only fields (raw confidence score, internal factors, price targets, exit signals) are intentionally omitted; severity is mapped to low/medium/high for public consumption. Alert types: accumulation | fear_buy | smart_money_loading | volume_breakout | whale_convergence. Severity mapping: high (confidence ≥70%), medium (45–69%), low (<45%). Response: { alerts[], total, refreshedAt (ISO-8601 or null if cache empty), updatedAt }. Each alert: id, title, type, severity, tokens (string[]), chains (string[]), summary, aiInsight, analystId (string | null), createdAt. No authentic
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Number of alerts in the snapshot |
| alerts | No | Golden Alerts sorted by severity (highest first), up to 27 entries. |
| updatedAt | No | Response generation timestamp |
| attribution | No | |
| refreshedAt | No | When the cron job last populated the cache; null if cache is empty |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Richly discloses behavior beyond the readOnly/idempotent annotations: reads from cache with no AI query, omits pro-only fields, maps severity thresholds, and defines alert types. It also outlines the response shape and field meanings, all 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?
The description is dense but mostly efficient, packing cache behavior, alert types, severity mapping, and response schema into a compact block. Minor redundancy exists in repeating "snapshot" and "latest" early on, and the final sentence is truncated at "No authentic," which is a structural blemish.
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 thorough for a zero-param read-only endpoint: refresh cadence, cache semantics, field omissions, alert taxonomy, and severity thresholds are all covered. The only gap is the unfinished sentence about authentication, which may leave an agent uncertain about access requirements.
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 tool has zero parameters, so the description adds all necessary semantic context and the baseline of 4 applies. No parameter documentation is needed beyond what the empty schema states.
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 "Returns the latest snapshot of CryptoWhaleInsights Golden Alerts," giving a specific verb, resource, and scope. It further differentiates from siblings like golden_alerts_history and golden_alerts_monthly by emphasizing "latest," "refreshed every 5 minutes," and "up to 27 high-signal market alerts."
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 clearly establishes this tool is for the current snapshot by stating it reads from an in-process cache and refreshes every 5 minutes, implying use when current state is needed. It does not explicitly name alternative tools for historical data, but the "latest snapshot" framing gives sufficient situational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leverage_historyARead-onlyIdempotentInspect
Get daily Leverage Radar market-level history — avg/max pressure score, setup score, assets in critical zone, dominant regime, Fear & Greed over up to 90 days — Daily historical Leverage Radar market aggregates. One row per day: average pressure score across 30 tracked assets, maximum single-asset pressure, average setup score, count of assets in critical zone (≥76), dominant market regime, Fear & Greed index, and top-pressure asset symbol. DB-backed, 30-min cache. Pro-only per-asset detail excluded — market-level only. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description adds substantial context: DB-backed storage, a 30-minute cache, one row per day, 30 tracked assets, the critical-zone threshold (≥76), and Pro-only per-asset detail exclusion. No contradiction with annotations exists.
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?
Front-loaded with a clear summary and structured with concrete details, but slightly redundant: 'Daily historical Leverage Radar market aggregates' repeats the opening, and the aggregate list appears twice (once as a preview, once with specific values and threshold). Still compact and functional.
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 one-parameter tool with no required params and a full output schema, the description covers data frequency, cache behavior, metric semantics, critical-zone threshold, scope limitations, and routing guidance. Nothing essential 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 single `days` parameter already has complete schema coverage with range and default in the input schema. The description only lightly restates 'up to 90 days' and daily scope, adding no meaningful parameter semantics beyond the schema, so 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?
Names a specific verb and resource ('Get daily Leverage Radar market-level history') and enumerates the exact aggregates returned, including pressure scores, setup score, critical-zone count, regime, and Fear & Greed. It is clearly distinguishable from live-snapshot and monthly trend 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?
The closing sentence explicitly directs the agent to use this tool for daily historical data, a live snapshot tool for current conditions, and a monthly tool for long-term trends. However, it refers to those alternatives generically rather than naming the exact sibling tools, so the guidance is strong but slightly less precise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leverage_picks_summaryARead-onlyIdempotentInspect
Get Leverage Radar pick accuracy summary — historical win rate, avg return, and total pick counts across all recorded Best Trade Now picks — Aggregate accuracy statistics for all 'Best Trade Now' picks recorded by the Leverage Radar tool. Picks are saved automatically every 5 minutes when a high-confidence setup (score ≥ 60) is detected across 1h/4h/12h windows. Outcome is resolved after the close window elapses using live price data: win = +1.5% return for buy / −1.5% for sell. Records are permanent (never deleted) — this is a live data-provider proof-of-accuracy archive. Full pick list with entry/exit prices is Pro-only. 30-min cache.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| wins | No | Picks classified as win. |
| losses | No | Picks classified as loss. |
| windows | No | Trading windows tracked: 1h (scalp), 4h (swing), 12h (position). |
| neutrals | No | Picks within ±1.5% (neutral). |
| updatedAt | No | |
| dataSource | No | |
| totalPicks | No | Total picks ever recorded (pending + resolved). |
| winRatePct | No | Win rate as a percentage (0–100). Null until first resolved picks exist. |
| attribution | No | |
| avgReturnPct | No | Average return % across all resolved picks (positive = profitable on avg). |
| pendingPicks | No | Picks still awaiting resolution (close window not yet elapsed). |
| resolvedPicks | No | Picks with outcome resolved (close window elapsed). |
| avgWinReturnPct | No | Average return % for winning picks only. |
| winThresholdPct | No | Return threshold used to classify a pick as win/loss (currently 1.5%). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, idempotentHint, destructiveHint false) cover safety, and the description adds substantial behavioral detail: picks auto-save every 5 minutes, selection requires score ≥ 60 across 1h/4h/12h windows, win is defined as ±1.5%, records are permanent, full list is Pro-only, and data is cached for 30 minutes. This goes far beyond structured fields.
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 and information-dense, but the first two sentences are largely redundant: 'Get Leverage Radar pick accuracy summary ... across all recorded Best Trade Now picks' is repeated by 'Aggregate accuracy statistics for all Best Trade Now picks recorded by the Leverage Radar tool.' The rest is valuable, but the repetition keeps it from being maximally tight.
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-parameter read-only tool with an output schema, the description covers data provenance, sampling cadence, win/loss criteria, persistence guarantees, access restrictions, and cache behavior. There is nothing an agent needs to call or interpret this tool that 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?
There are zero input parameters and schema coverage is 100%, so the baseline is 4. The description adds meaning by explaining exactly what data is aggregated (win rate, avg return, counts) and its selection criteria, helping the agent match the tool to user intent even without any params to document.
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 'Get Leverage Radar pick accuracy summary' — a specific verb and resource — and immediately enumerates the exact outputs: 'historical win rate, avg return, and total pick counts'. It clearly differentiates from siblings like leverage_history and leverage_radar by focusing on aggregated accuracy statistics rather than raw signals or history.
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 very clear context: this is for aggregate accuracy stats on 'Best Trade Now' picks, resolved against live price data. However, it never explicitly names alternatives or states when not to use it, so the agent must infer routing from the sibling list rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leverage_radarARead-onlyIdempotentInspect
Get current Leverage Radar snapshot — pressure scores, setup scores, top long/short setups, and market summary for 50 tracked assets — Public real-time snapshot of the Leverage Radar tool. Returns pressure score (0-100, how overleveraged each asset is) and setup score (0-100, how good a leveraged trade opportunity looks) for 50 tracked assets across majors, L2s, DeFi, and meme tokens. Includes market summary (overall bias, avg scores, Fear & Greed, market regime, whale buy/sell counts), top 5 long setups, top 5 short setups, and top 5 pressure alerts. Pro-only fields stripped: whale X multiplier, exact whale USD volumes, detailed setup factors, and Best Trade Now recommendation. 5-min cache. Supports ?window=1h|4h|12h (default 4h).
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Trading window: 1h (scalp), 4h (swing, default), 12h (position). | 4h |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| window | No | Trading window used for computation. |
| assetCount | No | Total assets tracked (50). |
| computedAt | No | |
| disclaimer | No | |
| attribution | No | |
| windowHours | No | Window in hours. |
| marketSummary | No | |
| topLongSetups | No | |
| pressureAlerts | No | |
| topShortSetups | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond that: the 5-minute cache, that this is the public tier with pro-only fields stripped, and that content is restricted to 50 assets. The only minor tension is calling it 'real-time' while noting a 5-min cache, but the cache is disclosed clearly.
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 adds information: asset coverage, score meanings, market summary contents, stripped fields, cache duration, and window flexibility. It is slightly long but well-organized and free of 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?
Given an output schema exists and only one optional param is present, the description covers everything an agent needs: what the snapshot contains, its asset universe, its limitations (pro fields stripped), freshness (5-min cache), and the window parameter. There are no critical gaps for 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?
Schema coverage is 100% and the only parameter, window, already has enum values, a default, and per-window descriptions. The description merely repeats 'Supports ?window=1h|4h|12h (default 4h)', adding no semantic 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 names a specific resource ('Leverage Radar snapshot'), uses a clear verb ('Get'), and enumerates the exact output: pressure scores, setup scores, top long/short setups, and a market summary for 50 assets. The emphasis on 'current' and 'real-time snapshot' distinguishes it from historical sibling tools such as leverage_history.
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 provides clear context: a public, current snapshot with a 5-minute cache, stripped pro-only fields, and a selectable window. However, it never explicitly names an alternative tool or states when NOT to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liquidationsARead-onlyIdempotentInspect
Get leveraged-position liquidation estimates — long and short liquidation amounts in USD per token (5-min cache) — Estimated leveraged-position liquidations by token — how much USD in long positions and short positions were force-liquidated recently. Useful for identifying tokens with high leverage risk and likely volatility triggers. Derived from market price action and open interest data. Cached ~5min. Note: these are estimates, not exact exchange data (Binance Futures and Bybit are geo-restricted from the server).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tokens | No | |
| updatedAt | No | |
| attribution | No | |
| binanceSources | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful behavioral detail: a ~5-minute cache, estimates rather than exact exchange data, geo-restrictions for Binance Futures and Bybit, and derivation from price action and open interest. This goes well beyond the structured 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 purpose, but it contains redundancy: the 5-minute cache is mentioned twice ('(5-min cache)' and 'Cached ~5min'), and the first two sentences both restate 'long and short liquidation amounts in USD per token'. Trimming would improve precision.
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-parameter tool with an output schema and a read-only annotation profile, the description covers everything needed to invoke it correctly: what is returned, token-level granularity, recency, cache behavior, estimate caveat, and geo-restrictions. Nothing essential 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?
With zero parameters, the baseline is 4, and the description correctly avoids inventing parameter details. No parameter explanation is required, so this dimension is satisfied by the design rather than the prose.
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 gives a specific verb and resource ('Get leveraged-position liquidation estimates') and concretely defines the output as long and short liquidation amounts in USD per token. It is clear even without naming siblings, but it does not explicitly distinguish itself from related leverage tools like leverage_radar, so it earns a 4 rather than a 5.
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 phrase 'Useful for identifying tokens with high leverage risk and likely volatility triggers' gives a clear, actionable context for when to call this tool. It doesn't state when not to use it or point to alternatives, so it falls short of the explicit routing standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_statsARead-onlyIdempotentInspect
Get live activity counters — whale moves today, smart-money wallets active, golden alerts (10s cache) — Live activity snapshot for the platform (real recent counts, no fabricated floors). Cached ~10s. Response includes meta.updatedAt and meta.cacheAgeSeconds (derived from the underlying whale-copy-signals cache timestamp; 0 when the cache is cold).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Response freshness metadata. 10s cache; check `meta.cacheAgeSeconds` for exact age. |
| attribution | No | |
| activeAlerts | No | |
| whaleMovesToday | No | |
| smartMoneyWallets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds meaningful behavioral detail: a ~10s cache, a claim of 'real recent counts, no fabricated floors,' and explanation of returned meta fields, including cacheAgeSeconds. This goes well beyond what annotations already declare and helps the agent understand freshness and trustworthiness.
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 and front-loaded: the core purpose appears first, followed by caching and response metadata. Each sentence adds distinct information without padding or redundancy, and the internal details are relevant to an agent's decision-making.
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-parameter, read-only, cached snapshot tool with an output schema, the description covers key operational traits: cache behavior, response freshness fields, and data authenticity. No additional guidance is necessary for a correct call, since no parameters or prerequisites exist.
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 tool has zero parameters, so the description has no parameter semantics to explain. The baseline for 0-parameter tools is 4, and the description's focus on output metadata is appropriate and sufficient.
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 uses a specific verb ('Get') and names concrete resources ('whale moves today, smart-money wallets active, golden alerts'), making the tool's scope immediately clear. It also frames the tool as a 'live activity snapshot for the platform,' which distinguishes it from historical or summary tools in the sibling list.
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 context is implied through 'Live activity snapshot' and 'real recent counts,' suggesting this is the real-time counter tool rather than a historical or aggregated view. However, it does not explicitly name alternatives or state when-not-to-use it, which matters given many nearby siblings like whale_activity, golden_alerts_snapshot, and platform_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_contextARead-onlyIdempotentInspect
Get aggregated market context for a date in one call — Fear & Greed, whale summary, sentiment, stablecoin flows, funding rates, golden alerts, analyst summaries (8 sources parallel) — Single-call aggregated market snapshot for a given date. Queries 8 data sources in parallel — Fear & Greed, whale daily summary, social sentiment (BTC/ETH/SOL), stablecoin flows, BTC funding rates, Golden Alerts daily count, analyst daily summaries (shortSummary only), and top arbitrage opportunities. No authentication required. Use ?date=YYYY-MM-DD (default = today; max 730 days back / 2 years). For dates older than 365 days where daily snapshots have been purged, the endpoint automatically falls back to the permanent monthly archive tables, returning monthly averages instead of daily values. metadata.resolution indicates 'daily' (exact day data) or 'monthly' (monthly averages from archive). metadata.dataCompleteness is the percentage of the 8 sources that have data for the requested date (0-100%). Today is cached 5 minutes; hi
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date to retrieve (YYYY-MM-DD). Defaults to today. Max 730 days back (2 years). Dates older than 365d automatically use monthly archive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | Requested date (YYYY-MM-DD) |
| metadata | No | |
| arbitrage | No | |
| fearGreed | No | Fear & Greed index for the date (daily score or monthly avg when resolution=monthly). |
| sentiment | No | Social sentiment for BTC, ETH, SOL (daily score or monthly avg when resolution=monthly). |
| updatedAt | No | |
| stablecoin | No | Stablecoin flow snapshot for the date. |
| attribution | No | |
| fundingRates | No | BTC perpetual funding rate summary for the date (daily or monthly avg). |
| goldenAlerts | No | Golden Alerts daily summary for the date. |
| whaleSummary | No | Aggregated whale movement counts for the date. |
| analystSummaries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds substantial behavioral context beyond them: queries 8 sources in parallel, falls back to monthly archive tables for old dates, and exposes metadata.resolution and metadata.dataCompleteness. It also notes caching for today. This is a rich behavioral disclosure with 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 information-dense but structurally redundant: the opening sentence and the following em-dash phrase both announce 'single-call aggregated snapshot', and the 8-source list appears twice. The ending appears truncated ('Today is cached 5 minutes; hi'), suggesting incomplete cleanup. The content is organized logically thereafter, so it earns a mid-range score rather than lower.
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 tool with one optional parameter and an existing output schema, the description covers all operational essentials: date format, default, time range, fallback behavior, response metadata fields, data completeness semantics, and caching. The only visible flaw is the truncated last phrase, which does not materially affect completeness for the agent's decision.
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 schema already covers the single optional date parameter at 100%, so baseline is 3. The description adds value beyond the schema by explaining the default (today), the max lookback (730 days), and the automatic fallback to monthly averages for dates older than 365 days. That extra guidance justifies a 4.
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 specifies a clear verb-resource pair: 'Get aggregated market context for a date in one call' and enumerates the exact set of data sources queried. It differentiates itself from the many sibling endpoints (fear_greed, funding_rates) by emphasizing the single-call aggregation of 8 sources. Repeated phrasing, e.g. 'Single-call aggregated market snapshot', reinforces purpose without ambiguity.
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 provides concrete invocation guidance: use ?date=YYYY-MM-DD, default is today, max 730 days back, and behavior for dates older than 365 days. It clearly implies use this when an aggregated snapshot across multiple market dimensions is wanted rather than calling individual endpoints. It does not explicitly name alternative tools or state 'when not to use', so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_heatmapARead-onlyIdempotentInspect
Get token market heatmap — top tokens ranked by 24h performance with volume, market cap, chain (5-min cache) — Market-wide token heatmap: top tokens by 24h volume with price change, volume, market cap, and chain, blended from CoinGecko top markets plus emerging/hidden-gem tokens. Non-gated. Cached ~5min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| chains | No | |
| tokens | No | |
| attribution | No | |
| lastUpdated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds meaningful behavioral context: results are cached for ~5 minutes, access is non-gated, and data is blended from CoinGecko top markets plus emerging/hidden-gem tokens. This helps an agent set expectations about freshness and coverage.
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 repeats itself: the opening phrase and the following clause both say the same thing about a market-wide heatmap with tokens, volume, market cap, and chain. It also creates ambiguity by saying 'ranked by 24h performance' first and then 'top tokens by 24h volume,' which are not clearly the same ranking.
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 no required parameters and an output schema present, the description covers most of what an agent needs: data fields, geo/access status, cache cadence, and source. However, the conflicting ranking phrasing ('24h performance' vs '24h volume') leaves the agent uncertain about how results are ordered.
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 tool has zero parameters, so parameter semantics are inherently non-issue. The description enriches the call by describing what the heatmap contains without needing to explain any inputs.
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?
Uses a specific verb and resource ('Get token market heatmap') and clearly states the returned data: top tokens, 24h performance, volume, market cap, chain. It distinguishes itself from sibling tools reasonably well, though it does not explicitly contrast with overlapping tools like market_context or trending.
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?
Provides useful context such as 'Market-wide token heatmap' and 'Non-gated', implying this is a general-purpose broad market snapshot with no authentication requirement. However, it never explicitly states when to use this tool instead of alternatives or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_historyARead-onlyIdempotentInspect
Get daily Market Pulse history — BUY/SELL/NEUTRAL verdict, confidence %, Fear & Greed, regime, whale buy ratio, leverage suggestion over up to 90 days — Daily historical Market Pulse verdict and confidence. One row per day: BUY/SELL/NEUTRAL verdict, confidence percentage, Fear & Greed score, market regime (Bull/Bear/Sideways/Accumulation), whale buy ratio (0-1), average leverage pressure score (0-100), and leverage suggestion. DB-backed, 5-min cache. Powered by market_pulse_daily table (365d retention, permanent monthly archive). — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description adds useful behavioral context: DB-backed storage, a 5-minute cache, 365-day retention with monthly archive, and one row per day. It does not contradict 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?
The description is repetitive: the first sentence already lists the returned fields, and the second sentence largely repeats BUY/SELL/NEUTRAL verdict and confidence. While the extra detail about cache/retention is useful, a more compact structure would serve the agent better.
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 data is returned, the daily granularity, data source, caching, retention, and when to use alternatives. With an output schema present, this is substantially complete; only exact sibling tool names are 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 only parameter, days, is already described in the schema with default, minimum, and maximum. The description only reiterates 'up to 90 days' and adds no additional semantic meaning, so the high schema coverage carries the weight.
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?
Description begins with a specific verb-resource pair: 'Get daily Market Pulse history'. It enumerates the fields returned and explicitly differentiates this history tool from live/momentary and long-term trend siblings, leaving no ambiguity about what it does.
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?
Explicitly says to use this tool for daily historical data, the live snapshot tool for current conditions, and the monthly tool for long-term trends. It gives clear selection criteria but does not name the exact sibling tool(s), leaving minor routing effort to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
narrative_historyARead-onlyIdempotentInspect
Get daily narrative/sector history — top crypto market sectors ranked by market cap change %, strength, and token count over up to 90 days — Daily historical narrative strength per market sector (e.g. DeFi, Layer 2, AI, Meme Coins) from CoinGecko Categories. One row per day per sector: market cap change %, strength score (0-100), token count in sector, daily rank, and top tokens. Filter by ?sector= for a single sector trend. Useful for identifying which narratives are accelerating or fading. DB-backed, 5-min cache. Powered by narrative_daily table (365d retention, permanent monthly archive). — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). | |
| sector | No | Optional sector name filter (e.g. 'Artificial Intelligence'). Returns all sectors when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| sector | No | Sector filter applied (null = all sectors). |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and open-world, and the description adds meaningful operational context beyond those hints: DB-backed storage, 5-minute cache, 365-day retention, permanent monthly archive, and row-level output structure. Nothing in the description contradicts the annotations, and the data freshness/retention details help agents reason about temporal coverage.
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 and ends with clear alternative routing. It is slightly repetitive ('daily narrative/sector history' and 'Daily historical narrative strength') and uses several em-dashed asides, but every sentence contributes useful information such as cache behavior, retention, and output shape.
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 tool has an output schema, no required parameters, and strong annotations, the description covers everything an agent needs to invoke it correctly: time range, row semantics, sector filtering, data source, cache freshness, retention, and which sibling tool to use for other time horizons. There are no significant contextual gaps.
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 schema already documents both parameters with descriptions: `days` (1–90, default 30) and `sector` (optional filter, returns all sectors when omitted). The description mostly repeats these ideas, adding only a usage nuance ('single sector trend') and an example. With 100% schema coverage, the baseline of 3 applies because the description does not substantially expand parameter meaning 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-resource pairing ('Get daily narrative/sector history') and then enumerates the exact output dimensions: market cap change %, strength score, token count, daily rank, and top tokens. It also explicitly contrasts itself with live snapshot and monthly trend tools, so an agent can distinguish it from sibling tools like 'narratives' without inspecting 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?
The description gives a direct usage directive: 'Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' It also explains that filtering by sector produces a single-sector trend, which gives the agent actionable context for when to include or omit the sector parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
narrativesARead-onlyIdempotentInspect
Get top trending market narrative sectors — AI, RWA, DePIN, memecoins with momentum and top tokens (top 3 free) — Trending market narratives (e.g. AI, RWA, memecoins, DePIN) derived from CoinGecko Categories with their leading tokens. Free preview: top 3 narratives (3 tokens each); the full set requires a Weekly Alpha subscription. Cached ~30min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| updatedAt | No | |
| dataSource | No | |
| narratives | No | |
| attribution | No | |
| requiredTierForFull | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so the description adds meaningful behavioral context beyond that: results are cached ~30 minutes, the full data set requires a Weekly Alpha subscription, and the free preview is limited to 3 narratives with 3 tokens each. There is 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 front-loads the main purpose, but it repeats the same example categories (AI, RWA, DePIN, memecoins) and essentially says 'top tokens' and 'leading tokens' twice. The content is not excessive, but some redundancy could be trimmed without losing meaning.
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-parameter, read-only snapshot tool with an output schema and strong annotations, the description is complete enough. It covers the data source, freshness, access tiers, and what the agent can expect in the free response, so no critical calling context 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 tool has zero parameters, so the schema documents everything and the baseline is 4. The description compensates well by explaining the data scope, source, and subscription split, even though there are no parameters to elaborate on.
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 names a concrete resource ('top trending market narrative sectors') with specific examples (AI, RWA, DePIN, memecoins) and a clear derivation source (CoinGecko Categories). It also specifies the deliverable ('leading tokens') and the free-preview limitation, so an agent can distinguish it from unrelated siblings like airdrops or tax_rates.
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 useful context: this is a current snapshot, cached ~30 minutes, with a free preview and a subscription-gated full set. However, it does not explicitly state when to prefer this over narrative_history or trending, nor does it name an alternative, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
platform_statsARead-onlyIdempotentInspect
Get canonical platform metrics — tracked wallets, chains, win rate, BTC benchmark — Canonical platform metrics: tracked wallets, chains, tokens, tools, languages, supported chain list, plus a safe aggregate performance subset (win rate, average return, BTC benchmark). Cached ~60s. Response includes meta.updatedAt (ISO timestamp of when the response was generated).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| live | No | |
| meta | No | Response freshness metadata. |
| chains | No | |
| chainList | No | |
| freeTools | No | |
| languages | No | |
| updatedAt | No | |
| attribution | No | |
| dataSources | No | |
| performance | No | Aggregate signal performance metrics. |
| tokensTracked | No | |
| trackedWallets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, open-world, and non-destructive. The description adds meaningful context about caching ('Cached ~60s') and the response's `meta.updatedAt` timestamp, going beyond the structured fields. No contradiction found.
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?
Front-loaded with the core action and metric categories; the cache and timestamp details are relevant and placed at the end. Minor redundancy—'Canonical platform metrics' appears twice—keeps it from being perfectly concise.
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 no parameters, rich annotations, and an output schema, the description covers the remaining needed context: caching behavior, response freshness, and metric scope. It doesn't explain how to interpret win rate or BTC benchmark, but the output schema and 'safe aggregate performance subset' wording make that acceptable.
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 tool has zero parameters and schema coverage is 100%, so there is no parameter burden on the description. The description's enumeration of returned metric categories still adds useful semantic context by clarifying what the no-argument call returns.
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?
Opens with a specific verb-resource pair, 'Get canonical platform metrics', and enumerates the exact metric categories (tracked wallets, chains, win rate, BTC benchmark). This makes it clear this is the platform-wide aggregate metrics tool and distinguishes it from sibling analytics tools by scope.
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 word 'canonical' and the explicit metric list imply this is the go-to for platform-level aggregate stats, and 'safe aggregate performance subset' hints at a cautious choice. However, it never names alternative siblings like live_stats or status, nor does it state 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.
recent_whalesARead-onlyIdempotentInspect
Get the latest 3 whale transfers right now — live snapshot across 14 chains (use whale_activity for counts, whale_movements for paginated archive) — The most recent on-chain whale movements detected across supported chains, each with an explorer-verifiable reference. 10-min cache; check meta.cacheAgeSeconds for exact age. meta.chainCount is the number of unique chains represented in the cache; meta.signalCount is the total cached signal count before the top-3 slice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Response freshness metadata. 10-min cache; check `meta.cacheAgeSeconds` for exact age. |
| whales | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context beyond that: a 10-minute cache, the exact meta fields to check for cache age, chain count, and signal count, and the claim that each movement has an explorer-verifiable reference. This is rich and useful, though it does not detail every edge case, so not a 5.
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 and includes all essential guidance in two sentences. It is slightly dense and has minor redundancy ('Get the latest 3 whale transfers' vs 'The most recent on-chain whale movements'), but every segment adds either scoping, alternatives, or meta-field explanation. It is well-structured and compact.
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-parameter read-only tool with an output schema present, the description is complete: it states the exact result count, chain scope, cache behavior, key meta fields, and sibling alternatives. An agent has everything needed to invoke this tool correctly without inspecting schemas further.
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 tool has zero parameters, so the input schema is empty and the baseline is 4. The description does not need to explain parameter semantics, but it still adds meaning by documenting the meta return fields. No deduction is warranted for lack of parameter detail.
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: 'Get the latest 3 whale transfers right now — live snapshot across 14 chains'. It clearly distinguishes itself from siblings by naming whale_activity and whale_movements as alternatives for different needs. An agent can immediately identify what this tool returns and how it differs from nearby 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?
The description explicitly tells the agent when to use alternatives: 'use whale_activity for counts, whale_movements for paginated archive'. This provides clear routing guidance and prevents misuse. It also characterizes this tool as a live, bounded snapshot, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reports_indexARead-onlyIdempotentInspect
Weekly reports index — titles, summaries and dates (public, MCP-compatible) — Returns a public index of the last 12 weekly Alpha reports: title, a short plain-text summary (≤300 characters), the publish date, and the week covered. Full report content (HTML in 5 languages) remains Pro-only on GET /api/content/weekly-reports. AI agents can use this endpoint to inform users about recent report topics and dates without any authentication. Response: { reports[], total, updatedAt }. Each report: id (string), title (string), summary (string, ≤300 chars), publishedAt (ISO-8601), weekOf (YYYY-MM-DD). No authentication required. Cached 1 hour (reports are generated weekly). 60 requests/min rate limit.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Number of reports returned (≤12). |
| reports | No | Weekly report metadata in reverse-chronological order (newest first). Maximum 12 entries. |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds critical behavioral details: no authentication required, caching for 1 hour, 60 requests/min rate limit, and that reports are generated weekly. These go beyond the annotations and fully inform the agent of operational constraints.
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 yet well-organized. It front-loads the core purpose, then lists fields, access constraints, caching, rate limits, and response schema. Every sentence adds value with no fluff, achieving high information density without being rambling.
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 tool has no input parameters and an output schema is described inline (response structure). The description covers the purpose, content, access, caching, rate limiting, and response format. Nothing an agent needs to correctly invoke and interpret the response 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?
There are zero parameters, so the baseline is 4. The description compensates by detailing the response structure (reports, total, updatedAt and each report's fields), which is valuable even though there are no inputs to explain.
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 specific verb 'Returns' and the resource 'a public index of the last 12 weekly Alpha reports', listing the exact fields (title, summary, publish date, week covered). It also distinguishes itself from Pro-only content, which differentiates it from potential sibling archive 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?
The description gives clear context: it is public, requires no authentication, and is intended for agents to inform users about recent report topics and dates. It explicitly notes that full report content is Pro-only, implying this endpoint is for summaries. However, it does not explicitly name alternatives or state when not to use it, but the context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sentiment_historyARead-onlyIdempotentInspect
Social sentiment history (daily snapshots) — Returns the daily historical social-sentiment score for a single token over the last N days (default 30, max 180). Data is sourced from CryptoWhaleInsights' own in-house Social Sentiment engine (Stocktwits + CoinGecko + price-momentum — no Twitter API). Each day is recorded once per day from the live 5-min sentiment cycle. Cold-start days with no data are omitted. Use ?symbol=BTC&days=30 (symbol is required; days is optional 1–180). Supported symbols: BTC, ETH, SOL, BNB, XRP, ADA, DOGE, AVAX, MATIC, DOT, LINK, UNI, ATOM, ARB, OP, SUI, SEI, NEAR, APT, PEPE, WIF, BONK, FET, RENDER, TAO, AAVE, MKR, LDO, INJ, TON, STX, TIA, PYTH, BLUR, MINA, and more. Score is 0–100 (≥60 bullish, ≤40 bearish). Cached 5min. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent days to return (1–180, default 30). | |
| symbol | Yes | Token symbol to look up (e.g. BTC, ETH, SOL). Case-insensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| symbol | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context beyond those: the data source (Stocktwits + CoinGecko + price-momentum, no Twitter API), the once-per-day recording from a 5-min cycle, omission of cold-start days, score thresholds (≥60 bullish, ≤40 bearish), and 5-minute caching. This is rich, non-redundant context.
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: core behavior, data source, recording cadence, cold-start handling, usage example, supported symbols, score interpretation, cache info, and routing to alternatives. The supported-symbols list is long but useful. It is slightly overstuffed, but the structure front-loads the main purpose and ends with practical 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?
Given the output schema exists and annotations are rich, the description covers the essential runtime behavior: cadence, source, caching, cold-start omissions, score interpretation, and alternatives. The main gaps are the days-range contradiction with the schema and the unnamed live-snapshot sibling, which slightly reduces completeness.
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%, so the baseline is 3. The description does add meaning by listing supported symbols, providing an example, and repeating that symbol is required. However, it claims 'max 180' and 'days is optional 1–180' while the schema's numeric maximum is 90. This direct contradiction could cause an agent to pass invalid values (e.g., days=180) and fail invocation.
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: 'Returns the daily historical social-sentiment score for a single token over the last N days.' It clearly distinguishes itself from siblings by stating it is for daily historical data, while live conditions and long-term trends belong to other tools. The scope (single token, daily snapshots) is 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?
The description gives a concrete invocation example ('?symbol=BTC&days=30'), states that symbol is required and days is optional, and explicitly says to use the live snapshot tool for current conditions and the monthly tool for long-term trends. However, it refers to 'the corresponding live snapshot tool' generically rather than naming the exact sibling, leaving some mapping to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sentiment_monthlyARead-onlyIdempotentInspect
Social sentiment permanent monthly archive — Returns the permanent monthly archive of social sentiment per token — one row per token per calendar month, aggregated from daily snapshots before purge. Never deleted; covers 35 tracked tokens. Optional ?symbol=BTC to filter by token. Each row includes: month, symbol, avgScore (0–100), dominantSentiment (bullish/neutral/bearish), daysInMonth. Months with fewer than 20 daily records are excluded. No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Token symbol to filter by (e.g. BTC, ETH). Omit to return all 35 tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| symbol | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' safety hints, the description discloses data lineage ('aggregated from daily snapshots before purge', 'Never deleted'), coverage ('35 tracked tokens'), an exclusion threshold ('fewer than 20 daily records'), and operational constraints ('No authentication required. 60 req/min. 5-min cache'). This is substantial added context.
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 yet each sentence adds distinct value: core function, aggregation source, retention, coverage, filter, output columns, exclusion rule, auth/rate/cache, and usage routing. The main purpose is front-loaded before the technical details.
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 one optional parameter, an output schema, and safety annotations already present, the description covers the only remaining contextual decisions an agent needs: long-term vs live/daily use, output row shape, coverage, and operational limits. Nothing essential 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%: the schema already documents the optional symbol filter, examples, and the 'omit to return all 35 tokens' behavior. The description repeats the optional ?symbol=BTC example but adds little new parameter-level meaning 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 'Returns the permanent monthly archive of social sentiment per token' and specifies the row granularity ('one row per token per calendar month'), making the verb, resource, and scope unambiguous. It also distinguishes itself from sibling tools by labeling this the permanent monthly archive versus live or daily-history alternatives.
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 explicitly states when to choose this tool: 'Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.' This gives clear use cases, but it does not name specific sibling tool IDs, leaving some identification to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_history_monthlyARead-onlyIdempotentInspect
Analyst signal performance permanent monthly archive — Returns the permanent monthly archive of analyst signal performance — one row per analyst per calendar month, aggregated from signal_history before months age out. Never deleted; covers all 10 CryptoWhaleInsights analysts (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse). Optional ?analystId=chain_hawk to filter by a single analyst. Each row includes: month, analystId, totalSignals, winCount, lossCount, neutralCount, winRate (0–1 fraction), avgReturn (%, wins only), topSignalType, daysInMonth. Months with fewer than 5 signals are excluded. No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
| analystId | No | Analyst ID to filter by (e.g. chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse). Omit for all analysts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| analystId | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, open-world, idempotent, and non-destructive profile. The description adds substantial non-obvious behavior: aggregation before months age out, never-deleted retention, exclusion of months with fewer than 5 signals, no authentication, 60 req/min rate limit, and 5-min cache. This goes well beyond what annotations provide.
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 long but information-dense, with purpose front-loaded and usage routing at the end. It loses a point for redundancy: 'permanent monthly archive' appears twice in the opening, and the full field list and analyst ID list duplicate structured schema/output schema 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?
With an output schema present, field enumeration is not strictly required, yet the description adds valuable interpretation (winRate as 0–1 fraction, avgReturn as % wins only), the <5 signal exclusion, archive retention semantics, coverage of all 10 analysts, and rate/cache limits. An agent has everything needed to invoke this 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% and the schema already documents analystId, including the allowed IDs and omit-for-all behavior. The description repeats this with the example '?analystId=chain_hawk' but adds no genuinely new parameter 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 opens with 'Returns the permanent monthly archive of analyst signal performance', naming a specific resource and aggregation level ('one row per analyst per calendar month'). The 'permanent' and 'Never deleted' framing distinguishes this from live or daily-history tools, and the final sentence explicitly routes to those alternatives.
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?
Provides explicit when-to-use guidance: 'Use this for long-term monthly archive data' and explicit when-not-to-use guidance: 'use the corresponding live or daily-history tool for current or finer-grained data.' This clearly selects between this tool and its siblings without leaving the decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stablecoin_flowsARead-onlyIdempotentInspect
Get current stablecoin supply & 24h net flows — USDT, USDC, DAI from DefiLlama (use stablecoin_history for daily time-series) — Current stablecoin circulating supply plus 24h net change (positive = expansion/inflow, negative = contraction/outflow) for USDT, USDC, DAI, and other major stablecoins, sourced from DefiLlama stablecoins.llama.fi. Use this endpoint for the current snapshot; use /api/public/stablecoin-history for daily time-series data (up to 180 days); use /api/public/stablecoin-monthly for long-term monthly trends. Cached ~30min.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| stables | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the description only needs to add non-obvious context. It adds the 24h net-change sign semantics (positive = expansion/inflow, negative = contraction/outflow), the DefiLlama source, and a ~30-minute cache indicator, all valuable beyond 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?
The description is front-loaded with the core action and data scope, then routes to sibling tools and ends with cache freshness. There is minor redundancy in mentioning USDT/USDC/DAI twice and DefiLlama twice, but the structure remains efficient and scannable.
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 that the tool has zero parameters, an output schema exists to describe the return shape, and annotations handle the safety profile, the description fully covers what an agent needs: data scope, source, snapshot semantics, sibling routing, and cache behavior. Nothing essential 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?
There are no parameters, so the input schema already covers 100% and there is nothing parameter-specific to document. The baseline of 4 for zero-parameter tools applies; the description still adds useful scope by naming the stablecoin set included.
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 a specific verb ('Get'), a concrete resource ('current stablecoin supply & 24h net flows'), and the covered stablecoins (USDT, USDC, DAI). It also names the sibling alternatives, stablecoin_history and stablecoin_monthly, making the current-snapshot purpose unmistakable.
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?
Explicitly says 'Use this endpoint for the current snapshot' and routes the agent to /api/public/stablecoin-history for daily time-series and stablecoin_monthly for monthly trends. This gives clear when-to-use versus alternative guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stablecoin_historyARead-onlyIdempotentInspect
Get daily historical stablecoin supply changes — net inflow/outflow per day over up to 180 days (use stablecoin_flows for the current snapshot) — Returns the daily historical stablecoin net-flow and total supply over the last N days (default 30, max 180). Each day is recorded once from the live DefiLlama stablecoin cycle. Cold-start days with no data are omitted. totalFlow24h is the net USD change in stablecoin supply that day (positive = expansion / inflow, negative = contraction / outflow). totalNow is the aggregate stablecoin market cap in USD at snapshot time. signal is bullish | bearish | neutral based on the 7-day net flow. Use ?days=30 to control the window. Cached 5min. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent days to return (1–180, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read-only, idempotent operation. The description adds meaningful behavior: cold-start days are omitted, data is cached for 5 minutes, the signal is based on 7-day net flow, and totalFlow24h/totalNow semantics are defined. This far exceeds what annotations alone provide.
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 longer than strictly necessary, with some repetition between the opening sentence and the later 'Returns...' sentence. However, it is logically organized and every substantive detail — data omission, signal rules, caching, sibling routing — earns its place. It is not bloated enough to warrant a 3.
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 single-parameter, read-only tool with a rich output schema and extensive annotations, the description is nearly complete. It explains return semantics, missing-data behavior, caching, and alternatives. The only completeness gap is the inconsistent max days value, which prevents a perfect score.
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 schema already covers the days parameter 100%, so the baseline is 3. However, the description introduces a harmful inconsistency: it says 'max 180' and 'up to 180 days', while the input schema sets maximum to 90. This conflicting guidance could cause an agent to request an invalid window, making the description misleading rather than helpful.
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 starts with a clear verb and resource: 'Get daily historical stablecoin supply changes.' It explicitly distinguishes itself from stablecoin_flows (current snapshot) and stablecoin_monthly (long-term trends), so an agent can identify which sibling tool to choose.
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 stablecoin_flows for the current snapshot', 'Use this for daily historical data', and 'use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.' It tells the agent exactly when to choose this tool over named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stablecoin_monthlyARead-onlyIdempotentInspect
Stablecoin flow permanent monthly archive — Returns the permanent monthly archive of stablecoin flow data — one row per calendar month, aggregated from daily snapshots before purge. Never deleted; provides AI agents with long-term macro liquidity context. Each month includes: totalNetFlow (sum of daily 24h flows), avgTotalSupply, dominantSignal (bullish/neutral/bearish), bullishDays, bearishDays, neutralDays, daysInMonth. No authentication required. 60 req/min. 5-min cache. — Use this for long-term monthly archive data; use the corresponding live or daily-history tool for current or finer-grained data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds meaningful beyond-annotation context: no authentication required, 60 req/min rate limit, 5-minute cache, never-deleted archive, and aggregation before purge. No contradiction exists.
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 well structured and front-loaded with purpose, followed by field details, operational constraints, and usage guidance. It has minor redundancy in the opening sentence where the tool name and archive concept are repeated, but otherwise every sentence earns its place.
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 purpose, granularity, retention, authentication, rate limits, cache behavior, and output fields. With an output schema present and zero parameters, nothing critical is missing for an agent to select and invoke the tool 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?
The tool has zero parameters and the schema coverage is 100%, so the baseline of 4 applies. The description adds useful semantics about the returned monthly fields but has no parameters to document.
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 returns the permanent monthly archive of stablecoin flow data, with one row per calendar month aggregated from daily snapshots. It also specifies the included fields and distinguishes itself from live or daily-history tools by emphasizing long-term monthly granularity.
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?
Explicitly says to use this tool for long-term monthly archive data and to use the corresponding live or daily-history tool for current or finer-grained data. It does not name the exact sibling tools, but the guidance is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusARead-onlyIdempotentInspect
Check live API & system health — operational/degraded verdict, per-source freshness, MCP tool count — Public health status of all CryptoWhaleInsights data sources, MCP server, and OpenAPI spec. Returns overall verdict (operational/degraded/outage), per-source health with age in seconds, recent 24-hour error count, MCP tool count, and OpenAPI path count. Useful for AI agents and developers to verify the platform is live before making requests. Cached ~30s.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| overall | No | |
| sources | No | |
| checkedAt | No | |
| freshness | No | Per-endpoint cache freshness data. Each entry describes how stale a cached API response is, so AI agents can decide whether to trust the data without making an extra request. |
| attribution | No | |
| mcpToolCount | No | |
| openApiPaths | No | |
| errorCount24h | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds meaningful context beyond that: cached ~30s, per-source age in seconds, 24-hour error counts, and the specific output categories. This fully discloses the tool's observable behavior without contradicting 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 verdict and includes the key output fields, use case, and caching detail in a compact form. There is minor redundancy between the opening summary, the 'Public health status' sentence, and the detailed return list, but nothing is extraneous or bloated.
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 parameterless, read-only health check with an output schema present, the description covers all an agent needs: what it returns, why to call it, and its caching behavior. The output schema handles return structure details, so the description does not need to repeat them.
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 coverage, there are no parameter semantics to explain. The baseline for zero params is 4, and the description appropriately focuses on output and usage instead of inventing parameter details.
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 uses a specific verb ('Check live API & system health') and names the exact resources: all CryptoWhaleInsights data sources, MCP server, and OpenAPI spec. It clearly differentiates this health-status tool from metric-focused siblings like live_stats or platform_stats by emphasizing verdict and freshness rather than data values.
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?
Explicitly states when to use the tool: 'verify the platform is live before making requests.' This gives an agent a clear decision rule. It does not name alternatives or say when not to use it, but for a zero-parameter health check this context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tax_ratesARead-onlyIdempotentInspect
Get crypto capital-gains tax rate brackets by jurisdiction — US, UK, DE, AU, CA, IN, AE, SG (educational reference) — Reference crypto tax-rate brackets across supported jurisdictions (US, UK, DE, AU, CA, IN, AE, SG, OTHER) for the tax calculator. Educational only — not tax advice. Cached ~1hr.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context beyond those annotations: the data is cached for about an hour and is educational-only, which helps an agent set expectations about freshness and appropriate use. No contradiction exists between the description and 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 short and front-loaded, with the core purpose stated first and limitations/caching at the end. However, the jurisdiction list appears twice in slightly different forms, creating minor redundancy that could be tightened without losing 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 zero-parameter read-only tool with an output schema and rich annotations, the description covers everything needed: what data is returned, which jurisdictions are supported, the educational limitation, and the caching behavior. Nothing essential is missing for an agent to select and call this tool 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?
The tool has zero parameters and 100% schema coverage, so the baseline is 4. The description still adds value by enumerating the supported jurisdictions (US, UK, DE, AU, CA, IN, AE, SG, OTHER), which is the most relevant semantic information an agent would need.
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: 'Get crypto capital-gains tax rate brackets by jurisdiction' and then lists the exact supported jurisdictions. This clearly identifies the tool's purpose and differentiates it from the surrounding market-data siblings, none of which focus on tax rates.
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 clear usage context by stating these rates are for 'the tax calculator' and frames the data as 'educational reference.' It also includes an exclusion: 'not tax advice.' It does not explicitly name alternative tools, but none of the siblings appear to be tax-rate related, so this is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trendingARead-onlyIdempotentInspect
Get currently trending crypto tokens — top gainers by 24h volume from DexScreener + CoinGecko merged (5-min cache) — Currently trending tokens sourced from DexScreener + CoinGecko top-50, merged and ranked by 24h volume. 5-min cache; check meta.cacheAgeSeconds for exact age. meta.tokenCount reflects the number of tokens in the current response.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | Response freshness metadata. 5-min cache; check `meta.cacheAgeSeconds` for exact age. |
| tokens | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds meaningful context beyond annotations: the 5-minute cache, the ability to check `meta.cacheAgeSeconds` for exact age, and `meta.tokenCount` semantics, plus the source-merging logic.
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 somewhat redundant: the opening dash-clause and the following sentence both describe the same trending-token sourcing and ranking logic. It is still readable and front-loaded, but the repetition could be trimmed without losing 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 read-only, zero-parameter tool with a rich output schema and comprehensive annotations, the description is complete. It explains the data sources, ranking criteria, cache behavior, and how to interpret two key metadata fields — everything an agent needs to invoke 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?
The tool has zero parameters, so there is nothing for the description to clarify about inputs. The baseline for no-parameter tools is 4, and the description appropriately focuses on explaining the result and metadata rather than parameter behavior.
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 — 'Get currently trending crypto tokens' — and adds the precise ranking method (top gainers by 24h volume from DexScreener + CoinGecko merged). This clearly distinguishes the tool from the broad set of siblings by defining exactly what it returns.
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 phrase 'Get currently trending crypto tokens' provides clear context for when to use this tool. It does not explicitly name alternatives or state when not to use it, but the unique scope (trending by 24h volume, merged sources) makes the usage context evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_activityARead-onlyIdempotentInspect
Get whale activity aggregated by chain and direction — movement COUNTS by day over 1-30 days (not individual transfers; use whale_movements for individual records with amounts) — Aggregated, bounded time-series of recorded whale movements across all 14 supported chains, sourced from our internal signal-history archive. Returns honest movement COUNTS grouped by chain, by money-flow direction (inflow/outflow/transfer/unknown), and by day over a recent window — no per-transaction detail, wallet addresses or explorer links (those stay subscriber-gated at /api/whale-history). Use ?window=N to set the look-back in days (1–30, default 7). Counts only; no USD volume is reported because the archive carries no structured per-move USD figure. Served from cache (no per-request cost). Cached ~5min. — Use this for the current aggregated whale-activity snapshot; use whale_movements for individual transfers or whale_daily_summary for stored daily totals.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Look-back window in days (1–30, default 7). Values outside the range are clamped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| byDay | No | |
| total | No | |
| byChain | No | |
| updatedAt | No | |
| dataSource | No | |
| lastSeenAt | No | |
| windowDays | No | |
| attribution | No | |
| byDirection | No | |
| firstSeenAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: no per-transaction detail, no wallet addresses/explorer links, no USD volume due to missing structured figures, served from cache with no per-request cost, and cached ~5min. These details inform the agent about latency, data freshness, and content limitations. No contradiction with readOnlyHint/idempotentHint.
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 informative, with the core purpose and exclusion first, followed by behavioral details and sibling routing. While long, every clause earns its keep. The heavy use of em-dashes makes it slightly harder to parse than an ideal structured breakdown, so not a 5.
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 a single parameter, rich annotations, and an output schema, the description covers all necessary operational context: data aggregation, look-back window, available chains, caching, subscriber gating, and how it differs from sibling tools. 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 coverage is 100%, so the baseline is 3. The description mentions the ?window=N syntax and its range, but this effectively duplicates the schema's property description, which already covers the default, min, max, and clamping behavior. No new semantic meaning is added.
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 begins with a specific verb and resource ('Get whale activity aggregated by chain and direction') and immediately clarifies the scope as movement COUNTS by day, not individual transfers. It distinguishes itself from whale_movements and whale_daily_summary, making the tool's purpose unambiguous and differentiated from siblings.
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?
Explicitly states when to use this tool ('for the current aggregated whale-activity snapshot') and names alternatives for different needs ('use whale_movements for individual transfers or whale_daily_summary for stored daily totals'). Also notes the subscriber-gated nature of detailed data, which prevents mis-selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_daily_summaryARead-onlyIdempotentInspect
Get daily whale movement counts from the DB — per-chain inflow/outflow totals over N days (use for trend analysis, not individual transfers) — Returns daily aggregated whale movement counts over the last N days (default 30, max 180). Each row covers one UTC day and includes: total_moves (total whale signals recorded), total_usd_value (estimated USD volume from on-chain whale transactions), inflow_count (accumulation / buy-side moves), outflow_count (distribution / sell-side moves), and chains_breakdown (object mapping each chain to its move count for that day). Data is written once per 5-minute cron cycle via an upsert, so today's row is always current. Rows older than 365 days are automatically purged. Use ?days=30 to control the look-back window (1–180). Cached 5min. Answers questions like: 'How many whale moves happened in June?' or 'Which network was most active this week?' — Use this for stored daily whale totals; use whale_activity for the current snapshot or whale_movements for individual transfers.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of recent days to return (1–180, default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, the description adds valuable behavioral context: data freshness via a 5-minute cron/upsert, automatic purge after 365 days, and 5-minute caching. This goes well beyond the annotations 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 description is long but information-dense and front-loaded with the core purpose. It uses several dash-separated asides and duplicative phrasings, but each sentence adds useful behavior, output shape, freshness, or routing context. It slightly overstays conciseness yet remains structured and scannable.
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, the description does not need to spell out return values, but it still does—listing fields such as total_moves, total_usd_value, inflow_count, outflow_count, and chains_breakdown. It also covers retention, caching, and usage alternatives. The only completeness gap is the contradictory max-days value, which prevents it from being fully trustworthy.
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 single 'days' parameter is described in the schema with default, min, and max, so schema coverage is complete. However, the description prose and the schema constraint conflict: the description repeatedly says 'max 180' and '1–180', while the input schema sets maximum to 90. This is a reliability issue because an agent cannot know the actual accepted upper bound.
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: 'Get daily whale movement counts from the DB' and clarifies it returns daily aggregated totals. It also explicitly contrasts with sibling tools by distinguishing stored daily totals from current snapshots and individual transfers, so an agent can tell where it fits.
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 clearly states when to use it: 'use for trend analysis, not individual transfers' and gives a direct routing rule: 'use whale_activity for the current snapshot or whale_movements for individual transfers.' It even provides example questions, making selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_monthly_archiveARead-onlyIdempotentInspect
Whale movements permanent monthly archive — Returns the permanent monthly archive of whale movement activity — one row per calendar month, aggregated from daily whale summaries before they are purged. This archive is never deleted and grows indefinitely, enabling AI agents to answer historical questions like 'in which month were whale movements highest?' across years of data. Each month includes: totalMoves (total whale signals), totalUsdValue (cumulative USD value), inflowCount/outflowCount (directional breakdown), daysInMonth, avgMovesPerDay. Months with fewer than 20 daily records are excluded. Data source: CryptoWhaleInsights own signal_history database (80+ wallets, 14 chains). No authentication required. 60 req/min. 5-min cache.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| months | No | |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, and idempotent, and the description adds substantial behavioral context: the archive is never deleted and grows indefinitely, months with fewer than 20 daily records are excluded, the data source is specified, and rate limits plus cache duration are disclosed. This goes well beyond what annotations alone provide.
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 and each clause contributes useful guidance: purpose, use case, output fields, exclusion rule, data source, authentication, rate limit, and cache. A minor redundancy exists in the opening ('Whale movements permanent monthly archive — Returns the permanent monthly archive'), but it is short and does not obscure the content.
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 tool has no parameters, an output schema exists, and annotations cover safety semantics, the description supplies everything an agent needs to decide when and how to invoke it: historical purpose, row granularity, available fields, data source, exclusion rule, rate limit, and cache. Nothing essential 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 tool has zero parameters, so the input schema requires no clarification. The description goes beyond that by enumerating the returned month-level fields (totalMoves, totalUsdValue, inflowCount/outflowCount, daysInMonth, avgMovesPerDay), which helps the agent understand output semantics. With no parameters, a baseline of 4 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 clear verb and resource: 'Returns the permanent monthly archive of whale movement activity.' It further distinguishes this tool from related siblings by specifying one row per calendar month aggregated from daily whale summaries, and it explicitly frames the historical use case. The opening phrase is slightly redundant with the tool name, but the resource and scope are unmistakable.
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 clearly indicates when to use this tool: for historical questions across years of data, as in 'in which month were whale movements highest?' It does not explicitly name alternatives or state when not to use it, but the historical archive framing implicitly separates it from live or daily whale tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_movementsARead-onlyIdempotentInspect
Public whale movements archive — paginated 1-year history (no auth, MCP-compatible) — Returns a paginated archive of large whale on-chain movements recorded in the CryptoWhaleInsights signal-history database, covering up to 1 year (365 days). This is the public, unauthenticated counterpart to the authenticated /api/whale-history endpoint: it omits the explorerUrl field (Pro-only). AI agents can use this to analyse historical on-chain flow direction (inflow/outflow/transfer) across 14 chains without any credentials. Supported chains (chain filter values): BTC, ETH, SOL, BSC, BASE, ARB, POLYGON, TON, SUI, HYPE, TRX, SEI, INJ, APT. Supported directions (direction filter values): inflow, outflow, transfer. Keyword search: use ?q= to filter by token name, signal summary, or wallet label (case-insensitive, max 100 chars). Example: ?q=USDT returns only moves mentioning USDT; ?q=ETH+Whale+%237 returns moves by that wallet label. USD filter: use ?minUsd= to only return movements at or above that real USD value, e.g. ?
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keyword search (case-insensitive, max 100 chars). Matches against token name, signal summary, or wallet label. Example: q=USDT returns moves mentioning USDT; q=ETH+Whale+%237 returns moves by that wallet label. | |
| page | No | Page number (1-indexed, default 1). | |
| chain | No | Filter by chain. Valid values: BTC, ETH, SOL, BSC, BASE, ARB, POLYGON, TON, SUI, HYPE, TRX, SEI, INJ, APT. Default: all chains. | |
| period | No | Time window: 7d | 30d | 90d | 365d (default 90d). Use 365d to retrieve up to 1 year of history. | 90d |
| direction | No | Filter by flow direction: inflow | outflow | transfer. Default: all directions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | Current page (1-indexed) |
| items | No | Whale movement records in reverse-chronological order. |
| total | No | Total matching records in the window |
| hasMore | No | Whether more pages are available |
| pageSize | No | Fixed at 20 records per page |
| sinceDays | No | Number of days of history returned |
| updatedAt | No | |
| dataSource | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior, and the description adds substantial context: no authentication, 1-year limit, pagination, omission of the Pro-only explorerUrl field, and filter semantics. This goes well beyond what the structured annotations already convey.
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 important qualifiers, but the first two sentences redundantly repeat 'public', 'paginated', and '1-year' territory. The final sentence cuts off mid-example ('e.g. ?'), making the end feel incomplete and less polished than the rest.
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 rich annotations, a complete input schema, and an output schema, the description covers the essential operational context: authentication, time range, supported filters, and data omissions. The truncated USD-filter example and the undocumented minUsd parameter are minor gaps, but an agent can still invoke the tool reliably from the schema and supplied examples.
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%, so the baseline is 3; the description adds helpful examples for q, lists valid chain and direction values, and explains period choices. It also mentions a minUsd parameter that is not present in the input schema, which is a minor inconsistency but does not obscure the core parameter meanings.
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 returns a paginated archive of large whale on-chain movements and identifies it as the public counterpart to an authenticated endpoint. It is specific about resource, scope, and capabilities, though it does not explicitly distinguish this from sibling tools like whale_movements_summary or recent_whales.
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 clear usage context: it is for historical on-chain flow analysis without credentials, supports 14 chains, and is MCP-compatible. It does not explicitly state when to choose this tool over a sibling or when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_movements_summaryARead-onlyIdempotentInspect
Whale movements summary — aggregated stats rollup (no auth, MCP-compatible) — Returns an aggregated statistics rollup of whale on-chain movements over a period, so AI agents don't have to page through raw /api/public/whale-movements rows to compute totals themselves. Breaks down movement counts and REAL USD totals (from the same usd_value column as /api/public/whale-movements) by chain and by flow direction (inflow/outflow/transfer). USD totals only ever include rows with a resolvable price — unresolvedUsdCount reports how many movements in the window had no resolvable USD value, so totals are never silently inflated or fabricated. period filter: 7d | 30d | 90d (default 7d — a shorter default than the raw archive's 90d, since a rollup is most useful over a recent window). Response: { sinceDays, movementCount, movementsWithResolvedUsd, unresolvedUsdCount, totalUsd, byDirection, usdByDirection, topChainsByUsd[], firstSeenAt, lastSeenAt, dataSource, updatedAt }. No authentication required. 60 requests/min rate
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time window: 7d | 30d | 90d (default 7d). | 7d |
Output Schema
| Name | Required | Description |
|---|---|---|
| totalUsd | No | Sum of usd_value across all resolved movements in the window (whole dollars). |
| sinceDays | No | Number of days covered by this summary. |
| updatedAt | No | |
| dataSource | No | |
| lastSeenAt | No | |
| attribution | No | |
| byDirection | No | Movement counts by flow direction. |
| firstSeenAt | No | |
| movementCount | No | Total whale movements recorded in the window. |
| topChainsByUsd | No | Up to 10 chains ranked by total resolved USD volume in the window. |
| usdByDirection | No | Real USD totals by flow direction (resolved rows only). |
| unresolvedUsdCount | No | Movements with no resolvable USD value — excluded from every USD sum below. |
| movementsWithResolvedUsd | No | Subset of movementCount that had a resolvable USD value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, and the description adds valuable behavioral context: USD totals only include rows with resolvable prices, unresolvedUsdCount prevents silent inflation/fabrication, and no auth or rate limits are stated. This goes well beyond the structured 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 purpose and rich in useful detail. There is slight redundancy between 'aggregated stats rollup' in the opening and 'aggregated statistics rollup' in the next sentence, but every other sentence earns its place with concrete behavioral and operational 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?
Given one optional parameter, an output schema, and annotations, the description is complete: it covers the response shape, period handling, USD resolution caveats, auth, rate limit, and data source. An agent has everything needed to invoke and interpret this tool 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?
Input schema covers the single period parameter with enum values and default, so the baseline is 3. The description adds semantic value by explaining why the default is 7d and why that differs from the raw archive, which helps an agent reason about parameter choice.
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?
Clearly states it returns an aggregated statistics rollup of whale on-chain movements over a period, with specific breakdowns by chain and flow direction. It explicitly differentiates itself from the raw whale_movements tool by explaining that agents don't need to page through raw rows to compute totals.
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?
Provides explicit guidance on when to use this tool instead of the raw whale-movements endpoint: when an agent wants totals without manually aggregating rows. It also explains the default period choice (7d) relative to the raw archive's 90d, giving a clear context for selecting the right tool and parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_score_historyARead-onlyIdempotentInspect
Get daily whale score history — top tracked whale wallets ranked by composite score (win rate + avg return) over up to 90 days — Daily historical composite scores for tracked whale wallets. One row per wallet per day: wallet address, chain, label, composite score (0-100), win rate, average return %, and sample count. Only wallets with ≥5 resolved signals receive a score (honest, never fabricated). Filter by ?chain= for a single chain. Useful for tracking smart-money wallet performance trends. DB-backed, 5-min cache. Powered by whale_score_daily table (365d retention, permanent monthly archive). — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of history to return (1–90, default 30). | |
| chain | No | Optional chain filter (ETH, BTC, SOL, BSC, ARB, etc.). Returns all chains when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| chain | No | Chain filter applied (null = all chains). |
| total | No | |
| history | No | |
| updatedAt | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, idempotent, and non-destructive, so the description adds useful behaviors beyond them: 5-min cache, DB-backed storage, 365-day retention with permanent monthly archive, and the scoring threshold of ≥5 resolved signals. These details help the agent reason about freshness and data coverage.
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 main purpose is front-loaded and nearly every clause carries useful information: row structure, scoring threshold, cache, retention, and usage routing. It is slightly repetitive around 'daily historical composite scores' but contains no real 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?
Given only two optional parameters, an output schema, and annotations, the description covers the data window, chain filtering, freshness, retention, and alternative-tool selection. Nothing an agent needs to correctly 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?
Schema description coverage is 100%, so the schema already documents both parameters. The description mostly restates the chain filter and the 90-day cap, adding no new semantic meaning beyond what the schema provides.
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 starts with the specific verb+resource pair 'Get daily whale score history' and immediately defines the scope: top tracked whale wallets ranked by composite score over up to 90 days. This clearly differentiates it from monthly and live snapshot siblings by emphasizing daily historical granularity.
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 explicitly states when to use this tool ('Use this for daily historical data') and directs the agent to alternative tools for current conditions and long-term trends. This gives a clear decision rule without ambiguity.
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.
56 tool updates
- Changed
airdrops1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "airdrops": { + "items": { + "properties": { + "chain": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "token": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analyst_archive1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystId": { + "description": "Echoed analyst slug", + "type": "string" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "page": { + "description": "Current page number (1-indexed)", + "type": "number" + }, + "pages": { + "description": "Total number of pages", + "type": "number" + }, + "signals": { + "description": "Signals attributed to the requested analyst in reverse-chronological order.", + "items": { + "properties": { + "analystId": { + "description": "Analyst slug", + "type": "string" + }, + "createdAt": { + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique signal row ID", + "type": "number" + }, + "outcome": { + "description": "'win' | 'loss' | 'neutral' | null (pending)", + "nullable": true, + "type": "string" + }, + "returnPct": { + "description": "Percentage-point return, e.g. 8.4 = +8.4%. Null if unresolved.", + "nullable": true, + "type": "number" + }, + "tokens": { + "description": "Symbols involved, e.g. ['BTC']", + "items": { + "type": "string" + }, + "type": "array" + }, + "typeLabel": { + "description": "Human-readable signal type, e.g. 'Whale Move', 'Volume Breakout'", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "tier": { + "description": "Always 'starter' (up to 365-day depth) for this public endpoint", + "type": "string" + }, + "total": { + "description": "Total number of matching signals in the window", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analyst_daily_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "summaries": { + "items": { + "description": "One daily summary per analyst.", + "properties": { + "analystId": { + "description": "Analyst slug, e.g. chain_hawk", + "type": "string" + }, + "analystName": { + "description": "Display name, e.g. ChainHawk", + "type": "string" + }, + "btcTrend": { + "description": "BTC 24h trend at generation time", + "enum": [ + "up", + "down", + "sideways" + ], + "nullable": true, + "type": "string" + }, + "confluenceScore": { + "description": "0-100: % of other analysts with overlapping tokens in the last 2h — higher = more cross-analyst agreement", + "nullable": true, + "type": "number" + }, + "fearGreedScore": { + "description": "Market Fear & Greed score at time of generation (0=Extreme Fear, 100=Extreme Greed)", + "nullable": true, + "type": "number" + }, + "shortSummary": { + "description": "2-sentence AI commentary on the analyst's day (public)", + "type": "string" + }, + "signalCount": { + "description": "Number of signals this analyst generated in the past 24h", + "type": "integer" + }, + "summaryDate": { + "description": "YYYY-MM-DD date of this summary", + "format": "date", + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analyst_monthly_performance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "months": { + "description": "Look-back window in months (always 6).", + "type": "integer" + }, + "performance": { + "additionalProperties": { + "items": { + "properties": { + "avgReturn": { + "description": "Average return in pct-points. Null when no resolved+priced signals.", + "nullable": true, + "type": "number" + }, + "losses": { + "type": "integer" + }, + "month": { + "description": "Calendar month in YYYY-MM format, e.g. '2026-05'.", + "type": "string" + }, + "resolved": { + "description": "Signals with a win or loss outcome in this month (neutral excluded from denominator, consistent with analyst stats logic).", + "type": "integer" + }, + "totalSignals": { + "description": "All signals attributed to this analyst in this month (resolved + unresolved).", + "type": "integer" + }, + "winRate": { + "description": "Fraction 0–1. Null when resolved < 5.", + "nullable": true, + "type": "number" + }, + "wins": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "description": "Keys are analyst slugs (chain_hawk, whale_watch, …); values are arrays of monthly performance objects ordered newest-first.", + "type": "object" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analyst_summary_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystId": { + "nullable": true, + "type": "string" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "date": { + "nullable": true, + "type": "string" + }, + "days": { + "type": "number" + }, + "summaries": { + "items": { + "description": "One daily summary record.", + "properties": { + "analystId": { + "description": "Analyst ID, e.g. chain_hawk", + "type": "string" + }, + "analystName": { + "description": "Display name, e.g. ChainHawk", + "type": "string" + }, + "btcTrend": { + "enum": [ + "up", + "down", + "sideways" + ], + "nullable": true, + "type": "string" + }, + "confluenceScore": { + "description": "Cross-analyst agreement 0-100", + "nullable": true, + "type": "number" + }, + "fearGreedScore": { + "description": "Fear & Greed at generation time", + "nullable": true, + "type": "number" + }, + "shortSummary": { + "description": "2-sentence AI commentary (English)", + "type": "string" + }, + "signalCount": { + "description": "Signals generated that day", + "type": "integer" + }, + "summaryAr": { + "description": "Arabic translation", + "nullable": true, + "type": "string" + }, + "summaryDate": { + "description": "YYYY-MM-DD", + "format": "date", + "type": "string" + }, + "summaryHi": { + "description": "Hindi translation", + "nullable": true, + "type": "string" + }, + "summaryRu": { + "description": "Russian translation", + "nullable": true, + "type": "string" + }, + "summaryZh": { + "description": "Chinese translation", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analyst_top_tokens1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystId": { + "description": "Echoed analyst slug, e.g. chain_hawk. Null when analystId param was omitted.", + "nullable": true, + "type": "string" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "hint": { + "description": "Guidance string returned when analystId was omitted; null otherwise.", + "nullable": true, + "type": "string" + }, + "tokens": { + "description": "Top 5 tokens by win rate for this analyst (last 90 days, min 3 resolved signals each). Empty when no qualifying tokens exist or analystId was omitted.", + "items": { + "properties": { + "resolved": { + "description": "Number of signals with a win or loss outcome determined.", + "type": "integer" + }, + "token": { + "description": "Token symbol, e.g. BTC, ETH, SOL.", + "type": "string" + }, + "total": { + "description": "Total signals in the last 90 days (including pending/unresolved).", + "type": "integer" + }, + "winRate": { + "description": "Win rate as an integer percentage (0–100). Null when resolved=0.", + "nullable": true, + "type": "integer" + }, + "wins": { + "description": "Number of winning resolved signals.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analysts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysts": { + "items": { + "properties": { + "alertTypes": { + "items": { + "description": "Signal alert types routed to this analyst (whale_move, volume_breakout, accumulation, smart_money_loading, fear_buy, whale_convergence)", + "type": "string" + }, + "type": "array" + }, + "bio": { + "description": "Short description of the analyst's focus", + "type": "string" + }, + "color": { + "type": "string" + }, + "icon": { + "type": "string" + }, + "id": { + "description": "Unique analyst slug. One of: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse", + "type": "string" + }, + "name": { + "description": "Display name, e.g. ChainHawk", + "type": "string" + }, + "specialization": { + "description": "Domain covered, e.g. BTC & Macro On-Chain", + "type": "string" + }, + "stats": { + "description": "Live performance stats computed from signalHistory DB. Null values mean < 5 resolved signals.", + "properties": { + "avgReturn": { + "description": "Average return in percentage points (e.g. 12.3 = +12.3%). Null if < 5 resolved signals.", + "nullable": true, + "type": "number" + }, + "lastSignalAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "losses": { + "type": "number" + }, + "resolvedSignals": { + "description": "Signals with a win/loss outcome determined", + "type": "number" + }, + "totalSignals": { + "description": "Total signals ever attributed to this analyst", + "type": "number" + }, + "winRate": { + "description": "Fraction (0–1). Multiply by 100 for %. Null if < 5 resolved signals.", + "nullable": true, + "type": "number" + }, + "wins": { + "type": "number" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analysts_signals1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystId": { + "description": "Echoed analyst slug (single-id mode only), e.g. chain_hawk", + "type": "string" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "results": { + "additionalProperties": { + "items": { + "type": "object" + }, + "type": "array" + }, + "description": "Present in multi-id mode. Keys are analyst slugs; values are arrays of signal objects.", + "type": "object" + }, + "signals": { + "description": "Present in single-id mode. Array of signal objects for the requested analyst.", + "items": { + "properties": { + "analystId": { + "description": "Analyst slug", + "type": "string" + }, + "createdAt": { + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique signal row ID", + "type": "number" + }, + "outcome": { + "description": "'win' | 'loss' | null if unresolved", + "nullable": true, + "type": "string" + }, + "returnPct": { + "description": "Pct-point return, e.g. 8.4 = +8.4%. Null if unresolved.", + "nullable": true, + "type": "number" + }, + "tokens": { + "description": "Symbols involved, e.g. ['BTC']", + "items": { + "type": "string" + }, + "type": "array" + }, + "typeLabel": { + "description": "Human-readable signal type, e.g. 'Whale Move', 'Volume Breakout'", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "tier": { + "description": "Always 'free' for this public endpoint", + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analysts_signals_all1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "results": { + "description": "Keys are analyst slugs (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge); values are arrays of signal objects.", + "properties": { + "alpha_scout": { + "items": { + "type": "object" + }, + "type": "array" + }, + "chain_hawk": { + "items": { + "type": "object" + }, + "type": "array" + }, + "defi_pulse": { + "items": { + "type": "object" + }, + "type": "array" + }, + "quant_edge": { + "items": { + "type": "object" + }, + "type": "array" + }, + "whale_watch": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "tier": { + "description": "Always 'free' for this public endpoint", + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
analysts_top1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analyst": { + "description": "The analyst with the highest win rate (min 5 resolved signals). Null if no analyst qualifies yet.", + "nullable": true, + "properties": { + "avgReturn": { + "description": "Average return in percentage points.", + "type": "number" + }, + "bio": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lastSignalAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "recentSignals": { + "items": { + "description": "Last 3 signals attributed to this analyst (free 7-day window)", + "properties": { + "createdAt": { + "format": "date-time", + "type": "string" + }, + "outcome": { + "nullable": true, + "type": "string" + }, + "returnPct": { + "nullable": true, + "type": "number" + }, + "tokens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "typeLabel": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "resolvedSignals": { + "type": "number" + }, + "specialization": { + "type": "string" + }, + "totalSignals": { + "type": "number" + }, + "winRate": { + "description": "Fraction (0–1). Multiply by 100 for %.", + "type": "number" + } + }, + "type": "object" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
arbitrage_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "description": "Per-day list of top arbitrage opportunities, newest first.", + "items": { + "properties": { + "date": { + "description": "Snapshot date (YYYY-MM-DD).", + "type": "string" + }, + "opportunities": { + "description": "Top arbitrage opportunities for this day (up to 5), sorted by spread descending.", + "items": { + "properties": { + "buyExchange": { + "description": "DEX/chain where the token is cheapest (buy here).", + "type": "string" + }, + "sellExchange": { + "description": "DEX/chain where the token is most expensive (sell here).", + "type": "string" + }, + "spreadPct": { + "description": "Price spread between exchanges as a percentage, e.g. 1.23 = 1.23%.", + "type": "number" + }, + "symbol": { + "description": "Token symbol, e.g. 'ETH'.", + "type": "string" + }, + "usdVolume": { + "description": "Average 24h USD volume across the buy and sell pairs.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "Total number of individual opportunity rows returned.", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
arbitrage_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgSpreadPct": { + "description": "Average % spread between buy and sell exchange that month.", + "type": "number" + }, + "avgUsdVolume": { + "type": "number" + }, + "buyExchange": { + "type": "string" + }, + "daysInMonth": { + "type": "integer" + }, + "month": { + "description": "First day of the month (YYYY-MM-01, UTC).", + "format": "date", + "type": "string" + }, + "occurrenceCount": { + "description": "Number of daily snapshots where this symbol appeared.", + "type": "integer" + }, + "sellExchange": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
bridge_flow_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "protocolCount": { + "description": "Number of distinct bridge protocols active.", + "type": "integer" + }, + "topProtocol": { + "description": "Protocol with the highest volume (e.g. 'Stargate', 'Hop').", + "nullable": true, + "type": "string" + }, + "totalTxCount": { + "description": "Total number of bridge transactions.", + "type": "integer" + }, + "totalVolumeUsd": { + "description": "Total bridged volume in USD across all protocols.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
bridge_flows1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "flows": { + "items": { + "properties": { + "amountUsd": { + "type": "number" + }, + "bridge": { + "type": "string" + }, + "destChain": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "explorerUrl": { + "format": "uri", + "type": "string" + }, + "sourceChain": { + "type": "string" + }, + "tokenSymbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "requiredTierForFull": { + "type": "string" + }, + "summaries": { + "items": { + "properties": { + "bridge": { + "type": "string" + }, + "totalVolume24h": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
burn_tracker1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "events": { + "items": { + "properties": { + "burnAmountUsd": { + "type": "number" + }, + "burnPercentage": { + "type": "number" + }, + "burnedAt": { + "format": "date-time", + "type": "string" + }, + "chain": { + "type": "string" + }, + "explorerUrl": { + "format": "uri", + "type": "string" + }, + "tokenSymbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "history": { + "items": { + "properties": { + "date": { + "type": "string" + }, + "eventCount": { + "type": "number" + }, + "totalBurnUsd": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "requiredTierForFull": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
fear_greed1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "factors": { + "items": { + "type": "object" + }, + "type": "array" + }, + "history": { + "items": { + "properties": { + "date": { + "type": "string" + }, + "score": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "type": "string" + }, + "score": { + "type": "number" + } + }, + "type": "object" +}
- Changed
fear_greed_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "classification": { + "description": "Text label for the score.", + "enum": [ + "Extreme Fear", + "Fear", + "Neutral", + "Greed", + "Extreme Greed" + ], + "type": "string" + }, + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "score": { + "description": "Composite Fear & Greed score (0=Extreme Fear, 100=Extreme Greed).", + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
fear_greed_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgScore": { + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "dominantClassification": { + "type": "string" + }, + "fearDays": { + "type": "integer" + }, + "greedDays": { + "type": "integer" + }, + "maxScore": { + "type": "integer" + }, + "minScore": { + "type": "integer" + }, + "month": { + "format": "date", + "type": "string" + }, + "neutralDays": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
feed_archive1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "hasMore": { + "description": "Whether more pages are available", + "type": "boolean" + }, + "items": { + "description": "News articles and analysis items in reverse-chronological order.", + "items": { + "properties": { + "id": { + "description": "Unique feed item row ID", + "type": "number" + }, + "publishedAt": { + "description": "Publication timestamp", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "source": { + "description": "Feed source name, e.g. 'CoinDesk', 'CoinTelegraph'", + "type": "string" + }, + "summary": { + "description": "Article summary or AI-generated digest", + "type": "string" + }, + "title": { + "description": "Article or summary title", + "type": "string" + }, + "type": { + "description": "'news_summary' | 'ai_insights' | 'analysis'", + "type": "string" + }, + "url": { + "description": "Original article URL, if available", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "page": { + "description": "Current page (1-indexed)", + "type": "number" + }, + "pageSize": { + "description": "Fixed at 20 records per page", + "type": "number" + }, + "total": { + "description": "Total matching articles in the window", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
funding_rate_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgRate": { + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "dominantSentiment": { + "type": "string" + }, + "maxRate": { + "type": "number" + }, + "minRate": { + "type": "number" + }, + "month": { + "format": "date", + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "nullable": true, + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
funding_rates1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "meta": { + "description": "Response freshness metadata. 3-min cache; check `meta.cacheAgeSeconds` for exact age.", + "properties": { + "cacheAgeSeconds": { + "description": "Seconds since the cache was last refreshed.", + "type": "integer" + }, + "exchangeCount": { + "description": "Number of exchanges that contributed data this cycle (Gate.io, MEXC, Kraken — max 3).", + "type": "integer" + }, + "updatedAt": { + "description": "ISO timestamp when this cache entry was populated.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "tokens": { + "items": { + "properties": { + "avg": { + "type": "number" + }, + "gateio": { + "type": "number" + }, + "kraken": { + "type": "number" + }, + "mexc": { + "type": "number" + }, + "sentiment": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
funding_rates_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "avg": { + "description": "Average across available exchanges.", + "type": "number" + }, + "date": { + "description": "Snapshot date (YYYY-MM-DD, UTC).", + "format": "date", + "type": "string" + }, + "gateio": { + "description": "Gate.io funding rate in % (e.g. 0.01 = 0.01% per 8h). Null when unavailable.", + "nullable": true, + "type": "number" + }, + "kraken": { + "description": "Kraken funding rate in %. Null when unavailable.", + "nullable": true, + "type": "number" + }, + "mexc": { + "description": "MEXC funding rate in %. Null when unavailable.", + "nullable": true, + "type": "number" + }, + "sentiment": { + "description": "Market sentiment derived from avg: >0.05% bearish (top signal), <-0.01% bullish (bottom signal).", + "enum": [ + "bullish", + "bearish", + "neutral" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
gas1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "meta": { + "description": "Response freshness metadata. 30s cache; check `meta.cacheAgeSeconds` for exact age.", + "properties": { + "cacheAgeSeconds": { + "description": "Seconds since the cache was last refreshed.", + "type": "integer" + }, + "chainCount": { + "description": "Number of chains/networks in this response.", + "type": "integer" + }, + "updatedAt": { + "description": "ISO timestamp when this cache entry was populated.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "networks": { + "items": { + "properties": { + "chain": { + "type": "string" + }, + "level": { + "type": "string" + }, + "name": { + "type": "string" + }, + "standard": { + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
gas_price_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "arbFastGwei": { + "description": "Arbitrum fast gas price in gwei.", + "nullable": true, + "type": "number" + }, + "baseFastGwei": { + "description": "Base (Coinbase L2) fast gas price in gwei.", + "nullable": true, + "type": "number" + }, + "bnbFastGwei": { + "description": "BNB Smart Chain fast gas price in gwei.", + "nullable": true, + "type": "number" + }, + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "ethFastGwei": { + "description": "ETH fast gas price in gwei.", + "nullable": true, + "type": "number" + }, + "ethStandardGwei": { + "description": "ETH standard (safe) gas price in gwei.", + "nullable": true, + "type": "number" + }, + "polyFastGwei": { + "description": "Polygon fast gas price in gwei.", + "nullable": true, + "type": "number" + }, + "solLamports": { + "description": "Solana priority fee in lamports.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
golden_alerts_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "date": { + "description": "Snapshot date (YYYY-MM-DD, UTC).", + "format": "date", + "type": "string" + }, + "highCount": { + "description": "Alerts with confidence ≥75 (high severity).", + "type": "integer" + }, + "lowCount": { + "description": "Alerts with confidence <50 (low severity).", + "type": "integer" + }, + "mediumCount": { + "description": "Alerts with confidence 50–74 (medium severity).", + "type": "integer" + }, + "topTokens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "totalCount": { + "description": "Total number of Golden Alerts generated that day.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
golden_alerts_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgPerDay": { + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "highCount": { + "type": "integer" + }, + "lowCount": { + "type": "integer" + }, + "mediumCount": { + "type": "integer" + }, + "month": { + "description": "First day of the month (YYYY-MM-01, UTC).", + "format": "date", + "type": "string" + }, + "topTokens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "totalCount": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
golden_alerts_snapshot1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "alerts": { + "description": "Golden Alerts sorted by severity (highest first), up to 27 entries.", + "items": { + "properties": { + "aiInsight": { + "description": "One-sentence AI-generated actionable insight", + "type": "string" + }, + "analystId": { + "description": "Attributed analyst slug: chain_hawk | whale_watch | alpha_scout | defi_pulse | quant_edge | rate_hawk | flow_tracer | unlock_guard | sentiment_edge | narrative_pulse | null", + "nullable": true, + "type": "string" + }, + "chains": { + "description": "Blockchain networks, e.g. ['bitcoin', 'ethereum']", + "items": { + "type": "string" + }, + "type": "array" + }, + "createdAt": { + "description": "When this alert was generated", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique alert identifier, e.g. 'ga-1719220800000-abc123'", + "type": "string" + }, + "severity": { + "description": "'high' (confidence ≥70%) | 'medium' (45–69%) | 'low' (<45%)", + "type": "string" + }, + "summary": { + "description": "Signal summary combining whale moves, volume, and Fear & Greed context", + "type": "string" + }, + "title": { + "description": "Human-readable alert title, e.g. 'Fear Buy Opportunity'", + "type": "string" + }, + "tokens": { + "description": "Token symbols involved, e.g. ['BTC', 'ETH']", + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "Alert classification: accumulation | fear_buy | smart_money_loading | volume_breakout | whale_convergence", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "refreshedAt": { + "description": "When the cron job last populated the cache; null if cache is empty", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "total": { + "description": "Number of alerts in the snapshot", + "type": "number" + }, + "updatedAt": { + "description": "Response generation timestamp", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
leverage_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "assetsInCritical": { + "description": "Count of assets with pressureScore ≥ 76 (critical/danger zone).", + "type": "integer" + }, + "assetsInDangerZone": { + "description": "Count of assets with Danger Zone setup label.", + "type": "integer" + }, + "avgPressureScore": { + "description": "Average pressure score across all tracked assets (0-100).", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "avgSetupScore": { + "description": "Average setup score across tracked assets.", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "dominantRegime": { + "description": "Market regime detected for the day.", + "enum": [ + "Bull", + "Bear", + "Sideways", + "Accumulation", + "Unknown" + ], + "type": "string" + }, + "fearGreed": { + "description": "Platform Fear & Greed index for the day.", + "maximum": 100, + "minimum": 0, + "nullable": true, + "type": "integer" + }, + "maxPressureScore": { + "description": "Highest single-asset pressure score of the day.", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "topPressureSymbol": { + "description": "Ticker symbol of the highest-pressure asset.", + "nullable": true, + "type": "string" + }, + "whaleBuyCount": { + "description": "Whale buy signals that day.", + "type": "integer" + }, + "whaleSellCount": { + "description": "Whale sell signals that day.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
leverage_picks_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "avgReturnPct": { + "description": "Average return % across all resolved picks (positive = profitable on avg).", + "nullable": true, + "type": "number" + }, + "avgWinReturnPct": { + "description": "Average return % for winning picks only.", + "nullable": true, + "type": "number" + }, + "dataSource": { + "type": "string" + }, + "losses": { + "description": "Picks classified as loss.", + "type": "integer" + }, + "neutrals": { + "description": "Picks within ±1.5% (neutral).", + "type": "integer" + }, + "note": { + "type": "string" + }, + "pendingPicks": { + "description": "Picks still awaiting resolution (close window not yet elapsed).", + "type": "integer" + }, + "resolvedPicks": { + "description": "Picks with outcome resolved (close window elapsed).", + "type": "integer" + }, + "totalPicks": { + "description": "Total picks ever recorded (pending + resolved).", + "type": "integer" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + }, + "winRatePct": { + "description": "Win rate as a percentage (0–100). Null until first resolved picks exist.", + "nullable": true, + "type": "number" + }, + "winThresholdPct": { + "description": "Return threshold used to classify a pick as win/loss (currently 1.5%).", + "type": "number" + }, + "windows": { + "description": "Trading windows tracked: 1h (scalp), 4h (swing), 12h (position).", + "items": { + "type": "string" + }, + "type": "array" + }, + "wins": { + "description": "Picks classified as win.", + "type": "integer" + } + }, + "type": "object" +}
- Changed
leverage_radar1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "assetCount": { + "description": "Total assets tracked (50).", + "type": "integer" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "computedAt": { + "format": "date-time", + "type": "string" + }, + "disclaimer": { + "type": "string" + }, + "marketSummary": { + "properties": { + "avgPressureScore": { + "description": "Average pressure score across all 50 tracked assets.", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "avgSetupScore": { + "description": "Average setup quality score across all tracked assets.", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "fearGreed": { + "description": "Platform Fear & Greed index (0=Extreme Fear, 100=Extreme Greed).", + "maximum": 100, + "minimum": 0, + "nullable": true, + "type": "integer" + }, + "fearGreedLabel": { + "description": "Human-readable F&G classification.", + "nullable": true, + "type": "string" + }, + "overallBias": { + "description": "Aggregated market bias derived from all scores.", + "enum": [ + "bullish", + "bearish", + "neutral" + ], + "type": "string" + }, + "regime": { + "description": "Current market regime (Bull/Bear/Sideways/Accumulation).", + "nullable": true, + "type": "string" + }, + "whaleBuyCount": { + "description": "Whale buy signals in the selected window.", + "type": "integer" + }, + "whaleSellCount": { + "description": "Whale sell signals in the selected window.", + "type": "integer" + } + }, + "type": "object" + }, + "note": { + "type": "string" + }, + "pressureAlerts": { + "items": { + "type": "object" + }, + "type": "array" + }, + "topLongSetups": { + "items": { + "properties": { + "fundingRate": { + "description": "Current funding rate % (negative=shorts pay longs).", + "nullable": true, + "type": "number" + }, + "pressureScore": { + "description": "Leverage pressure score — higher = more overleveraged (dangerous).", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "priceChange24h": { + "description": "24h price change %.", + "nullable": true, + "type": "number" + }, + "riskLevel": { + "description": "Risk classification.", + "enum": [ + "low", + "medium", + "high", + "extreme" + ], + "type": "string" + }, + "setupLabel": { + "description": "Decision label: Strong Long Setup, Weak Long Setup, Strong Short Setup, etc.", + "type": "string" + }, + "setupScore": { + "description": "Setup quality score — higher = better trade opportunity.", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "symbol": { + "description": "Ticker symbol.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "topShortSetups": { + "items": { + "type": "object" + }, + "type": "array" + }, + "window": { + "description": "Trading window used for computation.", + "enum": [ + "1h", + "4h", + "12h" + ], + "type": "string" + }, + "windowHours": { + "description": "Window in hours.", + "enum": [ + 1, + 4, + 12 + ], + "type": "integer" + } + }, + "type": "object" +}
- Changed
liquidations1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "binanceSources": { + "type": "boolean" + }, + "tokens": { + "items": { + "properties": { + "longLiquidations": { + "type": "number" + }, + "shortLiquidations": { + "type": "number" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
live_stats1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "activeAlerts": { + "type": "number" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "meta": { + "description": "Response freshness metadata. 10s cache; check `meta.cacheAgeSeconds` for exact age.", + "properties": { + "cacheAgeSeconds": { + "description": "Seconds since the cache was last populated. 0 means just refreshed.", + "type": "integer" + }, + "updatedAt": { + "description": "ISO timestamp of the underlying whale-signals cache.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "smartMoneyWallets": { + "type": "number" + }, + "whaleMovesToday": { + "type": "number" + } + }, + "type": "object" +}
- Changed
market_context1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystSummaries": { + "items": { + "description": "One analyst's public daily summary (only available for daily resolution).", + "properties": { + "analystId": { + "type": "string" + }, + "btcTrend": { + "nullable": true, + "type": "string" + }, + "confluenceScore": { + "nullable": true, + "type": "number" + }, + "shortSummary": { + "type": "string" + }, + "signalCount": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "arbitrage": { + "items": { + "description": "Top arbitrage opportunity (only available for daily resolution ≤180 days).", + "properties": { + "buyExchange": { + "type": "string" + }, + "sellExchange": { + "type": "string" + }, + "spreadPct": { + "type": "number" + }, + "symbol": { + "type": "string" + }, + "usdVolume": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "date": { + "description": "Requested date (YYYY-MM-DD)", + "format": "date", + "type": "string" + }, + "fearGreed": { + "description": "Fear & Greed index for the date (daily score or monthly avg when resolution=monthly).", + "nullable": true, + "properties": { + "classification": { + "type": "string" + }, + "score": { + "type": "number" + } + }, + "type": "object" + }, + "fundingRates": { + "description": "BTC perpetual funding rate summary for the date (daily or monthly avg).", + "properties": { + "avg": { + "nullable": true, + "type": "number" + }, + "byExchange": { + "type": "object" + }, + "sentiment": { + "nullable": true, + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "goldenAlerts": { + "description": "Golden Alerts daily summary for the date.", + "nullable": true, + "properties": { + "highCount": { + "type": "number" + }, + "lowCount": { + "type": "number" + }, + "mediumCount": { + "type": "number" + }, + "topTokens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "totalCount": { + "type": "number" + } + }, + "type": "object" + }, + "metadata": { + "properties": { + "dataCompleteness": { + "description": "Percentage of 8 sources with data for this date (0-100)", + "type": "number" + }, + "date": { + "type": "string" + }, + "generatedAt": { + "format": "date-time", + "type": "string" + }, + "isToday": { + "type": "boolean" + }, + "resolution": { + "description": "'daily' = exact day data from snapshots; 'monthly' = monthly averages from permanent archive (triggered for dates >180 days old with <50% daily completeness)", + "enum": [ + "daily", + "monthly" + ], + "type": "string" + }, + "sourcesAvailable": { + "type": "number" + }, + "sourcesTotal": { + "type": "number" + } + }, + "type": "object" + }, + "sentiment": { + "description": "Social sentiment for BTC, ETH, SOL (daily score or monthly avg when resolution=monthly).", + "items": { + "description": "Social sentiment score for one token.", + "properties": { + "score": { + "nullable": true, + "type": "number" + }, + "sentiment": { + "nullable": true, + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "stablecoin": { + "description": "Stablecoin flow snapshot for the date.", + "nullable": true, + "properties": { + "signal": { + "nullable": true, + "type": "string" + }, + "totalFlow24h": { + "type": "number" + }, + "totalNow": { + "type": "number" + } + }, + "type": "object" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + }, + "whaleSummary": { + "description": "Aggregated whale movement counts for the date.", + "nullable": true, + "properties": { + "inflowCount": { + "type": "number" + }, + "outflowCount": { + "type": "number" + }, + "totalMoves": { + "type": "number" + }, + "totalUsdValue": { + "type": "number" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
market_heatmap1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "chains": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lastUpdated": { + "format": "date-time", + "type": "string" + }, + "tokens": { + "items": { + "properties": { + "chain": { + "type": "string" + }, + "marketCap": { + "type": "number" + }, + "name": { + "type": "string" + }, + "priceChange24h": { + "type": "number" + }, + "priceUsd": { + "type": "string" + }, + "symbol": { + "type": "string" + }, + "volume24h": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "type": "object" +}
- Changed
market_pulse_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "avgPressureScore": { + "description": "Average leverage pressure score across tracked assets.", + "maximum": 100, + "minimum": 0, + "nullable": true, + "type": "number" + }, + "confidence": { + "description": "Confidence percentage for the verdict (0-100).", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "fearGreedScore": { + "description": "Platform Fear & Greed index for the day.", + "maximum": 100, + "minimum": 0, + "nullable": true, + "type": "number" + }, + "leverageSuggestion": { + "description": "Derived leverage level suggestion.", + "enum": [ + "none", + "low", + "moderate", + "high" + ], + "nullable": true, + "type": "string" + }, + "regime": { + "description": "Market regime detected for the day.", + "enum": [ + "Bull", + "Bear", + "Sideways", + "Accumulation" + ], + "nullable": true, + "type": "string" + }, + "verdict": { + "description": "Aggregated market verdict for the day.", + "enum": [ + "BUY", + "SELL", + "NEUTRAL" + ], + "type": "string" + }, + "whaleBuyRatio": { + "description": "Ratio of whale buy signals vs total signals (0=all sell, 1=all buy).", + "maximum": 1, + "minimum": 0, + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
narrative_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "marketCapChangePct": { + "description": "24h market cap change % for the sector.", + "nullable": true, + "type": "number" + }, + "rank": { + "description": "Sector rank for the day (1 = strongest).", + "type": "integer" + }, + "sector": { + "description": "Market sector / narrative name (e.g. 'Artificial Intelligence', 'Layer 2', 'DeFi').", + "type": "string" + }, + "strength": { + "description": "Composite narrative strength score (0-100).", + "maximum": 100, + "minimum": 0, + "nullable": true, + "type": "number" + }, + "tokenCount": { + "description": "Number of tokens in this sector.", + "type": "integer" + }, + "topTokens": { + "description": "Top token symbols in this sector.", + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "sector": { + "description": "Sector filter applied (null = all sectors).", + "nullable": true, + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
narratives1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "narratives": { + "items": { + "properties": { + "change24h": { + "type": "number" + }, + "marketCap": { + "type": "number" + }, + "name": { + "type": "string" + }, + "tokens": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "requiredTierForFull": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
platform_stats1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "chainList": { + "items": { + "type": "string" + }, + "type": "array" + }, + "chains": { + "type": "number" + }, + "dataSources": { + "type": "number" + }, + "freeTools": { + "type": "number" + }, + "languages": { + "type": "number" + }, + "live": { + "type": "object" + }, + "meta": { + "description": "Response freshness metadata.", + "properties": { + "updatedAt": { + "description": "ISO timestamp of when the response was generated.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "performance": { + "description": "Aggregate signal performance metrics.", + "properties": { + "avgBtcBenchmark": { + "description": "Average BTC price change over the same holding windows as the resolved signals (%). Null when not enough data.", + "nullable": true, + "type": "number" + }, + "avgReturn": { + "description": "Average return across all resolved signals (%).", + "type": "number" + }, + "dataStartedAt": { + "description": "ISO timestamp of the oldest resolved signal.", + "format": "date-time", + "nullable": true, + "type": "string" + }, + "losses": { + "description": "Number of losing resolved signals.", + "type": "number" + }, + "totalResolved": { + "description": "Total number of signals with a resolved outcome.", + "type": "number" + }, + "totalSignalCount": { + "description": "All-time signal count (including unresolved).", + "type": "number" + }, + "winRate": { + "description": "Percentage of resolved signals that were profitable (0–100).", + "type": "number" + }, + "wins": { + "description": "Number of winning resolved signals.", + "type": "number" + } + }, + "type": "object" + }, + "tokensTracked": { + "type": "number" + }, + "trackedWallets": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
recent_whales1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "meta": { + "description": "Response freshness metadata. 10-min cache; check `meta.cacheAgeSeconds` for exact age.", + "properties": { + "cacheAgeSeconds": { + "description": "Seconds since the whale-signals cache was last refreshed.", + "type": "integer" + }, + "chainCount": { + "description": "Number of unique chains in the current cache.", + "type": "integer" + }, + "signalCount": { + "description": "Total cached whale signals (before top-3 slice).", + "type": "integer" + }, + "updatedAt": { + "description": "ISO timestamp of the underlying whale-signals cache.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "whales": { + "items": { + "properties": { + "amountUsd": { + "type": "number" + }, + "chain": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "explorerUrl": { + "format": "uri", + "type": "string" + }, + "token": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
reports_index1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "reports": { + "description": "Weekly report metadata in reverse-chronological order (newest first). Maximum 12 entries.", + "items": { + "properties": { + "id": { + "description": "Unique report ID, e.g. 'report-2026-W25'", + "type": "string" + }, + "publishedAt": { + "description": "When the report was generated (ISO-8601).", + "format": "date-time", + "type": "string" + }, + "summary": { + "description": "Plain-text summary extracted from the English report, truncated to 300 characters.", + "type": "string" + }, + "title": { + "description": "English report title, e.g. 'Weekly Alpha Report — BTC breakout & ETH accumulation signals'", + "type": "string" + }, + "weekOf": { + "description": "Start date of the covered week (YYYY-MM-DD), e.g. '2026-06-16'.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "description": "Number of reports returned (≤12).", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
sentiment_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "date": { + "description": "Snapshot date (YYYY-MM-DD, UTC).", + "format": "date", + "type": "string" + }, + "score": { + "description": "Sentiment score 0–100 (≥60 bullish, ≤40 bearish).", + "type": "integer" + }, + "sentiment": { + "enum": [ + "bullish", + "bearish", + "neutral" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
sentiment_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgScore": { + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "dominantSentiment": { + "type": "string" + }, + "month": { + "format": "date", + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "nullable": true, + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
signal_history_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analystId": { + "nullable": true, + "type": "string" + }, + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "analystId": { + "type": "string" + }, + "avgReturn": { + "description": "Average return % on winning signals.", + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "lossCount": { + "type": "integer" + }, + "month": { + "format": "date", + "type": "string" + }, + "neutralCount": { + "type": "integer" + }, + "topSignalType": { + "type": "string" + }, + "totalSignals": { + "type": "integer" + }, + "winCount": { + "type": "integer" + }, + "winRate": { + "description": "Win rate as a fraction 0–1 (multiply by 100 for %).", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
social_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "market": { + "properties": { + "bearishCount": { + "type": "number" + }, + "bullishCount": { + "type": "number" + }, + "label": { + "type": "string" + }, + "neutralCount": { + "type": "number" + }, + "score": { + "type": "number" + }, + "topMentioned": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "requiredTierForFull": { + "type": "string" + }, + "tokens": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "overallScore": { + "type": "number" + }, + "priceChange24h": { + "type": "number" + }, + "sentiment": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
stablecoin_flows1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "stables": { + "items": { + "properties": { + "change24h": { + "type": "number" + }, + "circulating": { + "type": "number" + }, + "name": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
stablecoin_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "date": { + "description": "Snapshot date (YYYY-MM-DD, UTC).", + "format": "date", + "type": "string" + }, + "signal": { + "enum": [ + "bullish", + "bearish", + "neutral" + ], + "type": "string" + }, + "totalFlow24h": { + "description": "Net USD change in stablecoin supply for that day. Positive = expansion.", + "type": "number" + }, + "totalNow": { + "description": "Aggregate stablecoin market cap in USD at snapshot time.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
stablecoin_monthly1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgTotalSupply": { + "type": "number" + }, + "bearishDays": { + "type": "integer" + }, + "bullishDays": { + "type": "integer" + }, + "daysInMonth": { + "type": "integer" + }, + "dominantSignal": { + "type": "string" + }, + "month": { + "format": "date", + "type": "string" + }, + "neutralDays": { + "type": "integer" + }, + "totalNetFlow": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "checkedAt": { + "format": "date-time", + "type": "string" + }, + "errorCount24h": { + "type": "number" + }, + "freshness": { + "description": "Per-endpoint cache freshness data. Each entry describes how stale a cached API response is, so AI agents can decide whether to trust the data without making an extra request.", + "items": { + "properties": { + "cacheAgeSeconds": { + "description": "How many seconds have elapsed since the cache was last populated. Null when the cache has never been populated (cold start).", + "nullable": true, + "type": "number" + }, + "cacheIntervalSeconds": { + "description": "How often this endpoint's data is refreshed, in seconds.", + "type": "number" + }, + "endpoint": { + "description": "The API path this freshness entry applies to (e.g. '/api/public/platform-stats').", + "type": "string" + }, + "label": { + "description": "Human-readable name for the endpoint (e.g. 'Platform Stats').", + "type": "string" + }, + "status": { + "description": "'fresh' = within the normal refresh window; 'stale' = older than the expected interval; 'cold' = cache has never been populated.", + "enum": [ + "fresh", + "stale", + "cold" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "mcpToolCount": { + "type": "number" + }, + "openApiPaths": { + "type": "number" + }, + "overall": { + "enum": [ + "operational", + "degraded", + "outage" + ], + "type": "string" + }, + "sources": { + "items": { + "properties": { + "ageSeconds": { + "nullable": true, + "type": "number" + }, + "lastSuccess": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "enum": [ + "healthy", + "stale", + "failing", + "unknown" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
tax_rates1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "rates": { + "type": "object" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
trending1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "meta": { + "description": "Response freshness metadata. 5-min cache; check `meta.cacheAgeSeconds` for exact age.", + "properties": { + "cacheAgeSeconds": { + "description": "Seconds since the cache was last refreshed.", + "type": "integer" + }, + "tokenCount": { + "description": "Number of tokens in this response.", + "type": "integer" + }, + "updatedAt": { + "description": "ISO timestamp when this cache entry was populated.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "tokens": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "priceChange24h": { + "type": "number" + }, + "priceUsd": { + "type": "number" + }, + "symbol": { + "type": "string" + }, + "volume24h": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
whale_activity1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "byChain": { + "items": { + "properties": { + "chain": { + "type": "string" + }, + "count": { + "type": "number" + }, + "inflow": { + "type": "number" + }, + "outflow": { + "type": "number" + }, + "transfer": { + "type": "number" + }, + "unknown": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "byDay": { + "items": { + "properties": { + "count": { + "type": "number" + }, + "date": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "byDirection": { + "properties": { + "inflow": { + "type": "number" + }, + "outflow": { + "type": "number" + }, + "transfer": { + "type": "number" + }, + "unknown": { + "type": "number" + } + }, + "type": "object" + }, + "dataSource": { + "type": "string" + }, + "firstSeenAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "lastSeenAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + }, + "windowDays": { + "type": "number" + } + }, + "type": "object" +}
- Changed
whale_daily_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "chainsBreakdown": { + "additionalProperties": { + "type": "integer" + }, + "description": "Object mapping chain name to move count for this day, e.g. { 'ETH': 12, 'BTC': 5, 'SOL': 8 }.", + "type": "object" + }, + "date": { + "description": "Snapshot date (YYYY-MM-DD, UTC).", + "format": "date", + "type": "string" + }, + "inflowCount": { + "description": "Number of inflow (accumulation/buy-side) whale moves.", + "type": "integer" + }, + "outflowCount": { + "description": "Number of outflow (distribution/sell-side) whale moves.", + "type": "integer" + }, + "totalMoves": { + "description": "Total whale move signals recorded on this day.", + "type": "integer" + }, + "totalUsdValue": { + "description": "Estimated total USD value of whale transactions on this day.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
whale_monthly_archive1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "months": { + "items": { + "properties": { + "avgMovesPerDay": { + "type": "number" + }, + "daysInMonth": { + "type": "integer" + }, + "inflowCount": { + "type": "integer" + }, + "month": { + "description": "First day of the month (YYYY-MM-01, UTC).", + "format": "date", + "type": "string" + }, + "outflowCount": { + "type": "integer" + }, + "totalMoves": { + "type": "integer" + }, + "totalUsdValue": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
whale_movements1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "dataSource": { + "type": "string" + }, + "hasMore": { + "description": "Whether more pages are available", + "type": "boolean" + }, + "items": { + "description": "Whale movement records in reverse-chronological order.", + "items": { + "properties": { + "amount": { + "description": "Transfer amount in native token units, e.g. '1200 ETH'. Parsed from signal summary; null if not available.", + "nullable": true, + "type": "string" + }, + "chain": { + "description": "Chain identifier, e.g. 'ETH', 'BTC', 'SOL'. Convenience alias for tokens[0].", + "nullable": true, + "type": "string" + }, + "createdAt": { + "format": "date-time", + "type": "string" + }, + "direction": { + "description": "'inflow' | 'outflow' | 'transfer' | null (unknown)", + "nullable": true, + "type": "string" + }, + "id": { + "description": "Unique signal row ID", + "type": "number" + }, + "outcome": { + "description": "'win' | 'loss' | 'neutral' | null", + "nullable": true, + "type": "string" + }, + "returnPct": { + "description": "Return in pct-points if resolved; null otherwise.", + "nullable": true, + "type": "number" + }, + "timestamp": { + "description": "ISO-8601 timestamp when the movement was recorded. Alias for createdAt.", + "format": "date-time", + "type": "string" + }, + "tokens": { + "description": "Chain identifier in tokens[0], e.g. ['ETH']", + "items": { + "type": "string" + }, + "type": "array" + }, + "typeLabel": { + "description": "Always 'Whale Move' for this endpoint", + "type": "string" + }, + "usdValue": { + "description": "Real USD value of the transfer, e.g. '$2.15M', computed from the resolved token price at signal time. Null if no price was resolvable.", + "nullable": true, + "type": "string" + }, + "walletLabel": { + "description": "Human-readable wallet label, e.g. 'ETH Whale #3'", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "page": { + "description": "Current page (1-indexed)", + "type": "number" + }, + "pageSize": { + "description": "Fixed at 20 records per page", + "type": "number" + }, + "sinceDays": { + "description": "Number of days of history returned", + "type": "number" + }, + "total": { + "description": "Total matching records in the window", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
whale_movements_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "byDirection": { + "description": "Movement counts by flow direction.", + "properties": { + "inflow": { + "type": "number" + }, + "outflow": { + "type": "number" + }, + "transfer": { + "type": "number" + }, + "unknown": { + "type": "number" + } + }, + "type": "object" + }, + "dataSource": { + "type": "string" + }, + "firstSeenAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "lastSeenAt": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "movementCount": { + "description": "Total whale movements recorded in the window.", + "type": "number" + }, + "movementsWithResolvedUsd": { + "description": "Subset of movementCount that had a resolvable USD value.", + "type": "number" + }, + "sinceDays": { + "description": "Number of days covered by this summary.", + "type": "number" + }, + "topChainsByUsd": { + "description": "Up to 10 chains ranked by total resolved USD volume in the window.", + "items": { + "properties": { + "chain": { + "type": "string" + }, + "inflow": { + "type": "number" + }, + "movementCount": { + "type": "number" + }, + "outflow": { + "type": "number" + }, + "totalUsd": { + "type": "number" + }, + "transfer": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "totalUsd": { + "description": "Sum of usd_value across all resolved movements in the window (whole dollars).", + "type": "number" + }, + "unresolvedUsdCount": { + "description": "Movements with no resolvable USD value — excluded from every USD sum below.", + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + }, + "usdByDirection": { + "description": "Real USD totals by flow direction (resolved rows only).", + "properties": { + "inflow": { + "type": "number" + }, + "outflow": { + "type": "number" + }, + "transfer": { + "type": "number" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
whale_score_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attribution": { + "$ref": "#/components/schemas/Attribution" + }, + "chain": { + "description": "Chain filter applied (null = all chains).", + "nullable": true, + "type": "string" + }, + "days": { + "type": "number" + }, + "history": { + "items": { + "properties": { + "avgReturn": { + "description": "Average return % across resolved signals. Null when < 5 samples.", + "nullable": true, + "type": "number" + }, + "chain": { + "description": "Blockchain chain (ETH, BTC, SOL, BSC, etc.).", + "nullable": true, + "type": "string" + }, + "date": { + "description": "YYYY-MM-DD snapshot date.", + "format": "date", + "type": "string" + }, + "sampleCount": { + "description": "Number of resolved signals used for score calculation.", + "type": "integer" + }, + "score": { + "description": "Composite whale score (0-100, requires ≥5 resolved signals).", + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "walletAddress": { + "description": "Blockchain wallet address.", + "type": "string" + }, + "walletLabel": { + "description": "Human-readable wallet label.", + "nullable": true, + "type": "string" + }, + "winRate": { + "description": "Win rate as a fraction (0.71 = 71%). Null when < 5 samples.", + "maximum": 1, + "minimum": 0, + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
1 tool update
- Added
analyst_top_tokens
1 tool update
- Added
leverage_radar
5 tool updates
- Added
bridge_flow_history - Added
gas_price_history - Added
market_pulse_history - Added
narrative_history - Added
whale_score_history
1 tool update
- Added
leverage_picks_summary
1 tool update
- Added
leverage_history
1 tool update
- Added
whale_movements_summary
1 tool update
- Added
arbitrage_monthly
2 tool updates
- Added
analyst_summary_history - Added
market_context
2 tool updates
- Changed
analyst_archive2 fields changed- changed
Input schema / properties / analystId / descriptionPrevious value: -"Analyst slug. Valid values: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge."New value: +"Analyst slug. Valid values: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse." - changed
Input schema / properties / analystId / enumPrevious value: -[ - "chain_hawk", - "whale_watch", - "alpha_scout", - "defi_pulse", - "quant_edge" -]New value: +[ + "chain_hawk", + "whale_watch", + "alpha_scout", + "defi_pulse", + "quant_edge", + "rate_hawk", + "flow_tracer", + "unlock_guard", + "sentiment_edge", + "narrative_pulse" +]
- Added
analyst_daily_summary
1 tool update
- Added
signal_history_monthly
6 tool updates
- Added
fear_greed_monthly - Added
funding_rate_monthly - Added
golden_alerts_monthly - Added
sentiment_monthly - Added
stablecoin_monthly - Added
whale_monthly_archive
8 tool updates
- Added
analyst_monthly_performance - Added
arbitrage_history - Added
fear_greed_history - Added
funding_rates_history - Added
golden_alerts_history - Changed
sentiment_history1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"Number of recent days to return (1–90, default 30)."New value: +"Number of recent days to return (1–180, default 30)."
- Changed
stablecoin_history1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"Number of recent days to return (1–90, default 30)."New value: +"Number of recent days to return (1–180, default 30)."
- Added
whale_daily_summary
2 tool updates
- Added
sentiment_history - Added
stablecoin_history
5 tool updates
- Added
analyst_archive - Added
feed_archive - Added
golden_alerts_snapshot - Added
reports_index - Added
whale_movements
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
Multi-asset whale forensics: BTC, ETH, SOL, USDT, tokenized gold. 45 tools, free OAuth tier.
168 MCP tools: token prices, whale tracking, DeFi, wallets across Base/Tron/BTC/XRP/Kaspa
Solana MCP for wallets, trades, markets, PnL, transfers, onchain data, signable swaps and API tools.
Whale & Institutional Flow MCP — 8 tools: TVL flows, alpha signals, stablecoin supply.
Related MCP Servers
- AlicenseAqualityBmaintenanceReal-time crypto whale intelligence MCP server with 55 tools across 14 blockchains. Free, no auth required.561MIT
- AlicenseNot gradedqualityDmaintenanceMethodology-transparent BTC + ETH whale forensics. 30 tools, anonymous OAuth 2.1 Free tier.MIT
- FlicenseNot gradedqualityCmaintenanceWhale & Institutional Flow MCP Server — 8 tools for protocol TVL flows, alpha signals, stablecoin supply tracking. Part of ToolOracle (tooloracle.io).-

CoinLobster MCPofficial
AlicenseAqualityCmaintenanceProvides real-time crypto whale trade data and market analysis to AI agents, including unusual flow radar, liquidations, funding rates, and market snapshots across 15 exchanges and on-chain DEXs.174113MIT
social_summaryARead-onlyIdempotent Inspect
Get aggregate market mood — overall sentiment score/label + top 5 tokens (no auth; use sentiment_history for per-token time-series) — Non-gated social sentiment summary: the aggregate market-mood score/label plus the top 5 tokens by sentiment (AI insight text excluded). Served from cache (no per-request AI cost). Full per-token AI insights require a Max Alpha subscription. Cached ~5min.
No parameters
Output Schema
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly/openWorld/idempotent/destructive hints, and the description adds meaningful behavior beyond that: data is served from cache, cached ~5 minutes, no per-request AI cost, AI insight text is excluded, and stronger insights are gated behind a Max Alpha subscription.
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 and useful routing, but it is redundant: the aggregate score/label plus top 5 tokens is stated twice, and caching is mentioned twice ('Served from cache' and 'Cached ~5min'). It could be tightened without losing 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 zero-parameter, read-only tool with an output schema, the description covers everything needed to invoke it correctly: what it returns, auth requirements, caching behavior, subscription limitations, and the relevant sibling alternative.
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 tool has zero parameters and schema coverage is 100%, so the description has no parameter semantics to add. The baseline for zero-parameter tools is 4; the description stays there by focusing on output and access behavior instead.
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 ('Get aggregate market mood') and defines the exact output: overall sentiment score/label plus top 5 tokens. It also distinguishes itself from the sibling sentiment_history by explicitly naming it, so an agent can tell which tool to use.
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 explicitly says 'use sentiment_history for per-token time-series', providing a clear alternative and the condition that selects the other tool. It also states 'no auth', 'non-gated', and that full AI insights require a subscription, giving clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.