Hyperliquid Market Data — OHLCV, Funding Rates & Positioning (Tessera)
Hyperliquid perp market data for LLMs: OHLCV, funding, open interest, positioning & forecasts.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"hyperliquid-data": {
"url": "https://tesseralytics.dev/mcp"
}
}
}원격 엔드포인트
https://tesseralytics.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (9)
🟢list_fields
Every field the query tools accept, each with its meaning, unit and whether it can be missing. Open — no key needed. Call this before query_cross_section, screen_universe or query_series. Percentile, z-score and the top_pct/bottom_pct conditions rank within the markets your plan can see, so they need a wide slice.
입력 스키마
{
"type": "object",
"properties": {}
}출력 스키마
{
"type": "object",
"properties": {
"fields": {
"description": "Every field the query tools accept.",
"items": {
"$ref": "#/$defs/FieldDoc"
},
"type": "array"
},
"generated_at": {
"description": "When this vocabulary was produced.",
"type": "string"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"generated_at",
"fields",
"notes"
],
"$defs": {
"FieldDoc": {
"description": "One addressable field's documentation.\n\nServed verbatim by the MCP plane's `list_fields`; the schema derive is what\nkeeps the tool's advertised output shape and the served JSON the same thing.",
"properties": {
"kind": {
"description": "`stored` (a column in the daily source) or `factor` (computed at query\ntime over a trailing window, or from the end-day row).",
"type": "string"
},
"meaning": {
"description": "Plain-English meaning, authored in the semantic layer.",
"type": "string"
},
"name": {
"type": "string"
},
"nullable": {
"description": "Whether the value can be absent for a market on a day.",
"type": "boolean"
},
"type": {
"description": "The stored column's type (`float64`, `uint32`, `date32`, …); absent for\nquery-time factors, which are always floats.",
"nullable": true,
"type": "string"
},
"unit": {
"description": "The unit the values actually carry (`usd_notional`, `base_units`,\n`ratio`, `fraction`, `count`, `date`, …). A stored column name is never a\nsynonym for its unit — the OI a caller sees is USD notional where the\ncolumn is named for the notion.",
"type": "string"
}
},
"required": [
"name",
"meaning",
"unit",
"nullable",
"kind"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "FieldsResult"
}⚪funding_divergence(benchmark, coins, metric, scope, top_n, ...)
Rank markets by how far their funding has diverged from a benchmark (default ETH) over a trailing window. metric=rate compares mean daily funding; metric=cum_funding_spread compares funding accumulated over the window. Returns the most diverged in each direction. Markets with no funding reading are excluded from both lists. Descriptive only.
입력 스키마
{
"type": "object",
"properties": {
"benchmark": {
"default": null,
"description": "The market whose funding is the yardstick. Defaults to ETH.",
"nullable": true,
"type": "string"
},
"coins": {
"default": null,
"description": "Restrict to these markets.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"metric": {
"default": null,
"description": "`rate` (the default) ranks each market's mean daily funding minus the\nbenchmark's; `cum_funding_spread` ranks funding accumulated over the\nwindow, high minus low, minus the benchmark's.",
"nullable": true,
"type": "string"
},
"scope": {
"default": null,
"description": "`crypto` (the default), `hip3`, or `all`.",
"nullable": true,
"type": "string"
},
"top_n": {
"default": null,
"description": "Markets per ranked list, 1..50. Defaults to 10.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"window_days": {
"default": null,
"description": "Length of the trailing window in days, 1..365. Defaults to 7.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "DivergenceArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"type": "string"
},
"benchmark": {
"type": "string"
},
"benchmark_value": {
"description": "The benchmark's own value for the metric.",
"format": "double",
"type": "number"
},
"coin_count": {
"description": "How many markets had a funding reading in the window; markets without\none are excluded from both lists and from this count.",
"format": "int64",
"type": "integer"
},
"metric": {
"type": "string"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"scope": {
"type": "string"
},
"source": {
"type": "string"
},
"top_negative": {
"description": "The largest divergences toward the benchmark's opposite, most extreme\nfirst.",
"items": {
"$ref": "#/$defs/DivergenceRow"
},
"type": "array"
},
"top_positive": {
"description": "The largest divergences away from the benchmark, most extreme first.",
"items": {
"$ref": "#/$defs/DivergenceRow"
},
"type": "array"
},
"truncated": {
"type": "boolean"
},
"window_days": {
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"source",
"as_of",
"scope",
"coin_count",
"metric",
"benchmark",
"window_days",
"benchmark_value",
"top_positive",
"top_negative",
"truncated",
"notes"
],
"$defs": {
"DivergenceRow": {
"description": "One market's funding divergence from the benchmark.",
"properties": {
"coin": {
"type": "string"
},
"divergence": {
"description": "`value` minus the benchmark's.",
"format": "double",
"type": "number"
},
"value": {
"description": "This market's value for the requested metric over the window.",
"format": "double",
"type": "number"
}
},
"required": [
"coin",
"value",
"divergence"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "DivergenceResult"
}🟢get_universe(day, scope, top_n)
The coverage picture: the last complete day, how many markets are in the universe for a scope, how much history sits behind them, and how densely it is populated. A compact SUMMARY by default — pass top_n (1..50) only if you need the per-market day counts.
입력 스키마
{
"type": "object",
"properties": {
"day": {
"default": null,
"description": "The day to describe, `YYYY-MM-DD` or `latest`.",
"nullable": true,
"type": "string"
},
"scope": {
"default": null,
"description": "`crypto` (the default), `hip3`, or `all`.",
"nullable": true,
"type": "string"
},
"top_n": {
"default": null,
"description": "Per-market detail is off by default; passing a value (1..50) returns\nthat many markets, listed by name, alongside the summary.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "UniverseArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"description": "The day the per-population counts describe.",
"type": "string"
},
"coin_count_crypto": {
"description": "Markets without a deployer prefix on the described day, whatever scope\nwas asked for.",
"format": "int64",
"type": "integer"
},
"coin_count_hip3": {
"description": "Markets with a deployer prefix on the described day.",
"format": "int64",
"type": "integer"
},
"coin_count_total": {
"description": "Distinct markets in scope over the whole range.",
"format": "int64",
"type": "integer"
},
"coins": {
"description": "Per-market detail, only when requested. Markets are listed by name.",
"items": {
"$ref": "#/$defs/UniverseCoin"
},
"nullable": true,
"type": "array"
},
"coverage_from_manifest": {
"description": "True when the day range came from the published coverage manifest,\nfalse when it had to be read from the data itself.",
"type": "boolean"
},
"day_count": {
"description": "Distinct days in the range.",
"format": "int64",
"type": "integer"
},
"max_complete_day": {
"description": "The newest complete day — the day `latest` resolves to.",
"type": "string"
},
"min_day": {
"description": "The oldest day the counts below cover: the published range start, or the\ncaller's history floor when the plan clips it (the response says so in\n`notes`).",
"type": "string"
},
"months_covered": {
"format": "int64",
"type": "integer"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"row_count": {
"description": "Rows in scope over the whole range.",
"format": "int64",
"type": "integer"
},
"rows_per_market_day": {
"description": "`row_count` divided by (days × markets) — how densely the range is\npopulated. Below 1.0 means some markets are missing some days.",
"format": "double",
"type": "number"
},
"scope": {
"type": "string"
},
"source": {
"type": "string"
},
"truncated": {
"description": "True when more markets exist than the detail list returned.",
"type": "boolean"
}
},
"required": [
"source",
"as_of",
"scope",
"min_day",
"max_complete_day",
"day_count",
"months_covered",
"coin_count_total",
"coin_count_crypto",
"coin_count_hip3",
"row_count",
"rows_per_market_day",
"coverage_from_manifest",
"truncated",
"notes"
],
"$defs": {
"UniverseCoin": {
"description": "One market's coverage within the described range.",
"properties": {
"coin": {
"type": "string"
},
"days": {
"description": "How many days of the range this market appears on.",
"format": "int64",
"type": "integer"
}
},
"required": [
"coin",
"days"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "UniverseResult"
}⚪screen_universe(coins, columns, conditions, day, descending, ...)
Screen the whole market on ONE completed day with several conditions ANDed together. Conditions use op >, <, >=, <=, between, top_pct or bottom_pct; top_pct/bottom_pct are deciles of the markets you can see. Answers 'top-decile funding with bottom-decile open-interest change' and 'open interest rising faster than volume'. A market that does not report a field never satisfies a condition on it.
입력 스키마
{
"type": "object",
"properties": {
"coins": {
"default": null,
"description": "Restrict to these markets.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"columns": {
"default": null,
"description": "Fields to return per market, from `list_fields`.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"conditions": {
"description": "Conditions, all of which must hold. A market that does not report a\nfield never satisfies a condition on it.",
"items": {
"$ref": "#/$defs/ConditionArg"
},
"type": "array"
},
"day": {
"default": null,
"description": "The day to screen, `YYYY-MM-DD` or `latest`.",
"nullable": true,
"type": "string"
},
"descending": {
"default": null,
"description": "Rank largest first (the default).",
"nullable": true,
"type": "boolean"
},
"max_results": {
"default": null,
"description": "How many markets to return, 1..50. Defaults to 25.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"min_usd_volume_7d_avg": {
"default": null,
"description": "Drop markets below this average daily traded notional over the window.",
"format": "double",
"nullable": true,
"type": "number"
},
"order_by": {
"default": null,
"description": "The field to rank the matches by. Defaults to the day's traded notional.",
"nullable": true,
"type": "string"
},
"scope": {
"default": null,
"description": "`crypto` (the default), `hip3`, or `all`.",
"nullable": true,
"type": "string"
}
},
"required": [
"conditions"
],
"$defs": {
"ConditionArg": {
"description": "One condition of a screen.",
"properties": {
"column": {
"description": "The field to test, from `list_fields`.",
"type": "string"
},
"op": {
"description": "One of `>`, `<`, `>=`, `<=`, `between`, `top_pct`, `bottom_pct`.\n`top_pct`/`bottom_pct` keep the best/worst `value` percent of the\nmarkets you can see by that field.",
"type": "string"
},
"value": {
"description": "The threshold. For `top_pct`/`bottom_pct` this is a percentage, e.g. 10\nfor the top decile.",
"format": "double",
"type": "number"
},
"value2": {
"default": null,
"description": "Required for `between`: the upper bound, inclusive.",
"format": "double",
"nullable": true,
"type": "number"
}
},
"required": [
"column",
"op",
"value"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ScreenArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"type": "string"
},
"coin_count": {
"description": "The number of markets in your visible slice on that day — the\ndenominator the percentage conditions and the floor were measured\nagainst.",
"format": "int64",
"type": "integer"
},
"matched_count": {
"description": "How many markets met every condition.",
"format": "int64",
"type": "integer"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"row_count": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"rows": {
"items": true,
"type": "array"
},
"scope": {
"type": "string"
},
"source": {
"type": "string"
},
"truncated": {
"type": "boolean"
}
},
"required": [
"source",
"as_of",
"scope",
"coin_count",
"matched_count",
"row_count",
"truncated",
"rows",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ScreenResult"
}🟢list_datasets
List the downloadable datasets: one-line summary, the plan required, and the month range available. Open — no key needed. Then use describe_dataset for one dataset's columns, or list_fields for the fields the query tools accept.
입력 스키마
{
"type": "object",
"properties": {}
}출력 스키마
{
"type": "object",
"properties": {
"datasets": {
"items": {
"$ref": "#/$defs/CatalogEntry"
},
"type": "array"
},
"generated_at": {
"description": "When this catalog was produced.",
"type": "string"
},
"your_tier": {
"description": "The caller's own plan (`free`, `pro` or `anonymous`).",
"type": "string"
}
},
"required": [
"your_tier",
"generated_at",
"datasets"
],
"$defs": {
"CatalogEntry": {
"description": "One dataset in the public catalog.",
"properties": {
"cadence": {
"type": "string"
},
"category": {
"type": "string"
},
"column_count": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"months": {
"description": "The published month range, `[earliest, latest]`. Absent when the catalog\nlists no months for it.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"name": {
"type": "string"
},
"summary": {
"type": "string"
},
"tier": {
"description": "`free` or `pro` — the plan required to read this dataset's data.",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"name",
"title",
"category",
"cadence",
"summary",
"tier",
"column_count"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "DatasetsResult"
}🟢query_cross_section(coins, columns, day, descending, min_usd_volume_7d_avg, ...)
Rank the whole market on ONE completed day: pick columns, an order_by field and top_n. Answers 'top markets by funding / open interest / returns on the latest day' and 'what percentile is BTC on open interest'. day defaults to the last complete day; scope defaults to crypto (HIP-3 markets track an underlying that closes, so their flow is not comparable); stat=percentile|zscore ranks within your visible markets; window_days recomputes the trailing-window fields; min_usd_volume_7d_avg keeps dust out of the ranking. Field names come from list_fields — never guess them, they are snake_case compound names; for a cut ('top decile by X') use screen_universe.
입력 스키마
{
"type": "object",
"properties": {
"coins": {
"default": null,
"description": "Restrict to these markets. A market outside your plan's coverage is\nignored rather than widening the answer.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"columns": {
"default": null,
"description": "Fields to return per market, from `list_fields`. `coin` is always\nincluded. Defaults to price, traded notional and the day's return.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"day": {
"default": null,
"description": "The day to rank, `YYYY-MM-DD`, or `latest` (the default: the most recent\ncomplete day).",
"nullable": true,
"type": "string"
},
"descending": {
"default": null,
"description": "Rank largest first (the default). Set false for the smallest.",
"nullable": true,
"type": "boolean"
},
"min_usd_volume_7d_avg": {
"default": null,
"description": "Drop markets whose average daily traded notional over the window is\nbelow this value, so dust cannot top a ranking.",
"format": "double",
"nullable": true,
"type": "number"
},
"order_by": {
"default": null,
"description": "The field to rank by. Need not appear in `columns`. Defaults to the\nday's traded notional.",
"nullable": true,
"type": "string"
},
"scope": {
"default": null,
"description": "`crypto` (the default), `hip3`, or `all`. Restricted markets track an\nunderlying that closes, so their flow is not comparable on a weekend.",
"nullable": true,
"type": "string"
},
"stat": {
"default": null,
"description": "`raw` (the default), `percentile`, or `zscore`. Percentile and z-score\nare ranked **within the markets your plan can see**, so they need a\nslice of at least four markets.",
"nullable": true,
"type": "string"
},
"top_n": {
"default": null,
"description": "How many markets to return, 1..50. Defaults to 20.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
},
"window_days": {
"default": null,
"description": "Recompute the trailing-window fields over this many days, 1..365\n(default 7). The response always states the window it used.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "CrossSectionArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"description": "The UTC day the answer describes.",
"type": "string"
},
"coin_count": {
"description": "The number of markets in your visible slice on that day — the\ndenominator every statistic and floor below is measured against.",
"format": "int64",
"type": "integer"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"ranked_count": {
"description": "How many markets had a value for the ranked field and passed the floor.",
"format": "int64",
"type": "integer"
},
"row_count": {
"description": "How many markets are in `rows`.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"rows": {
"items": true,
"type": "array"
},
"scope": {
"description": "The market population the ranking ran over.",
"type": "string"
},
"source": {
"description": "`tessera_daily` — the answer is from completed days, not the live market.",
"type": "string"
},
"stat": {
"description": "The ranking treatment actually applied: `raw`, `percentile` or\n`zscore`.",
"type": "string"
},
"truncated": {
"description": "True when `ranked_count` exceeds `row_count`.",
"type": "boolean"
}
},
"required": [
"source",
"as_of",
"scope",
"coin_count",
"ranked_count",
"row_count",
"truncated",
"stat",
"rows",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "CrossSectionResult"
}🟢query_series(coins, columns, ending_day, scope, window_days)
The daily series for one market or a few (max 10): one row per market per day over a trailing window, oldest first. Answers 'is this move backed by real flow' and 'how has positioning built up'. ending_day defaults to the last complete day. The whole answer is capped, so markets times window_days must stay inside the row cap; the response states the window it used.
입력 스키마
{
"type": "object",
"properties": {
"coins": {
"description": "The markets to return, 1..10.",
"items": {
"type": "string"
},
"type": "array"
},
"columns": {
"default": null,
"description": "Fields to return per row, from `list_fields`. `day` and `coin` are\nalways included.",
"items": {
"type": "string"
},
"nullable": true,
"type": "array"
},
"ending_day": {
"default": null,
"description": "The last day to include, `YYYY-MM-DD` or `latest`.",
"nullable": true,
"type": "string"
},
"scope": {
"default": null,
"description": "`crypto` (the default), `hip3`, or `all`.",
"nullable": true,
"type": "string"
},
"window_days": {
"default": null,
"description": "Length of the trailing window in days, 1..365. Defaults to 7.",
"format": "uint",
"minimum": 0,
"nullable": true,
"type": "integer"
}
},
"required": [
"coins"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SeriesArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"description": "The last day in the series.",
"type": "string"
},
"coin_count": {
"description": "The markets the series covers.",
"format": "int64",
"type": "integer"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"row_count": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"rows": {
"items": true,
"type": "array"
},
"scope": {
"type": "string"
},
"source": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"window_days": {
"description": "The window the trailing fields were computed over.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"source",
"as_of",
"scope",
"window_days",
"coin_count",
"row_count",
"truncated",
"rows",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SeriesResult"
}⚪live_market(coins)
What is happening right now: mark price, current hourly funding, open interest, 24-hour traded notional and premium for up to 25 markets, taken straight from the venue's public API and stamped with the moment it was read. Use this for 'now' questions; the daily tools answer completed days only.
입력 스키마
{
"type": "object",
"properties": {
"coins": {
"description": "The markets to snapshot, 1..25.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"coins"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "LiveMarketArgs"
}출력 스키마
{
"type": "object",
"properties": {
"as_of": {
"description": "When the snapshot was taken, UTC.",
"type": "string"
},
"coin_count": {
"format": "uint",
"minimum": 0,
"type": "integer"
},
"notes": {
"items": {
"type": "string"
},
"type": "array"
},
"rows": {
"items": {
"$ref": "#/$defs/LiveMarketRow"
},
"type": "array"
},
"source": {
"description": "`hyperliquid_rest` — this is the live market, not the completed-day data.",
"type": "string"
}
},
"required": [
"source",
"as_of",
"coin_count",
"rows",
"notes"
],
"$defs": {
"LiveMarketRow": {
"description": "Snapshot of one market, as of the upstream fetch.",
"properties": {
"coin": {
"type": "string"
},
"day_volume_usd": {
"format": "double",
"nullable": true,
"type": "number"
},
"funding_rate": {
"description": "Current hourly funding rate.",
"format": "double",
"nullable": true,
"type": "number"
},
"mark_px": {
"format": "double",
"nullable": true,
"type": "number"
},
"mid_px": {
"format": "double",
"nullable": true,
"type": "number"
},
"oi_usd": {
"description": "`open_interest * mark_px` when both are present.",
"format": "double",
"nullable": true,
"type": "number"
},
"open_interest": {
"description": "Open interest in base units, as reported upstream.",
"format": "double",
"nullable": true,
"type": "number"
},
"oracle_px": {
"format": "double",
"nullable": true,
"type": "number"
},
"premium": {
"format": "double",
"nullable": true,
"type": "number"
}
},
"required": [
"coin"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "LiveMarketResult"
}🟢describe_dataset(asset)
The full dictionary for ONE downloadable dataset: description plus every column's type, nullability and plain-English meaning. Pass a name from list_datasets. Open — no key needed. For the fields the query tools accept, use list_fields.
입력 스키마
{
"type": "object",
"properties": {
"asset": {
"description": "Dataset name, as returned by `list_datasets`.",
"type": "string"
}
},
"required": [
"asset"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Which dataset's dictionary to return.",
"title": "DatasetArg"
}출력 스키마
{
"type": "object",
"properties": {
"cadence": {
"description": "How frequently the data is sampled, e.g. \"1-minute bars\".",
"type": "string"
},
"category": {
"description": "Presentation category, e.g. `raw-tiles` or `forecast-layer`.",
"type": "string"
},
"column_count": {
"description": "Number of documented columns.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"column_groups": {
"description": "Columns, grouped for presentation, in schema order.",
"items": {
"$ref": "#/$defs/ColumnGroup"
},
"type": "array"
},
"description": {
"description": "Longer prose — the dictionary page header.",
"type": "string"
},
"direct_answer": {
"default": "",
"description": "40-60 word keyword-first lead answer — the definitional \"what is this\"\nblurb, and the strongest AI-citation extraction target. Defaulted for\nforward/backward compatibility with snapshots predating the field.",
"type": "string"
},
"keywords": {
"default": [],
"description": "Per-dataset discovery keywords (schema.org keywords on the web).",
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"description": "Dataset name, exactly as `list_datasets` reports it.",
"type": "string"
},
"note": {
"description": "Optional \"how to use this\" callout.",
"nullable": true,
"type": "string"
},
"seo_title": {
"default": "",
"description": "Keyword-first SEO title tag (web `<title>`). Defaulted so older snapshots\nwithout the field still deserialize.",
"type": "string"
},
"summary": {
"description": "One-line intuitive summary — the catalog card.",
"type": "string"
},
"temporal": {
"$ref": "#/$defs/Temporal",
"default": {
"convention": "",
"grain": "",
"label": "",
"timestamp_field": ""
},
"description": "Machine-readable timestamp/interval contract: what the label marks and\nhow to join without leaking the future. Defaulted so snapshots predating\nthe field still deserialize."
},
"tier": {
"description": "Display tier: `free` or `pro`. Re-derived from `policy.rs` on read, so it\nalways matches actual entitlement regardless of the on-disk value.",
"type": "string"
},
"title": {
"description": "Human-friendly title, e.g. \"Order-flow OHLCV (1-minute)\".",
"type": "string"
},
"use_case": {
"default": "",
"description": "One-line \"what you'd use it for\" (buyer-intent) copy.",
"type": "string"
}
},
"required": [
"name",
"title",
"category",
"cadence",
"summary",
"description",
"tier",
"column_count",
"column_groups"
],
"$defs": {
"ColumnDoc": {
"description": "One column's dictionary entry: the engineering facts (type/nullability/how\nit's computed) plus the plain-English `meaning` (what it is and why you'd care).",
"properties": {
"description": {
"description": "Technical description — *how* the column is computed. May be absent.",
"nullable": true,
"type": "string"
},
"meaning": {
"description": "Plain-English meaning — *what* the column is and why it's useful.",
"type": "string"
},
"name": {
"description": "Column name.",
"type": "string"
},
"nullable": {
"description": "Whether the column may be null.",
"type": "boolean"
},
"type": {
"description": "Arrow type string, e.g. `float64`, `timestamp[us]`.",
"type": "string"
}
},
"required": [
"name",
"type",
"nullable",
"meaning"
],
"type": "object"
},
"ColumnGroup": {
"description": "A labelled section of columns within a dataset.",
"properties": {
"columns": {
"items": {
"$ref": "#/$defs/ColumnDoc"
},
"type": "array"
},
"label": {
"description": "Section heading, or `null` for a single unlabelled group.",
"nullable": true,
"type": "string"
},
"meaning": {
"description": "Group-level plain-English meaning, used for large column families (e.g.\nthe residualized factor backbone) where a per-column line adds no value.",
"nullable": true,
"type": "string"
},
"window": {
"default": null,
"description": "Temporal window of this group's fields relative to the timestamp label:\none of `point_in_time`, `backward`, `forward`, `contemporaneous`,\n`static`. Null when the dataset-level `temporal.convention` covers them.",
"nullable": true,
"type": "string"
}
},
"required": [
"columns"
],
"type": "object"
},
"Temporal": {
"description": "The dataset's temporal contract — what the timestamp column marks and the\nlook-ahead-safety rules for joining. Mirror of the resolver's `temporal`\nblock (`semantic/__init__.py`).",
"properties": {
"convention": {
"description": "One-paragraph plain-English join / look-ahead contract.",
"type": "string"
},
"grain": {
"description": "Observation width, e.g. `1m`, `1h`, `1d`, `1mo`.",
"type": "string"
},
"label": {
"description": "What the label marks: one of `interval_start`, `interval_end`,\n`snapshot`, `forecast_target`.",
"type": "string"
},
"timestamp_field": {
"description": "Which column carries the label, e.g. `time`, `day`, `month_start`.",
"type": "string"
}
},
"required": [
"grain",
"timestamp_field",
"label",
"convention"
],
"type": "object"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "One dataset's catalog entry + full data dictionary.",
"title": "DatasetDoc"
}커뮤니티
증거