# LiquidVision — Crypto Derivatives Data

> Exchange-exact crypto derivatives data for AI agents: OI, funding, liquidations, 13 venues, 42 tools

- name: app.liquidvision/derivatives
- version: 1.3.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 60/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/app.liquidvision%2Fderivatives
- tools: https://api.protogrid.dev/v1/servers/app.liquidvision%2Fderivatives/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "derivatives": {
      "type": "http",
      "url": "https://liquidvision.app/mcp",
      "headers": {
        "X-API-Key": "${X_API_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_KEY}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-3d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 60/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_markets (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_positioning_regime (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_liquidation_cascades (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 6,536 tokens to load every tool
- warn `tools.api_dump`: 42 tools, 98% named like REST operations: looks like an API mapped one endpoint per tool

### stability: 25 (weight 15)

- warn `stability.changes`: 37 tool changes in 30 days
- fail `stability.rug_pull`: 10 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 42, about 6,536 tokens to load them all
- tool set hash: 65a5a9add6e22c4cb267f26dece1a968
- tools last changed: 2026-10-16T12:47:45.767Z
- badge: [![protogrid quality](https://protogrid.dev/badge/app.liquidvision/derivatives.svg)](https://protogrid.dev/servers/app.liquidvision/derivatives)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-16 `get_tokenized_stocks` added
  - [measured] Tokenized stocks, indices, ETFs, commodities, FX, rates and pre-IPO names traded as PERPS on DEXs (Lighter and Hyperliquid builder markets): one row per underlying (NVDA, TSLA, S&P 500, Gold, EUR/USD, Anthropic...) with every venue's mark, open interest, 24 h volume, funding APR and the price gap between venues in bps. asset_class filters: equity | crypto_equity | etf | index | commodity | fx | rates | preipo. Use get_hl_builder_markets for the raw Hyperliquid HIP-3 list by dex.
- 2026-10-16 `list_history_packages` added
  - [measured] Monthly Parquet history packages for backtests: liquidations (11 venues), funding hourly and settlements, open interest hourly, Hyperliquid and Lighter positions with liquidation prices — one file per dataset per month since 2026-07 with rows, bytes and sha256. Each entry has `url` (download with the API key in X-API-Key) and `available` for the caller's tier: Pro = this month and the previous one, Bot = all, free = none (use get_history for the last 24 h).
- 2026-10-15 `get_lighter_liquidation_map` changed (description)
  - before: [measured] Liquidation map for Lighter (zk perp DEX), not a model: leveraged positions of the accounts we have read, binned by Lighter's own liquidation price, long/short notional per bin, cumulative curves, the largest positions and the share of the venue's open interest covered. Accounts are discovered from the public trade stream, so coverage grows with time. range: 12h | 1d | 3d | 7d | max.
  - after: [measured, RISK AHEAD, Lighter] REAL open positions on Lighter (zk perp DEX; crypto plus equity indices, stocks, forex, commodities) binned by Lighter's own liquidation price. Not a model. Use this for Lighter; get_hl_liquidation_map for Hyperliquid; get_liquidation_map (modeled) for the CEXs. Accounts are discovered from the public trade stream, so coverage (covered_long_pct/covered_short_pct of venue open interest) grows with time. Returns long/short notional per bin, cumulative curves and the largest positions. range: 12h | 1d | 3d | 7d | max.
- 2026-10-15 `get_cvd` changed (description) **meaning changed**
  - before: Cumulative volume delta split by trade size (retail <$10K, mid <$100K, large <$1M, whale >$1M). Whale-vs-retail divergence = smart-money signal.
  - after: Cumulative volume delta split by trade size (retail <$10K, mid <$100K, large <$1M, whale >$1M). Whale-vs-retail divergence is the usual smart-money reading; buckets are per published row and only Binance aggregates taker orders, so compare buckets within one exchange (exchange=binance) rather than across venues.
- 2026-10-15 `get_liquidation_heatmap` changed (description)
  - before: [modeled] How the liquidation map evolved over time: grid[t][b] is the estimated USD of leveraged positions with their liquidation price in price bin b at time cols[t] (ms), bins[b] is the bin's centre price (240 bins fitted to the traded range) and price[t] is the close. A level disappears once price trades through it. Use get_liquidation_map for the current picture only (smaller answer, split by leverage and exchange); use this one to see when a cluster formed and whether it is still there. The answer is large (about 35,000 numbers). symbol: BASEUSDT. exchange: all | binance | bybit | okx. range: 12h | 1d | 3d | 7d.
  - after: [modeled, RISK AHEAD, CEX, over time] The same estimated CEX map as get_liquidation_map but as a time series: grid[t][b] is the estimated USD of leveraged positions with their liquidation price in price bin b at time cols[t] (ms), bins[b] the bin's centre price (240 bins fitted to the traded range), price[t] the close. A level disappears once price trades through it. Call this only to see WHEN a cluster formed and whether it survived; for the current picture call get_liquidation_map (far smaller answer, split by leverage and exchange). The answer is large (about 35,000 numbers). symbol: BASEUSDT. exchange: all | binance | bybit | okx. range: 12h | 1d | 3d | 7d.
- 2026-10-15 `get_hl_liquidation_map` changed (description)
  - before: [measured] Liquidation map for Hyperliquid, not a model: leveraged positions of the 10,000 largest accounts binned by the exchange-reported liquidation price, long/short notional per bin, cumulative curves and the largest positions. Partial coverage: large accounts only. range: 12h | 1d | 3d | 7d | max (±100%, recommended: large accounts run low leverage).
  - after: [measured, RISK AHEAD, Hyperliquid] REAL open positions on Hyperliquid binned by the liquidation price the exchange itself reports: the 10,000 largest accounts plus every account that traded since the reader started (~10,000 accounts, ~40-45% of venue open interest, stated in covered_long_pct/covered_short_pct). Not a model. Use this for Hyperliquid; use get_lighter_liquidation_map for Lighter and get_liquidation_map (modeled) for the CEXs. Returns long/short notional per bin, cumulative curves and the largest positions. range: 12h | 1d | 3d | 7d | max (±100%, recommended: large accounts run low leverage).
- 2026-10-15 `get_liquidation_map` changed (description)
  - before: [modeled] Liquidation map for a perp symbol (e.g. BTCUSDT): estimated notional of leveraged positions per price bin at their liquidation price, split by leverage tier (5/10/20/25/50/100x) and by exchange (binance/bybit/okx or 'all'), plus cumulative long/short curves from the current price outward. range: 12h | 1d | 3d | 7d. It answers "if price reaches this level, how much is there" (backtest: top quarter of the levels price traded held 32% of the liquidated USD, chance 25%); it does NOT predict where price will go. Live scoring: get_accuracy.
  - after: [modeled, RISK AHEAD, CEX, now] ESTIMATED open leveraged positions on Binance/Bybit/OKX per price bin at their liquidation price, from candles and open-interest deltas (the CEXs do not publish positions). Current snapshot only; for its evolution over time use get_liquidation_heatmap; for REAL positions use get_hl_liquidation_map (Hyperliquid) or get_lighter_liquidation_map (Lighter); for what already got liquidated use the PAST tools. Returns notional per bin split by leverage tier (5/10/20/25/50/100x) and by exchange, plus cumulative long/short curves from the current price outward. exchange: all | binance | bybit | okx. range: 12h | 1d | 3d | 7d. It ranks levels ("if price reaches this level, how much is there": top quarter of traded levels holds ~30-32% of liquidated USD, chance ~24%); it does NOT predict where price will go. Live scoring: get_accuracy.
- 2026-10-15 `get_liquidations_summary` changed (description)
  - before: [measured] Liquidation totals for the whole market, already added up: rekt (USD liquidated in the last 1h/4h/12h/24h, split long/short), by_symbol and by_exchange over the last `minutes`, and series (30-minute buckets). Start here for "how much was liquidated"; use get_liquidations for the individual orders and get_liquidation_cascades for events. Totals are a floor: Binance and Bitget throttle their feeds. side=long means longs were liquidated. minutes: 1 to 1440, applies to the breakdowns and the series.
  - after: [measured, PAST] TOTALS of liquidations that already happened: rekt (USD liquidated in the last 1h/4h/12h/24h, split long/short), by_symbol and by_exchange over the last `minutes`, and series (30-minute buckets). The one to call for "how much was liquidated"; it does not return individual orders (get_liquidations) or events (get_liquidation_cascades), and says nothing about open positions (the *_liquidation_map tools). Totals are a floor: Binance and Bitget throttle their feeds. side=long means longs were liquidated. minutes: 1 to 1440.
- 2026-10-15 `get_liquidations` changed (description)
  - before: Recent liquidation events (side, price, qty), NEWEST FIRST, at most `limit` rows (max 2000). Market-wide, 500 rows is only a few minutes of a busy hour: pass `symbol` (BTCUSDT) and/or `min_usd` to look further back, or use get_liquidations_summary for totals and get_history for the archive. side=long means a long position was liquidated.
  - after: [measured, PAST] Individual liquidation ORDERS that already happened (side, price, qty), newest first, at most `limit` rows (max 2000). This is the raw feed: use it when you need the orders themselves. For totals use get_liquidations_summary; for cascades as events use get_liquidation_cascades; for where OPEN positions would be liquidated use a *_liquidation_map tool. Market-wide, 500 rows is only a few minutes of a busy hour: pass `symbol` (BTCUSDT) and/or `min_usd` to look further back. side=long means a long position was liquidated.
- 2026-10-15 `get_funding_arbitrage` added
  - [measured] Funding carry screener on REALIZED numbers: for each coin, the venue pair a desk would put on (short where funding is richest, long where it is cheapest) and what that pair actually earned from funding over the last 7 and 30 days from our hourly archive, annualized; positive_share_7d = share of the week's hours the pair was net positive (0.5 is a coin flip); current_spread_apr = the same pair right now; mark_gap_bps = short-venue mark over long-venue mark (positive = entry in your favour). Use get_funding_dispersion for the live spread across all venues. Everything is gross: before taker fees, basis moves and two margin accounts. Not financial advice.

Full history: https://api.protogrid.dev/v1/servers/app.liquidvision%2Fderivatives/changes

## Remotes

- https://liquidvision.app/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (42)

- `create_alert`: Subscribe an HTTPS URL to push alerts instead of polling (Pro: 3, Bot: 20 subscriptions).
    type='cascade': a liquidation cascade just ended, over min_usd and x_normal times the coin's
    normal minute. type='hl_near_liq': a Hyperliquid whale position over min_usd within
    max_dist_pct of its liquidation price. type='cluster_sweep': price reached one of the 10
    largest modeled liquidation-map clusters (size over min_usd; no symbol = BTC, ETH, SOL), sent
    3 min later with modeled vs actually liquidated USD. Returns the signing secret ONCE: verify header
    X-LiquidVision-Signature = hex HMAC-SHA256(secret, raw body). Needs a Pro or Bot key.
- `delete_alert`: Permanently delete one webhook alert subscription. DESTRUCTIVE and not reversible:
    deliveries to its URL stop at once and its signing secret is discarded (create_alert
    issues a new one). Only a subscription owned by the caller's API key can be deleted;
    an id belonging to another key returns {"deleted": false} and changes nothing. id: the
    number returned by create_alert or list_alerts. Needs a Pro or Bot key (X-API-Key header
    of the MCP connection, or api_key).
- `explain_market`: AI risk-intelligence answer: ask e.g. 'Why did BTC drop 4%?' and get a
    concise grounded explanation (liquidation cascades, funding extremes, where
    the positions sit, next risk zone) computed from live derivatives data
    across 13 venues (CEXs, Hyperliquid and GMX).
- `get_accuracy`: [measured] The public accuracy audit: our open interest and funding vs Binance, Bybit, OKX and
    Hyperliquid's own endpoints, sampled every 10 min (diff %, snapshot age, 24h mean/max), plus how
    the modeled liquidation map scored against realized liquidations. Read this before trusting
    any number here with money.
- `get_api_key`: Get a free LiquidVision API key for this agent's owner, by email, without a browser.
    Works for a NEW email only (an existing account's key is never returned; its owner sees it
    at liquidvision.app/data). Use the key as X-API-Key on REST or on this MCP endpoint for
    300 req/min instead of the shared anonymous budget, and to upgrade later to Pro/Bot
    (history exports, webhook alerts). Ask the user for the email first; do not invent one.
- `get_arbitrum_perps`: Arbitrum perps board: GMX v2 open interest per coin and its share of every
    tracked venue, GMX funding next to the CEX median (8h basis), on-chain
    liquidations over 24h. Ask this for 'how is Arbitrum positioned vs CEXs'.
- `get_cash_flows`: Derivatives cash flow per exchange: net USD into/out of open interest
    over 1h/4h/24h windows, per core symbol. Positive = money flowing in.
- `get_cvd`: Cumulative volume delta split by trade size (retail <$10K, mid <$100K,
    large <$1M, whale >$1M). Whale-vs-retail divergence is the usual smart-money reading; buckets
    are per published row and only Binance aggregates taker orders, so compare buckets within one
    exchange (exchange=binance) rather than across venues.
- `get_footprint`: [measured] Footprint chart data: for each candle, taker BUY and taker SELL volume in
    USD and the trade count at each of 30 price levels, from the archived trade streams of
    Binance, Bybit, OKX, Bitget and Gate. Use it to see at which prices aggressive buyers
    or sellers were absorbed; for the net flow over time by trade size use get_cvd. symbol:
    BTCUSDT, ETHUSDT or SOLUSDT only. minutes: look-back window, 15 to 10080. step: candle
    size in minutes, 1 to 240.
- `get_funding_arbitrage`: [measured] Funding carry screener on REALIZED numbers: for each coin, the venue pair a desk
    would put on (short where funding is richest, long where it is cheapest) and what that pair
    actually earned from funding over the last 7 and 30 days from our hourly archive, annualized;
    positive_share_7d = share of the week's hours the pair was net positive (0.5 is a coin flip);
    current_spread_apr = the same pair right now; mark_gap_bps = short-venue mark over long-venue
    mark (positive = entry in your favour). Use get_funding_dispersion for the live spread across
    all venues. Everything is gross: before taker fees, basis moves and two margin accounts.
    Not financial advice.
- `get_funding_dispersion`: Coins ranked by how far funding disagrees ACROSS exchanges.

    For each coin: the spread in APR points between the venue charging the most
    and the one paying the most, plus which venue to hold the long on and which
    to hold the short on. Every leg is annualized with its own settlement cycle
    (1h / 4h / 8h), and the ranking uses the median rate over `window` minutes
    rather than the latest print, which is noisy for hourly contracts.
    
- `get_funding_history`: [measured] Funding rate over time for one contract, one row per venue per time bucket:
    ts (ms), exchange, funding_rate (per settlement interval, a fraction), mark_price and
    funding_hours (that contract's interval: 1, 4 or 8). Annualize as rate * 8760 / funding_hours.
    This is the LIVE predicted rate sampled over time; for the rates actually paid at each
    settlement (2 years back) use get_funding_settlements. symbol: BASEUSDT. minutes: 5 to 20160.
- `get_funding_rates`: Latest perpetual funding rates and mark prices for every tracked
    exchange/symbol pair. Positive rate = longs pay shorts.
- `get_funding_settlements`: Settled funding rates, one row per settlement, from Binance and Bybit
    history — up to 730 days for any pool coin (e.g. BTCUSDT). The backtest
    series; get_funding_history is the live 10-second archive since July 2026.
- `get_history`: [measured] Historical rows as CSV, for backtests. dataset: liquidations | funding_settlements
    (since 2024-09) | funding_hourly | open_interest_hourly | hl_positions (Hyperliquid whale
    positions with liquidation prices). start/end are ISO dates (UTC). Without a key or on the free
    tier only the last 24 hours are available; Pro: any 31-day window; Bot: full history. The key
    is read from the MCP connection's X-API-Key header, or pass api_key. limit caps rows here
    (max 5000); for bulk use download_url with the same key.
- `get_hl_account`: [measured] One Hyperliquid account by address: live positions (size, entry, mark,
    liquidation price, distance to liquidation, leverage, unrealized PnL), account value, and
    its archived position snapshots. History depth: 24 h free, 31 days Pro, everything since
    2026-09-27 on Bot (key from the MCP connection's X-API-Key header, or api_key).
- `get_hl_builder_markets`: [measured] Perp markets deployed on Hyperliquid by third parties (HIP-3 builder dexs):
    equity indices, single stocks, commodities and pre-IPO names such as xyz:SP500 or xyz:GOLD.
    For each dex: its markets (coin named dex:COIN), open interest in USD (one side), 24h
    volume, mark price, hourly funding and its APR. These are NOT in get_open_interest or
    get_funding_rates, which cover Hyperliquid's own crypto listing. Live from Hyperliquid,
    cached 2 minutes. No arguments.
- `get_hl_liquidation_map`: [measured, RISK AHEAD, Hyperliquid] REAL open positions on Hyperliquid binned by the
    liquidation price the exchange itself reports: the 10,000 largest accounts plus every account
    that traded since the reader started (~10,000 accounts, ~40-45% of venue open interest, stated
    in covered_long_pct/covered_short_pct). Not a model. Use this for Hyperliquid; use
    get_lighter_liquidation_map for Lighter and get_liquidation_map (modeled) for the CEXs.
    Returns long/short notional per bin, cumulative curves and the largest positions. range: 12h
    | 1d | 3d | 7d | max (±100%, recommended: large accounts run low leverage).
- `get_hl_whales`: [measured] Leveraged positions of the 10,000 largest Hyperliquid accounts with the
    exchange-reported liquidation price, closest to liquidation first (sort='value' = largest
    first). Filters: coin (BTC), side (long|short), min_usd, max_dist_pct. Each row carries the
    account address; pass it to get_hl_account. Snapshot age is in age_s.
- `get_lighter_liquidation_map`: [measured, RISK AHEAD, Lighter] REAL open positions on Lighter (zk perp DEX; crypto plus
    equity indices, stocks, forex, commodities) binned by Lighter's own liquidation price. Not a
    model. Use this for Lighter; get_hl_liquidation_map for Hyperliquid; get_liquidation_map
    (modeled) for the CEXs. Accounts are discovered from the public trade stream, so coverage
    (covered_long_pct/covered_short_pct of venue open interest) grows with time. Returns long/short
    notional per bin, cumulative curves and the largest positions. range: 12h | 1d | 3d | 7d | max.
- `get_lighter_whales`: [measured] Leveraged positions on Lighter with the exchange-reported liquidation price,
    closest to liquidation first (sort='value' = largest first). Filters: coin (BTC), side
    (long|short), min_usd, max_dist_pct. address is the Lighter account index, l1_address the
    wallet. Snapshot age is in age_s.
- `get_liquidation_cascades`: [measured, PAST] Liquidation CASCADES as discrete events: bursts of liquidations detected
    against each coin's own 7-day normal minute. Use it for "when did forced selling snowball and
    what did price do"; not for totals (get_liquidations_summary), raw orders (get_liquidations)
    or open positions at risk (*_liquidation_map). Each event: coin, which side broke, start, how
    long it ran, total and peak-minute USD, multiple of the coin's normal minute, the mark-price
    move during it and in the hour after. market_wide lists minutes when three or more unrelated
    coins cascaded together. hours: display window (baseline is always the last 7 days).
- `get_liquidation_heatmap`: [modeled, RISK AHEAD, CEX, over time] The same estimated CEX map as get_liquidation_map but
    as a time series: grid[t][b] is the estimated USD of leveraged positions with their
    liquidation price in price bin b at time cols[t] (ms), bins[b] the bin's centre price (240
    bins fitted to the traded range), price[t] the close. A level disappears once price trades
    through it. Call this only to see WHEN a cluster formed and whether it survived; for the
    current picture call get_liquidation_map (far smaller answer, split by leverage and exchange).
    The answer is large (about 35,000 numbers). symbol: BASEUSDT. exchange: all | binance | bybit
    | okx. range: 12h | 1d | 3d | 7d.
- `get_liquidation_map`: [modeled, RISK AHEAD, CEX, now] ESTIMATED open leveraged positions on Binance/Bybit/OKX per
    price bin at their liquidation price, from candles and open-interest deltas (the CEXs do not
    publish positions). Current snapshot only; for its evolution over time use
    get_liquidation_heatmap; for REAL positions use get_hl_liquidation_map (Hyperliquid) or
    get_lighter_liquidation_map (Lighter); for what already got liquidated use the PAST tools.
    Returns notional per bin split by leverage tier (5/10/20/25/50/100x) and by exchange, plus
    cumulative long/short curves from the current price outward. exchange: all | binance | bybit |
    okx. range: 12h | 1d | 3d | 7d. It ranks levels ("if price reaches this level, how much is
    there": top quarter of traded levels holds ~30-32% of liquidated USD, chance ~24%); it does NOT
    predict where price will go. Live scoring: get_accuracy.
- `get_liquidations`: [measured, PAST] Individual liquidation ORDERS that already happened (side, price, qty),
    newest first, at most `limit` rows (max 2000). This is the raw feed: use it when you need the
    orders themselves. For totals use get_liquidations_summary; for cascades as events use
    get_liquidation_cascades; for where OPEN positions would be liquidated use a *_liquidation_map
    tool. Market-wide, 500 rows is only a few minutes of a busy hour: pass `symbol` (BTCUSDT)
    and/or `min_usd` to look further back. side=long means a long position was liquidated.
- `get_liquidations_summary`: [measured, PAST] TOTALS of liquidations that already happened: rekt (USD liquidated in the
    last 1h/4h/12h/24h, split long/short), by_symbol and by_exchange over the last `minutes`, and
    series (30-minute buckets). The one to call for "how much was liquidated"; it does not return
    individual orders (get_liquidations) or events (get_liquidation_cascades), and says nothing
    about open positions (the *_liquidation_map tools). Totals are a floor: Binance and Bitget
    throttle their feeds. side=long means longs were liquidated. minutes: 1 to 1440.
- `get_long_short_ratio`: Latest global long/short account ratio per exchange/symbol.
- `get_market_brief`: Deterministic market brief for a perp symbol: 24h liquidations (totals,
    by exchange), current funding + 24h extremes per venue, OI by venue with
    1h/4h/24h changes, net position flows, modeled liquidation risk zones
    above/below price, and top-trader positioning. Free, no LLM involved —
    ideal input for your own reasoning.
- `get_microstructure`: Cross-venue order book microstructure for BTC, ETH and SOL.

    Per venue: spread in bps, immediately-executable depth in USD and the bid
    share of it, measured over a band narrow enough that every venue's stream
    captured it, each venue around its own mid. Also the basis - how far apart
    venues price the same asset - plus a per-minute spread history.

    Does NOT answer "what moves price 0.5%": the streams only carry the
    innermost levels, so that would be extrapolation, not measurement.
    
- `get_oi_board`: Per-venue open-interest ranking for a perp symbol (e.g. BTCUSDT): OI in
    coins and USD, market share %, 1h/4h/24h OI change % and USD flow, and
    OI / 24h-volume ratio per exchange, plus market totals.
- `get_open_interest`: Latest open interest (contracts and USD) per exchange/symbol.
- `get_open_interest_history`: [measured] Open interest over time for one contract, one row per venue per time
    bucket: ts (ms), exchange, oi (coins, one side), oi_usd. Use it to see how positioning
    built up or unwound; for the current snapshot with shares and 1h/4h/24h changes use
    get_oi_board, for every contract at once get_open_interest. symbol: BASEUSDT (BTCUSDT).
    minutes: look-back window, 5 to 20160 (14 days); snapped to a fixed set of windows.
- `get_orderbook_heatmap`: [measured] Resting limit orders over time on ONE exchange: cells of (time bucket, price
    bucket, quantity in coins) from archived order-book snapshots, with price_min, price_max,
    price_step and time_step (seconds) describing the grid. Shows where bid and ask walls
    stood and when they were pulled; not liquidations (see get_liquidation_heatmap for
    those) and not trades (get_footprint). exchange: binance | bybit | okx. symbol: BTCUSDT,
    ETHUSDT or SOLUSDT only. minutes: 1 to 1440.
- `get_positioning_regime`: Per-coin positioning regime from price direction crossed with open interest.

    price up + OI up = new longs; price up + OI down = short covering (a rally
    with no new buyers); price down + OI up = new shorts; price down + OI down =
    long flush. Returns a market summary (coins and net OI per regime) plus per
    coin the price change, OI change and current OI over the window.
    
- `get_spoofing`: Order-book wall lifecycle heuristic: large levels classified as
    active_wall / absorbed / pulled_wall / suspected_spoof based on whether
    trades executed into them before they vanished.
- `get_stocks`: Crypto-related equities (COIN, MSTR, miners) and spot BTC/ETH ETF quotes:
    price, day change %, range, volume. ~15-min delayed.
- `get_tokenized_stocks`: [measured] Tokenized stocks, indices, ETFs, commodities, FX, rates and pre-IPO names traded as
    PERPS on DEXs (Lighter and Hyperliquid builder markets): one row per underlying (NVDA, TSLA,
    S&P 500, Gold, EUR/USD, Anthropic...) with every venue's mark, open interest, 24 h volume,
    funding APR and the price gap between venues in bps. asset_class filters: equity |
    crypto_equity | etf | index | commodity | fx | rates | preipo. Use get_hl_builder_markets for
    the raw Hyperliquid HIP-3 list by dex.
- `get_token_unlocks`: Upcoming token unlock events for pool coins, nearest first: next unlock
    timestamp and token amount per public vesting schedule.
- `get_top_traders`: Top lead traders (OKX copy trading, public data): total PnL, win rate,
    AUM, copiers, live open positions (pair, side, leverage, entry, uPnL) and
    recently closed trades with realized PnL.
- `list_alerts`: The webhook alert subscriptions that belong to the caller's API key (read-only): id,
    type, url, filters (symbol, min_usd, x_normal, max_dist_pct) and delivery health:
    last_status (HTTP code or error of the last delivery), fails (consecutive failures; a
    subscription pauses itself at 20) and active. Call it to find the id for delete_alert or
    to check why alerts stopped arriving. Needs a Pro or Bot key, from the MCP connection's
    X-API-Key header or the api_key argument; without one it returns an error object, not
    an exception.
- `list_history_packages`: [measured] Monthly Parquet history packages for backtests: liquidations (11 venues), funding hourly and
    settlements, open interest hourly, Hyperliquid and Lighter positions with liquidation prices — one file per
    dataset per month since 2026-07 with rows, bytes and sha256. Each entry has `url` (download with the API key
    in X-API-Key) and `available` for the caller's tier: Pro = this month and the previous one, Bot = all,
    free = none (use get_history for the last 24 h).
- `list_markets`: [measured] What exists: every venue we track and, for each, the contracts with live open
    interest right now (BASEUSDT symbols), plus the top-100 coin pool. Call this first when unsure
    which symbol or exchange string another tool accepts.
