Skip to main content
Glama

Hyperliquid Market

hl_market
Read-onlyIdempotent

Hyperliquid market positioning, by view. open_interest: open interest per symbol at the latest snapshot beside the venue's own figure, so the two can be reconciled. symbol_metrics: the hourly open-interest, position-count and bias series (a fraction from -1 to +1) of ONE symbol, all cohorts summed or one cohort sliced; the newest row is provisional (the hour in progress). A cohort slice has data from 2026-04-07 (the first hour cohort labels are correct; data_from), all cohorts summed the whole history. A pnl cohort slice here uses TODAY's grading for past hours (look-ahead): use hl_cohort_metrics with label_basis=point_in_time for research. size_breakdown: one symbol's positioning by position-size bucket (ten dollar ranges, empty ones zero-filled). positions: individual position rows, current by default or historical with start (and optionally end; end alone is refused; bound it by symbol or wallet). positions is ordered by KEY, NOT by size (current: wallet, symbol, direction; historical: symbol, snapshot time, wallet), because the cursor pages on the primary key: limit=10 is the first ten wallets in address order, never the ten biggest. For the biggest positions of ONE symbol pass sort=size (current only, limit at most 500, no cursor): rows come biggest first and each carries account_value, the wallet's NATIVE perp account value in USD (null when unknown, never 0; a builder DEX's separate account is not in it); there is no per-position cumulative funding. For market-wide sizes use size_breakdown, open_interest or hl_cohort_metrics. indices: four cohort readings of ONE symbol, all RATIOS from -1 (all short) to +1 (all long), not percents, and null (never 0) when a cohort holds no positions: latest is the newest 5-minute snapshot and series the settled hourly rows, newest first, data from 2026-04-07 (the first hour cohort labels are correct; data_from) (hours sizes the window, limit caps the rows, has_more says older rows exist). smi = long share of the 3x smart / 2x smart / smart wallets minus long share of the rekt / 2x rekt / 3x rekt wallets; wsi = long share of the 4x whale .. whale wallets minus long share of the 2x shrimp / shrimp wallets; whale_bias and smart_bias = (long - short) / (long + short) over those whale / smart wallets (latest only). latest.smi and latest.smart_bias rank wallets by today's PnL grading (latest.label_basis is current), the hourly series by each hour's own grading (top-level label_basis is point_in_time). large_fills: one symbol's fills of at least min_usd (from $50,000) of the last hours (up to 24), newest first, the website's Whale Activity feed: ts, wallet, direction (buy | sell), size_token, size_usd, price, order_type (market = crossed the book, limit = rested), size_cohort, pnl_cohort (graded at the fill's own hour where that hour is labelled, else today; pnl_cohort_basis says which). The source keeps only the newest 200 fills over $50k per symbol, so on a busy symbol it reaches back minutes, not a day: covered_from is how far back the answer reaches (the oldest fill held when truncated is true, else the start of the hours window) and truncated is true when that cap may have cut older fills inside hours (they may all be below min_usd). limit defaults to 200, everything the source holds per symbol; has_more is true when a lower limit cut matching rows. Liquidations are not flagged. Notional is USD. hourly: an hourly panel of up to 64 symbols at once, the close (from fills) beside open interest, funding rate and premium (node snapshots averaged over the hour); rows are ARRAYS in columns order, not objects, days (default 120, at most 400) or start sizes the window, and start / end in the answer are the window actually read. funding_rates: without symbol the board, every perp's latest funding_rate (the venue's HOURLY rate as a fraction; Hyperliquid settles every hour, positive = longs pay), funding_rate_annualized (x 8760, simple), premium, mid_price and open interest (open_interest in coins, open_interest_usd), ranked by sort (oi default, rate, abs_rate), as_of the newest reading; with symbol that perp's hourly history from data_from, each hour the MEAN of its ~12 five-minute readings (n_snapshots), not the rate settled at the hour's end. Builder-DEX (HIP-3) perps are included; their hours from 2026-04-22 13:00 to 2026-11-03 are the SETTLED rate (rebuilt from the venue's history), null where the venue published none. Same data as GET /v1/hyperliquid/{positions/symbols, positions, symbols/hourly, funding-rates} and GET /v1/hl-cohorts/symbols/{symbol}/{metrics, size-breakdown, indices, large-fills}.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "hl_market"
  }
}

Input Schema

NameRequiredDescriptionDefault
endNoISO-8601 UTC upper bound, e.g. 2026-10-02T00:00:00Z. On `positions` it needs `start` and is refused without it. On `hourly` it is exclusive and defaults to now. On `funding_rates` it is inclusive and needs `symbol`. Used by view: symbol_metrics, positions, indices, hourly, funding_rates.
axisNoCohort ladder: `size` = account-value tiers in USD, `pnl` = percentile rank of cumulative realized PnL (NOT dollars), `pnl_abs` = dollar bands of that same PnL. On `symbol_metrics` omit it to sum all cohorts; with `cohort` it slices one, and a `pnl` slice uses TODAY's grading for past hours (look-ahead: use hl_cohort_metrics with label_basis=point_in_time for research). Default by view: positions size. Used by view: symbol_metrics, positions.
daysNoWindow length in days back from `end`, 1 to 400. `start` overrides it. Used by view: hourly.
sortNo`positions`: `size` = the biggest current positions of ONE `symbol` first (by notional, then wallet, then direction), each row carrying the wallet's native `account_value`. Needs `symbol`, `limit` at most 500, no `cursor` and no `start`/`end`. Omit it for key order. `funding_rates` (the board, no `symbol`): `oi` (open interest in USD, the default), `rate` or `abs_rate` (the size of the rate whatever its sign). Used by view: positions, funding_rates.
viewNoWhat to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. `funding_rates`: the latest funding rate of every perp, or with `symbol` one perp's hourly funding history. Default `open_interest`.open_interest
hoursNo`indices`: window length in hours when `start` is omitted, ending at `end` or now. `large_fills`: how far back to look, at most 24. Default by view: indices 168, large_fills 24. Max by view: indices 8760, large_fills 24. Used by view: indices, large_fills.
limitNoRows per page. On `indices`: max hourly rows, newest first; `has_more` says older ones exist, page back with `end` = the oldest `ts` minus 1 second. On `large_fills`: max fills, newest first; the source holds at most 200 per symbol, which is the default, and `has_more` says a lower `limit` cut rows. Default by view: symbol_metrics 500, positions 100, indices 5000, large_fills 200, funding_rates 500. Max by view: symbol_metrics 5000, positions 5000, indices 5000, large_fills 1000, funding_rates 5000. Used by view: symbol_metrics, positions, indices, large_fills, funding_rates.
orderNo`funding_rates` only: `desc` (default: the board largest first, a history newest hour first) or `asc`. Used by view: funding_rates.desc
startNoISO-8601 UTC lower bound, e.g. 2026-10-01T00:00:00Z. On `positions`, setting it switches to history (`end` alone does not). On `hourly` (also epoch seconds or ms) it is inclusive and overrides `days`. On `funding_rates` it bounds a `symbol`'s history (inclusive) and is refused without `symbol`. Used by view: symbol_metrics, positions, indices, hourly, funding_rates.
cohortNoOne label on `axis`, spelled exactly as `hl_segments` view=cohorts lists it, e.g. `whale` (size) or `3x smart` (pnl). Omit for all wallets. Used by view: symbol_metrics, positions.
cursorNo`nextCursor` from the previous page, passed back verbatim; it is null on the last page. Omit it for the first page. Refused with `sort=size`. On `funding_rates` resend the same `symbol`, `sort` and `order`. Used by view: symbol_metrics, positions, funding_rates.
symbolNoHyperliquid instrument ticker, e.g. BTC, ETH, HYPE; a HIP-3 market is `dex:TICKER`, e.g. xyz:TSLA. On `positions` it is a filter; bound a historical read by it or by `wallet`. On `funding_rates` it switches from the board of every perp to that perp's hourly history; HIP-3 markets (`xyz:TSLA`) included. Used by view: symbol_metrics, size_breakdown, positions, indices, large_fills, funding_rates. Required by view: symbol_metrics, size_breakdown, indices, large_fills.
walletNoOne wallet's positions only. Used by view: positions.
min_usdNo`large_fills` only: smallest fill in USD. 50000 is also the minimum: nothing smaller is held. Used by view: large_fills.
symbolsNoComma-separated perp tickers, e.g. `BTC,ETH,SOL`; at most 64. Used by view: hourly. Required by view: hourly.
open_onlyNo`true` (default) = the latest open positions. Passing `start` switches to the historical snapshots whatever this says; `false` without `start` is refused. Used by view: positions.
resolutionNo`positions` history only (needs `start`): `5m` = every snapshot, ~5 minutes apart; `1h` = the last snapshot of each hour, ~12x fewer rows. Default `1h` when `wallet` is given, `5m` otherwise; a `5m` read of one wallet is limited to 48 hours. Used by view: positions.
label_basisNo`current` only: this series resolves the cohort label at query time, so `point_in_time` is refused by name; use hl_cohort_metrics for it. Used by view: symbol_metrics.
opened_withinNoOnly positions opened within this window: `24h`, `7d`, `30d` or `all`; positions with no known open time are left out of every bounded window. Used by view: symbol_metrics.all

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / symbol / description
      Previous value: -"Hyperliquid instrument ticker, e.g. BTC, ETH, HYPE; a HIP-3 market is `dex:TICKER`, e.g. xyz:TSLA. On `positions` it is a filter; bound a historical read by it or by `wallet`. On `funding_rates` it switches from the board of every perp to that perp's hourly history; a HIP-3 market is refused there (native perps only). Used by view: symbol_metrics, size_breakdown, positions, indices, large_fills, funding_rates. Required by view: symbol_metrics, size_breakdown, indices, large_fills."New value: +"Hyperliquid instrument ticker, e.g. BTC, ETH, HYPE; a HIP-3 market is `dex:TICKER`, e.g. xyz:TSLA. On `positions` it is a filter; bound a historical read by it or by `wallet`. On `funding_rates` it switches from the board of every perp to that perp's hourly history; HIP-3 markets (`xyz:TSLA`) included. Used by view: symbol_metrics, size_breakdown, positions, indices, large_fills, funding_rates. Required by view: symbol_metrics, size_breakdown, indices, large_fills."
    • changedInput schema / properties / view / description
      Previous value: -"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. `funding_rates`: the latest funding rate of every native perp, or with `symbol` one perp's hourly funding history. Default `open_interest`."New value: +"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. `funding_rates`: the latest funding rate of every perp, or with `symbol` one perp's hourly funding history. Default `open_interest`."
  2. Changed10 schema fields changed
    • changedInput schema / properties / cursor / description
      Previous value: -"`nextCursor` from the previous page, passed back verbatim; it is null on the last page. Omit it for the first page. Refused with `sort=size`. Used by view: symbol_metrics, positions."New value: +"`nextCursor` from the previous page, passed back verbatim; it is null on the last page. Omit it for the first page. Refused with `sort=size`. On `funding_rates` resend the same `symbol`, `sort` and `order`. Used by view: symbol_metrics, positions, funding_rates."
    • changedInput schema / properties / end / description
      Previous value: -"ISO-8601 UTC upper bound, e.g. 2026-10-02T00:00:00Z. On `positions` it needs `start` and is refused without it. On `hourly` it is exclusive and defaults to now. Used by view: symbol_metrics, positions, indices, hourly."New value: +"ISO-8601 UTC upper bound, e.g. 2026-10-02T00:00:00Z. On `positions` it needs `start` and is refused without it. On `hourly` it is exclusive and defaults to now. On `funding_rates` it is inclusive and needs `symbol`. Used by view: symbol_metrics, positions, indices, hourly, funding_rates."
    • changedInput schema / properties / limit / description
      Previous value: -"Rows per page. On `indices`: max hourly rows, newest first; `has_more` says older ones exist, page back with `end` = the oldest `ts` minus 1 second. On `large_fills`: max fills, newest first; the source holds at most 200 per symbol, which is the default, and `has_more` says a lower `limit` cut rows. Default by view: symbol_metrics 500, positions 100, indices 5000, large_fills 200. Max by view: symbol_metrics 5000, positions 5000, indices 5000, large_fills 1000. Used by view: symbol_metrics, positions, indices, large_fills."New value: +"Rows per page. On `indices`: max hourly rows, newest first; `has_more` says older ones exist, page back with `end` = the oldest `ts` minus 1 second. On `large_fills`: max fills, newest first; the source holds at most 200 per symbol, which is the default, and `has_more` says a lower `limit` cut rows. Default by view: symbol_metrics 500, positions 100, indices 5000, large_fills 200, funding_rates 500. Max by view: symbol_metrics 5000, positions 5000, indices 5000, large_fills 1000, funding_rates 5000. Used by view: symbol_metrics, positions, indices, large_fills, funding_rates."
    • addedInput schema / properties / order
      Added value: +{
      +  "default": "desc",
      +  "description": "`funding_rates` only: `desc` (default: the board largest first, a history newest hour first) or `asc`. Used by view: funding_rates.",
      +  "enum": [
      +    "asc",
      +    "desc"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / sort / description
      Previous value: -"`positions` only: `size` = the biggest current positions of ONE `symbol` first (by notional, then wallet, then direction), each row carrying the wallet's native `account_value`. Needs `symbol`, `limit` at most 500, no `cursor` and no `start`/`end`. Omit it for key order. Used by view: positions."New value: +"`positions`: `size` = the biggest current positions of ONE `symbol` first (by notional, then wallet, then direction), each row carrying the wallet's native `account_value`. Needs `symbol`, `limit` at most 500, no `cursor` and no `start`/`end`. Omit it for key order. `funding_rates` (the board, no `symbol`): `oi` (open interest in USD, the default), `rate` or `abs_rate` (the size of the rate whatever its sign). Used by view: positions, funding_rates."
    • changedInput schema / properties / sort / enum
      Previous value: -[
      -  "size"
      -]New value: +[
      +  "size",
      +  "oi",
      +  "rate",
      +  "abs_rate"
      +]
    • changedInput schema / properties / start / description
      Previous value: -"ISO-8601 UTC lower bound, e.g. 2026-10-01T00:00:00Z. On `positions`, setting it switches to history (`end` alone does not). On `hourly` (also epoch seconds or ms) it is inclusive and overrides `days`. Used by view: symbol_metrics, positions, indices, hourly."New value: +"ISO-8601 UTC lower bound, e.g. 2026-10-01T00:00:00Z. On `positions`, setting it switches to history (`end` alone does not). On `hourly` (also epoch seconds or ms) it is inclusive and overrides `days`. On `funding_rates` it bounds a `symbol`'s history (inclusive) and is refused without `symbol`. Used by view: symbol_metrics, positions, indices, hourly, funding_rates."
    • changedInput schema / properties / symbol / description
      Previous value: -"Hyperliquid instrument ticker, e.g. BTC, ETH, HYPE; a HIP-3 market is `dex:TICKER`, e.g. xyz:TSLA. On `positions` it is a filter; bound a historical read by it or by `wallet`. Used by view: symbol_metrics, size_breakdown, positions, indices, large_fills. Required by view: symbol_metrics, size_breakdown, indices, large_fills."New value: +"Hyperliquid instrument ticker, e.g. BTC, ETH, HYPE; a HIP-3 market is `dex:TICKER`, e.g. xyz:TSLA. On `positions` it is a filter; bound a historical read by it or by `wallet`. On `funding_rates` it switches from the board of every perp to that perp's hourly history; a HIP-3 market is refused there (native perps only). Used by view: symbol_metrics, size_breakdown, positions, indices, large_fills, funding_rates. Required by view: symbol_metrics, size_breakdown, indices, large_fills."
    • changedInput schema / properties / view / description
      Previous value: -"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. Default `open_interest`."New value: +"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. `funding_rates`: the latest funding rate of every native perp, or with `symbol` one perp's hourly funding history. Default `open_interest`."
    • changedInput schema / properties / view / enum
      Previous value: -[
      -  "open_interest",
      -  "symbol_metrics",
      -  "size_breakdown",
      -  "positions",
      -  "indices",
      -  "large_fills",
      -  "hourly"
      -]New value: +[
      +  "open_interest",
      +  "symbol_metrics",
      +  "size_breakdown",
      +  "positions",
      +  "indices",
      +  "large_fills",
      +  "hourly",
      +  "funding_rates"
      +]
  3. Changed6 schema fields changed
    • addedInput schema / properties / days
      Added value: +{
      +  "default": 120,
      +  "description": "Window length in days back from `end`, 1 to 400. `start` overrides it. Used by view: hourly.",
      +  "type": [
      +    "integer",
      +    "string"
      +  ]
      +}
    • changedInput schema / properties / end / description
      Previous value: -"ISO-8601 UTC upper bound, e.g. 2026-10-02T00:00:00Z. On `positions` it needs `start` and is refused without it. Used by view: symbol_metrics, positions, indices."New value: +"ISO-8601 UTC upper bound, e.g. 2026-10-02T00:00:00Z. On `positions` it needs `start` and is refused without it. On `hourly` it is exclusive and defaults to now. Used by view: symbol_metrics, positions, indices, hourly."
    • changedInput schema / properties / start / description
      Previous value: -"ISO-8601 UTC lower bound, e.g. 2026-10-01T00:00:00Z. On `positions`, setting it switches to history (`end` alone does not). Used by view: symbol_metrics, positions, indices."New value: +"ISO-8601 UTC lower bound, e.g. 2026-10-01T00:00:00Z. On `positions`, setting it switches to history (`end` alone does not). On `hourly` (also epoch seconds or ms) it is inclusive and overrides `days`. Used by view: symbol_metrics, positions, indices, hourly."
    • addedInput schema / properties / symbols
      Added value: +{
      +  "description": "Comma-separated perp tickers, e.g. `BTC,ETH,SOL`; at most 64. Used by view: hourly. Required by view: hourly.",
      +  "type": "string"
      +}
    • changedInput schema / properties / view / description
      Previous value: -"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. Default `open_interest`."New value: +"What to read. `open_interest`: open interest per symbol beside the venue's own figure. `symbol_metrics`: the hourly open-interest, position-count and bias series of one symbol. `size_breakdown`: one symbol's positioning by position-size bucket. `positions`: individual position rows in key order (not by size; `sort=size` for the biggest of one symbol), current or historical (historical rows carry `label_causal`, the previous hour's label, for a backtest without lookahead). `indices`: the smart money and whale-vs-shrimp indices plus whale and smart bias of one symbol: the newest snapshot and an hourly series. `large_fills`: one symbol's large fills (from $50k) of the last day, newest first, as the website's Whale Activity feed. `hourly`: hourly close, open interest, funding rate and premium of up to 64 symbols at once. Default `open_interest`."
    • changedInput schema / properties / view / enum
      Previous value: -[
      -  "open_interest",
      -  "symbol_metrics",
      -  "size_breakdown",
      -  "positions",
      -  "indices",
      -  "large_fills"
      -]New value: +[
      +  "open_interest",
      +  "symbol_metrics",
      +  "size_breakdown",
      +  "positions",
      +  "indices",
      +  "large_fills",
      +  "hourly"
      +]
  4. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations it discloses the non-obvious mechanics an agent would otherwise get wrong: rows are ordered by primary key so `limit=10` is ten wallets in address order not the ten biggest; `account_value` is native perp value, null never 0, excluding builder-DEX accounts; the source retains only 200 fills over $50k per symbol so `covered_from`/`truncated` bound coverage; the newest symbol_metrics row is provisional; indices are ratios with null (never 0) for empty cohorts; liquidations are not flagged.

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

Conciseness4/5

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

Every sentence carries specific, non-redundant information and the view-by-view ordering is front-loaded with the umbrella purpose. The cost is density: it is a single unbroken block with no separators between the eight views, so an agent must parse a wall of prose to find the view it needs, and a few clauses (e.g. the builder-DEX date range) are near-incidental for selection.

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

Completeness5/5

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

With 19 parameters, eight views and no output schema, the description carries the full burden and meets it: it names the returned fields (ts, wallet, direction, size_usd, order_type, pnl_cohort_basis; smi/wsi/whale_bias formulas), the ordering and pagination signals (has_more, nextCursor), null and zero-fill semantics, and time-window defaults. Little an agent needs in order to call any view correctly is missing.

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

Parameters5/5

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

Schema coverage is already 100%, yet the description still adds real meaning: it names the default and max `limit` per view, explains that `start` on positions switches to history while `end` alone is refused, that `cursor` is refused with `sort=size`, that `hours` caps at 24 for large_fills, and that `label_basis` accepts only `current`. This is well above the baseline the schema alone would justify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening clause fixes the domain ("Hyperliquid market positioning, by `view`") and then defines each of the eight views with a specific noun: open interest vs. venue figure, hourly OI/count/bias series, size buckets, individual rows, cohort indices, large fills, hourly panel, funding board/history. Each view is distinguishable from the others without opening the schema, and the tool is clearly separated from siblings such as hl_cohort_metrics and hl_segments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing appears throughout: a `pnl` cohort slice here uses today's grading, so "use hl_cohort_metrics with label_basis=point_in_time for research"; for market-wide sizes "use `size_breakdown`, `open_interest` or hl_cohort_metrics"; for the biggest positions of one symbol pass `sort=size` rather than relying on the key-ordered default. It also states refusals and preconditions (end alone refused, sort=size needs symbol and forbids cursor), which is the when-not half of the guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.