# Hyperliquid Market Data — OHLCV, Funding Rates & Positioning (Tessera) (remote · tesseralytics.dev)

Hyperliquid perp market data for LLMs: OHLCV, funding, open interest, positioning & forecasts.

- Trust score: 64/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `tesseralytics.dev`: 64/100 (this document), [markdown](https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics.md), [page](https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics)

## Channel facts

- Endpoint: `https://tesseralytics.dev/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 6 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1201 tokens (~200/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 96% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 40/100
  - Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http dev-tesseralytics-hyperliquid-data https://tesseralytics.dev/mcp
```

### Codex

```toml
[mcp_servers.dev-tesseralytics-hyperliquid-data]
url = "https://tesseralytics.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-tesseralytics-hyperliquid-data": {
      "type": "remote",
      "url": "https://tesseralytics.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-tesseralytics-hyperliquid-data --url https://tesseralytics.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-tesseralytics-hyperliquid-data:
    url: "https://tesseralytics.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "dev-tesseralytics-hyperliquid-data": {
      "type": "http",
      "url": "https://tesseralytics.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 64, +1)

- [functional] Schema quality: good → excellent

### 2026-08-02 (score 63, 0)

- [functional] Schema quality: excellent → good

### 2026-07-31 (score 63, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 61, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 60, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 59)

First indexed and scored.

## MCP tools (6)

### `query_cross_section` (~328 tokens)

Rank all coins for one day of a daily cross-section dataset (one row per coin per day, e.g. gold_positioning_funding_factors_1d) in a single call. Pass `order_by` (a numeric column), `day` (YYYY-MM-DD or "latest"), optional `top_n` (default 20), `descending` (default true), `columns`, and `coins`. Replaces fanning out read_dataset per coin. For a single coin's series use read_dataset.

Input parameters:

- `asset` (string, required): Dataset name. Must be a daily coin cross-section (one row per coin per `day`), e.g. `gold_positioning_funding_factors_1d`.
- `coins` (array): Optional: restrict to these coins. Coins outside the caller's plan are dropped. Omit to rank every coin the plan allows.
- `columns` (array): Extra columns to include per row (besides `coin`, `day`, and `order_by`). Omit to return every column.
- `day` (string, required): UTC day to rank, `YYYY-MM-DD`, or `"latest"` for the newest available day.
- `descending` (boolean): Sort direction. Defaults to true — highest `order_by` first.
- `order_by` (string, required): Numeric column to rank coins by, e.g. a `factor_*` column. Call `describe_dataset` to see the options.
- `top_n` (integer): Max coins to return (clamped to 1000). Defaults to 20.

Output parameters:

- `asset` (string)
- `coin_count` (integer): Number of coins ranked (rows returned).
- `columns` (array): Columns present in each returned row.
- `day` (string): The day actually ranked (resolved when `day="latest"`), `YYYY-MM-DD`.
- `descending` (boolean)
- `note` (string): Advisories: latest-day resolution, coins with no row that day (coverage varies by day), coins excluded for a null/non-numeric `order_by`, and any partitions skipped on a read error.
- `order_by` (string)
- `rows` (array): One object per coin, ranked; each includes `coin`, `day`, `order_by` and any requested `columns`.

### `describe_dataset` (~63 tokens)

Get the full data dictionary for one dataset: prose plus every column's type, nullability and plain-English meaning. Use before read_dataset to choose columns.

Input parameters:

- `asset` (string, required): Dataset name, e.g. `gold_positioning_funding_factors_1d`.

Output parameters:

- `cadence` (string): Granularity + partitioning, e.g. "1-minute bars, partitioned per (coin, month)".
- `category` (string): Presentation category, e.g. `raw-tiles` or `forecast-layer`.
- `column_count` (integer): Number of documented columns.
- `column_groups` (array): Columns, grouped for presentation, in schema order.
- `description` (string): Longer prose — the dictionary page header.
- `direct_answer` (string): 40-60 word keyword-first lead answer — the definitional "what is this" blurb, and the strongest AI-citation extraction target. Defaulted for forward/backward compatibility with snapshots predating th…
- `keywords` (array): Per-dataset discovery keywords (schema.org keywords on the web).
- `name` (string): Dataset name / asset key, e.g. `gold_ohlcv_1m`.
- `note` (string): Optional "how to use this" callout.
- `seo_title` (string): Keyword-first SEO title tag (web `<title>`). Defaulted so older snapshots without the field still deserialize.
- `summary` (string): One-line intuitive summary — the catalog card.
- `temporal`: Machine-readable timestamp/interval contract: what the label marks and how to join without leaking the future. Defaulted so snapshots predating the field still deserialize.
- `tier` (string): Display tier: `free` or `pro`. Re-derived from `policy.rs` on read, so it always matches actual entitlement regardless of the on-disk value.
- `title` (string): Human-friendly title, e.g. "Order-flow OHLCV (1-minute)".
- `use_case` (string): One-line "what you'd use it for" (buyer-intent) copy.

### `list_datasets` (~36 tokens)

List the available Tessera Analytics gold datasets with summaries and the plan (free/pro) each requires. Call first to discover what's available.

Output parameters:

- `datasets` (array)
- `generated_at` (string)
- `your_tier` (string): The caller's own plan (`free` or `pro`). Datasets whose `tier` is `pro` while this is `free` are visible for discovery but require an upgrade to read.

### `read_dataset` (~247 tokens)

Read actual data rows from one (asset, coin, month) partition. Defaults to the latest 200 rows. Pass `columns` to limit width and `limit` (max 1000) to limit rows — a partition can be tens of thousands of rows. For a whole partition use get_download_url.

Input parameters:

- `asset` (string, required): Dataset name, e.g. `gold_positioning_funding_factors_1d`.
- `coin` (string): Coin symbol, e.g. `BTC`. Omit for market-wide datasets (e.g. `gold_wallet_flow_1mo`) that have no coin dimension.
- `columns` (array): Columns to return. Strongly recommended — omitting returns every column, which is wide for some datasets. Use `describe_dataset` to see columns.
- `limit` (integer): Max rows to return (clamped to 1000). Defaults to the latest 200.
- `month` (string, required): Partition month, `YYYY-MM`.
- `order`: Which end of the partition to read. `latest` (default) returns the most recent rows — usually what you want for a "what's the current…" question.

Output parameters:

- `asset` (string)
- `coin` (string): Coin symbol; absent for market-wide datasets.
- `columns` (array): The columns actually returned, in order.
- `month` (string)
- `note` (string): Guidance when the result was capped, or other advisories.
- `row_count` (integer)
- `rows` (array): One JSON object per row.
- `total_rows_in_partition` (integer): Total rows in the partition (before the row cap / limit).
- `truncated` (boolean): True when `total_rows_in_partition` exceeds the rows returned.

### `list_partitions` (~275 tokens)

List a dataset's (coin, month) partitions the caller's plan can read. Defaults to a compact SUMMARY (coin/month counts, month range, totals) — pass summary=false to enumerate (paginated via limit/offset). Filter with `coin` and/or `month`. Use to choose a valid coin/month for read_dataset.

Input parameters:

- `asset` (string, required): Dataset name, e.g. `gold_funding_1h`.
- `coin` (string): Optional: only partitions for this coin, e.g. `BTC`.
- `limit` (integer): Full mode only (`summary=false`): max partitions to return (clamped to 1000). Defaults to 200.
- `month` (string): Optional: only partitions for this month, `YYYY-MM`.
- `offset` (integer): Full mode only (`summary=false`): partitions to skip, for pagination. Defaults to 0; pass the previous response's `next_offset` for the next page.
- `summary` (boolean): Return compact coverage stats (coin/month counts, range, totals) instead of every `(coin, month)` row. Defaults to **true** — the full cross-product is hundreds of rows for some datasets. Set `false`…

Output parameters:

- `asset` (string)
- `generated_at` (string)
- `next_offset` (integer): Full mode only: pass as `offset` to fetch the next page, or null when the listing is exhausted.
- `note` (string): Set when the dataset exists but requires a plan the caller doesn't have.
- `partitions` (array): Present in full mode (`summary=false`): this page of partitions. Empty in summary mode.
- `summary`: Present in summary mode (the default): compact coverage stats.
- `total_matching` (integer): Full mode only: total partitions matching the filter, before pagination.
- `your_tier` (string)

### `get_download_url` (~91 tokens)

Return a short-lived presigned URL to download the full parquet for one (asset, coin, month) partition. Use for bulk access beyond read_dataset's row cap.

Input parameters:

- `asset` (string, required)
- `coin` (string): Coin symbol, e.g. `BTC`. Omit for market-wide datasets that have no coin dimension.
- `month` (string, required): Partition month, `YYYY-MM`.

Output parameters:

- `expires_at` (string): RFC3339 expiry.
- `url` (string): Presigned Tigris URL for the full parquet partition.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 63
- 2026-08-01: 63
- 2026-07-31: 63
- 2026-07-30: 61
- 2026-07-29: 61
- 2026-07-28: 61
- 2026-07-27: 60
- 2026-07-26: 59

## Links

- Remote endpoint: https://tesseralytics.dev/mcp
- Authorisation metadata: https://tesseralytics.dev/.well-known/oauth-protected-resource/mcp
- Changelog RSS feed: https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics/changelog.json
- HTML version of this page: https://verifymcp.io/servers/dev-tesseralytics-hyperliquid-data/tesseralytics
