whale-data
Server Details
Real-time whale trades, Smart Money Radar, market snapshots, news sentiment, signal outcomes.
- Status
- Healthy
- Uptime
- 84.9% over 37 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 54 tools
Several tools are exact duplicates or deprecated aliases (liquidations/coin_liquidations, flag_outcomes/signal_outcomes, market_brief/trade_context, whale_activity/whale_profile, whale_tape/whale_trades), and the market_*/whale_* families are so large that an agent must parse long cross-reference notes to pick the right one. The individual descriptions try hard to disambiguate, but the set itself still presents overlapping choices.
Names mostly follow a readable <domain>_<subject> pattern (market_, whale_, hl_, liq_, defi_, dex_), but there is no consistent verb_noun structure: watch_create/delete/list are verbs while others are noun_noun, and oddities like big_catch, situations, options, and orderbook break the pattern. Alias pairs with unrelated names (market_brief vs trade_context, whale_activity vs whale_profile) also undermine predictability.
At 54 tools, including five duplicate/alias pairs and several near-identical one-call briefs, the surface is far beyond a well-scoped 3-15 tool set. Even after removing aliases it remains over 40 endpoints, which forces long tool-selection steps and heavy cognitive overhead.
The server covers its apparent domain unusually well: price/candles/orderbook, funding and OI, liquidations (perp/lending/projected/heat), whale flows (CEX/on-chain/Hyperliquid), news, signals/situations, watchlists and alerts, and access metadata. There are no major dead ends for a market-intelligence agent; the main issue is redundancy, not missing functionality.
Available Tools
54 toolsbig_catchBig Catch setupsARead-onlyIdempotentInspect
The whale-flow setups the engine is tracking right now, each one coin in a state (forming, confirmed, accelerating) with its direction, catch type, severity, age and the price move since it fired. Use it for "what setups are live", "is there a setup on SOL", "what is the engine watching". Keyless returns the setups with their state and direction; Starter and up adds the score, its breakdown and the fire price. Descriptive, not a forecast. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Only the setup on this coin. Omit for every live setup. | |
| pair | No | Alias for coin. | |
| limit | No | Max setups. Defaults to 10, hard ceiling 50 for everyone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| total | No | Live setups matching the filter. |
| setups | No | coin, state, tier, direction, direction_label, catch_type, severity, age_minutes, price_move_pct; Starter and up adds score, max_score, breakdown, fire_price, price. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present only when the score layer was withheld. |
| available | No | False when the engine has not published (building:true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive, so the bar is lower. The description adds valuable behavior beyond annotations: the access-tier difference (Keyless vs Starter and up), the exact fields returned at each tier, and the explicit 'Descriptive, not a forecast' caveat that prevents an agent from treating it as predictive.
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: what the tool returns, how to phrase queries, access-tier behavior, and a caveat. It front-loads the core resource and follows with usage and behavior details without any 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 the output schema, annotations, and optional parameters, the description is complete. It explains the live-setup scope, field categories, access-level return differences, and the descriptive-only nature of the data, so an agent has enough context 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 input schema already documents all three parameters at 100% coverage, including defaults and the coin/pair alias. The description adds some contextual meaning by showing a natural-language coin-filter query ('is there a setup on SOL'), but it does not substantially go beyond the schema for actual 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?
The description clearly identifies the tool as the engine's live whale-flow setups, with concrete fields (state, direction, catch type, severity, age, price move). The use phrases ('what setups are live', 'is there a setup on SOL') and 'not a forecast' distinguish it from the many sibling market-data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit query patterns for when to use the tool: 'what setups are live', 'is there a setup on SOL', 'what is the engine watching'. It also warns the data is descriptive, not a forecast, which discourages misuse, though it does not name specific alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coin_liquidationsRecorded liquidations for one coinARead-onlyIdempotentInspect
Forced closes ALREADY recorded for one pair, split long versus short. These are executed liquidations, not projected levels: for where liquidations could happen next use liq_zones, and for the whole market at once use market_liquidations. The plain-English name for liquidations (identical data and credit cost). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | e.g. ETH/USD. A bare symbol like ETH also works. | |
| hours | No | Look back this many hours, up to 720. Omit for the most recent events. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless. | |
| since_ms | No | Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair these events belong to. |
| count | No | How many events fired in the whole window, not how many rows came back. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| sources | No | How the events split between the streamed exchanges and Hyperliquid, and whether the Hyperliquid part is a sample. |
| long_usd | No | Dollars of longs force-closed across the window. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| short_usd | No | Dollars of shorts force-closed across the window. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| liquidations | No | The events themselves, newest first: price, size in base and quote, side (long_liquidated or short_liquidated), exchange and time. A sample of the window when truncated is true. |
| window_hours | No | The period the totals cover, in hours. |
| rows_returned | No | How many event rows are actually in this reply. |
| window_minutes | No | The same period in minutes. |
| requested_hours | No | The period asked for, so a page can be told apart from a period. |
| total_in_window | No | How many events the window holds in total. |
| history_included | No | True when the recorded series was merged in, so a restart has not erased earlier events. |
| total_volume_usd | No | Dollars forced out across the whole window. |
| long_liquidations | No | COUNT of longs force-closed. For dollars read long_usd. |
| rows_span_minutes | No | How far back the returned rows themselves reach. |
| short_liquidations | No | COUNT of shorts force-closed. For dollars read short_usd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read-only operation. The description adds valuable context beyond these annotations: it clarifies these are executed liquidations (not projected levels), split by long/short, and characterizes the data as descriptive market data only. This enriches the agent's understanding of the tool's behavior 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 compact and front-loaded with the core purpose, then supplies crucial sibling differentiation and a note about the tool being the plain-English name for liquidations. Each sentence adds distinct value—purpose, behavioral distinction, and routing—with no filler or redundant repetition of schema 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?
Given that an output schema exists and annotations already cover safety and idempotency, the description addresses everything an agent needs to correctly select and invoke the tool: what it returns (recorded, split long/short), when to use it versus alternatives, and the nature of the data (descriptive, not projected). No critical context 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 description coverage is 100%, so the input schema fully documents all five parameters (coin, pair, hours, limit, since_ms) including their semantics and constraints. The description does not add any parameter-specific meaning beyond what the schema already provides, so it meets the baseline of 3 without exceeding 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 states exactly what the tool does: returns already-recorded forced closes (liquidations) for one pair, split into long versus short. It distinguishes itself from sibling tools liq_zones (projected levels) and market_liquidations (whole market) explicitly, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names specific alternatives and the conditions for selecting them: use liq_zones for where liquidations could happen next, and market_liquidations for the whole market at once. It also clarifies it is for recorded data on a single pair, leaving no ambiguity 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.
coin_searchFind a coinARead-onlyIdempotentInspect
Search the coin catalog by symbol or part of a name ("sol", "pepe", "render") and get the symbol the other tools take, whether this server streams it (streamed) and whether it is in the free set (free), with price, 24h change, volume and market cap where recorded. Use it first when a coin is unfamiliar or ambiguous, and for "which coins are ..." discovery. Free to call, same on every plan. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for query. | |
| pair | No | Alias for query (a pair like SOL/USD searches its base). | |
| limit | No | Max matches. Defaults to 10, hard ceiling 20 for everyone. | |
| query | No | Symbol or part of a name, for example "sol" or "pepe". |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| query | No | The query as searched. |
| total | No | Total catalog matches. |
| matches | No | symbol, name, pair (when streamed), streamed, free, price, change_24h_pct, volume_24h_usd, market_cap_usd, rank. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| available | No | False when nothing was searched (no query) or the catalog has not loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly, idempotent, and non-destructive. The description adds meaningful context beyond that: it is 'Free to call, same on every plan', 'Descriptive market data only', and it explicitly reports streamed/free set status plus 'where recorded' for data availability. This gives the agent access, cost, and data-boundary information the annotations 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 compact and front-loaded: the first sentence packs the search action, input examples, and key output fields. The following sentences add usage timing, cost/access, and scope limitations. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not the description's job. Given that, the description covers the essential selection context: when to use it, what makes it special (free, streamed/free-set flags, symbol resolution), and its limitation as descriptive market data only. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all four parameters documented including query, pair alias behavior, and limit defaults/ceiling. The description does not add parameter-level semantics beyond that, 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?
States a specific verb and resource: 'Search the coin catalog by symbol or part of a name'. It also distinguishes itself from siblings by naming what it returns: the canonical symbol other tools take, streaming/free-set status, and market data. This is much more precise than the generic title 'Find a coin'.
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?
Directs the agent to 'Use it first when a coin is unfamiliar or ambiguous, and for "which coins are ..." discovery.' This is a clear context for when the tool should be chosen. It does not explicitly name alternatives or when-not-to-use cases, 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.
crypto_newsCrypto news and sentimentARead-onlyIdempotentInspect
The headline read for one coin: recent headlines, the written points behind them, a pre-computed mood score (-100 to +100) and the market-wide picture alongside. Use it when the HEADLINES are what was asked for ("any news on SOL", "what are people saying about ETH", "show me the headlines"). For "why is X moving" call market_brief instead: it already carries this coin's news next to the price, whale flow and forced closes, so no second call is needed. News is a candidate explanation for a move, never asserted as the reason. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Defaults to BTC. News coverage is not every coin: where nothing was recorded the reply carries covered:false and a null sentiment_score, which is absence and not a neutral reading. | |
| pair | No | Alias for coin. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin the headlines and score are about. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| macro | No | The same three fields for the market as a whole: sentiment, sentiment_score and summary. |
| points | No | The written points behind the summary, each with a kind (signal, data, risk or macro) and its text. Empty when nothing was recorded. |
| covered | No | False when nothing was recorded for this coin, which is why sentiment_score is null. Not a neutral reading. |
| summary | No | The pre-written summary for this coin, or null. |
| realtime | No | True when the headlines are live. Keyless connections get the delayed set. |
| headlines | No | Up to 20 recent headlines, each with title, source, published time and link. |
| key_level | No | The one level or figure the written read points at, or null. |
| sentiment | No | The wording that goes with the score, or unknown. |
| sentiment_score | No | Minus 100 to plus 100. Null means nothing was measured, which is not the same as zero. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral nuance: it notes that news is 'a candidate explanation for a move, never asserted as the reason' and that it provides 'descriptive market data only.' This adds interpretive context beyond the annotations, though it doesn't detail response shapes or error handling, which is partially covered by the output schema and parameter descriptions.
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 the core purpose, followed by usage examples and alternatives. Every sentence adds value—the alternative routing, the caveat about news not being the reason, and the 'descriptive data' tag. No fluff, and it remains readable despite its length.
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 the tool's purpose, typical queries, distinction from alternatives, and the interpretive stance on news. Combined with a rich input schema and existing output schema, nothing essential is missing for an agent to use this tool correctly. The only minor gap (what 'market-wide picture' entails) is not critical given the overall context.
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 has 100% description coverage for both parameters, including defaults, aliases, and edge-case behavior (covered:false). The tool description adds no additional parameter-specific meaning, so per the baseline rule for high schema coverage, a 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 clearly states the tool's function: 'The headline read for one coin: recent headlines, the written points behind them, a pre-computed mood score (-100 to +100) and the market-wide picture alongside.' It specifies a verb (read) and resource (headlines for a coin), and differentiates from siblings by naming market_brief as the alternative for 'why is X moving'. This makes it distinct from the many other 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?
Explicitly states when to use this tool: 'Use it when the HEADLINES are what was asked for' with concrete examples, and when not to: 'For "why is X moving" call market_brief instead' with reasoning that market_brief already contains the news. This is clear guidance that routes the agent correctly among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
defi_liquidationsDeFi lending liquidationsARead-onlyIdempotentInspect
Lending liquidations from Aave V3 and Morpho Blue on Ethereum, Arbitrum and Base: a third party repaid the debt and seized the collateral, so both wallets are named on every row. A different event from a perp liquidation (see the liquidations tool) and never summed with one. count and total_usd cover exactly the rows returned and the window field states the period those rows span, so the total is never mistaken for a fixed 24h figure. Keyless. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them. | |
| limit | No | Max rows returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. count and total_usd cover exactly the rows returned, and window states the period those rows span, so neither is a fixed 24h figure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| count | No | How many rows this reply carries. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| window | No | The period the returned rows actually span: from, to and hours. |
| matched | No | How many rows matched the chain filter before the row cap. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| total_usd | No | Dollars across exactly the rows returned. A page sum, not a fixed 24h total: the window field says what period those rows span. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| liquidations | No | The events, each naming BOTH wallets: the one liquidated and the one that repaid the debt and took the collateral. |
| unknown_chain | No | Set when a chain was named that this lane does not index. Nothing was searched, so this is not no liquidations there. |
| chains_covered | No | The chains this lane indexes. |
| protocols_covered | No | The lending protocols behind these rows. |
| duplicates_dropped | No | How many repeat rows for the same event were removed before counting, so the dollars are not doubled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: keyless access, descriptive market data only, and clarifies that 'count' and 'total_usd' cover exactly the returned rows with a 'window' field, avoiding misinterpretation of fixed 24h figures. This exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each dense with information: scope, event distinction, and metric semantics. No fluff, front-loaded with the most important purpose, and 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?
Given an output schema exists and annotations cover safety, the description covers scope, event type, chain availability, metric semantics, and alternative tool differentiation. It is complete for a read-only filtered tool with simple parameters.
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% for both parameters, providing full documentation. The description further clarifies the 'limit' parameter's behavior (defaults, hard ceiling) and the 'chain' parameter's refusal behavior, adding value beyond schema. Baseline 3 is elevated to 4 due to meaningful extra context.
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 ('repaid debt and seized collateral') and clearly names resources (Aave V3, Morpho Blue on Ethereum, Arbitrum, Base). It distinguishes from the sibling 'liquidations' tool by explicitly saying it's a different event and never summed with one.
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 on what the tool covers (lending liquidations vs perp liquidations) and names the alternative 'liquidations' tool for perp liquidations. It does not explicitly say 'when not to use' beyond the differentiation, but the guidance is specific enough to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
defi_summaryDeFi / on-chain summaryARead-onlyIdempotentInspect
One-call on-chain DEX state across Ethereum, Base and Arbitrum: 24h volume and TVL per chain, the highest-volume tokens, and whale swap activity (buy/sell split, unique and repeat wallets, per-DEX breakdown). Use this for the DeFi / on-chain picture ("what is happening in DeFi", "which chain has the most volume", "where is capital moving on chain"). For the individual wallets behind large swaps use onchain_whales; for CEX whale flow use whale_profile. Keyless returns totals and a short token list with swap USD withheld; a paid plan returns the full table. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| chains | No | One row per chain: the chain, tokens tracked, 24h volume and total value locked. |
| totals | No | Across all chains: 24h volume, total value locked, how many chains and how many tokens are tracked. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| top_tokens | No | The highest-volume tokens: chain, symbol, name, address, price, 24h change, volume and value locked. Shortened on a keyless connection. |
| updated_at | No | When the on-chain token snapshot was published. |
| coverage_note | No | What the numbers do and do not cover. |
| whale_activity | No | Large swaps in the window: how many, buy and sell dollars, net, the largest, unique and repeat wallets, and the split per exchange and per chain. A keyless connection gets the counts with magnitudes_withheld set instead of the dollars. |
| tokens_withheld | No | Keyless only: how many tokens were cut from top_tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context beyond that: keyless access returns totals and a short token list with swap USD withheld, while a paid plan returns the full table. It also notes 'Descriptive market data only,' clarifying the nature of the data. 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 compact yet information-dense: first sentence defines the resource and outputs, second sentence provides usage context with example questions, third sentence covers access limitations and alternatives. Every sentence earns its place, and no filler exists.
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 no parameters, annotations already cover safety and idempotency, and an output schema exists, the description supplies all extra context an agent needs: content, usage intent, alternative routing, and access-tier behavior. Nothing material 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 there is nothing for the description to document. The baseline for a parameterless tool is 4, and the description correctly focuses on behavior and output rather than inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a one-call on-chain DEX state summary across Ethereum, Base, and Arbitrum, listing concrete outputs like 24h volume, TVL, top tokens, and whale swap activity. It also explicitly distinguishes itself from sibling tools by naming onchain_whales and whale_profile as alternatives, making purpose 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 explicitly states when to use this tool ('Use this for the DeFi / on-chain picture') with concrete example queries, and gives clear routing guidance: for individual wallets use onchain_whales, for CEX whale flow use whale_profile. This is explicit when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex_boardDEX whale boardARead-onlyIdempotentInspect
The wallets that moved the most size on DEXes across Ethereum, Base and Arbitrum in the last 48h, ranked, with buy and sell dollars, chains, token count and a behaviour classification; or, with token, the 24h whale-swap snapshot for one token. Use it for "who is moving size on chain", "biggest DEX traders this week", "who is trading PEPE on chain". Keyless returns the board with wallet addresses withheld; Starter and up names every wallet (pass one to dex_wallet). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them. | |
| limit | No | Max wallets. Defaults to 20, hard ceiling 100 for everyone. | |
| token | No | One token symbol or contract address for the per-token snapshot. Omit for the wallet board. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present only when identities were withheld. |
| wallets | No | Ranked wallets: swaps, usd, buy_usd, sell_usd, chains, tokens, classification; wallet address on Starter and up. |
| snapshot | No | With token: the 24h whale-swap snapshot for that token. |
| available | No | False when the board has not published (building:true) or the token has no snapshot. |
| wallets_withheld | No | Free: wallet identities held back on this many rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only/idempotent; the description adds useful behavior beyond that: Keyless results withhold wallet addresses, Starter+ names wallets, and the data is 'descriptive market data only'. This clarifies access-tier behavior and non-actionable nature without overclaiming.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, all front-loaded with the core resource first, then usage examples and access caveats. No filler or repetition of schema fields.
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 3-parameter tool with an output schema and safety annotations, the description covers the two modes, chains, time window, returned fields, access tiers, and next-step routing. Nothing essential is missing for tool selection and invocation.
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 explaining the token mode ('24h whale-swap snapshot') and board mode, but it does not add new meaning for chain or limit beyond the 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?
Description names a specific resource (DEX whale board), scope (Ethereum, Base, Arbitrum, last 48h), content (ranked wallets with buy/sell dollars, chains, token count, behavior classification) and the per-token mode. This gives enough specificity to distinguish it from CEX whale boards and the dex_wallet sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit example queries ('who is moving size on chain', 'who is trading PEPE on chain') and explains the token mode vs wallet-board mode. It also routes wallet-level detail to dex_wallet, but does not explicitly state when not to use this tool versus other whale/DEX siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dex_walletOn-chain wallet activityARead-onlyIdempotentInspect
One Ethereum, Base or Arbitrum address: its recorded DEX swaps, net flow per token and activity pattern. For a Hyperliquid ACCOUNT use hl_wallet instead: the same 0x string can exist on both and they are different subjects with different pages. Real coverage limit, state it once when the answer turns on it: the swap feed sees roughly 7 percent of a wallet total activity, so quiet here does not mean inactive. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max recorded swaps returned for this address. Defaults to 25, hard ceiling 100 for everyone and no plan raises it. | |
| address | Yes | Ethereum, Base or Arbitrum address, 0x followed by 40 hex characters. Required. This is the on-chain wallet, not the Hyperliquid account that can sit at the same 0x string: use hl_wallet for that one. An address outside the followed set answers tracked:false, which is a coverage fact and not a wallet doing nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| error | No | invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up. |
| venue | No | Always on-chain. This is NOT the Hyperliquid account that can sit at the same 0x string. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| events | No | Its recorded swaps, newest first. |
| address | No | The address, normalised. |
| profile | No | What this address has been doing: net flow per token and its activity pattern. |
| tracked | No | False when this address is outside the followed set. A coverage fact, not a wallet doing nothing. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds valuable context beyond annotations: the 7% coverage limit, the meaning of tracked:false, and the 'descriptive market data only' caveat. 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?
Three sentences, each purposeful: the first states the tool's function, the second disambiguates from a sibling, and the third discloses the critical coverage limitation. No wasted words; information is front-loaded and directly relevant.
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 (so return values are documented) and annotations cover safety, the description provides the essential remaining context: the tool's scope (Ethereum/Base/Arbitrum), the sibling distinction, and a realistic coverage limitation that affects interpretation. This is complete for an agent to use 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?
Schema description coverage is 100%, so the schema already fully describes both parameters, including address format and limit defaults/cap. The tool description reinforces the address/vs Hyperliquid distinction but does not add new parameter-specific meaning beyond what is in 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?
The description opens with 'One Ethereum, Base or Arbitrum address: its recorded DEX swaps, net flow per token and activity pattern,' clearly identifying the resource (wallet address) and specific actions (DEX swaps, net flow, activity pattern). It also explicitly distinguishes from hl_wallet, ensuring no confusion among 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 gives explicit direction to use hl_wallet for Hyperliquid accounts ('For a Hyperliquid ACCOUNT use hl_wallet instead') and warns about the 7% coverage limit with the instruction to 'state it once when the answer turns on it,' which guides when and how to interpret results. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flag_outcomesSignal outcomes ledgerARead-onlyIdempotentInspect
Recently fired signal-ledger flags with fire-time price and later price outcomes, logged live and never backfilled. For one signal type on one coin (how the last N played out) use signal_record.Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin. | |
| pair | No | Alias for coin. | |
| type | No | Filter to one signal type. One of: whale-spike, funding-extreme, squeeze-flip, liq-cascade, flow-divergence, major-pctile, major-block, deriv-record. The underscore spellings used by alert rules (for example funding_extreme, or spike for whale-spike) are accepted too. Anything else is refused by name rather than answered as every signal. Omit for all types. | |
| hours | No | How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin filter applied, or null for all coins. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| type | No | The signal type filter applied, or null for all types. |
| count | No | How many rows this reply carries. |
| hours | No | The window actually read, in hours. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| signals | No | The signals that fired in the window, each with its type, coin, fire time, price at fire time and later price outcomes where they have been scored. |
| all_time | No | Permanent counters from the archive, independent of the window asked for: fired, scored_h24, since, through and by_type. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| aggregates | No | byType: how many fired per signal type inside the window. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| valid_types | No | The signal types that do exist, returned alongside unknown_type. |
| unknown_type | No | Set when the type asked for is not one this record keeps. Nothing was filtered and nothing was searched. |
| total_in_window | No | How many signals fired in the whole window, before the row cap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description only needs to add non-obvious data behavior. It discloses that records are 'logged live and never backfilled' and that the tool returns 'descriptive market data only', both useful contextual traits. 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?
Two short sentences with no filler; the first is front-loaded with the tool's core payload, and the second adds routing and scope. Every clause earns its place despite a minor formatting issue around 'signal_record.Descriptive'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and no required parameters, the description does not need to enumerate return fields. It covers freshness, backfill behavior, scope, and the key alternative, leaving only minor domain nuance around 'signal-ledger flags' unexplained.
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 covers all five parameters at 100%, including defaults, caps, and the 'capped' notice in the payload. The description does not add parameter-level detail beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('signal-ledger flags with fire-time price and later price outcomes') and explicitly distinguishes it from signal_record. It lacks a direct retrieval verb like 'list' or 'return', but the title and noun-phrase style still make the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes the single-signal/single-coin case away: 'For one signal type on one coin (how the last N played out) use signal_record.' The first sentence also constrains scope to recently fired, live, non-backfilled data, which tells the agent when this tool is relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funding_matrixPer-venue funding matrixARead-onlyIdempotentInspect
Per-venue funding rates for one pair, side by side, with the predicted next rate and payout time where the venue provides it. Use this when the user asks about funding across exchanges, where funding is most extreme, or where perp longs vs shorts are paying ("compare BTC funding across venues", "which venue has the richest funding"). For the single average funding on a coin alongside price/OI/whales, market_brief already includes it; for whether funding is unusual vs the coin's history, market_history/market_extremes carry the comparison. On the free plans BTC in full and any other pair as a headline. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair these rates belong to. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| per_venue | No | One row per exchange: the exchange name, its current funding rate, its predicted next rate where it publishes one, the next payout time, and interval_h. Rates are per that exchange own interval, so magnitudes are not comparable across rows until they are normalised. |
| updated_at | No | When these rates were read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that predicted rates are only returned 'where the venue provides it', notes free-plan limitations ('On the free plans BTC in full and any other pair as a headline'), and states 'Descriptive market data only'. This aligns with readOnlyHint=true and adds context (e.g., predictive nature, plan-based behavior) 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 a single paragraph but packs purpose, usage scenarios, alternatives, and a free-plan caveat. It is well-structured and front-loaded with the core purpose, though slightly long; every sentence earns its place, so it is appropriately 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?
Given the presence of a detailed input schema, an output schema, and annotations, the description covers purpose, usage, alternatives, behavioral caveats, and plan-based limitations. Nothing an agent needs to decide whether to call this tool or how 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 schema description already covers 100% of parameter meaning, including default behavior, bare-symbol interpretation, and free-plan effects. The tool description only refers to 'one pair' without adding any parameter-specific semantics, thus meeting the baseline for high schema coverage but not enriching it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Per-venue funding rates for one pair, side by side') and the output nature (predicted next rate and payout time where available). It provides concrete usage examples ('compare BTC funding across venues') that clearly distinguish it from market_brief and market_history, making the tool's purpose 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?
Explicitly says 'Use this when the user asks about funding across exchanges, where funding is most extreme, or where perp longs vs shorts are paying'. It names alternatives (market_brief for single average funding, market_history/market_extremes for historical comparisons) and explains what they cover, so the agent knows exactly when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_boardHyperliquid whale boardARead-onlyIdempotentInspect
The tracked Hyperliquid whale accounts: equity, open notional, leverage, net bias, plus per-coin crowding across those wallets. Use this for how the tracked HL whales are positioned right now ("are HL whales long or short BTC", "what are the big HL accounts in"). For one specific wallet use hl_wallet; for the proven-profitable trader cohort use smart_money or hl_traders; for individual recent fills use hl_whales. Keyless returns the top rows and states how many are withheld; a paid plan returns the whole board. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| rows | No | The accounts: wallet, equity, dollars open, leverage and which way they lean. Shortened on a keyless connection. |
| venue | No | Always Hyperliquid. |
| tracked | No | How many accounts are tracked. |
| crowding | No | Per-coin crowding across the tracked accounts. |
| withheld | No | How many rows a keyless connection did not receive. Zero on a paid plan. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| updated_at | No | When the board was published. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| with_open_positions | No | How many of them currently hold something. |
| tracked_notional_usd | No | Total dollar value of everything those accounts hold open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds meaningful behavioral context: the keyless vs. paid access difference, that keyless returns only top rows and states withheld counts, and that this is 'descriptive market data only.' 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 compact yet information-dense: it leads with the core data content, gives concrete usage examples, then routing to alternatives, and closes with access-tier behavior. Every sentence earns its place and there is no fluff.
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, the description is fully complete: it defines the data, gives usage context, differentiates from relevant siblings, and explains access limitations. Nothing an agent needs to correctly select and invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already covers everything, so the baseline is 4. The description compensates by explaining what the returned board contains and the kinds of questions it answers, which adds semantic value beyond the empty 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 clearly identifies the tool as an aggregated view of tracked Hyperliquid whale accounts, listing the exact data dimensions (equity, open notional, leverage, net bias, per-coin crowding). It also distinguishes itself from sibling tools like hl_wallet and hl_whales, so an agent can confidently select it for positioning questions.
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 ('how the tracked HL whales are positioned right now') with concrete example queries, and also names alternatives for different intents: hl_wallet for a specific wallet, smart_money or hl_traders for profitable traders, and hl_whales for recent fills. This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_movesHyperliquid position changesARead-onlyIdempotentInspect
What named Hyperliquid accounts just DID: open, add, trim, close or flip, with the coin, side, size of the change, the standing position after it, leverage and liquidation price. Use it for "what did the big accounts just do", "did anyone flip short on BTC", "what is Trader 7 doing". Keyless returns the proven-trader cohort's moves; a plan returns every tracked account at the plan's row cap. Filter by coin, wallet or kind; since_ms is a polling cursor. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Only moves in this coin. Omit for every coin. | |
| kind | No | Only this kind of move: open, add, trim, close or flip. | |
| pair | No | Alias for coin. | |
| limit | No | Max moves. Defaults to 25; the ceiling is the plan's row cap, hard ceiling 200. | |
| wallet | No | Only moves by this account address. | |
| since_ms | No | Polling cursor: only moves newer than this Unix-ms timestamp. Pass back next_since_ms from the previous answer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| moves | No | wallet, kind (open/add/trim/close/flip), coin, side, sizeUsd (the change), positionUsd (after it), leverage, liqPx, accountLeverage, ts. |
| matched | No | Rows matching the filters before the cap. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present on the free shape: the plan that returns every tracked account. |
| available | No | False when no position changes are recorded (producer dark or quiet; an empty key cannot tell which). |
| cohort_only | No | True on the free shape: proven-cohort moves only. |
| next_since_ms | No | Cursor for the next poll. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only and idempotent behavior, but the description adds important context beyond that: keyless returns only the proven-trader cohort, a plan returns every tracked account up to the row cap, since_ms is a polling cursor, and this is 'descriptive market data only'. None of this contradicts 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 compact and front-loaded with the most important identifying information, followed by concrete usage examples and behavioral caveats. Every sentence earns its place; there is no filler or restatement of the schema.
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 annotations, the complete 100% schema coverage, and the presence of an output schema, the description covers what an agent needs to select and invoke the tool: the event type, returned fields, filters, polling cursor semantics, and access-tier behavior. There is no obvious missing context that would cause a wrong call.
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, but the description adds useful meaning by summarizing the filter dimensions ('Filter by coin, wallet or kind') and tying since_ms to a polling cursor and next_since_ms. It also gives limit-related context through the plan row-cap behavior, going slightly beyond the raw field 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 opens with a clear verb-resource pair: 'What named Hyperliquid accounts just DID', then enumerates the concrete move kinds (open, add, trim, close, flip) and the returned fields (coin, side, size, standing position, leverage, liquidation price). This distinguishes it from sibling tools like hl_traders or hl_wallet, which focus on profiles or balances rather than position-change events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use examples ('what did the big accounts just do', 'did anyone flip short on BTC', 'what is Trader 7 doing') and explains the keyless vs. plan behavior, which tells an agent when it can get the cohort view versus all tracked accounts. It does not explicitly name sibling alternatives or state 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.
hl_tradersVerified traders (every wallet)ARead-onlyIdempotentInspect
Every Hyperliquid wallet that has closed a trade, screened from primary closing fills for net-of-fees realized profit and a human trade pace, so a profitable trader outside the venue's ranked leaderboard is still found. A stage-1 claim from fills alone: equity, ROI and the market-maker volume ratio are not verified, because a closing fill carries no account value, so it is a weaker and different claim than smart_money or the proven-trader board and is never the same number. Net realizedPnl sits next to its gross and fees, and profitableCloses counts distinct closing actions, not partial fills. Keyless returns the top rows and states how many are withheld; a paid plan returns the whole board. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| rows | No | The wallets that passed both gates, ranked by net realized PnL: net realizedPnl (plus realizedPnlGross and feesUsd), closes vs closingFills, profitableCloses, winRate, coins, fillsPerDay and topCoins. Shortened on a keyless connection. |
| venue | No | Always Hyperliquid. |
| funnel | No | The screen as four shrinking counts (seen, enough closing trades, human pace, profitable), so a small final count is never mistaken for the whole population. |
| withheld | No | How many rows a keyless connection did not receive. Zero on a paid plan. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| updated_at | No | When the scan was published. The scan runs daily and the board self-expires after 24h. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| window_days | No | The window the scan aimed to cover, in days. |
| wallets_seen | No | How many distinct wallets closed a trade in the window. |
| scan_complete | No | True when the whole requested block range was read; false when the scan truncated (still honest, just a shorter window). |
| reconciliation | No | For wallets also on the proven-trader board, both numbers side by side with comparable:false. NOT like-for-like: a realized-closes figure over this window vs the venue leaderboard figure. |
| effective_window_days | No | The window actually covered. Below window_days means the scan was rate-limited by the portal and the pace figures cover a shorter span. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses significant behavioral traits: only closing fills are used, equity/ROI/MM ratio are deliberately not verified, net PnL is shown beside gross and fees, profitableCloses counts distinct actions not partial fills, and keyless access returns truncated rows with a withheld count. 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, then moves through caveats, field semantics, and access tiers. It is somewhat long and the first sentence packs many concepts, but every sentence contributes necessary distinction from sibling trader tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read-only dataset with an output schema, the description is complete: it explains data provenance, what is and isn't verified, how the data differs from sibling tools, what fields mean, and what access tiers receive. Nothing critical 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 0-param baseline of 4 applies. The description goes further by clarifying output field semantics such as net realizedPnl and profitableCloses, which is useful even though it is not parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: returning Hyperliquid wallets with closed trades that meet realized-profit and human-pacing screens, so profitable traders outside ranked boards are captured. It also explicitly distinguishes the claim from smart_money and the proven-trader board, helping an agent differentiate at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when you need a broader set of verified traders based on closing fills rather than ranked leaderboards, and it warns that this is a weaker, different claim than smart_money or the proven-trader board. It does not provide an explicit 'when not to use' list, but the alternatives are named and the distinction is sharp.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hl_walletHyperliquid wallet bookARead-onlyIdempotentInspect
One Hyperliquid account: live positions, equity, leverage, net bias and unrealized PnL, plus its recent whale-sized fills. The live book is public on Hyperliquid so it stays on the free plans; computed history (win rates, cadence, realized PnL) and the full fill trail need a paid plan. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. The free plans receive 3 of them whatever is asked for, and the live positions come back either way. | |
| address | Yes | Hyperliquid account address, 0x followed by 40 hex characters. Required. Every hl_whales row carries the wallet that filled it, so it can be passed straight in. An address outside the tracked set answers tracked:false, which is a coverage fact and not an account holding nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| error | No | invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| prints | No | Recent whale-sized fills for this account. Keyless connections receive 3 of them whatever was asked for. |
| address | No | The account address, normalised. |
| profile | No | The live account: what it holds, equity, dollars open, leverage, which way it leans and unrealized profit. Public on Hyperliquid, so it stays keyless. |
| tracked | No | False when this account is outside the tracked set. A coverage fact, not an account holding nothing. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| locked_layers | No | Keyless only: which computed blocks a paid plan adds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses meaningful behavior: the live book is public and available on free plans, while win rates, cadence, realized PnL, and the full fill trail are plan-gated. The closing 'Descriptive market data only' also sets expectations about scope. This adds real value beyond the annotations and does not contradict 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 compact and front-loaded: the first sentence states what the tool returns, and the second adds the plan nuance. Every sentence earns its place, though the final 'Descriptive market data only' clause is somewhat generic and could be trimmed or folded in without losing much.
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 an output schema, so return-value documentation is already handled. The description covers scope, plan gating, and public-data availability, while the schema covers address and limit semantics. A qualified 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?
Both parameters are fully documented in the input schema, including the address format, the tracked/untracked account distinction, and the limit behavior with defaults, free-plan caps, and ceilings. The description itself adds little parameter-level detail, so the schema carries the semantic weight, which is the expected 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 opens with 'One Hyperliquid account' and enumerates the exact contents: live positions, equity, leverage, net bias, unrealized PnL, and recent whale-sized fills. This makes the resource and scope unmistakable, even without an explicit verb, and clearly distinguishes it from aggregate siblings like hl_whales or hl_traders.
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 communicates a clear use case: retrieve a single Hyperliquid account's live book and recent fills. It also gives plan-based guidance by saying the live public book stays on free plans, while computed history and the full fill trail require a paid plan. It does not name an alternative sibling for paid-only data, 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.
hl_whalesHyperliquid named whale fillsARead-onlyIdempotentInspect
Recent whale-sized Hyperliquid fills WITH THE WALLET ADDRESS attached. Hyperliquid is the one venue whose public feed names the account on both sides of a fill, so every row here is followable to a live book. Use this to see which named accounts just traded a coin ("which HL whales just bought BTC"). For one wallet's full book and leverage use hl_wallet; for the ranked tracked-account board and net bias use hl_board; for the proven-profitable cohort use smart_money. Keyless. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one coin, for example PEPE. Matched against the parsed symbol as well as the raw market name, so the 1000-unit markets (kPEPE, kSHIB, kBONK) are found under PEPE, SHIB and BONK. One symbol, not a list. Omit for every coin. | |
| pair | No | Alias for coin. | |
| limit | No | Max fills returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. | |
| since_ms | No | Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin filter applied, or null for every coin. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| count | No | How many rows this reply carries. |
| venue | No | Always Hyperliquid. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| trades | No | The fills, each carrying the wallet on both sides, the coin, the direction, the size and the time. Pass a wallet to hl_wallet for that account live positions. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the description doesn't need to restate safety. It adds behavior beyond annotations: every fill row is 'followable to a live book', the data is 'descriptive market data only', and the venue uniquely names both sides of fills. It could add more about time window or rate limits, but the schema and output schema cover much of that.
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 capability, then gives a use example, sibling routing, and access note in compact sentences. No filler or tautology; each sentence adds decision-relevant 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-required-parameter read query with fully covered schema and an output schema present, the description covers the tool's purpose, differentiation, use cases, and access posture. Nothing necessary for an agent to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already documents coin, pair, limit, and since_ms with domain-specific detail (e.g., kPEPE matching, polling cursor semantics). The description itself adds no parameter-level meaning beyond the general use case, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Recent whale-sized Hyperliquid fills WITH THE WALLET ADDRESS attached.' It gives an explicit query example ('which HL whales just bought BTC') and differentiates itself from sibling tools by naming the venue's unique named-feed property.
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 tells the agent exactly when to use this tool ('Use this to see which named accounts just traded a coin') and routes to specific alternatives: hl_wallet for per-wallet book/leverage, hl_board for ranked board/net bias, and smart_money for the profitable cohort. 'Keyless' also clarifies access expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liq_heatLiquidation heat gridARead-onlyIdempotentInspect
Where liquidations actually hit, by price band, in 5-minute columns: the realized heat grid for one pair, with the hottest cell named. Use it for "where did the liquidations cluster today", "which price band got hit hardest". Keyless: the free pairs, the last 3 hours (36 columns). Starter: every streamed pair. Pro: the 12-hour grid (144 columns) and the projected forward grid. For projected levels as a book use liq_zones; for the events themselves use liquidations. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Columns returned: 36 (3h) below Pro, 144 (12h) on Pro and up. |
| columns | No | 5-minute columns, oldest first: t, price, band, cells (price band, usd). |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present below Pro: the plan that returns the 12h and projected grids. |
| available | No | False on an uncovered pair, a pair outside the free set keyless, or when no grid is recorded. |
| projected | No | Pro and up: the projected forward grid, a model. |
| hottest_cell | No | The single cell with the most realized liquidation dollars: t, price, usd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and non-destructive behavior. The description adds valuable context about data scope and plan limitations: keyless access gives free pairs for the last 3 hours, Starter covers every streamed pair, and Pro adds 12-hour and projected grids. It also notes the data is descriptive market data only.
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 with the core concept, then moves to usage scenarios, plan tiers, and alternative tools. Every sentence adds useful information without redundancy or 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 the output schema exists, the description does not need to explain return values. It covers what the tool does, when to use it, how it differs from related tools, data availability by plan, and the fact that it is read-only descriptive data. This is complete for an agent to select and call 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?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description only adds that the grid is for 'one pair,' which aligns with the pair/coin parameters but does not meaningfully extend the schema's documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: a realized liquidation heat grid for one pair, broken down by price band in 5-minute columns, with the hottest cell named. It also distinguishes itself from sibling tools by explicitly contrasting with liq_zones and liquidations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases: 'where did the liquidations cluster today' and 'which price band got hit hardest'. It also provides clear routing guidance, directing the agent to liq_zones for projected levels and to liquidations for individual events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liquidationsRecent liquidationsARead-onlyIdempotentInspect
Liquidation trades for a pair with the long and short breakdown, live tape merged with the recorded series so a restart never erases history. A long is force-closed by selling, so sell-side events are long liquidations. long_liquidations and short_liquidations are event COUNTS; long_usd and short_usd carry the dollar split. Pass hours to ask for a period (hours: 24 for today); without it you get the most recent rows and window_minutes tells you how far back they reach. truncated:true means more events matched than were returned, so window_minutes covers the returned rows only and total_in_window has the real count. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | e.g. ETH/USD. A bare symbol like ETH also works. | |
| hours | No | Look back this many hours, up to 720. Omit for the most recent events. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless. | |
| since_ms | No | Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair these events belong to. |
| count | No | How many events fired in the whole window, not how many rows came back. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| sources | No | How the events split between the streamed exchanges and Hyperliquid, and whether the Hyperliquid part is a sample. |
| long_usd | No | Dollars of longs force-closed across the window. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| short_usd | No | Dollars of shorts force-closed across the window. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| liquidations | No | The events themselves, newest first: price, size in base and quote, side (long_liquidated or short_liquidated), exchange and time. A sample of the window when truncated is true. |
| window_hours | No | The period the totals cover, in hours. |
| rows_returned | No | How many event rows are actually in this reply. |
| window_minutes | No | The same period in minutes. |
| requested_hours | No | The period asked for, so a page can be told apart from a period. |
| total_in_window | No | How many events the window holds in total. |
| history_included | No | True when the recorded series was merged in, so a restart has not erased earlier events. |
| total_volume_usd | No | Dollars forced out across the whole window. |
| long_liquidations | No | COUNT of longs force-closed. For dollars read long_usd. |
| rows_span_minutes | No | How far back the returned rows themselves reach. |
| short_liquidations | No | COUNT of shorts force-closed. For dollars read short_usd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description reveals meaningful behavior: history survives restarts, sell-side events are always long liquidations, counts are event counts rather than dollars, and truncated results affect only returned rows. None of this is available from annotations or the input schema, and 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 dense but every sentence earns its place: purpose, methodology, field semantics, parameter default, truncation caveat, and a final scope guard. It is front-loaded with the core behavior and avoids repeating the schema verbatim.
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 pair-scoped read-only data tool with an output schema, this is complete: it covers the default window, the truncation semantics, and clarifies the long vs short dollar split ahead of the output schema. The annotations already cover safety, and the schema covers parameter formats, so nothing needed for correct invocation 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% and the schema already documents coin/pair, hours, limit, and since_ms. The description adds useful semantics beyond that, especially the hours default ('hours: 24 for today'), what happens when hours is omitted, and the meaning of window_minutes and truncation; it does not deeply expand every parameter, so a 4 rather than a 5.
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 by naming the resource and scope ('Liquidation trades for a pair with the long and short breakdown'), so an agent can tell it is pair-scoped rather than market-wide. It is not a tautology and conveys the live-plus-recorded merge, but it never names sibling tools such as market_liquidations or coin_liquidations to differentiate 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?
It explains parameter-driven behavior ('Pass hours... without it...') and adds the caveat 'Descriptive market data only', but it gives no guidance on when to choose this tool over any of the many liquidation/market sibling tools. No alternative is named and no exclusion condition is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liq_zonesProjected liquidation levelsARead-onlyIdempotentInspect
Projected liquidation level book for one pair (modeled from leverage assumptions - clearly labeled as a projection, not executed trades). The free plans get BTC without cascade chains and a headline for any other coin; an active paid plan serves any pair with the full snapshot. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. The free plans get BTC's projected levels without the cascade chains and a headline for any other coin; a paid plan reaches any streamed pair with the full snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair this projection covers. |
| covered | No | False when this server does not stream the pair at all. No plan adds it. |
| warming | No | True when the projection is not built yet for this pair. Asking started it. Not a wall, and not a claim that the pair has no liquidation levels. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| free_pairs | No | The pairs a keyless connection can read, returned when the pair asked for is not one of them. |
| projection | No | The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a paid plan. Modeled levels, NOT trades that happened. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| retry_after_seconds | No | How long to wait before asking again when warming is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat those. The description adds valuable context about the projection nature ('not executed trades'), plan-specific behavior (free gets BTC without cascade chains; paid gets full snapshot), and 'Descriptive market data only'. This goes beyond the annotations and helps the agent understand expected behavior and limitations.
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 three sentences with no waste. It front-loads the core purpose and adds plan constraints in the final sentence. Every sentence earns its place, and it is highly efficient for the information conveyed.
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 is simple with two optional parameters and an output schema, so the description need not explain return values. It adequately covers the purpose, scope, and plan limitations. For a read-only, idempotent tool, nothing critical is missing; an agent can call it correctly with the given description.
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 both parameters are fully documented in the schema, including the default behavior and alias handling. The description repeats some of this (e.g., plan differences) but does not add new meaning beyond the schema. Baseline 3 is correct because the schema already carries the parameter semantics effectively.
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 provides a 'projected liquidation level book for one pair', specifically distinguishes it as a projection rather than executed trades, and notes it is 'Descriptive market data only'. This is a specific verb+resource with clear scope, and it differentiates from other liquidation tools by emphasizing projection and single-pair focus.
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 about when this tool is appropriate: for projected levels on one pair, with plan-based limitations (free vs paid). It does not explicitly name alternatives or state when not to use it, but the 'projection' and 'one pair' nature implies when it should be used relative to other tools. This is clear context without explicit exclusions, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_briefOne-call market briefARead-onlyIdempotentInspect
The complete current answer for ONE coin in a single call, in causal order: what the price did, what the headlines say (summary, mood score, recent headlines), what whale flow did against the coin's own baseline, what was forced out, and what holding it costs (cross-venue funding with carry, open interest, historical context). The plain-English name for trade_context (identical data and credit cost). THIS is the tool for "why is BTC pumping", "why is ETH moving", "what is driving this", "what is happening with SOL": the news is already inside it, so do not follow up with crypto_news, nor with the separate whale, funding or liquidation tools, unless the user drills into one of them. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline. | |
| compact | No | Return one line of plain text rather than the JSON blob, about 30 tokens instead of 800. Same facts, same windows, same dates, no structured fields to read. Defaults to false. | |
| position_usd | No | Position size in US dollars, for example 25000. Above zero only. When given, carry_cost adds per_day_usd_at_current_rate, the dollars a day the current funding average across exchanges works out to at that size. Arithmetic on the rate as it stands now, not a projection of future rates. Omit and carry_cost still carries the percentage and APR figures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| line | No | The composed one-line answer, returned only when compact:true was asked for. The same facts, the same windows and the same dates as the full shape. |
| news | No | What is being said about this coin, so a "why is it moving" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair this context describes. |
| depth | No | Which shape came back: lite, free-pair or keyed. |
| price | No | Last traded price. |
| compact | No | Present and true only on a compact:true call, where the whole answer is the single line in `line`. |
| funding | No | average_rate across exchanges, how many exchanges are in it, the interval in hours, and minutes to the next funding time. |
| crowding | No | The crowding read and the overexposed side. Null without a paid plan. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| stats_24h | No | The 24h statistics block. Absent on the lite shape, where locked_layers names it. |
| carry_cost | No | Arithmetic on the current funding average: percent per day, the same as an annual rate, which side pays, and dollars a day when position_usd was passed. Not a projection of future rates. |
| whale_flow | No | Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a paid plan. |
| price_reads | No | Plain descriptions of price against its own recent hours, computed from hourly candles: vs_recent_average (above or below its 50-hour and 200-hour average, and which way it is drifting), recent_move (how stretched the latest move is, plus the change against 7 days ago) and choppiness (calm, normal or choppy). Each block is available:true with values or available:false with a plain reason; a leg with too few recorded hours is null with a note, never a made-up neutral. Descriptive, not a trade signal. |
| locked_layers | No | Named rather than silently missing: which blocks this connection did not receive. |
| vs_own_history | No | Where funding and open interest sit against the same pair recorded days: phrase, band, day count, the date the reading is from, and how past cases resolved. |
| open_interest_usd | No | Open interest in dollars across the exchanges that publish it. |
| liquidations_recent | No | Forced closes visible right now: count, long_usd, short_usd and window_minutes. A timing series, market-wide totals run higher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds context by stating 'Descriptive market data only'. It also discloses the free-plan limitation (full BTC answers vs. headline-only for other coins) and the identical data/credit cost to trade_context, which are valuable beyond the annotations. No contradictions.
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 front-loaded with the core purpose and example queries. Each sentence adds meaningful information—scope, components, usage examples, exclusions, and additional behavioral notes. Slightly verbose but earned, not padded.
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?
Despite having an output schema, the description explains the causal order and typical use cases, names alternatives, provides exclusions, and covers parameter nuances (free plan, compact mode). It leaves nothing an agent needs to call it correctly, and the output schema handles return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all four parameters. The description does not add semantic details beyond the schema, though it does restate that 'coin' is an alias for 'pair' and mentions the compact option. Baseline 3 is appropriate since the schema 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?
The description clearly states it provides the complete current answer for ONE coin, listing specific components (price, news, whale flow, funding, etc.) and explicitly names the sibling tool trade_context as identical. It also gives concrete example queries ('why is BTC pumping'), making its purpose unmistakable and distinguishable from other 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 explicit when-to-use guidance with example questions, and explicitly instructs the agent not to follow up with crypto_news or separate whale/funding/liquidation tools unless the user drills in. It also names the alternative trade_context, providing clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_changesWhat changed across the marketARead-onlyIdempotentInspect
What changed across the market recently, in one call: the current risk regime, the market-wide news read, which coins whales are net buying and selling now, the coins that just turned unusual, the biggest movers, and the 24h forced-close picture (perp and lending kept separate). The same one-call brief market_digest serves on a timer, framed for an on-demand "what changed since this morning / overnight" question. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, idempotentHint true, and destructiveHint false. The description adds 'Descriptive market data only,' reinforces the read-only nature, and mentions that perp and lending forced-close data are kept separate. This adds useful behavioral context beyond the annotations without 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 first sentence is long but well-structured with a clear list. The second sentence is grammatically awkward and repeats the 'one-call brief' idea without adding crisp clarity. It could be tightened to directly state the usage distinction between market_changes and market_digest.
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 and an output schema, the description covers the returned content and read-only nature. However, the ambiguous relationship with market_digest leaves an agent uncertain about which tool to pick for a given timing scenario, making the contextual guidance incomplete.
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 takes zero parameters and the schema description coverage is 100%, so the schema requires no additional explanation. Baseline for zero parameters is 4, and the description adds no parameter-specific details that 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?
The description clearly states what the tool returns with a specific enumeration: risk regime, news read, whale net flows, unusual coins, biggest movers, and forced-close picture. It also names the sibling market_digest, providing a distinction between the two, even if the sentence structure is ambiguous.
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 implies a usage distinction by mentioning that market_digest serves on a timer and referencing an on-demand 'what changed since this morning / overnight' question. However, the grammar is confusing and does not explicitly say when to choose market_changes over market_digest or other market siblings, leaving the guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_digestMarket digest (one-call brief)ARead-onlyIdempotentInspect
One-call market brief for a scheduled or recurring run: current BTC risk regime, the market-wide news read (summary and mood score), which coins whales are net buying and selling now, the coins on the Smart Money Radar, the biggest movers, and the 24h forced-close picture (perp and lending kept separate). No arguments; returns everything in one payload so an automation can ask it on a timer. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds that it returns 'descriptive market data only' and 'returns everything in one payload,' which clarifies the scope and output shape beyond the annotations. 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?
One tight paragraph that front-loads the purpose, then lists the data contents, and ends with practical notes (no arguments, automation-friendly, descriptive only). Every sentence earns its place; there is zero fluff.
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, the description is fully sufficient. It tells the agent what the payload contains, that it's one call, and that it's for recurring use. The output schema handles return-value details, so nothing else is needed.
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 an empty schema, so the description has no parameters to explain. Baseline for zero-parameter tools is 4, and the description correctly notes 'No arguments' without adding unnecessary 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 'One-call market brief' and enumerates exactly what it returns (BTC risk regime, news, whale buys/sells, Smart Money Radar, largest movers, liquidation picture). This is a specific verb+resource that clearly distinguishes it from the many targeted market tools in the sibling list, which are narrower. The agent knows this is the aggregate 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?
It explicitly states 'for a scheduled or recurring run' and notes that it can be called on a timer, making the intended use case unmistakable. It doesn't name alternative tools for when a narrower brief would suffice, but the 'one-call' framing implies it's the comprehensive option, and the sibling list offers plenty of more granular counterparts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_extremesMarket extremes, latest recorded dayARead-onlyIdempotentInspect
Which pairs sit at a record or in their own top or bottom 5 percent for funding, open interest or liquidations, each vs that pair's own recorded history, with next-day outcome stats for past occurrences where enough events exist. Covers the latest day the daily scan recorded, which is NOT necessarily today: read as_of_day and stale before describing any of it as current. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| top5 | No | The same, for pairs in their own top or bottom 5 percent rather than at a record. |
| stale | No | True only when the rows are further back than the settle horizon explains. |
| records | No | Pairs sitting at a record high or low for funding, open interest or forced closes, each against the same pair recorded days, with a ready phrase and next-day outcome stats where enough past cases exist. |
| as_of_day | No | The day the rows actually describe. This is the honest date, and it is usually not today. |
| stale_note | No | Present when stale is true: how far past the horizon the scan has fallen. |
| computed_at | No | When the daily scan ran. |
| coverage_note | No | Present when stale is false: why these extremes are from as_of_day rather than today. |
| data_age_days | No | How many days back as_of_day sits. |
| expected_lag_days | No | How far behind live this archive is meant to run. |
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 that data may be stale, pointing to as_of_day and stale fields, and notes that next-day outcome stats exist only where enough events are available. This is useful context beyond annotations, though it does not fully explain how to interpret staleness.
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 two sentences, front-loaded with the core purpose, followed by a clear caveat about data staleness. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters and an output schema available, the description need not explain return values. It covers the key elements: what the tool reveals, the staleness caveat, and the descriptive-only nature. It could clarify what 'pairs' refers to, but that is domain-specific context rather than a critical 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 the baseline is 4. The description mentions as_of_day and stale but these are response fields, not inputs. 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?
The description clearly states it identifies pairs at record highs/lows or in the top/bottom 5% for funding, open interest, or liquidations relative to their own history, and provides next-day outcome stats. This is a specific, resource-focused purpose that distinguishes it from siblings like market_overview or market_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 context that the tool covers the latest recorded day, not necessarily today, and instructs to check as_of_day and stale before treating data as current. However, it does not explicitly name alternative tools or state when not to use it, 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_historyMarket historyARead-onlyIdempotentInspect
Daily history: funding rate, open interest, price and liquidation totals for one pair (archived since 2026-03-18), or daily whale buy/sell flow for one coin (since 2026-06-18). The free plans cover the last day; a paid plan reaches the full archive. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Read the daily whale buy and sell flow lane for one coin instead, for example BTC, recorded since 2026-06-18. Passing coin selects that lane and pair is then ignored. This is the one tool here where coin and pair are different questions, not two spellings of one. | |
| days | No | How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on Pro (Starter sits between). Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current. | |
| pair | No | Read the daily market lane for one pair: funding, open interest, price and liquidation totals, recorded since 2026-03-18. For example ETH/USD; a bare symbol like ETH is read as ETH/USD, and BTC/USD is the default. Ignored when coin is passed, because coin selects the other lane. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin, when the daily whale-flow lane was read. |
| pair | No | The pair, when the daily market lane was read. |
| as_of | No | The newest day in this reply. Not today: both lanes settle several days behind live by design. |
| price | No | Daily price readings. |
| stale | No | True only when the lane is further back than its own settle horizon explains. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| funding | No | Daily funding readings, oldest first, each carrying its own coverage evidence. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| depth_note | No | How far back the data behind this answer reaches. |
| stale_note | No | Present when stale is true: how far past the horizon it has fallen. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| liquidations | No | Daily forced-close totals. |
| coverage_note | No | Present when stale is false: why the newest day is not today, and that these days must not be described as current. |
| data_age_days | No | How many days back as_of sits. |
| days_returned | No | How many recorded days came back. |
| open_interest | No | Daily open interest readings. |
| hour_of_day_utc | No | What a typical hour looks like for this coin, as medians per UTC hour. Absent under 14 recorded days. |
| whale_flow_daily | No | Daily whale buy and sell dollars, when the coin lane was read. |
| expected_lag_days | No | How far behind live this lane is meant to run, so a healthy lag can be told from a stopped one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: data is archived since specific dates, free plans cap to last day, paid plans reach full archive, and it is descriptive only. The schema further discloses that both lanes settle several days behind live and that `capped` indicates truncation. This goes beyond 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?
Three sentences, each earning its place: the first defines the two lanes and archive dates, the second explains plan-based access, the third clarifies the descriptive nature. The most decision-relevant information (what data, for what scope) is front-loaded. No fluff or repetition of schema 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?
Given the tool has an output schema and 100% schema coverage, the description need not explain return values. It covers the two modes, archive depth, plan limits, and descriptive nature. The only minor gap is that it doesn't explicitly state the 'settles several days behind live' caveat, but that is disclosed in the schema's days parameter, so the description is complete enough 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?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by framing the two lanes and the archive dates, which helps an agent understand the relationship between coin and pair. The schema itself is unusually rich (explains coin vs pair, defaults, caps, as_of/data_age_days), so the description's added value is moderate but real. It does not repeat the schema verbatim, and it clarifies the 'one pair' vs 'one coin' distinction.
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 (daily market history) and two distinct lanes (pair market data vs coin whale flow), with explicit date ranges. It distinguishes itself from siblings by stating it is 'Descriptive market data only' and by naming the two modes. The verb 'read' is implied but the resource and scope are precise.
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 states when to use the tool (for daily history of funding, open interest, price, liquidations, or whale flow) and gives plan-based access guidance (free vs paid). It does not explicitly name alternatives among the many siblings, but the two-lane structure and 'Descriptive market data only' hint at when not to use it. The schema descriptions add more usage detail (e.g., coin vs pair selection), but the main description lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_liquidationsMarket-wide liquidationsARead-onlyIdempotentInspect
The whole market's forced closes in one call rather than per pair: 24h dollars and counts split long vs short, hour by hour so a cascade is locatable, ranked by coin, plus the biggest single event. Perp dollars come from the venues that publish a liquidation feed, not from every venue we stream, and the Hyperliquid share is a sample of that venue read from tracked wallets, so the totals are a FLOOR. Includes named_liquidations, the wallets that were closed out on Hyperliquid, which no other venue publishes. lending_liquidations rides alongside as a SEPARATE lane (an on-chain debt repaid and collateral seized) and must never be added to the perp numbers. A long is force-closed by selling, so long dollars are sell-side pressure. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| as_of | No | When the combined snapshot was taken, as an ISO stamp. |
| stale | No | True when the snapshot is older than it should be. |
| coverage | No | Which feeds fed this snapshot. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| perp_liquidations | No | The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure. held_out names anything removed before these numbers were built (how many rows, how many dollars, on which symbols and why), or is null when nothing was; those dollars are NOT inside any figure here. |
| named_liquidations | No | Hyperliquid closures with the wallet named, which no other market publishes. |
| lending_liquidations | No | A SEPARATE 24h lane: on-chain debts repaid and collateral seized. count, total_usd, protocols, chains and recent rows. Never add these to the leveraged numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. The description adds valuable behavioral context: totals are a floor (not exact), the Hyperliquid share is a sampled read from tracked wallets, and long dollars represent sell-side pressure. These go beyond the safety hints and inform interpretation of 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 but every sentence carries necessary information. It leads with the core purpose, then layers in limitations and interpretation. Slightly longer than minimal, but justified given the nuance required to prevent misuse.
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 no parameters and an output schema available, the description covers all essential context: scope, data sources, limitations, separate lanes, and interpretational guidance. 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 tool has zero parameters, so the baseline is 4. The description adds substantial context about the output structure (hourly split, ranking, named_liquidations, lending lane) which helps the agent understand what the tool returns, though it does not need to explain parameter syntax.
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 the tool retrieves market-wide forced closes, contrasting with per-pair calls. It names specific resources (whole market, perp dollars, Hyperliquid sample) and distinguishes it from sibling tools like coin_liquidations 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?
Provides clear guidance: use for a market-wide view rather than per pair, and explicitly warns that lending_liquidations is a separate lane that must never be added to perp numbers. This gives both when-to-use and when-not-to-mix instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_moversMarket movers (24h)ARead-onlyIdempotentInspect
The biggest 24h gainers and losers across the streamed top-~300 board, each with price, 24h change and 24h volume (so a move on thin volume shows). Use this for momentum discovery ("which coins are moving most right now", "biggest gainers today", "what is pumping"). For WHY a coin is moving use market_brief; to cross-filter movers by another condition (price up but volume weak, up with negative funding) use market_screener; for unusual WHALE flow specifically use whale_radar. Descriptive market state, never a prediction. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Return only one side. Omit for both. | |
| limit | No | How many gainers and losers each. Defaults to 8, capped at 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds valuable context: it is 'Descriptive market state, never a prediction', includes volume so thin-volume moves are visible, and scopes to the streamed top-~300 board. 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 densely functional and front-loads the core definition, then provides routing and caveats. The final two clauses ('Descriptive market state, never a prediction. Descriptive market data only.') are slightly redundant, but overall the length is justified by the amount of 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 presence of an output schema, full parameter documentation, and annotations, the description covers all critical aspects: scope, content, use cases, alternatives, and non-predictive nature. Nothing essential is missing for an agent to select and 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?
Schema coverage is 100% and both parameters (only, limit) are fully described there, including enum values, defaults, and cap. The description does not add meaning beyond the schema, 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 names a specific resource ('biggest 24h gainers and losers across the streamed top-~300 board') and a concrete purpose (momentum discovery). It clearly distinguishes itself from siblings by naming market_brief, market_screener, and whale_radar for other use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit 'Use this for' scenarios with example queries, and explicitly states which alternative tool to use for WHY, cross-filtering, and whale flow. This leaves little ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_overviewMarket overview + regimeARead-onlyIdempotentInspect
One-call market scan: totals (volume, OI, liquidations, mcap), 24h whale net flow, BTC risk regime (SMA20/50 + breadth), and the top rows by volume. Pass coin to get one symbol's row directly (no paging needed). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Return this coin's row on its own, for example BTC, instead of the whole board. Only coins in the streamed overview (roughly the top 300 by volume) are there; anything else comes back available:false rather than as an empty board. | |
| pair | No | Alias for coin. | |
| limit | No | Max board rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. total_rows reports the size of the whole board so a shortened list is visible. Ignored when coin is passed, since that returns a single row. |
Output Schema
| Name | Required | Description |
|---|---|---|
| row | No | That one symbol row: base, price_usd, chg_24h_pct, vol_usd_24h and oi_usd. |
| coin | No | The symbol asked for, when a single row was requested. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| rows | No | The board, ranked by volume: base symbol, price, 24h change, 24h volume and open interest. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| regime | No | The Bitcoin risk state: state, btc_price and breadth_pct. A null state means the field is absent, not neutral. |
| totals | No | Market-wide totals: volume, open interest, forced closes and market cap. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| returned | No | How many rows are in this reply. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| total_rows | No | How many rows the whole board holds. |
| updated_at | No | When the snapshot was published. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| coverage_note | No | The same in one sentence, present only when something is missing. |
| whale_net_usd_24h | No | Buys minus sells across the board over 24h. Null means the field is absent from this snapshot, not that flow was balanced. |
| unavailable_fields | No | Fields this snapshot is not carrying. They are null because the field is absent, NOT because the value is zero. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a useful behavioral note with 'Descriptive market data only' and implies no side effects, but it does not disclose pagination nuances or the available:false fallback, which are only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences cover the tool's data scope, the single-row mode, and the non-mutating nature. Every clause earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only overview tool with no required parameters and a full output schema, the description is nearly sufficient: it explains the purpose, the optional coin shortcut, and that data is descriptive. The only notable gap is lack of explicit guidance on when to prefer this tool over sibling overview-style tools.
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 coin, pair, and limit thoroughly. The description reinforces the coin behavior and 'no paging needed,' but adds little meaning beyond what the input 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 states a specific action ('One-call market scan') and enumerates distinct resources: totals, whale net flow, BTC risk regime, and top rows by volume. This makes the tool's purpose clear, though it does not explicitly contrast itself with close siblings like market_snapshot or market_digest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for the default board and a direct instruction for the coin parameter ('Pass coin to get one symbol's row directly'). It does not, however, say when to choose this tool over its many siblings or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_screenerCross-market screenerARead-onlyIdempotentInspect
Screen every recorded pair in one call: filter by funding_band / oi_band (vs each pair's OWN recorded days: record high, top 5%, top 25%, typical, bottom 25%, bottom 5%, record low), minimum whale-flow multiple vs the coin's own average, and radar-unusual. The discovery call. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. `matched` counts every pair that passed the filters regardless, and truncated says whether the rows are a shortened list. | |
| compact | No | Return one plain-text line per matching pair rather than the JSON rows. Defaults to false. | |
| oi_band | No | Same values as funding_band. | |
| funding_band | No | One of: record high, top 5%, top 25%, typical, bottom 25%, bottom 5%, record low. | |
| unusual_only | No | Keep only coins the radar currently marks unusual in its 1h, 4h or 24h window. Defaults to false. | |
| whale_mult_min | No | Keep only coins whose 24h whale flow is at least this multiple of their own logged daily average, for example 3 for 3x and up. Coins with no logged multiple are dropped rather than treated as zero. Omit for no flow filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| line | No | One plain-text line per matching pair, returned only when compact:true was asked for. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| rows | No | One row per matching pair: pair, coin, price, 24h change, the funding and open interest bands against the same pair recorded days with the day counts behind them, the whale multiple, and whether the ranking currently calls it unusual. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| compact | No | Present and true only on a compact:true call, where the whole answer is the text in `line`. |
| matched | No | How many pairs passed every filter, counted before the row cap. Null when nothing was screened. |
| criteria | No | The filters as they were actually applied, so a misread argument is visible. |
| returned | No | How many rows are in this reply. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| valid_bands | No | The bands that do exist, returned alongside unknown_band. |
| unknown_band | No | Set when a band was named that this screen does not know. Nothing was screened, so this is not no matches. |
| scanned_pairs | No | How many pairs were examined. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is established. The description adds the key behavioral nuance that band comparisons are 'vs each pair's OWN recorded days' and that the whale-flow multiple is relative to the coin's own average, which is useful context beyond the annotations. However, it doesn't describe pagination, rate limits, or exact output behavior beyond what schema/output schema already 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 a dense two-sentence structure that front-loads the core action ('Screen every recorded pair') and then lists filters. It earns its length by conveying the discovery call scope and relative-band logic, though the parenthetical enumeration of band values (record high, top 5%, etc.) duplicates schema content and could be shortened without losing 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?
The tool has 6 parameters, no required ones, full schema coverage, an output schema, and clear read-only annotations. The description supplies the missing high-level context: this is the cross-market discovery screen ('every recorded pair in one call') and filters are self-relative. It is complete enough for an agent to decide when to invoke and what to expect, without needing to explain return values due to the output 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?
All 6 parameters have complete, detailed descriptions in the schema (100% coverage), so the description does not need to compensate. The description reiterates filter concepts like 'funding_band / oi_band' and 'whale_mult_min' but adds no new parameter-level meaning beyond summarizing what the schema already documents. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Screen every recorded pair in one call', giving a specific verb, resource, and scope. It then enumerates the filtering dimensions (funding/oi bands, whale-flow multiple, radar-unusual) and ends with 'The discovery call. Descriptive market data only.', which distinguishes it from other market tools like market_snapshot or whale_trades.
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 'The discovery call' clearly signals when to use this tool: when exploring across all recorded pairs. It also notes 'Descriptive market data only', excluding trade execution or data modification. However, it stops short of explicitly naming alternatives for different use cases (e.g., 'for pair-specific data use market_snapshot'), so it lacks formal exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_snapshotMarket snapshotARead-onlyIdempotentInspect
One-call market state for a pair: last price, 24h stats, average funding rate, open interest and recent liquidation totals from the venues that publish them. On the free plans BTC answers in full and any other coin as a headline; a paid plan covers every streamed pair in full. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair this snapshot describes. |
| price | No | Last traded price. |
| covered | No | False when this server does not stream the pair at all. No plan adds it. |
| funding | No | average_rate across the exchanges that publish one, and exchange_count behind that average. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| stats_24h | No | The 24h statistics block: open, high, low, close, change and volume. |
| free_pairs | No | The pairs a keyless connection can read, returned when the pair asked for is not one of them. |
| vs_history | No | Where funding and open interest sit against the same pair recorded days: a phrase, a band and how many days back the comparison reaches. Null under 30 recorded days. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| open_interest_usd | No | Open interest in dollars, summed across the exchanges that publish it. |
| exchanges_streaming | No | How many exchanges are currently streaming this pair. |
| liquidations_recent | No | Recent forced closes for this pair: count, total_usd, the long and short split in counts and dollars, and window_minutes, without which a count cannot be read. available:false here means no reading, not zero. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat safety. It adds valuable behavioral context about free vs. paid plan differences (BTC full vs. headline for others, and paid covers all streamed pairs) and the 'descriptive data only' nature. This goes 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 two sentences plus a short clause, tightly packed with relevant facts. The core purpose is front-loaded, and every sentence earns its place without 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 the presence of an output schema and low complexity (2 optional params), the description adequately covers the operation, plan limitations, and scope. It omits explicit usage scenarios, but those are handled under usage guidance; other essentials like error behavior are not needed due to schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for 'coin' as alias and 'pair' including default behavior, bare-symbol handling, and plan/covered semantics. The tool description does not add additional parameter meaning beyond the schema, so a 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 clearly states the tool provides a market snapshot for a trading pair, enumerating the specific data points (last price, 24h stats, funding rate, open interest, liquidation totals). This is a specific verb+resource with listed fields. However, it does not explicitly differentiate from sibling tools like market_brief or market_overview, so it loses a point.
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 no guidance on when to use this tool versus the many sibling market tools (market_brief, market_overview, market_digest, etc.). It mentions plan limitations but does not state scenarios for selection, exclusions, or alternatives. Usage context is only implied through 'one-call market state'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_accessWhat this connection includesARead-onlyIdempotentInspect
What THIS connection can and cannot see: whether it is on the free plan (on_free_plan), how many credits are left and roughly how many more tool calls that buys, which tier it is on, the exact row cap and time window every tool applies to it right now, what is locked, and precisely what lifts each limit. Call it whenever the user asks what they get, how many credits they have, why a result came back capped (any payload carrying a capped field), or how and where to upgrade. Only an active paid plan lifts the caps here (one subscription works across the website, your AI and the REST API on a shared credit balance), and this settles the thing people get wrong most often: a free API key lifts no cap here either (it gives this connection its own rate limit instead of a shared one, and unlocks the metered REST endpoints, but changes nothing in here). Free to call and never metered.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| caps | No | The row cap and time window every capped tool applies right now, each with the free value and the paid-plan value beside it. |
| tier | No | Which state this connection is in: keyless, signed_in_free, or the plan key (starter, pro, alpha, scale). |
| plain | No | One sentence describing this tier in the user own words rather than ours. |
| credits | No | The balance: credits_remaining, plan, plan_active, credits_per_call, calls_left_estimate and where to top up. A null credits_remaining always carries a note saying WHY, because could not read and spent to zero send a user to two different places. |
| metered | No | Whether calls cost credits on this connection, and how much. |
| free_pairs | No | The pairs this connection can read. A list when keyless, the words every streamed pair on a paid plan, or a short sentence when the market lane could not be read. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| how_to_lift | No | What lifts the caps, where to get it, and (as not_this) the two things people buy by mistake that change nothing here. |
| locked_here | No | What this connection cannot reach right now. Empty on a paid plan. |
| on_free_plan | No | True when this connection reads free-shaped data. The single fact most users are asking for. |
| authenticated | No | True when any valid sign-in or key was presented. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already classify the call as read-only and idempotent; the description adds that it is free and never metered, and clarifies that plan status is shared across website, AI, and REST API. No contradiction with annotations; the description supplements them with account-specific 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 opening sentence front-loads the capability list, followed by trigger conditions and the nuanced free-API-key clarification. Although the description is lengthy, each clause conveys distinct decision-relevant information and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values do not need to be described. The description covers what the tool reveals, when to call it, cost behavior, and the subscription/API-key model, leaving no gap for a zero-parameter introspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is no parameter-level description required. Per rubric, zero-parameter tools get a baseline 4; the description sensibly omits parameter detail and instead discusses plan 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?
The description names the resource ('this connection') and states exactly what the tool exposes: plan status, credits, tier, caps, locked features, and what lifts each limit. It reads distinctly from market-data siblings and the title reinforces the 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?
Provides explicit trigger scenarios: when a user asks what they get, how many credits remain, why a result was capped, or how/where to upgrade. It also clarifies a common misconception about free API keys, effectively giving when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_alertsWhat fired for youARead-onlyIdempotentInspect
What YOUR alerts fired since a time: the rules on your CoinLobster account, the same history the site shows, newest first, with the move since each fired where a price was stored. Use it for "what fired for me overnight", "anything on my coins since this morning", "did my BTC alert go off". Needs a signed-in connection (free, no plan): keyless is refused by name. Free returns the counts per coin; Starter and up returns every fired row. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Only alerts on this coin. Omit for every coin. | |
| pair | No | Alias for coin. | |
| since_ms | No | Only alerts fired after this Unix-ms timestamp. Defaults to the last 24 hours. Pass back next_since_ms from the previous answer to read only what is new. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coins | No | Per coin: coin, fired. |
| fired | No | Alerts that fired since since_ms. |
| alerts | No | Starter and up: fired_at, type, coin, pair, side, usd, price_at_fire, exchange, wallet, since_pct. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present only when rows were withheld: the cheapest plan that returns them. |
| available | No | False keyless (reason no_owner: sign in, free) or when history is not wired. |
| next_since_ms | No | Pass back as since_ms to read only what is new. |
| rows_withheld | No | Free: rows held back (the counts above are complete). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing plan-dependent behavior (free returns counts, Starter and up returns every row), keyless auth refusal, newest-first ordering, and the move since each alert fired. It also notes that only descriptive market data is returned. No contradiction with the readOnly/idempotent 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 core purpose, followed by practical example queries and essential plan/auth details. The final sentence 'Descriptive market data only' is slightly vague but not wasteful. Overall, the prose is compact 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?
The description covers auth expectations, keyless refusal, plan-tier output differences, ordering, and the notion of since-time filtering. Since an output schema exists, return structure does not need to be spelled out. Minor missing details like explicit sibling routing do not meaningfully hurt 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?
The schema already describes all parameters with 100% coverage, including since_ms defaults and the next_since_ms pagination hint. The description reinforces the time-based nature of the query but does not add meaningful parameter semantics beyond what the schema provides, 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 clearly identifies the resource: alerts that fired on the user's own CoinLobster account, with ordering and move data. It distinguishes itself from market-wide sibling tools by emphasizing 'YOUR alerts' and the account-specific history. The title 'What fired for you' aligns well with the described behavior.
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 use cases are provided ('what fired for me overnight', 'did my BTC alert go off'), and the signed-in connection requirement is stated clearly. It doesn't name specific alternative tools, but the account-specific scope and auth condition make when-to-use clear without extra exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oi_funding_historyIntraday open interest and fundingARead-onlyIdempotentInspect
The intraday path of open interest and funding for one pair, aggregated across venues, oldest first. Use it for "how has BTC open interest moved today", "was funding rising into that move", "show me the OI path over the last 12 hours". Keyless: the free pairs, the last 24h at 1-hour resolution. Starter and up: every streamed pair at the recorded 5-minute resolution, up to the plan's window. For the daily archive use market_history. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. | |
| hours | No | How many hours back. Defaults to 24; the ceiling on the free plans is 24, then the plan's history window. Asking for more returns the cap, and the payload says so in `capped`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| capped | No | Present when hours was clamped. |
| funding | No | Funding points, oldest first, aggregated across venues. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present only when the pair or the window is beyond this plan. |
| available | No | False on an uncovered pair, a pair outside the free set keyless, or when no series is recorded. |
| oi_change_pct | No | Open-interest change first to last point, percent. Absent when either end is missing. |
| open_interest | No | Open-interest points, oldest first, aggregated across venues. |
| resolution_minutes | No | 60 keyless, 5 on a plan. |
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 useful behavioral details beyond that: aggregation across venues, chronological ordering, resolution by plan tier, and the 'Descriptive market data only' boundary.
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 with the core behavior before moving to usage examples and plan limitations. A little dense in the plan-tier sentence, but no sentence is wasted.
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 query tool with three optional parameters and an output schema, the description covers what it is, when to use it, when not to use it, ordering, resolution, and access 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?
The input schema already covers all three parameters completely (100% coverage), so the baseline applies. The description adds plan-tier context like 'last 24h at 1-hour resolution' but does not need to add schema-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool returns: 'the intraday path of open interest and funding for one pair, aggregated across venues, oldest first.' It also gives concrete example queries and separates it from market_history, so an agent can tell it apart from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit use cases ('Use it for ...') and an explicit alternate for a different need ('For the daily archive use market_history'). This is clear when-to-use guidance with an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onchain_whalesOn-chain DEX whale swapsARead-onlyIdempotentInspect
Executed DEX whale swaps on Ethereum, Base and Arbitrum, each carrying the wallet, the DEX, the token and the USD size. Use this to see WHO is swapping large size on chain and in what ("which wallets are buying PEPE", "large DEX swaps today"). Filter by chain, coin or minimum size. For chain-level DeFi totals use defi_summary; for one address's full history use dex_wallet; for CEX whale flow use whale_trades. Keyless. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one token symbol, for example PEPE. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every token. | |
| pair | No | Alias for coin. | |
| chain | No | Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them. | |
| limit | No | Max swaps returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. | |
| min_usd | No | Smallest swap to return, in US dollars, for example 500000 for $500K and up. Omit for everything above the size floor this feed already records, which is not every swap on chain. | |
| since_ms | No | Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| count | No | How many rows this reply carries. |
| swaps | No | The swaps, each carrying the wallet that signed it, the exchange it went through, the token and the dollar size. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| unknown_chain | No | Set when a chain was named that this feed does not index. Nothing was searched, so this is not no swaps there. |
| chains_covered | No | The chains this feed indexes. |
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 meaningful context beyond that: it is keyless, it returns descriptive market data only, and the min_usd schema note clarifies the feed records a size floor rather than every swap. This is useful behavioral context without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, data contents, usage examples, sibling routing, and access constraints. It is front-loaded with what the tool returns and remains compact despite covering a lot of 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?
For a read-only list tool with a rich input schema and an output schema, the description covers the essential context: what the data is, who it is for, how to filter, which sibling to choose instead, and that no key is needed. There are no critical gaps an agent would need to infer.
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 every parameter in detail, including the pair alias, chain refusal behavior, limit cap, min_usd floor, and since_ms polling cursor. The description adds only a high-level grouping ('Filter by chain, coin or minimum size'), which is correct but not substantial on top of 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 action ('Executed DEX whale swaps') with the resource scope ('on Ethereum, Base and Arbitrum') and the key data each result carries (wallet, DEX, token, USD size). It distinguishes itself from siblings by naming use cases and alternatives, so an agent can tell it apart before 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?
Gives explicit when-to-use guidance with natural-language examples ('which wallets are buying PEPE', 'large DEX swaps today') and names three alternatives with their specific conditions: defi_summary for chain-level totals, dex_wallet for one address history, and whale_trades for CEX flow. Also notes keyless access, which sets expectations for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optionsOptions intelligence (Deribit)ARead-onlyIdempotentInspect
The options picture for BTC or ETH from Deribit: total open interest, the strikes holding the most of it (the walls, which act as magnets into expiry), the put/call balance, max pain per near expiry, the implied-vol regime (DVOL), and recent large option trades. Aggregate market structure, keyless; the large-trade feed deepens on a paid plan. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | BTC or ETH (the only coins Deribit lists options for). A pair like BTC/USD works too, the quote leg is dropped. Defaults to BTC. | |
| pair | No | Alias for coin. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin these options are for (BTC or ETH). |
| dvol | No | Implied-vol index: how big a swing the market is pricing in. Lower is calmer. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| venue | No | Always Deribit. |
| maxPain | No | Per near expiry, the strike where the most options expire worthless. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| expiries | No | Open interest grouped by expiry date, with days to go. |
| putOiUsd | No | Open interest sitting in puts (downside protection), in USD. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| callOiUsd | No | Open interest sitting in calls (upside bets), in USD. |
| updatedAt | No | When this snapshot was published. |
| gammaWalls | No | The strikes holding the most open interest, biggest first, with the call and put split. These often act as magnets into expiry. |
| putCallRatio | No | Put open interest divided by call open interest. Above ~1.15 is put-heavy, below ~0.7 is call-heavy. |
| coins_covered | No | The coins options are carried for (BTC, ETH). |
| openInterestUsd | No | Total open interest in USD across all listed options. |
| underlyingPrice | No | Spot price of the coin, from the venue. |
| recentLargeTrades | No | Large option buys and sells above a size floor, newest first. Deeper on a paid plan. |
| recentTradesTruncated | No | True when the large-trade list was shortened for a keyless caller. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, and destructve=false. The description adds worthwhile behavioral context: it is keyless, it is 'Descriptive market data only', and the large-trade feed deepens on a paid plan. No contradiction with the 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 compact, front-loaded with the resource and data contents, then adds auth and safety caveats in short declarative sentences. The parenthetical 'which act as magnets into expiry' is a little extra but still informative; overall no sentence is waste.
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 rich output schema, full parameter schema coverage, and safety annotations, the description covers coins, exchange, data fields, auth model, paid-plan limitation, and descriptive nature. It is complete enough for an agent to invoke correctly, though it could have briefly noted when not to choose it among the many sibling market tools.
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 baseline is 3. The schema already documents coin and pair, including that BTC/ETH are the only supported coins and that BTC is default. The tool description repeats 'BTC or ETH' but does not add new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (Deribit BTC/ETH options) and the exact data points returned: open interest, strike walls, put/call balance, max pain, DVOL, and large trades. It uses a noun phrase ('The options picture') rather than a direct verb, but the scope and contents are unmistakable. It distinguishes itself from siblings by focusing on options-specific intelligence rather than general market data, though it does not name an alternative.
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 descriptionmakes the use case clear by enumerating options-relevant fields and saying it is aggregate market structure, so an agent can infer to use it for options sentiment/positioning questions. However, it does not explicitly state when to prefer it over siblings like market_snapshot or market_overview, nor mention exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orderbookCombined order bookARead-onlyIdempotentInspect
The order book for one pair merged across the streamed venues and aggregated by exact price: best bid and ask, the spread, and the dollars resting on each side in the top levels, with the venues holding each level. Use it for "where are the walls on BTC", "how deep is the bid", "what is the spread". Keyless reaches the free pairs at 5 levels; Starter any pair at 10; Pro 25. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. | |
| levels | No | Price levels per side. Defaults to 10; the ceiling is 5 on the free plans, 10 on Starter, 25 on Pro (hard). |
Output Schema
| Name | Required | Description |
|---|---|---|
| levels | No | Levels per side returned. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| best_ask | No | Best ask across venues. |
| best_bid | No | Best bid across venues. |
| combined | No | bids and asks aggregated by price, each level listing the venues holding it. |
| available | No | False when the pair is not covered, not in the free set on this plan, or has no snapshot. |
| spread_pct | No | Spread as a percent of the ask. |
| per_exchange | No | Each venue's own top levels. |
| exchange_count | No | Venues merged. |
| ask_usd_in_levels | No | Dollars resting on the ask side in the returned levels. |
| bid_usd_in_levels | No | Dollars resting on the bid side in the returned levels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it explains the aggregation logic (merged across venues, aggregated by exact price), the plan-based level limits (free=5, Starter=10, Pro=25), and explicitly states 'Descriptive market data only' to prevent misuse. This goes 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 compact and front-loaded: it states the core function in the first sentence, gives example queries, then covers plan limits and the read-only nature. Every sentence earns its place, and the structure flows logically from what → when → constraints.
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 an output schema, so return values are already documented. The description covers the key contextual gaps: aggregation behavior, plan-based level limits, and the read-only nature. It could mention pagination or the exact structure of the top levels, but the output schema likely covers that, and the description is sufficient 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?
Schema description coverage is 100%, so the schema already documents all three parameters (coin, pair, levels) with their defaults and constraints. The description adds the plan-based level ceiling context, which complements the schema's 'hard' ceiling note, but does not substantially add meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('merged', 'aggregated') and resource ('order book for one pair'), and distinguishes it from siblings by emphasizing the merged/aggregated nature across streamed venues. It also gives concrete example queries ('where are the walls on BTC', 'how deep is the bid', 'what is the spread'), making the tool's 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?
The description provides clear context for when to use the tool via example questions, and implicitly distinguishes it from other market data tools by focusing on order book depth and spread. It does not explicitly name alternative tools or state when not to use it, but the examples and 'Descriptive market data only' caveat give adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_candlesNear-live price barsARead-onlyIdempotentInspect
Near-live price bars (OHLCV) for a pair: interval "1h" (default) or "1d", oldest first, each bar { t, o, h, l, c, v }. This is the lane a bot reads to compute its OWN indicators (moving averages, momentum, whatever it wants), so CoinLobster does not need to ship them. NEAR-LIVE and separate on purpose from market_history, which is the daily archive that settles days behind: every reply carries newest_candle_age_min and stale so a live lane is never confused with a stopped one. Keyless covers the free pairs up to 24 bars; a paid plan covers every streamed pair up to 720 bars (asking for more returns the cap and says so in capped). The newest bar is still forming. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false. | |
| limit | No | How many bars, newest-ending. Capped at 24 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. | |
| interval | No | Bar length: "1h" (default) or "1d". Anything else is read as 1h. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair these candles are for. |
| as_of | No | The time of the newest bar, in milliseconds. |
| count | No | How many rows this reply carries. |
| stale | No | True only when the newest bar is older than a live lane explains. When true the numbers are stopped, not the current price. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| candles | No | The bars, oldest first, each { t, o, h, l, c, v }: time, open, high, low, close and volume. The newest bar is still forming. This is the NEAR-LIVE lane, not the days-behind daily archive that market_history reads. |
| covered | No | False when this server does not stream the pair at all. No plan adds it. |
| interval | No | 1h or 1d. The bar length each candle covers. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| free_pairs | No | The pairs a keyless connection can read, returned when the pair asked for is not one of them. |
| stale_note | No | Present when stale is true: how far past live the newest bar has fallen. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| newest_candle_age_min | No | How many minutes old the newest bar is, so a live lane can be told from a stopped one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses meaningful runtime behavior: NEAR-LIVE data, newest_candle_age_min and stale fields, newest bar still forming, free/paid bar caps, and the capped field. This is exactly the kind of context 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 but every sentence earns its place: purpose and shape, intended use case, differentiation from the archive, live-vs-stale signals, plan limits, and final caveats. The key identity is front-loaded in the first sentence.
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, annotations, and 100% schema coverage, the description covers almost everything an agent needs: what the endpoint returns, why to choose it, how it differs from market_history, availability limits, and reliability signals. There are no material 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?
Schema description coverage is 100%, so the baseline is 3; the schema already fully documents coin, pair, limit, and interval. The description reinforces the interval default and cap behavior but does not add significant new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: near-live OHLCV price bars for a pair, with interval, ordering, and bar shape. It explicitly contrasts itself with market_history, so an agent can distinguish it from sibling tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says this is the lane a bot reads to compute its own indicators, and that it is deliberately separate from market_history, which settles days behind. This gives an agent an explicit 'when to use this vs that' rule and also signals that this is descriptive data, not an action tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proven_tradersThe proven-trader boardARead-onlyIdempotentInspect
The Hyperliquid accounts screened for profit on Hyperliquid's own leaderboard figures (equity, month and all-time PnL and ROI, which can include open positions) and verified by their own fills to trade at a pace a person could follow, each with a trader number, its numbers and the coins it trades. Use it for "who are the best traders", "who is Trader 12", "which proven traders trade SOL". With no coin filter it is the same on every plan; on the free plans a coin filter other than BTC gets a headline. For one account's live book use hl_wallet; for what they just did use hl_moves; for their collective book per coin use smart_money. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Only traders whose recent coins include this symbol. Omit for the whole board. | |
| pair | No | Alias for coin. | |
| limit | No | Max traders. Defaults to 20, hard ceiling 100 for everyone and no plan raises it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | wallet, traderNo, equityUsd, monthPnl, monthRoi, allTimePnl, allTimeRoi, fillsPerDay, verifiedSpanDays, verifiedFills, coins. |
| count | No | Rows returned. |
| matched | No | Rows matching the filter before the limit. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| available | No | False when the board is not published. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description's additional context about leaderboard-derived screening, verification by fills, inclusion of open positions, and plan-specific headline behavior adds genuine value beyond the schema. The final note 'Descriptive market data only' reinforces the read-only nature 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 information-dense but somewhat run-on, packing multiple distinct ideas into a long first sentence before moving to examples, plan behavior, and alternatives. Every sentence earns its place, yet the structure could be clearer with more separation between purpose, usage, and alternatives.
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 lookup tool with an output schema, the description covers what the data is, how it is verified, example intents, plan-specific constraints, and sibling alternatives. Nothing necessary for correct invocation 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 coin, pair, and limit well. The description adds context for the coin filter in examples and mentions plan-specific behavior, but does not materially expand parameter 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 clearly identifies what the tool returns: a screened list of profitable Hyperliquid accounts with trader numbers, performance figures, and coins traded. It gives concrete example queries and explicitly distinguishes itself from sibling tools like hl_wallet, hl_moves, and smart_money.
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 explains when to use the tool ('who are the best traders', 'who is Trader 12', 'which proven traders trade SOL') and names specific alternatives for other needs: hl_wallet for a live book, hl_moves for recent actions, and smart_money for collective per-coin books. It also discloses plan-dependent behavior around coin filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_outcomesSignal outcomes (what happened after)ARead-onlyIdempotentInspect
Recorded signals with the price when each fired and the price afterwards, logged live and never backfilled: whether a whale, funding or other signal has historically led anywhere. The plain-English name for flag_outcomes (identical data and credit cost). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin. | |
| pair | No | Alias for coin. | |
| type | No | Filter to one signal type. One of: whale-spike, funding-extreme, squeeze-flip, liq-cascade, flow-divergence, major-pctile, major-block, deriv-record. The underscore spellings used by alert rules (for example funding_extreme, or spike for whale-spike) are accepted too. Anything else is refused by name rather than answered as every signal. Omit for all types. | |
| hours | No | How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin filter applied, or null for all coins. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| type | No | The signal type filter applied, or null for all types. |
| count | No | How many rows this reply carries. |
| hours | No | The window actually read, in hours. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| signals | No | The signals that fired in the window, each with its type, coin, fire time, price at fire time and later price outcomes where they have been scored. |
| all_time | No | Permanent counters from the archive, independent of the window asked for: fired, scored_h24, since, through and by_type. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| aggregates | No | byType: how many fired per signal type inside the window. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| valid_types | No | The signal types that do exist, returned alongside unknown_type. |
| unknown_type | No | Set when the type asked for is not one this record keeps. Nothing was filtered and nothing was searched. |
| total_in_window | No | How many signals fired in the whole window, before the row cap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful context beyond that: signals are logged live and never backfilled, the data is identical to flag_outcomes, and it is descriptive only. This is more than the annotation baseline, though it does not detail response behavior, which the output schema covers.
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 two sentences with no filler. It front-loads the core concept, then adds the alias and safety framing efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich parameter schemas, output schema, and safety annotations, the description is complete for invocation. It covers what the tool returns conceptually, the key data limitation (never backfilled), and the relationship to flag_outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all five parameters. The description does not need to add parameter-level guidance, and it does not meaningfully do 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 states a specific resource: recorded signals with the price at trigger and afterward, which is clearly a historical outcome analysis tool. It also names flag_outcomes as the identical sibling, so an agent can distinguish signal_outcomes from related tools 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 explicitly points to flag_outcomes as the identical alternative and frames the tool as 'descriptive market data only,' which gives clear selection context. It does not spell out when to prefer this over other signal-related siblings, but the alias relationship largely covers the main ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_recordTrack record of one signal on one coinARead-onlyIdempotentInspect
How the last N firings of one signal type on one coin played out: how many rose over the next 24h and the median absolute move, the same numbers the site shows, plus the rows themselves. Use it for "how have funding-extreme flags on ETH worked out", "does the whale-spike signal on SOL lead anywhere". A record is stated only over enough clean samples; below that the rows are listed and no rate is claimed. Same on every plan. flag_outcomes is the market-wide ledger; this is one type on one coin. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | One coin symbol, for example ETH. | |
| pair | No | Alias for coin. | |
| type | Yes | The signal type: whale-spike, funding-extreme, squeeze-flip, liq-cascade, flow-divergence or deriv-record (underscore forms accepted). | |
| limit | No | How many past firings to read. Defaults to 12, hard ceiling 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| scored | No | n, up, median_abs_move_pct, dots: stated only over enough clean 24h outcomes; null when suppressed. |
| signals | No | The past firings, newest first, with their outcomes. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| available | No | False when no firing of this type on this coin is recorded. |
| suppressed | No | True when too few clean samples to state a rate. |
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 description does not need to restate those. It adds valuable nuances: rates are only claimed when enough clean samples exist, otherwise only rows are listed, results are the same on every plan, and it is descriptive market data only. These details go beyond the structured annotations and meaningfully shape expectations.
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 with no filler. Each sentence adds a necessary aspect: output contents, use-case examples, sample-threshold behavior, plan consistency, differentiation from the sibling tool, and data nature. It is front-loaded with the core function.
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 query tool with an output schema and rich annotations, the description covers purpose, usage context, edge-case behavior (insufficient clean samples), plan consistency, and sibling distinction. Nothing an agent needs to correctly select and invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions, including allowed signal types, coin examples, and limit bounds. The description adds context about 'last N firings' which maps to the limit parameter, but does not need to compensate for any schema gaps. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific operation: showing how the last N firings of one signal type on one coin played out over 24h, with counts, median move, and underlying rows. It explicitly differentiates from flag_outcomes as the market-wide ledger, so an agent can distinguish it from a sibling with no 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?
Provides concrete example queries ('how have funding-extreme flags on ETH worked out') and explicitly contrasts with flag_outcomes ('this is one type on one coin'). This gives clear when-to-use and when-not-to-use guidance without needing to infer from parameter names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
situationsLive market situationsARead-onlyIdempotentInspect
What is going on right now, in stages: each live situation is one coin, one lane, one stage (emerging, confirmed, fading), with the evidence families behind it, the headline and the price move since it started. Use it for "what is going on with SOL", "what is developing right now", "anything building on my coins". Keyless returns the top situations with trimmed evidence; Starter returns every live situation with full evidence; Pro adds include_resolved for the outcomes of finished ones. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | One coin symbol to filter to. Omit for every coin. | |
| pair | No | Alias for coin. | |
| include_resolved | No | Also return situations that resolved in the last 48h, with their outcomes. Pro and up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present only when something was withheld: the cheapest plan that lifts it. |
| resolved | No | Pro and up, when include_resolved: situations resolved in the last 48h with outcomes. |
| withheld | No | Live situations held back on this plan. |
| available | No | False when the engine has not published (building:true). |
| situations | No | id, coin, type, type_label, direction, stage, headline, extreme, started_at, last_material_at, price_move_pct, families, supporting, conflicting, changes. |
| active_total | No | Live situations before the free cap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is read-only and idempotent. The description adds meaningful behavioral detail beyond that: tier-dependent behavior (Keyless returns top situations with trimmed evidence, Starter returns all with full evidence), the three-stage lifecycle, and the include_resolved Pro capability. This is valuable context not present in 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 efficient: three sentences cover what a situation is, when to use the tool, and how access tiers change behavior. It is front-loaded with the core concept and each sentence contributes 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?
With an output schema present, the return structure is already documented. The description fills the remaining gaps: stage semantics, evidence/headline/price-move composition, tier-specific output differences, and the resolved-inclusion behavior. An agent has enough 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?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds some context for include_resolved and implies coin filtering through the use-case examples, but it does not significantly enhance the 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 clearly defines what the tool reports: live market situations organized by coin, lane, and stage with evidence, headline, and price move. The use-case examples like 'what is going on with SOL' and 'anything building on my coins' make its purpose concrete and distinguish it from generic market snapshot 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 explicit use cases: checking what is happening with a coin, seeing developing situations, and monitoring coins the user cares about. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_moneySmart Money (proven cohort)ARead-onlyIdempotentInspect
What the PROVEN trader cohort is holding and trading, coin by coin. The cohort is not a guess at who is smart: it is Hyperliquid leaderboard accounts screened for provable profit (equity band, month and all-time PnL and ROI, volume-to-equity) and then verified against their own fills to trade at a cadence a person could follow. Two blocks, two different units, never added: positions_held is notional currently open, flow_traded is dollars executed inside the window (1h, 4h or 24h). Every row carries the wallet COUNT behind it and a thin flag when fewer than 3 cohort wallets are in it, because a one-wallet row is one person and not a cohort. cohort.rosterAgeHours is how old the MEMBERSHIP screen is (up to 24h), which is a separate fact from updated_at. Wallets whose live book could not be read are reported as unprofiled and are never counted as flat. Keyless. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Which window flow_traded covers: 1h, 4h or 24h. Defaults to 24h. It does not move positions_held, which is always what the cohort holds right now, and windows_available in the reply lists what the roll-up actually published. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| venue | No | Which market the cohort trades on. |
| cohort | No | Who is in the cohort and how it was screened, including rosterAgeHours, the age of the membership screen. |
| window | No | Which window flow_traded covers: 1h, 4h or 24h. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| coverage | No | Which wallets could be read, and which are reported as unprofiled rather than counted as holding nothing. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| updated_at | No | When the roll-up was published. Separate from how old the membership screen is. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| flow_traded | No | Dollars EXECUTED inside the window per coin, same row shape. A different unit from positions_held and never added to it. |
| flow_withheld | No | How many traded rows were not returned at this access level. |
| positions_held | No | Dollars currently OPEN per coin, with the wallet count behind each row and a thin flag under 3 wallets. |
| windows_available | No | The windows the roll-up actually published. |
| positions_withheld | No | How many holding rows were not returned at this access level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: positions_held and flow_traded are never added despite different units, unprofitable/unreadable wallets are never counted as flat, and rosterAgeHours is distinct from updated_at. These edge-case disclosures are valuable and consistent with the readOnly/idempotent 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 every sentence carries useful information. It is somewhat long and includes detailed methodology that could be trimmed, but it remains well-structured 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 the tool has an output schema, the description does not need to explain return values, and it covers the essential behavioral nuances: cohort definition, data units, wallet counts, flags, roster freshness, and unreadable-wallet handling. Nothing critical is missing for an agent to 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?
Although the schema already covers the window parameter at 100%, the description enriches it by clarifying what window affects (flow_traded, not positions_held), the unit semantics, and that windows_available in the reply reflects what was actually published. This goes well beyond the bare enum definition.
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 verb and resource: it reports what the PROVEN trader cohort is holding and trading, coin by coin. It also distinguishes itself from other tools by defining the cohort as Hyperliquid leaderboard accounts screened for provable profit rather than a guess.
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 for when this tool is relevant — accessing proven-cohort holdings and traded flow — and notes it is keyless and descriptive. It does not explicitly name alternative tools or state when not to use it, 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.
squeeze_scoreSqueeze Score (crowding)ARead-onlyIdempotentInspect
A fused 0-100 crowding read for one pair (funding + long/short accounts + taker imbalance + OI trend) with the overexposed side. Use this when the user asks how crowded or squeeze-prone a coin is, or which side is over-leveraged ("how crowded is BTC", "is ETH set up for a long squeeze"). For WHERE forced closes would land use liq_zones; for forced closes that already happened use liquidations/market_liquidations. Descriptive, never a trade signal or a prediction. Needs a paid plan. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A paid plan is needed for any pair here: without one the call is refused before the pair is even read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair this crowding read describes. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| updated_at | No | When the read was computed. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| by_exchange | No | The same read broken out per exchange. |
| crowded_side | No | Which side is overexposed, long or short. |
| squeeze_score | No | Crowding from 0 to 100. Descriptive, not a trade signal. |
| long_short_ratio | No | Long accounts against short accounts. |
| taker_buy_sell_ratio | No | Aggressive buying against aggressive selling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds meaningful context beyond that: 'Descriptive, never a trade signal or a prediction' and 'Needs a paid plan' (auth requirement), plus the note that the call is refused without a paid plan for any pair. 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 ~80 words, front-loaded with the core function, then use cases, alternatives, and caveats. It is well-structured, but there is minor redundancy between 'Descriptive, never a trade signal or a prediction' and 'Descriptive market data only' that prevents 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?
The description covers when to use the tool, when not to (explicit alternatives), the paid-plan requirement, and its non-predictive nature. An output schema exists, so return format is covered. Nothing essential an agent needs to select and 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?
Schema description coverage is 100%, and the description repeats rather than extends the parameters: 'coin' as alias and 'pair' details (e.g., 'Defaults to BTC/USD when omitted') are already in the schema. No added semantic value beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific function: a 'fused 0-100 crowding read' for one pair, listing the underlying components (funding, long/short accounts, taker imbalance, OI trend) and the overexposed side. It differentiates from siblings by explicitly routing WHERE forced closes land to liq_zones and past forced closes to liquidations/market_liquidations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: 'Use this when the user asks how crowded or squeeze-prone a coin is, or which side is over-leveraged,' with concrete example queries. It also names alternatives for other specific intents, so an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trade_contextOne-call trade contextARead-onlyIdempotentInspect
The pre-trade context blob in one call: price, the news read for that coin (summary, mood score, recent headlines), cross-venue funding with time-to-next-funding and carry arithmetic (optional position_usd), open interest, whale flow vs the coin's own baseline, and recent visible liquidations, on any streamed pair (on the free plans BTC in full and any other pair as a headline). Because the news rides along, this answers "why is X moving" in ONE call. compact: true returns the one-line composed answer, written in causal order (about 30 tokens). The percentile judgment vs the pair's own recorded days is keyless everywhere; on a pair outside the free set Starter adds the full 24h stats and whale USD magnitudes, and Pro adds the crowding score (locked_layers names what this plan withheld). Strictly descriptive: state plus recorded history, no advice. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Alias for pair. | |
| pair | No | Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline. | |
| compact | No | Return one line of plain text rather than the JSON blob, about 30 tokens instead of 800. Same facts, same windows, same dates, no structured fields to read. Defaults to false. | |
| position_usd | No | Position size in US dollars, for example 25000. Above zero only. When given, carry_cost adds per_day_usd_at_current_rate, the dollars a day the current funding average across exchanges works out to at that size. Arithmetic on the rate as it stands now, not a projection of future rates. Omit and carry_cost still carries the percentage and APR figures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| line | No | The composed one-line answer, returned only when compact:true was asked for. The same facts, the same windows and the same dates as the full shape. |
| news | No | What is being said about this coin, so a "why is it moving" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| pair | No | The pair this context describes. |
| depth | No | Which shape came back: lite, free-pair or keyed. |
| price | No | Last traded price. |
| compact | No | Present and true only on a compact:true call, where the whole answer is the single line in `line`. |
| funding | No | average_rate across exchanges, how many exchanges are in it, the interval in hours, and minutes to the next funding time. |
| crowding | No | The crowding read and the overexposed side. Null without a paid plan. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| stats_24h | No | The 24h statistics block. Absent on the lite shape, where locked_layers names it. |
| carry_cost | No | Arithmetic on the current funding average: percent per day, the same as an annual rate, which side pays, and dollars a day when position_usd was passed. Not a projection of future rates. |
| whale_flow | No | Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a paid plan. |
| price_reads | No | Plain descriptions of price against its own recent hours, computed from hourly candles: vs_recent_average (above or below its 50-hour and 200-hour average, and which way it is drifting), recent_move (how stretched the latest move is, plus the change against 7 days ago) and choppiness (calm, normal or choppy). Each block is available:true with values or available:false with a plain reason; a leg with too few recorded hours is null with a note, never a made-up neutral. Descriptive, not a trade signal. |
| locked_layers | No | Named rather than silently missing: which blocks this connection did not receive. |
| vs_own_history | No | Where funding and open interest sit against the same pair recorded days: phrase, band, day count, the date the reading is from, and how past cases resolved. |
| open_interest_usd | No | Open interest in dollars across the exchanges that publish it. |
| liquidations_recent | No | Forced closes visible right now: count, long_usd, short_usd and window_minutes. A timing series, market-wide totals run higher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: free-plan limitations, compact output mode, plan-tier feature additions, locked_layers, keyless percentile judgment, and the explicit 'descriptive only, no advice' boundary. It does not contradict 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 main purpose, but it is a long single paragraph with repeated phrases like 'descriptive market data only' and plan-tier details that could be tightened. It is informative but not 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?
Given the tool's complexity, no required parameters, and an existing output schema, the description covers the key operational aspects: output format, compact mode, plan restrictions, parameter behavior, and the no-advice boundary. It is complete enough for an agent to use it correctly, though some details are left to the output 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?
Schema description coverage is 100%, and the parameter descriptions in the schema already cover the same semantics (e.g., compact token count, position_usd behavior, coin alias, defaults). The description mostly repeats those details rather than adding new meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's purpose: returning a composite pre-trade context blob with price, news, funding, open interest, whale flow, and liquidations in one call. It also explicitly frames the unique value: answering 'why is X moving' in ONE call, distinguishing it from narrower 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 gives a clear use case: when you need the whole market context and news explanation for a coin in a single call. It also notes plan-tier behavior and compact mode. It does not explicitly mention alternatives or when not to use it, 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.
watch_createArm an alertAInspect
Arm an alert on one coin that the backend evaluates continuously and posts to your webhook when it fires: radar_unusual (whale flow turns unusual versus the coin's own normal), flag_fired (a signal fires on the coin), or funding_band (funding enters a recorded-days band, pass band). The one tool that makes an agent come back: use it for "tell me when", "alert me if", "watch BTC for". Starter and up; below that the answer names the plan. The webhook must be a public https URL you control. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | funding_band only: one of "record high", "record low", "top 5%", "bottom 5%". | |
| coin | No | One coin symbol, for example BTC. A pair like BTC/USD works too, the quote leg is dropped. | |
| pair | No | Alias for coin. | |
| trigger | Yes | What fires the alert. | |
| webhook_url | Yes | Public https URL that receives the POST when the alert fires. |
Output Schema
| Name | Required | Description |
|---|---|---|
| watch | No | The armed rule: id, coin, trigger, band, webhook_url, active, failures, created_at. |
| upgrade | No | Present only below the plan that includes watches: the cheapest plan that does, its price and an attributed link. |
| delivery | No | What a webhook payload contains: descriptive facts with evidence, never advice. |
| available | No | False when the watch was not armed: the plan does not include watches, the connection has no owner, the input was invalid, or the slots are full. reason names which. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (all false), so the description must carry the burden. It discloses the core behavior: continuous backend evaluation, webhook POST on firing, and a public https URL requirement. It also mentions 'Descriptive market data only' as a limitation. However, it omits details like whether alerts are one-time or repeat, what happens on webhook failure, or the persistence/lifecycle. These gaps prevent a higher score.
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: opening with purpose, then trigger definitions, usage guidance, plan requirement, and webhook constraint. It is front-loaded with the core action. However, it contains marketing fluff ('The one tool that makes an agent come back') which is unnecessary but not harmful. Overall efficient, but a tighter edit would earn 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?
For a tool with 5 parameters and an output schema, the description covers the main aspects: triggers, webhook requirement, and usage context. However, it has gaps: the schema marks coin as optional, yet the description implies it is needed ('on one coin'), and the band parameter for funding_band is only explained in the schema, not reinforced here. The phrase 'Descriptive market data only' is vague. These ambiguities reduce 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?
Despite 100% schema description coverage, the description adds significant meaning: it explains what each trigger means in plain language (e.g., radar_unusual = 'whale flow turns unusual versus the coin's own normal'), and clarifies the webhook requirement (public https URL you control). It also reinforces the coin usage with examples like 'watch BTC for'. This goes beyond the schema's terse 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 verb 'Arm an alert' and specifies the resource (one coin) and the three distinct trigger types (radar_unusual, flag_fired, funding_band) with brief explanations. It distinguishes itself from sibling tools like watch_delete and watch_list by implying a creation action. The purpose is unambiguous and specific.
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 usage context: 'use it for
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_deleteRemove an armed alertADestructiveIdempotentInspect
Remove one alert this connection armed, by the id watch_list or watch_create returned. Free to call. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The watch id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The id asked for. |
| deleted | No | True when the watch existed on this connection and was removed. False with a note when no watch had that id here. |
| available | No | False when watches are not available on this connection (plan or identity). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true and readOnlyHint=false, so the mutation aspect is covered. The description adds useful behavioral context beyond annotations: it limits deletion to alerts armed by 'this connection,' and notes 'Free to call' and 'Descriptive market data only,' which clarify cost and non-execution behavior. 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 compact and front-loads the main action. The phrasing is slightly awkward ('by the id watch_list or watch_create returned') and 'Descriptive market data only' is terse, but no sentence is wasted and the core information is present.
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's simplicity, one required parameter, the presence of an output schema, and the annotations covering safety and idempotency, the description is nearly complete. It provides the key scoping constraint and parameter source; only minor clarification around the exact effect of deletion or response behavior is absent, but the output schema covers the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes 'id' as 'The watch id.' The description adds meaningful provenance by explaining that the id is the one returned by watch_list or watch_create, which helps an agent know where to source the parameter correctly.
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: 'Remove one alert this connection armed.' It also clarifies the exact scope (alerts armed by this connection) and how to identify the target ('by the id watch_list or watch_create returned'), clearly distinguishing it from sibling tools like watch_create and watch_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?
The description clearly implies the deletion use case and explicitly tells the agent where to obtain the required id (from watch_list or watch_create). It does not explicitly mention alternatives or when not to use this tool, but the context is strong 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.
watch_listYour armed alertsARead-onlyIdempotentInspect
The alerts this connection has armed with watch_create: id, coin, trigger, band, webhook, active state and failure count. Free to call. Alerts armed over the REST API with an API key are listed there, not here. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Rows returned. |
| limit | No | Active watches allowed per owner. |
| watches | No | This connection's watches, newest first: id, coin, trigger, band, webhook_url, active, failures, created_at. |
| available | No | False when watches are not available on this connection (plan or identity), with reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context: the call is free, it is scoped to watch_create-armed alerts, REST API alerts are excluded, and it returns descriptive market data only. 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 is compact: three sentences that convey scope, included fields, cost, and an important exclusion. The phrase 'Descriptive market data only' is somewhat cryptic and could be clearer, but overall the description is front-loaded and free of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with an output schema and strong annotations, the description covers the essential scope and exclusion. The main gap is not explicitly identifying the sibling tool for REST API-armed alerts or clarifying what 'descriptive market data only' means, but these are minor given the overall context.
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 description coverage is 100%, so there are no parameter semantics to explain. The description usefully clarifies what the response includes, but that is output-level information rather than parameter guidance.
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 indicates this tool returns alerts armed via watch_create for the current connection and lists the included fields (id, coin, trigger, band, webhook, active state, failure count). It also distinguishes from REST API-armed alerts, though it never uses an explicit verb like 'lists' and does not name a specific sibling as the alternative.
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 usage context by stating alerts created via watch_create are included and REST API-key alerts are not. However, it does not explicitly name the alternative tool (e.g., my_alerts) or state when to prefer watch_list over other alert-related siblings, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watchlist_briefYour watchlist, whale-readARead-onlyIdempotentInspect
Every coin on your CoinLobster watchlist run through the whale read in one call: whale flow versus each coin's own normal, buy or sell lean, and whether it is on the radar as unusual right now. Use it for "how are my coins doing", "anything unusual on my watchlist", "brief me on my list". Needs a signed-in connection (free, no plan): keyless is refused by name. Free returns direction and the unusual flags; Starter and up adds the dollar flow per coin. Up to 10 coins per call for everyone. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| coins | No | Per watchlist coin: the whale-context read (multiple vs average, records, buy share), direction, unusual_now, and the dollar flow on Starter and up. |
| count | No | Coins read (up to 10). |
| radar | No | The radar rows for these coins per window, in the same shape whale_radar returns on this plan. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present on the free shape: the cheapest plan that adds the dollar flow. |
| available | No | False keyless (reason no_owner) or when the watchlist is empty (empty:true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent/non-destructive annotations, the description discloses key behavioral constraints: signed-in connection required, keyless access refused, Free vs Starter+ return differences, the 10-coin limit, and that data is descriptive only. This is rich, non-obvious context that materially affects invocation.
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 well-ordered: core action first, then usage examples, auth, plan tiers, limit, and data type. Every sentence adds information and none are redundant with the schema or annotations.
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, a present output schema, and safety annotations, the description covers all essential invocation context: auth requirements, plan-level output differences, per-call limits, and data type. An agent has everything needed to select and call 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?
There are zero parameters, so the baseline is 4. The description appropriately clarifies that the tool operates implicitly on the authenticated user's watchlist, which is the only 'input' needed. No further parameter documentation is required.
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-resource pair: running every watchlisted coin through the whale read in one call. It lists concrete outputs (flow versus normal, buy/sell lean, unusual radar) and gives example queries, making the tool's purpose unmistakable and clearly distinct from broader siblings like market_brief or whale_flow.
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 explicit usage phrasings ('how are my coins doing', 'anything unusual on my watchlist', 'brief me on my list') that tell an agent exactly when to select this tool. It does not name alternatives or say when not to use it, but the watchlist scoping and one-call framing make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_activityWhat whales are doing with one coinARead-onlyIdempotentInspect
Everything the recorded whale record can say about ONE coin in one call: net flow over 1h, 4h, 24h and 7d, the CEX / on-chain / Hyperliquid split, which of the 15 streamed CEX venues hold it, and flow measured against price. The plain-English name for whale_profile (identical data and credit cost), and the first tool for a general "what are whales doing with SOL" question. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin. | |
| pair | No | Alias for coin. | |
| coins | No | Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin. | |
| hours | No | How far back to read the record (min 168, i.e. 7 days). The reported windows are always 1h, 4h, 24h and 7d. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin this profile describes. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| caveat | No | A real limit on this answer, in one clause. Present only when something genuinely narrows what can be said. |
| venues | No | Which of the streamed exchanges the flow actually sits on and how concentrated it is. split marks two exchanges on opposite sides; partial marks a window whose exchange dollars are unknown rather than zero. |
| sources | No | The CEX, on-chain and Hyperliquid split, including sourceSplit when those markets sit on opposite sides. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| windows | No | Net flow per window, keyed 1h, 4h, 24h and 7d. A window states hoursCovered only when it holds fewer hours than it spans. |
| coverage | No | How much of the window carries a recorded reading. |
| pressure | No | Flow measured against price. state is absorption, distribution or confirming. When there is no state, reason names why (price-coverage, flow-too-small, price-flat), which means not enough to say, never no activity. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds 'Descriptive market data only' and notes identical data and credit cost relative to whale_profile, which is useful context but not a deep behavioral disclosure. 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 dense but efficient, front-loading the key purpose and data contents before the alias and usage note. It earns its length by covering scope, sibling relationship, and data characteristics without repeating the schema.
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 four fully documented parameters, rich annotations, and an output schema, the description covers what an agent needs to select the tool and understand its output. It clearly explains the data scope, the use case, and the relationship to whale_profile. A slightly more explicit note about the portfolio-read behavior would round it out, but the schema already covers that.
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 all four parameters thoroughly. The description adds general meaning around the single-coin focus and the reported time windows, but it does not need to restate parameter details because the schema carries them.
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 action and resource: it returns everything the recorded whale record can say about ONE coin, and enumerates the exact data included (net flows, CEX/on-chain/Hyperliquid split, venues, flow vs. price). It also explicitly distinguishes itself from whale_profile by calling itself the plain-English name for the identical data and credit cost, so an agent can differentiate it 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 clearly positions the tool as the first stop for a general 'what are whales doing with SOL' question and states that it is the plain-English alias for whale_profile with identical data and credit cost. It does not enumerate when to prefer other whale-related siblings like whale_flow or whale_context, but the usage context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_contextWhale flow vs own historyARead-onlyIdempotentInspect
Per-coin whale flow vs that coin's OWN logged history: multiple of its daily average, N-day-high flags, buy share now vs 7d. The "is this unusual for THIS coin" call; coin accepts a comma-separated list for portfolio briefs (single coin returns a flat object; a list returns {coins:[...]}). USD magnitudes included; on the free plans a coin other than BTC gets a headline. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Coin symbol, for example BTC, or a comma-separated list of up to 15 for a portfolio in one call. A single coin returns a flat object, a list returns {coins:[...]} with an available:false entry for any member with no logged history. Omit for the 15 coins sitting at the highest multiple right now. | |
| pair | No | Alias for coin. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin this row describes, when one coin was asked for. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| coins | No | One row per coin when a comma-separated list was asked for. A member with no logged history comes back as available:false. |
| breadth | No | How wide the buying or selling is across the coins with logged history. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| usd_24h | No | Total whale dollars in the last 24h. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| since_day | No | The first day this baseline covers. |
| valid_days | No | How many days of the baseline hold usable readings. |
| days_logged | No | How many days wide the baseline window is. |
| net_usd_24h | No | Buys minus sells in the last 24h. |
| buy_share_7d | No | Share of the last 7 days dollars that were buys, 0 to 1. |
| ranking_note | No | How the list is sorted, and why a thin_baseline row can sit near the top without meaning anything. |
| buy_share_24h | No | Share of the last 24h dollars that were buys, 0 to 1. |
| thin_baseline | No | True when about one day of flow sits in the whole window, so the multiple is close to the day count by construction and is not evidence of unusual activity. |
| highest_in_days | No | Highest flow in this many days, or null. |
| mult_vs_avg_24h | No | How many times its own logged daily average the last 24h of flow is. |
| record_high_day | No | True when this is the highest recorded day for the coin. |
| top_by_multiple | No | The coins sitting at the highest multiple right now, when no coin was asked for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral details beyond annotations: output shape for single vs multiple coins, the 'available:false' behavior for unlogged coins, and the free-plan headline quirk for non-BTC coins. It also states 'Descriptive market data only', reinforcing the read-only nature. These additions give the agent useful operational context 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 concise: two sentences that front-load the core concept, then cover the list behavior, USD magnitudes, and plan quirks. Every sentence carries essential information with no filler. The critical differentiating phrase 'own logged history' is placed early, making the tool's identity instantly clear.
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 documented. The description covers the key behavioral aspects: the historical context, list handling, unavailable-coin behavior, and the free-plan headline nuance. For a read-only tool with an output schema, this is sufficient for an agent to call it correctly. A minor gap is the lack of explicit pagination or rate-limit notes, but those are often omitted for read-only tools and are not critical here.
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% because the coin parameter is described in detail, including the list behavior and return format. The description adds meaning beyond the schema by clarifying that omitting coin returns the top 15 multiples, and that the return shape depends on whether a single coin or list is passed. This enriches the schema documentation with practical usage semantics, earning above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific purpose: per-coin whale flow compared to that coin's own historical averages, with flags and buy-share ratios. It explicitly positions itself as 'the "is this unusual for THIS coin" call', distinguishing it from other whale tools that track absolute flow or global trends. The verb+resource is specific and immediately understood.
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: when the question is about a coin's own historical context rather than cross-coin comparisons. However, it doesn't explicitly name alternative sibling tools or state when NOT to use it. Since it says 'the "is this unusual for THIS coin" call', it implies the differentiation from siblings like whale_flow or whale_trades, but without explicit exclusions it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_flowWhale flow by hourARead-onlyIdempotentInspect
Hourly buy and sell USD flow buckets for one coin, CEX and DEX split, over a rolling window. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin. | |
| pair | No | Alias for coin. | |
| coins | No | Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin. | |
| hours | No | How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 24 on the free plans, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`. | |
| detail | No | Extra per-hour detail: venues adds the per-venue dollar split, wallets adds the wallets behind each hour, all adds both. Off by default (a week of wallet lists is large). Pro and up; below that the payload names the plan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin these hours belong to. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| rows | No | One row per recorded hour: the hour stamp, buy and sell dollars, and the CEX / on-chain / Hyperliquid split. The per-hour wallet list and per-exchange table are not carried here (see whale_profile and hl_whales for those); this tool is the hourly timeline. |
| count | No | How many hours carry a recorded reading. Fewer than hours means the rest were never recorded, not that they were quiet. |
| hours | No | How many hours back were read. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds 'Descriptive market data only,' reinforcing non-actionability modern. It also mentions the rolling window, which is behavioral context not in annotations. However, it does not explicitly mention rate limits or that the tool refuses calls with no coin (though the schema does).
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?
Two sentences with zero waste. The core purpose is front-loaded: 'Hourly buy and sell USD flow buckets' immediately conveys the resource and time granularity. The sentence 'Descriptive market data only' adds essential behavioral context in a compact way. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (not provided), so return format is not needed. The description covers the core concept, scope (one coin, hourly, rolling window), and nature (descriptive). With annotations covering safety, the description is complete for an agent to select and invoke the tool correctly. The schema details handle everything else.
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 all parameters are described in the schema itself. The description does not add meaning beyond the schema, but the schema descriptions are quite detailed (e.g., 'quote leg is dropped', 'Defaults to the whole window'). The description's 'CEX and DEX split' clarifies the output but not parameter semantics. Baseline 3 is appropriate because schema covers everything.
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 'hourly buy and sell USD flow buckets for one coin, CEX and DEX split, over a rolling window.' This is a specific verb (read) plus resource (flow buckets) with clear scope (one coin, hourly, CEX/DEX split). It distinguishes itself from siblings like 'whale_trades' or 'whale_tape' by focusing on aggregated hourly flow rather than individual trades. The phrase 'Descriptive market data only' further clarifies its non-actionable nature.
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 implies usage for when you need hourly buy/sell flow data for a single coin, which contrasts with siblings like 'whale_trades' (individual trades) or 'whale_tape' (tape data). However, it does not explicitly name alternatives or state when NOT to use it. The presence of a 'coins' parameter for portfolio read hints at a use case (multiple coins) but is not highlighted in the description. Clear enough context for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_profileOne coin, whole whale pictureARead-onlyIdempotentInspect
Everything the recorded whale record can say about ONE coin in a single call: net flow over 1h, 4h, 24h and 7d; the CEX, on-chain and Hyperliquid split; WHICH of the 15 streamed CEX venues the flow actually sits on and how concentrated it is; whether two venues sit on opposite sides (venues.split) or the CEX and on-chain markets disagree outright (sources.sourceSplit); the current run of same-direction hours; and flow measured against price. pressure.state is one of absorption (whales bought while price fell), distribution (sold while it rose) or confirming (flow and price agree). It is null with a NAMED reason (price-coverage, flow-too-small, price-flat) whenever a leg is too thin to judge, so an absent verdict must be reported as "not enough to say", never as "no activity". venues.partial marks a window containing hours recorded before per-venue dollars existed, whose venue dollars are UNKNOWN and must not be read as zero. A window states hoursCovered ONLY when it holds fewer hours than it spans, so a 3-of-24 figure is never presented as a 24h figure; full windows carry no such field and need no disclaimer. Price-coverage figures are not sent when the pressure verdict already required them to pass, so there is nothing there to hedge with: a real shortfall arrives as a caveat field instead. On the free plans BTC over the last 24 hours and any other coin as a headline; a paid plan reaches the full 30-day record. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin. | |
| pair | No | Alias for coin. | |
| coins | No | Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin. | |
| hours | No | How far back to read the record (min 168, i.e. 7 days). The reported windows are always 1h, 4h, 24h and 7d. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin this profile describes. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| caveat | No | A real limit on this answer, in one clause. Present only when something genuinely narrows what can be said. |
| venues | No | Which of the streamed exchanges the flow actually sits on and how concentrated it is. split marks two exchanges on opposite sides; partial marks a window whose exchange dollars are unknown rather than zero. |
| sources | No | The CEX, on-chain and Hyperliquid split, including sourceSplit when those markets sit on opposite sides. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| windows | No | Net flow per window, keyed 1h, 4h, 24h and 7d. A window states hoursCovered only when it holds fewer hours than it spans. |
| coverage | No | How much of the window carries a recorded reading. |
| pressure | No | Flow measured against price. state is absorption, distribution or confirming. When there is no state, reason names why (price-coverage, flow-too-small, price-flat), which means not enough to say, never no activity. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations. It explains nuanced behaviors: pressure.state can be null with a NAMED reason (price-coverage, flow-too-small, price-flat) and must be reported as 'not enough to say', never 'no activity'. It warns that venues.partial marks windows with UNKNOWN venue dollars that must not be read as zero. It explains hoursCovered semantics (only present when fewer hours than span). It also clarifies that price-coverage figures are not sent when the pressure verdict already required them to pass. These are exactly the kind of behavioral traps an agent needs to know. No contradiction with readOnlyHint/idempotentHint/destructiveHint.
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. It front-loads the core purpose and then systematically covers the key behavioral caveats. It is long, but the complexity of the tool justifies the length. It could be slightly better organized (e.g., grouping the caveats), but the information density is high and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is remarkably complete. It covers the data dimensions, the pressure state semantics, the venue partial-window caveat, the hoursCovered semantics, the price-coverage hedging rule, and plan limitations. The output schema exists, so return values don't need to be spelled out. An agent has everything it needs to call this tool correctly and interpret its results without falling into the documented traps.
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 schema already documents all four parameters. The description adds value by clarifying the 'hours' parameter semantics: the reported windows are always 1h, 4h, 24h and 7d, and the minimum is 168 hours (7 days). It also reinforces that 'coin' is required despite being listed as not required in the schema, and that a pair like ETH/USD works with the quote leg dropped. This is meaningful added context 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 clear statement of what the tool does: 'Everything the recorded whale record can say about ONE coin in a single call.' It then enumerates the specific data dimensions (net flow over 1h/4h/24h/7d, CEX/on-chain/Hyperliquid split, venue concentration, pressure state, etc.), which distinguishes it from sibling tools like whale_flow or whale_activity. The title 'One coin, whole whale picture' reinforces the single-coin 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 description implies when to use this tool: when you want the complete whale picture for one coin in a single call, as opposed to more specialized siblings. It also gives plan-based guidance (free plans get BTC last 24h and any other coin as headline; paid plans reach 30 days). However, it does not explicitly name alternatives or state when NOT to use it, so it falls just 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.
whale_radarSmart Money RadarARead-onlyIdempotentInspect
Which coins have UNUSUAL whale flow right now, each measured against its OWN trailing baseline, across 1h, 4h and 24h windows. Use this to DISCOVER coins worth a look when the user has not named one ("what looks unusual", "what are whales into right now", "anything moving under the radar"). Ranks by how far above a coin's normal, not by dollar size, so a smaller coin can top a larger one. For ONE named coin use whale_profile (or whale_activity); to ask whether a named coin's flow is unusual FOR THAT COIN use whale_context; for a full market brief use market_digest. No arguments. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| windows | No | The ranked coins per window, keyed 1h, 4h and 24h. Each row names the coin, its dollars in the window and how that compares with the same coin trailing hours. |
| building | No | True while the ranking has not been published yet. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| freeCoins | No | Keyless only: the coins whose numbers come through unblurred. |
| freshness | No | How often the ranking is rebuilt. |
| generatedAt | No | When the ranking was computed. |
| lockedCount | No | Keyless only: how many coins were held back. |
| blurredMagnitude | No | Keyless only: true because dollar sizes on held-back coins are rounded away. |
| lockedUnusualCount | No | Keyless only: how many of the held-back coins are the unusual ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it emphasizes 'Descriptive market data only,' explains that ranking is relative to the coin's own baseline rather than dollar size, and explicitly states there are no arguments. This is meaningful but not exhaustive; the output schema covers remaining 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 longer than average but every sentence earns its place: it front-loads the core function, then supplies use-case examples, ranking methodology, and explicit sibling routing. It is dense but not redundant; minor trimming of the quoted user-phrase examples could tighten it slightly.
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, a rich output schema, and strong annotations, the description covers everything an agent needs: what the tool does, when to choose it, what it does not do, and which alternatives to use. No critical context is missing for correct invocation.
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 and the schema is an empty object, so the baseline is already 4. The description goes further by explicitly stating 'No arguments,' which removes any ambiguity about whether hidden or optional inputs exist. This is sufficient for a zero-parameter 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 uses a specific verb ('discover'/'rank') with a precise resource: coins with unusual whale flow relative to their own trailing baseline across 1h/4h/24h windows. It clearly differentiates from siblings by emphasizing discovery of unnamed coins and relative rather than absolute ranking.
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: when the user has not named a coin and wants unusual movements. It names concrete alternatives (whale_profile, whale_activity, whale_context, market_digest) and the conditions that select each, giving an agent unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_sectorsWhale flow by sectorARead-onlyIdempotentInspect
Where whale money is moving between sectors (L1, L2, DeFi, memes, AI and the rest) in the radar window: net direction per sector, its share of tagged flow and the coins carrying it. Use it for "which sectors are whales rotating into", "is money leaving memes". Keyless returns direction, share and coins; Starter adds the dollars. Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Radar window to aggregate. Defaults to 24h. |
Output Schema
| Name | Required | Description |
|---|---|---|
| window | No | The radar window aggregated. |
| sectors | No | sector, dir (in/out), coin_count, share_pct, coins; net_usd, buy_usd, sell_usd from Starter. |
| summary | No | The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise. |
| upgrade | No | Present on the free shape: the plan that adds the dollars. |
| available | No | False when the radar snapshot is not published. |
| coverage_pct | No | Share of flow that carries a sector tag. |
| magnitudes_withheld | No | True on the free shape: dollars omitted, direction and coins kept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it clarifies that output varies by access level ('Keyless returns direction, share and coins; Starter adds the dollars') and labels the data as 'Descriptive market data only', which sets expectations about the non-account-specific nature of the response.
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 with the core purpose. The three sentences each add distinct value: scope+outputs, use cases, and access-tier behavior. The phrasing is slightly dense in the first sentence due to the colon-separated list, but it remains efficient 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?
For a simple one-parameter tool with an output schema present, the description covers purpose, example questions, key output fields, and access-level behavior. It lacks an explicit note on how to interpret 'net direction' (e.g., bullish/bearish values), but the output schema likely covers return values, so no critical information is missing for an agent to use 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 input schema documents the single window parameter with complete coverage, including its enum values and default, so the baseline is 3. The description references 'radar window' in context, which reinforces the schema meaning, but it does not provide additional semantic detail beyond what the schema already gives. No further compensation is needed given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb context ('where whale money is moving between sectors') and enumerates the exact outputs (net direction, share of tagged flow, coins). It distinguishes itself from sibling tools like whale_flow by focusing on sector-level rotation, and lists concrete sector examples, making the scope 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 provides explicit example questions the tool answers ('which sectors are whales rotating into', 'is money leaving memes'), which communicates the intended use context clearly. It does not explicitly compare against alternatives or state when not to use it, but the sector-level framing is strong enough to guide an agent toward appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_tapeWhale trades feed (alias)ARead-onlyIdempotentInspect
Deprecated alias for whale_trades, kept so existing clients keep working. Prefer whale_trades. Live whale trades merged across 15 CEX venues plus on-chain DEX swaps (Ethereum, Base, Arbitrum), newest first. The free plans get the free shape (BTC/USD + $1M+ CEX trades live, other pairs delayed 30 min, DEX swaps $250K+) up to 25 rows from the last 24 hours, and a headline when a coin other than BTC is named; a paid plan lifts the shape to every pair with no delay and up to 500 rows here (deeper pages on the REST API). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin. | |
| pair | No | Alias for coin. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. | |
| source | No | Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all. | |
| min_usd | No | Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin filter that was applied, or null for every coin. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| count | No | How many rows this reply carries. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| source | No | Which markets were read: cex, dex or all. |
| trades | No | The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source. |
| covered | No | False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market. |
| matched | No | How many trades matched the filters before the row cap was applied. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| scan_note | No | Says the search stopped at its ceiling, so this is not the complete set for the window. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| scan_capped | No | True when the search hit its own depth ceiling, so older matches may exist that were never looked at. |
| scanned_rows | No | How deep the search went before filtering. Present only when a coin or size filter ran. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish readOnly and idempotent behavior, but the description goes far beyond them: it explains the deprecation, the 15 CEX venues plus Ethereum/Base/Arbitrum DEX swaps, newest-first ordering, free-plan delays and caps, DEX swap thresholds, and even the headline behavior for non-BTC coins. This is rich, relevant behavioral context 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 most important fact (deprecated alias, prefer whale_trades) and the merge/order behavior follows immediately. The plan-limit sentence is dense but relevant. The final sentence, 'Descriptive market data only,' is somewhat vague and does not clearly earn its place, keeping this from 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 the detailed input schema and existing output schema, the description covers all critical context: deprecation status, preferred alternative, data scope, ordering, plan limitations, caps, delays, and DEX thresholds. Nothing essential for correct invocation or interpretation 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, but the description adds useful context for interpreting parameters: it names the 15 CEX venues, the three DEX chains, the free-plan row caps and delay, and notes that deeper pages live on the REST API. These details help an agent reason about coin, source, limit, and min_usd even though the schema already documents them thoroughly.
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 exactly what the tool is: a deprecated alias for whale_trades that returns live whale trade data merged across CEX and DEX venues, newest first. It also explicitly distinguishes itself from the sibling whale_trades tool by saying 'Prefer whale_trades.' This gives an agent a precise, non-tautological purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the tool is kept only so existing clients keep working and instructs agents to prefer whale_trades. That is direct when-to-use versus when-to-use-alternative guidance. It also clarifies plan-dependent shape and limits, which affects whether the tool can satisfy a request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whale_tradesWhale trades feedARead-onlyIdempotentInspect
Live whale trades merged across 15 CEX venues plus on-chain DEX swaps (Ethereum, Base, Arbitrum), newest first. The free plans get the free shape (BTC/USD + $1M+ CEX trades live, other pairs delayed 30 min, DEX swaps $250K+) up to 25 rows from the last 24 hours, and a headline when a coin other than BTC is named; a paid plan lifts the shape to every pair with no delay and up to 500 rows here (deeper pages on the REST API). Descriptive market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin. | |
| pair | No | Alias for coin. | |
| limit | No | Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. | |
| source | No | Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all. | |
| min_usd | No | Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coin | No | The coin filter that was applied, or null for every coin. |
| note | No | One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading. |
| count | No | How many rows this reply carries. |
| capped | No | Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit. |
| source | No | Which markets were read: cex, dex or all. |
| trades | No | The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source. |
| covered | No | False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market. |
| matched | No | How many trades matched the filters before the row cap was applied. |
| available | No | False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess. |
| scan_note | No | Says the search stopped at its ceiling, so this is not the complete set for the window. |
| truncated | No | True when more rows matched than were returned, so what you have is a page and not the whole set. |
| depth_note | No | How far back the data behind this answer reaches. |
| access_note | No | What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears. |
| scan_capped | No | True when the search hit its own depth ceiling, so older matches may exist that were never looked at. |
| scanned_rows | No | How deep the search went before filtering. Present only when a coin or size filter ran. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context beyond that: free vs paid plan differences (delays, row caps, coin scope), ordering (newest first), and the 'descriptive market data only' note. It also mentions that deeper pages are available on the REST API, which helps set expectations. This goes beyond the annotations' safety profile and provides useful operational details.
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 not overly long. It front-loads the core purpose in the first sentence, then covers plan variations in the second. It is well-structured with clear logical flow. While it could be trimmed (e.g., the plan details might be moved to annotations or a separate section), every sentence adds useful information. It's appropriately sized for the complexity.
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 five parameters, a detailed schema, and an output schema, the description covers the key context: data scope, ordering, plan limitations, and the 'descriptive' nature. It mentions the REST API for deeper pages, which is useful. It does not explicitly describe the output shape, but the output schema exists, so that is covered structurally. The description is complete enough for an agent 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 schema description coverage is 100%, so each parameter is already documented in the input schema. The tool description does not add meaning about individual parameters (e.g., how coin, limit, source, or min_usd behave) beyond what the schema states. The description does mention plan-based caps and filtering, but those are also present in the schema. With full schema coverage, a baseline of 3 is appropriate; the description adds no extra parameter insight.
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 ('Live whale trades merged across 15 CEX venues plus on-chain DEX swaps...') and clearly defines the resource scope (venues, chains, ordering). It is distinct from sibling tools like whale_tape or onchain_whales by covering both CEX and DEX while explicitly naming the chains and exchanges. The phrase 'Descriptive market data only' further clarifies its non-analytical nature.
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 explains what the tool does but provides no guidance on when to choose it over alternatives. It does not mention sibling tools like whale_tape, whale_flow, or onchain_whales, nor does it state conditions that would make this tool more or less appropriate. The only contextual clue is the plan-limit discussion, which is about access restrictions, not usage scenarios. An agent has to infer when to use this vs other whale-related feeds.
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.
4 tool updates
- Changed
crypto_news2 fields changed- added
Output schema / properties / key_levelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The one level or figure the written read points at, or null." +} - added
Output schema / properties / pointsAdded value: +{ + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The written points behind the summary, each with a kind (signal, data, risk or macro) and its text. Empty when nothing was recorded." +}
- Changed
market_brief1 field changed- added
Output schema / properties / newsAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "What is being said about this coin, so a \"why is it moving\" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only." +}
- Changed
market_liquidations1 field changed- changed
Output schema / properties / perp_liquidations / descriptionPrevious value: -"The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure."New value: +"The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure. held_out names anything removed before these numbers were built (how many rows, how many dollars, on which symbols and why), or is null when nothing was; those dollars are NOT inside any figure here."
- Changed
trade_context1 field changed- added
Output schema / properties / newsAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "What is being said about this coin, so a \"why is it moving\" question is answered in this one call: summary (the written one-liner), sentiment and sentiment_score (minus 100 to plus 100, NULL when nothing was recorded, which is not the same as neutral), points (the written points behind the summary, each with a kind), key_level, headlines (title, source, published, link) and macro (the same read for the market as a whole). available:false with covered:true means the coin is recorded and this plan reaches BTC and macro only." +}
1 tool update
- Changed
market_history1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on Pro (Starter sits between). Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
17 tool updates
- Changed
coin_liquidations1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
- Changed
flag_outcomes2 fields changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
funding_matrix1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Every streamed pair answers keyless. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first."
- Changed
hl_wallet1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. Keyless calls receive 3 of them whatever is asked for, and the live positions come back either way."New value: +"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. The free plans receive 3 of them whatever is asked for, and the live positions come back either way."
- Changed
liq_zones1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a paid plan reaches any streamed pair with the full snapshot."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. The free plans get BTC's projected levels without the cascade chains and a headline for any other coin; a paid plan reaches any streamed pair with the full snapshot."
- Changed
liquidations1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 on the free plans and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
- Changed
market_brief1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline."
- Changed
market_history1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 1 on the free plans and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
- Changed
market_snapshot1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."
- Changed
oi_funding_history1 field changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How many hours back. Defaults to 24; keyless ceiling 24, then the plan's flow window. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours back. Defaults to 24; the ceiling on the free plans is 24, then the plan's history window. Asking for more returns the cap, and the payload says so in `capped`."
- Changed
orderbook1 field changed- changed
Input schema / properties / levels / descriptionPrevious value: -"Price levels per side. Defaults to 10; the ceiling is 5 keyless, 10 on Starter, 25 on Pro (hard)."New value: +"Price levels per side. Defaults to 10; the ceiling is 5 on the free plans, 10 on Starter, 25 on Pro (hard)."
- Changed
price_candles2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"How many bars, newest-ending. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"How many bars, newest-ending. Capped at 24 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`." - changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false."
- Changed
signal_outcomes2 fields changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 on the free plans and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
trade_context1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. On the free plans BTC answers in full and any other coin as a headline."
- Changed
whale_flow1 field changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 24 on the free plans, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."
- Changed
whale_tape2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`." - changed
Input schema / properties / min_usd / descriptionPrevious value: -"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."New value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
- Changed
whale_trades2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 on the free plans and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`." - changed
Input schema / properties / min_usd / descriptionPrevious value: -"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."New value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. The free plans hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist."
1 tool update
- Changed
liq_zones2 fields changed- added
Output schema / properties / retry_after_secondsAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How long to wait before asking again when warming is true." +} - added
Output schema / properties / warmingAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the projection is not built yet for this pair. Asking started it. Not a wall, and not a claim that the pair has no liquidation levels." +}
25 tool updates
- Added
big_catch - Changed
coin_liquidations1 field changed- added
Input schema / properties / since_msAdded value: +{ + "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
- Added
coin_search - Added
dex_board - Added
hl_moves - Changed
hl_traders1 field changed- changed
Output schema / properties / reconciliation / descriptionPrevious value: -"For wallets also on hl:proven, both numbers side by side with comparable:false. NOT like-for-like: a realized-closes figure over this window vs the venue leaderboard figure."New value: +"For wallets also on the proven-trader board, both numbers side by side with comparable:false. NOT like-for-like: a realized-closes figure over this window vs the venue leaderboard figure."
- Changed
hl_whales1 field changed- added
Input schema / properties / since_msAdded value: +{ + "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
- Added
liq_heat - Changed
liquidations1 field changed- added
Input schema / properties / since_msAdded value: +{ + "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
- Changed
my_access1 field changed- changed
Output schema / properties / tier / descriptionPrevious value: -"Which of four states this connection is in: keyless, signed_in_free, coinlobster_pro or developer_plan."New value: +"Which state this connection is in: keyless, signed_in_free, or the plan key (starter, pro, alpha, scale)."
- Added
my_alerts - Added
oi_funding_history - Changed
onchain_whales1 field changed- added
Input schema / properties / since_msAdded value: +{ + "description": "Polling cursor: only rows newer than this Unix-ms timestamp, applied before the row cap. Pass back the next_since_ms from the previous answer so a timer never re-reads the same rows.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
- Added
orderbook - Added
proven_traders - Added
signal_record - Added
situations - Added
watch_create - Added
watch_delete - Added
watch_list - Added
watchlist_brief - Changed
whale_activity1 field changed- added
Input schema / properties / coinsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin." +}
- Changed
whale_flow3 fields changed- added
Input schema / properties / coinsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin." +} - added
Input schema / properties / detailAdded value: +{ + "description": "Extra per-hour detail: venues adds the per-venue dollar split, wallets adds the wallets behind each hour, all adds both. Off by default (a week of wallet lists is large). Pro and up; below that the payload names the plan.", + "enum": [ + "none", + "venues", + "wallets", + "all" + ], + "type": "string" +} - changed
Input schema / properties / hours / descriptionPrevious value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless, 336 on Starter and 720 on Pro. Asking for more returns the cap, and the payload says so in `capped`."
- Changed
whale_profile1 field changed- added
Input schema / properties / coinsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "description": "Portfolio read: a list of coin symbols (or a comma-separated string) answered side by side in one call, up to 10. Omit for one coin." +}
- Added
whale_sectors
22 tool updates
- Added
coin_liquidations - Changed
flag_outcomes2 fields changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window."New value: +"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
hl_board1 field changed- changed
Output schema / properties / withheld / descriptionPrevious value: -"How many rows a keyless connection did not receive. Zero on a developer plan."New value: +"How many rows a keyless connection did not receive. Zero on a paid plan."
- Changed
hl_traders1 field changed- changed
Output schema / properties / withheld / descriptionPrevious value: -"How many rows a keyless connection did not receive. Zero on a developer plan."New value: +"How many rows a keyless connection did not receive. Zero on a paid plan."
- Changed
hl_wallet1 field changed- changed
Output schema / properties / locked_layers / descriptionPrevious value: -"Keyless only: which computed blocks a developer plan adds."New value: +"Keyless only: which computed blocks a paid plan adds."
- Changed
liq_zones2 fields changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a developer plan reaches any streamed pair with the full snapshot."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a paid plan reaches any streamed pair with the full snapshot." - changed
Output schema / properties / projection / descriptionPrevious value: -"The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a developer plan. Modeled levels, NOT trades that happened."New value: +"The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a paid plan. Modeled levels, NOT trades that happened."
- Changed
liquidations1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 keyless and 1000 on a paid plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
- Added
market_brief - Added
market_changes - Changed
market_history1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."New value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current."
- Added
market_movers - Changed
market_snapshot1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a developer plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a paid plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it."
- Changed
my_access3 fields changed- changed
Output schema / properties / caps / descriptionPrevious value: -"The row cap and time window every capped tool applies right now, each with the free value and the developer-plan value beside it."New value: +"The row cap and time window every capped tool applies right now, each with the free value and the paid-plan value beside it." - changed
Output schema / properties / free_pairs / descriptionPrevious value: -"The pairs this connection can read. A list when keyless, the words every streamed pair on a developer plan, or a short sentence when the market lane could not be read."New value: +"The pairs this connection can read. A list when keyless, the words every streamed pair on a paid plan, or a short sentence when the market lane could not be read." - changed
Output schema / properties / locked_here / descriptionPrevious value: -"What this connection cannot reach right now. Empty on a developer plan."New value: +"What this connection cannot reach right now. Empty on a paid plan."
- Changed
options2 fields changed- added
Input schema / properties / pairAdded value: +{ + "description": "Alias for coin.", + "type": "string" +} - changed
Output schema / properties / recentLargeTrades / descriptionPrevious value: -"Large option buys and sells above a size floor, newest first. Deeper on a developer plan."New value: +"Large option buys and sells above a size floor, newest first. Deeper on a paid plan."
- Added
price_candles - Added
signal_outcomes - Changed
squeeze_score1 field changed- changed
Input schema / properties / pair / descriptionPrevious value: -"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A developer plan is needed for any pair here: without one the call is refused before the pair is even read."New value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A paid plan is needed for any pair here: without one the call is refused before the pair is even read."
- Changed
trade_context3 fields changed- changed
Output schema / properties / crowding / descriptionPrevious value: -"The crowding read and the overexposed side. Null without a developer plan."New value: +"The crowding read and the overexposed side. Null without a paid plan." - added
Output schema / properties / price_readsAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Plain descriptions of price against its own recent hours, computed from hourly candles: vs_recent_average (above or below its 50-hour and 200-hour average, and which way it is drifting), recent_move (how stretched the latest move is, plus the change against 7 days ago) and choppiness (calm, normal or choppy). Each block is available:true with values or available:false with a plain reason; a leg with too few recorded hours is null with a note, never a made-up neutral. Descriptive, not a trade signal." +} - changed
Output schema / properties / whale_flow / descriptionPrevious value: -"Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a developer plan."New value: +"Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a paid plan."
- Added
whale_activity - Changed
whale_flow1 field changed- changed
Input schema / properties / hours / descriptionPrevious value: -"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`."New value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a paid plan. Asking for more returns the cap, and the payload says so in `capped`."
- Changed
whale_tape1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
whale_trades1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a paid plan; asking for more returns the cap, and the payload says so in `capped`."
1 tool update
- Added
options
6 tool updates
- Changed
market_overview1 field changed- added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
- Changed
smart_money1 field changed- added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
- Changed
whale_context1 field changed- added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
- Changed
whale_flow2 fields changed- changed
Output schema / properties / rows / descriptionPrevious value: -"One row per recorded hour: the hour stamp plus buy and sell dollars, split CEX and on-chain."New value: +"One row per recorded hour: the hour stamp, buy and sell dollars, and the CEX / on-chain / Hyperliquid split. The per-hour wallet list and per-exchange table are not carried here (see whale_profile and hl_whales for those); this tool is the hourly timeline." - added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
- Changed
whale_profile1 field changed- added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
- Changed
whale_radar1 field changed- added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The answer in one plain sentence, computed from the fields below. Open the reply with this, then let the numbers back it up. Null only when there was nothing to summarise." +}
5 tool updates
- Changed
flag_outcomes1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
liquidations1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 50 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."New value: +"Max rows returned. Capped at 25 keyless and 1000 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. count and the *_usd totals always cover the whole window regardless."
- Added
market_digest - Changed
whale_tape1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
- Changed
whale_trades1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows returned. Capped at 50 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."New value: +"Max rows returned. Capped at 25 keyless and 500 on a developer plan; asking for more returns the cap, and the payload says so in `capped`."
1 tool update
- Added
hl_traders
28 tool updates
- Changed
crypto_news2 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Defaults to BTC. News coverage is not every coin: where nothing was recorded the reply carries covered:false and a null sentiment_score, which is absence and not a neutral reading." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin the headlines and score are about." + }, + "covered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when nothing was recorded for this coin, which is why sentiment_score is null. Not a neutral reading." + }, + "headlines": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Up to 20 recent headlines, each with title, source, published time and link." + }, + "macro": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The same three fields for the market as a whole: sentiment, sentiment_score and summary." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "realtime": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the headlines are live. Keyless connections get the delayed set." + }, + "sentiment": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The wording that goes with the score, or unknown." + }, + "sentiment_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Minus 100 to plus 100. Null means nothing was measured, which is not the same as zero." + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pre-written summary for this coin, or null." + } + }, + "type": "object" +}
- Changed
defi_liquidations3 fields changed- added
Input schema / properties / chain / descriptionAdded value: +"Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them." - added
Input schema / properties / limit / descriptionAdded value: +"Max rows returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. count and total_usd cover exactly the rows returned, and window states the period those rows span, so neither is a fixed 24h figure." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "chains_covered": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The chains this lane indexes." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "duplicates_dropped": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many repeat rows for the same event were removed before counting, so the dollars are not doubled." + }, + "liquidations": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The events, each naming BOTH wallets: the one liquidated and the one that repaid the debt and took the collateral." + }, + "matched": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows matched the chain filter before the row cap." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "protocols_covered": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The lending protocols behind these rows." + }, + "total_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Dollars across exactly the rows returned. A page sum, not a fixed 24h total: the window field says what period those rows span." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + }, + "unknown_chain": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Set when a chain was named that this lane does not index. Nothing was searched, so this is not no liquidations there." + }, + "window": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The period the returned rows actually span: from, to and hours." + } + }, + "type": "object" +}
- Changed
defi_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "chains": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "One row per chain: the chain, tokens tracked, 24h volume and total value locked." + }, + "coverage_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What the numbers do and do not cover." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "tokens_withheld": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Keyless only: how many tokens were cut from top_tokens." + }, + "top_tokens": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The highest-volume tokens: chain, symbol, name, address, price, 24h change, volume and value locked. Shortened on a keyless connection." + }, + "totals": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Across all chains: 24h volume, total value locked, how many chains and how many tokens are tracked." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the on-chain token snapshot was published." + }, + "whale_activity": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Large swaps in the window: how many, buy and sell dollars, net, the largest, unique and repeat wallets, and the split per exchange and per chain. A keyless connection gets the counts with magnitudes_withheld set instead of the dollars." + } + }, + "type": "object" +}
- Changed
dex_wallet3 fields changed- added
Input schema / properties / address / descriptionAdded value: +"Ethereum, Base or Arbitrum address, 0x followed by 40 hex characters. Required. This is the on-chain wallet, not the Hyperliquid account that can sit at the same 0x string: use hl_wallet for that one. An address outside the followed set answers tracked:false, which is a coverage fact and not a wallet doing nothing." - added
Input schema / properties / limit / descriptionAdded value: +"Max recorded swaps returned for this address. Defaults to 25, hard ceiling 100 for everyone and no plan raises it." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The address, normalised." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up." + }, + "events": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Its recorded swaps, newest first." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "profile": { + "description": "What this address has been doing: net flow per token and its activity pattern." + }, + "tracked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this address is outside the followed set. A coverage fact, not a wallet doing nothing." + }, + "venue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Always on-chain. This is NOT the Hyperliquid account that can sit at the same 0x string." + } + }, + "type": "object" +}
- Changed
flag_outcomes4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin." - added
Input schema / properties / hours / descriptionAdded value: +"How far back to look, in hours. Defaults to 48. Capped at 168 keyless and 720 on a developer plan; asking for more returns the cap, and the payload says so in `capped`. The all_time block is unaffected by this window." - added
Input schema / properties / type / descriptionAdded value: +"Filter to one signal type. One of: whale-spike, funding-extreme, squeeze-flip, liq-cascade, flow-divergence, major-pctile, major-block, deriv-record. The underscore spellings used by alert rules (for example funding_extreme, or spike for whale-spike) are accepted too. Anything else is refused by name rather than answered as every signal. Omit for all types." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "aggregates": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "byType: how many fired per signal type inside the window." + }, + "all_time": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Permanent counters from the archive, independent of the window asked for: fired, scored_h24, since, through and by_type." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin filter applied, or null for all coins." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The window actually read, in hours." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "signals": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The signals that fired in the window, each with its type, coin, fire time, price at fire time and later price outcomes where they have been scored." + }, + "total_in_window": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many signals fired in the whole window, before the row cap." + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The signal type filter applied, or null for all types." + }, + "unknown_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Set when the type asked for is not one this record keeps. Nothing was filtered and nothing was searched." + }, + "valid_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The signal types that do exist, returned alongside unknown_type." + } + }, + "type": "object" +}
- Changed
funding_matrix2 fields changed- added
Input schema / properties / pair / descriptionAdded value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Every streamed pair answers keyless. Rates come back per exchange at that exchange's own interval_h, so magnitudes are not comparable across rows without normalising first." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair these rates belong to." + }, + "per_venue": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "One row per exchange: the exchange name, its current funding rate, its predicted next rate where it publishes one, the next payout time, and interval_h. Rates are per that exchange own interval, so magnitudes are not comparable across rows until they are normalised." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When these rates were read." + } + }, + "type": "object" +}
- Changed
hl_board1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "crowding": { + "description": "Per-coin crowding across the tracked accounts." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "rows": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The accounts: wallet, equity, dollars open, leverage and which way they lean. Shortened on a keyless connection." + }, + "tracked": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many accounts are tracked." + }, + "tracked_notional_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Total dollar value of everything those accounts hold open." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the board was published." + }, + "venue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Always Hyperliquid." + }, + "with_open_positions": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many of them currently hold something." + }, + "withheld": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows a keyless connection did not receive. Zero on a developer plan." + } + }, + "type": "object" +}
- Changed
hl_wallet3 fields changed- added
Input schema / properties / address / descriptionAdded value: +"Hyperliquid account address, 0x followed by 40 hex characters. Required. Every hl_whales row carries the wallet that filled it, so it can be passed straight in. An address outside the tracked set answers tracked:false, which is a coverage fact and not an account holding nothing." - added
Input schema / properties / limit / descriptionAdded value: +"Max recent fills returned for this account. Defaults to 50, hard ceiling 200 for everyone and no plan raises it. Keyless calls receive 3 of them whatever is asked for, and the live positions come back either way." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The account address, normalised." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "invalid_address when the address is not 0x plus 40 hex characters. Nothing was looked up." + }, + "locked_layers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Keyless only: which computed blocks a developer plan adds." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "prints": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Recent whale-sized fills for this account. Keyless connections receive 3 of them whatever was asked for." + }, + "profile": { + "description": "The live account: what it holds, equity, dollars open, leverage, which way it leans and unrealized profit. Public on Hyperliquid, so it stays keyless." + }, + "tracked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this account is outside the tracked set. A coverage fact, not an account holding nothing." + } + }, + "type": "object" +}
- Changed
hl_whales3 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Filter to one coin, for example PEPE. Matched against the parsed symbol as well as the raw market name, so the 1000-unit markets (kPEPE, kSHIB, kBONK) are found under PEPE, SHIB and BONK. One symbol, not a list. Omit for every coin." - added
Input schema / properties / limit / descriptionAdded value: +"Max fills returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin filter applied, or null for every coin." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "trades": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The fills, each carrying the wallet on both sides, the coin, the direction, the size and the time. Pass a wallet to hl_wallet for that account live positions." + }, + "venue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Always Hyperliquid." + } + }, + "type": "object" +}
- Changed
liq_zones2 fields changed- added
Input schema / properties / pair / descriptionAdded value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs and get the projected levels without the cascade chains; a developer plan reaches any streamed pair with the full snapshot." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "covered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this server does not stream the pair at all. No plan adds it." + }, + "free_pairs": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The pairs a keyless connection can read, returned when the pair asked for is not one of them." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair this projection covers." + }, + "projection": { + "description": "The projected levels: where forced closes would sit under the modeled leverage assumptions, plus the cascade chains on a developer plan. Modeled levels, NOT trades that happened." + } + }, + "type": "object" +}
- Changed
liquidations1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many events fired in the whole window, not how many rows came back." + }, + "history_included": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the recorded series was merged in, so a restart has not erased earlier events." + }, + "liquidations": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The events themselves, newest first: price, size in base and quote, side (long_liquidated or short_liquidated), exchange and time. A sample of the window when truncated is true." + }, + "long_liquidations": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "COUNT of longs force-closed. For dollars read long_usd." + }, + "long_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Dollars of longs force-closed across the window." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair these events belong to." + }, + "requested_hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The period asked for, so a page can be told apart from a period." + }, + "rows_returned": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many event rows are actually in this reply." + }, + "rows_span_minutes": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How far back the returned rows themselves reach." + }, + "short_liquidations": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "COUNT of shorts force-closed. For dollars read short_usd." + }, + "short_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Dollars of shorts force-closed across the window." + }, + "sources": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "How the events split between the streamed exchanges and Hyperliquid, and whether the Hyperliquid part is a sample." + }, + "total_in_window": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many events the window holds in total." + }, + "total_volume_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Dollars forced out across the whole window." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + }, + "window_hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The period the totals cover, in hours." + }, + "window_minutes": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "The same period in minutes." + } + }, + "type": "object" +}
- Changed
market_extremes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "as_of_day": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The day the rows actually describe. This is the honest date, and it is usually not today." + }, + "computed_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the daily scan ran." + }, + "coverage_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Present when stale is false: why these extremes are from as_of_day rather than today." + }, + "data_age_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many days back as_of_day sits." + }, + "expected_lag_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How far behind live this archive is meant to run." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "records": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Pairs sitting at a record high or low for funding, open interest or forced closes, each against the same pair recorded days, with a ready phrase and next-day outcome stats where enough past cases exist." + }, + "stale": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True only when the rows are further back than the settle horizon explains." + }, + "stale_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Present when stale is true: how far past the horizon the scan has fallen." + }, + "top5": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The same, for pairs in their own top or bottom 5 percent rather than at a record." + } + }, + "type": "object" +}
- Changed
market_history4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Read the daily whale buy and sell flow lane for one coin instead, for example BTC, recorded since 2026-06-18. Passing coin selects that lane and pair is then ignored. This is the one tool here where coin and pair are different questions, not two spellings of one." - added
Input schema / properties / days / descriptionAdded value: +"How many recorded days to return. Defaults to the whole window, which is also the ceiling: 30 keyless and 400 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`. Both lanes settle several days behind live by design, so read as_of and data_age_days before calling any of it current." - added
Input schema / properties / pair / descriptionAdded value: +"Read the daily market lane for one pair: funding, open interest, price and liquidation totals, recorded since 2026-03-18. For example ETH/USD; a bare symbol like ETH is read as ETH/USD, and BTC/USD is the default. Ignored when coin is passed, because coin selects the other lane." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "as_of": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The newest day in this reply. Not today: both lanes settle several days behind live by design." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin, when the daily whale-flow lane was read." + }, + "coverage_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Present when stale is false: why the newest day is not today, and that these days must not be described as current." + }, + "data_age_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many days back as_of sits." + }, + "days_returned": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many recorded days came back." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "expected_lag_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How far behind live this lane is meant to run, so a healthy lag can be told from a stopped one." + }, + "funding": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Daily funding readings, oldest first, each carrying its own coverage evidence." + }, + "hour_of_day_utc": { + "description": "What a typical hour looks like for this coin, as medians per UTC hour. Absent under 14 recorded days." + }, + "liquidations": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Daily forced-close totals." + }, + "open_interest": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Daily open interest readings." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair, when the daily market lane was read." + }, + "price": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Daily price readings." + }, + "stale": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True only when the lane is further back than its own settle horizon explains." + }, + "stale_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Present when stale is true: how far past the horizon it has fallen." + }, + "whale_flow_daily": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Daily whale buy and sell dollars, when the coin lane was read." + } + }, + "type": "object" +}
- Changed
market_liquidations1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "as_of": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When the combined snapshot was taken, as an ISO stamp." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "coverage": { + "description": "Which feeds fed this snapshot." + }, + "lending_liquidations": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "A SEPARATE 24h lane: on-chain debts repaid and collateral seized. count, total_usd, protocols, chains and recent rows. Never add these to the leveraged numbers." + }, + "named_liquidations": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Hyperliquid closures with the wallet named, which no other market publishes." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "perp_liquidations": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The 24h forced-close picture on leveraged markets: count, total_usd, the long and short split in both dollars and counts, hour by hour, the peak hour, the ranked coins, the biggest single event, and which exchanges are behind the totals. Long dollars are sell-side pressure." + }, + "stale": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the snapshot is older than it should be." + } + }, + "type": "object" +}
- Changed
market_overview3 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Return this coin's row on its own, for example BTC, instead of the whole board. Only coins in the streamed overview (roughly the top 300 by volume) are there; anything else comes back available:false rather than as an empty board." - added
Input schema / properties / limit / descriptionAdded value: +"Max board rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. total_rows reports the size of the whole board so a shortened list is visible. Ignored when coin is passed, since that returns a single row." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The symbol asked for, when a single row was requested." + }, + "coverage_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The same in one sentence, present only when something is missing." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "regime": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The Bitcoin risk state: state, btc_price and breadth_pct. A null state means the field is absent, not neutral." + }, + "returned": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows are in this reply." + }, + "row": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "That one symbol row: base, price_usd, chg_24h_pct, vol_usd_24h and oi_usd." + }, + "rows": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The board, ranked by volume: base symbol, price, 24h change, 24h volume and open interest." + }, + "total_rows": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows the whole board holds." + }, + "totals": { + "description": "Market-wide totals: volume, open interest, forced closes and market cap." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + }, + "unavailable_fields": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Fields this snapshot is not carrying. They are null because the field is absent, NOT because the value is zero." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the snapshot was published." + }, + "whale_net_usd_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Buys minus sells across the board over 24h. Null means the field is absent from this snapshot, not that flow was balanced." + } + }, + "type": "object" +}
- Changed
market_screener5 fields changed- added
Input schema / properties / compact / descriptionAdded value: +"Return one plain-text line per matching pair rather than the JSON rows. Defaults to false." - added
Input schema / properties / limit / descriptionAdded value: +"Max rows returned. Defaults to 20, hard ceiling 50 for everyone and no plan raises it. `matched` counts every pair that passed the filters regardless, and truncated says whether the rows are a shortened list." - added
Input schema / properties / unusual_only / descriptionAdded value: +"Keep only coins the radar currently marks unusual in its 1h, 4h or 24h window. Defaults to false." - added
Input schema / properties / whale_mult_min / descriptionAdded value: +"Keep only coins whose 24h whale flow is at least this multiple of their own logged daily average, for example 3 for 3x and up. Coins with no logged multiple are dropped rather than treated as zero. Omit for no flow filter." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "compact": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Present and true only on a compact:true call, where the whole answer is the text in `line`." + }, + "criteria": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The filters as they were actually applied, so a misread argument is visible." + }, + "line": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One plain-text line per matching pair, returned only when compact:true was asked for." + }, + "matched": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many pairs passed every filter, counted before the row cap. Null when nothing was screened." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "returned": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows are in this reply." + }, + "rows": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "One row per matching pair: pair, coin, price, 24h change, the funding and open interest bands against the same pair recorded days with the day counts behind them, the whale multiple, and whether the ranking currently calls it unusual." + }, + "scanned_pairs": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many pairs were examined." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + }, + "unknown_band": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Set when a band was named that this screen does not know. Nothing was screened, so this is not no matches." + }, + "valid_bands": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The bands that do exist, returned alongside unknown_band." + } + }, + "type": "object" +}
- Changed
market_snapshot2 fields changed- added
Input schema / properties / pair / descriptionAdded value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Keyless calls reach the free pairs only; a developer plan reaches every streamed pair. A pair this server does not stream comes back covered:false, and no plan adds it." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "covered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this server does not stream the pair at all. No plan adds it." + }, + "exchanges_streaming": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many exchanges are currently streaming this pair." + }, + "free_pairs": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The pairs a keyless connection can read, returned when the pair asked for is not one of them." + }, + "funding": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "average_rate across the exchanges that publish one, and exchange_count behind that average." + }, + "liquidations_recent": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Recent forced closes for this pair: count, total_usd, the long and short split in counts and dollars, and window_minutes, without which a count cannot be read. available:false here means no reading, not zero." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "open_interest_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Open interest in dollars, summed across the exchanges that publish it." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair this snapshot describes." + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Last traded price." + }, + "stats_24h": { + "description": "The 24h statistics block: open, high, low, close, change and volume." + }, + "vs_history": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Where funding and open interest sit against the same pair recorded days: a phrase, a band and how many days back the comparison reaches. Null under 30 recorded days." + } + }, + "type": "object" +}
- Changed
my_access1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "authenticated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when any valid sign-in or key was presented." + }, + "caps": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The row cap and time window every capped tool applies right now, each with the free value and the developer-plan value beside it." + }, + "credits": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The balance: credits_remaining, plan, plan_active, credits_per_call, calls_left_estimate and where to top up. A null credits_remaining always carries a note saying WHY, because could not read and spent to zero send a user to two different places." + }, + "free_pairs": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + { + "type": "null" + } + ], + "description": "The pairs this connection can read. A list when keyless, the words every streamed pair on a developer plan, or a short sentence when the market lane could not be read." + }, + "how_to_lift": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "What lifts the caps, where to get it, and (as not_this) the two things people buy by mistake that change nothing here." + }, + "locked_here": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "What this connection cannot reach right now. Empty on a developer plan." + }, + "metered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Whether calls cost credits on this connection, and how much." + }, + "on_free_plan": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when this connection reads free-shaped data. The single fact most users are asking for." + }, + "plain": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One sentence describing this tier in the user own words rather than ours." + }, + "tier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which of four states this connection is in: keyless, signed_in_free, coinlobster_pro or developer_plan." + } + }, + "type": "object" +}
- Changed
onchain_whales5 fields changed- added
Input schema / properties / chain / descriptionAdded value: +"Restrict to one chain: ethereum, base, arbitrum. Anything else is refused by name rather than answered as nothing happening there. Omit for all of them." - added
Input schema / properties / coin / descriptionAdded value: +"Filter to one token symbol, for example PEPE. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every token." - added
Input schema / properties / limit / descriptionAdded value: +"Max swaps returned. Defaults to 50, hard ceiling 200 for everyone and no plan raises it." - added
Input schema / properties / min_usd / descriptionAdded value: +"Smallest swap to return, in US dollars, for example 500000 for $500K and up. Omit for everything above the size floor this feed already records, which is not every swap on chain." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "chains_covered": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The chains this feed indexes." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "swaps": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The swaps, each carrying the wallet that signed it, the exchange it went through, the token and the dollar size." + }, + "unknown_chain": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Set when a chain was named that this feed does not index. Nothing was searched, so this is not no swaps there." + } + }, + "type": "object" +}
- Changed
smart_money2 fields changed- added
Input schema / properties / window / descriptionAdded value: +"Which window flow_traded covers: 1h, 4h or 24h. Defaults to 24h. It does not move positions_held, which is always what the cohort holds right now, and windows_available in the reply lists what the roll-up actually published." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "cohort": { + "description": "Who is in the cohort and how it was screened, including rosterAgeHours, the age of the membership screen." + }, + "coverage": { + "description": "Which wallets could be read, and which are reported as unprofiled rather than counted as holding nothing." + }, + "flow_traded": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Dollars EXECUTED inside the window per coin, same row shape. A different unit from positions_held and never added to it." + }, + "flow_withheld": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many traded rows were not returned at this access level." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "positions_held": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Dollars currently OPEN per coin, with the wallet count behind each row and a thin flag under 3 wallets." + }, + "positions_withheld": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many holding rows were not returned at this access level." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the roll-up was published. Separate from how old the membership screen is." + }, + "venue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which market the cohort trades on." + }, + "window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which window flow_traded covers: 1h, 4h or 24h." + }, + "windows_available": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The windows the roll-up actually published." + } + }, + "type": "object" +}
- Changed
squeeze_score2 fields changed- added
Input schema / properties / pair / descriptionAdded value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. A developer plan is needed for any pair here: without one the call is refused before the pair is even read." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "by_exchange": { + "description": "The same read broken out per exchange." + }, + "crowded_side": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which side is overexposed, long or short." + }, + "long_short_ratio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Long accounts against short accounts." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair this crowding read describes." + }, + "squeeze_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Crowding from 0 to 100. Descriptive, not a trade signal." + }, + "taker_buy_sell_ratio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Aggressive buying against aggressive selling." + }, + "updated_at": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the read was computed." + } + }, + "type": "object" +}
- Changed
trade_context4 fields changed- added
Input schema / properties / compact / descriptionAdded value: +"Return one line of plain text rather than the JSON blob, about 30 tokens instead of 800. Same facts, same windows, same dates, no structured fields to read. Defaults to false." - added
Input schema / properties / pair / descriptionAdded value: +"Trading pair, for example ETH/USD. A bare symbol like ETH is read as ETH/USD. Defaults to BTC/USD when omitted. Any streamed pair answers keyless; off the free pairs a keyless reply is the lite shape and names what it withheld in locked_layers." - added
Input schema / properties / position_usd / descriptionAdded value: +"Position size in US dollars, for example 25000. Above zero only. When given, carry_cost adds per_day_usd_at_current_rate, the dollars a day the current funding average across exchanges works out to at that size. Arithmetic on the rate as it stands now, not a projection of future rates. Omit and carry_cost still carries the percentage and APR figures." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "carry_cost": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Arithmetic on the current funding average: percent per day, the same as an annual rate, which side pays, and dollars a day when position_usd was passed. Not a projection of future rates." + }, + "compact": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Present and true only on a compact:true call, where the whole answer is the single line in `line`." + }, + "crowding": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "The crowding read and the overexposed side. Null without a developer plan." + }, + "depth": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which shape came back: lite, free-pair or keyed." + }, + "funding": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "average_rate across exchanges, how many exchanges are in it, the interval in hours, and minutes to the next funding time." + }, + "line": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The composed one-line answer, returned only when compact:true was asked for. The same facts, the same windows and the same dates as the full shape." + }, + "liquidations_recent": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Forced closes visible right now: count, long_usd, short_usd and window_minutes. A timing series, market-wide totals run higher." + }, + "locked_layers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Named rather than silently missing: which blocks this connection did not receive." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "open_interest_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Open interest in dollars across the exchanges that publish it." + }, + "pair": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The pair this context describes." + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Last traded price." + }, + "stats_24h": { + "description": "The 24h statistics block. Absent on the lite shape, where locked_layers names it." + }, + "vs_own_history": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Where funding and open interest sit against the same pair recorded days: phrase, band, day count, the date the reading is from, and how past cases resolved." + }, + "whale_flow": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Whale direction against the same coin logged baseline: the multiple, days logged, record and N-day-high flags, and buy share now versus 7 days. Dollar sizes are added on a developer plan." + } + }, + "type": "object" +}
- Changed
whale_context2 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Coin symbol, for example BTC, or a comma-separated list of up to 15 for a portfolio in one call. A single coin returns a flat object, a list returns {coins:[...]} with an available:false entry for any member with no logged history. Omit for the 15 coins sitting at the highest multiple right now." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "breadth": { + "description": "How wide the buying or selling is across the coins with logged history." + }, + "buy_share_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Share of the last 24h dollars that were buys, 0 to 1." + }, + "buy_share_7d": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Share of the last 7 days dollars that were buys, 0 to 1." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin this row describes, when one coin was asked for." + }, + "coins": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "One row per coin when a comma-separated list was asked for. A member with no logged history comes back as available:false." + }, + "days_logged": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many days wide the baseline window is." + }, + "highest_in_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Highest flow in this many days, or null." + }, + "mult_vs_avg_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many times its own logged daily average the last 24h of flow is." + }, + "net_usd_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Buys minus sells in the last 24h." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "ranking_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How the list is sorted, and why a thin_baseline row can sit near the top without meaning anything." + }, + "record_high_day": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when this is the highest recorded day for the coin." + }, + "since_day": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "The first day this baseline covers." + }, + "thin_baseline": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when about one day of flow sits in the whole window, so the multiple is close to the day count by construction and is not evidence of unusual activity." + }, + "top_by_multiple": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The coins sitting at the highest multiple right now, when no coin was asked for." + }, + "usd_24h": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Total whale dollars in the last 24h." + }, + "valid_days": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many days of the baseline hold usable readings." + } + }, + "type": "object" +}
- Changed
whale_flow3 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin." - added
Input schema / properties / hours / descriptionAdded value: +"How many hours of hourly buckets to read back. Defaults to the whole window, which is also the ceiling: 168 keyless and 720 on a developer plan. Asking for more returns the cap, and the payload says so in `capped`." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin these hours belong to." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many hours carry a recorded reading. Fewer than hours means the rest were never recorded, not that they were quiet." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "hours": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many hours back were read." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "rows": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "One row per recorded hour: the hour stamp plus buy and sell dollars, split CEX and on-chain." + } + }, + "type": "object" +}
- Changed
whale_profile2 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Coin symbol, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. Required: with nothing to look up the call is refused rather than answered about a different coin." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "caveat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A real limit on this answer, in one clause. Present only when something genuinely narrows what can be said." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin this profile describes." + }, + "coverage": { + "description": "How much of the window carries a recorded reading." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "pressure": { + "description": "Flow measured against price. state is absorption, distribution or confirming. When there is no state, reason names why (price-coverage, flow-too-small, price-flat), which means not enough to say, never no activity." + }, + "sources": { + "description": "The CEX, on-chain and Hyperliquid split, including sourceSplit when those markets sit on opposite sides." + }, + "venues": { + "description": "Which of the streamed exchanges the flow actually sits on and how concentrated it is. split marks two exchanges on opposite sides; partial marks a window whose exchange dollars are unknown rather than zero." + }, + "windows": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Net flow per window, keyed 1h, 4h, 24h and 7d. A window states hoursCovered only when it holds fewer hours than it spans." + } + }, + "type": "object" +}
- Changed
whale_radar1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "blurredMagnitude": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Keyless only: true because dollar sizes on held-back coins are rounded away." + }, + "building": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True while the ranking has not been published yet." + }, + "freeCoins": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Keyless only: the coins whose numbers come through unblurred." + }, + "freshness": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How often the ranking is rebuilt." + }, + "generatedAt": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + { + "type": "null" + } + ], + "description": "When the ranking was computed." + }, + "lockedCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Keyless only: how many coins were held back." + }, + "lockedUnusualCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Keyless only: how many of the held-back coins are the unusual ones." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "windows": { + "description": "The ranked coins per window, keyed 1h, 4h and 24h. Each row names the coin, its dollars in the window and how that compares with the same coin trailing hours." + } + }, + "type": "object" +}
- Changed
whale_tape4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin." - added
Input schema / properties / min_usd / descriptionAdded value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist." - added
Input schema / properties / source / descriptionAdded value: +"Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin filter that was applied, or null for every coin." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "covered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "matched": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many trades matched the filters before the row cap was applied." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "scan_capped": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the search hit its own depth ceiling, so older matches may exist that were never looked at." + }, + "scan_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Says the search stopped at its ceiling, so this is not the complete set for the window." + }, + "scanned_rows": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How deep the search went before filtering. Present only when a coin or size filter ran." + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which markets were read: cex, dex or all." + }, + "trades": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + } + }, + "type": "object" +}
- Changed
whale_trades4 fields changed- added
Input schema / properties / coin / descriptionAdded value: +"Filter to one coin, for example BTC. A pair like ETH/USD works too, the quote leg is dropped. One symbol, not a list. Omit for every coin." - added
Input schema / properties / min_usd / descriptionAdded value: +"Smallest trade to return, in US dollars, for example 5000000 for $5M and up. Omit for everything already large enough to count as whale-sized. Keyless calls hold on-chain swaps to $250K and up regardless. A size filter runs after the fetch, so scan_capped in the payload states whether the search reached its own ceiling and older matches may exist." - added
Input schema / properties / source / descriptionAdded value: +"Which markets to read: cex for the 15 streamed exchanges, dex for on-chain swaps on Ethereum, Base and Arbitrum, all for both merged. Defaults to all." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "access_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "What this connection could not return and what lifts it. Always pass this on to the user: it is the only place that information appears." + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when this lane could not answer: a producer is dark, the pair sits outside this plan, or the argument named something we do not carry. Absent or true means the numbers are a real reading, not a guess." + }, + "capped": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "applied": { + "description": "The value actually used.", + "type": "number" + }, + "argument": { + "description": "Which argument was cut down, for example limit or hours.", + "type": "string" + }, + "by": { + "description": "Why it was cut: keyless for the free ceiling, plan_max for a paid ceiling, tool_max for a ceiling no plan raises.", + "type": "string" + }, + "max": { + "description": "The ceiling that applied.", + "type": "number" + }, + "requested": { + "description": "The value the caller asked for.", + "type": "number" + } + }, + "required": [ + "argument", + "requested", + "applied", + "max", + "by" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Present only when an argument was cut down to a ceiling. Absent means nothing was clamped, so a smaller number than you asked for is the data and not a limit." + }, + "coin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The coin filter that was applied, or null for every coin." + }, + "count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many rows this reply carries." + }, + "covered": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "False when the coin asked for is not one this feed streams, so nothing was searched. That is different from a quiet market." + }, + "depth_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "How far back the data behind this answer reaches." + }, + "matched": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How many trades matched the filters before the row cap was applied." + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One line saying what the numbers cover, or why there are none. Read it before reporting any zero as a market reading." + }, + "scan_capped": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when the search hit its own depth ceiling, so older matches may exist that were never looked at." + }, + "scan_note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Says the search stopped at its ceiling, so this is not the complete set for the window." + }, + "scanned_rows": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "How deep the search went before filtering. Present only when a coin or size filter ran." + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Which markets were read: cex, dex or all." + }, + "trades": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The matching trades, newest first. A CEX row carries pair, exchange, price, size and side; an on-chain row carries the token, the wallet and the dollar size. Every row carries source." + }, + "truncated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "True when more rows matched than were returned, so what you have is a page and not the whole set." + } + }, + "type": "object" +}
28 tool updates
- First observed
crypto_news - First observed
defi_liquidations - First observed
defi_summary - First observed
dex_wallet - First observed
flag_outcomes - First observed
funding_matrix - First observed
hl_board - First observed
hl_wallet - First observed
hl_whales - First observed
liq_zones - First observed
liquidations - First observed
market_extremes - First observed
market_history - First observed
market_liquidations - First observed
market_overview - First observed
market_screener - First observed
market_snapshot - First observed
my_access - First observed
onchain_whales - First observed
smart_money - First observed
squeeze_score - First observed
trade_context - First observed
whale_context - First observed
whale_flow - First observed
whale_profile - First observed
whale_radar - First observed
whale_tape - First observed
whale_trades
Related MCP Connectors
Live whale movements, wallet intel and Alpha-bot signals across 34+ EVM chains, over MCP.
Crypto fundamental analysis, sentiment and whale tracking for traders and AI agents.
AI crypto signals, whale positions, 19 technical indicators, derivatives, screener and backtests
Free read-only crypto whale-tracking & market-data MCP tools across 14 chains. No auth.
Related MCP Servers
AlicenseAqualityBmaintenanceProvides 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.1723 npm14MIT- AlicenseNot gradedqualityCmaintenanceDelivers real-time crypto market microstructure, derivatives, order flow CVD/OI regime classification, fear & greed sentiment, and whale tracking context, enabling traders to assess market regimes and complement charting tools.28 npmMIT
- AlicenseAqualityDmaintenanceReal-time radar for Solana memecoins, Pump.fun launches, and KOL trades.83MIT
- AlicenseAqualityBmaintenanceReal-time crypto whale intelligence MCP server with 55 tools across 14 blockchains. Free, no auth required.561MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.