Skip to main content
Glama

Tessera Analytics - Hyperliquid Market Intelligence

Get universe coverage

get_universe
Read-only

The coverage picture: the last complete interval, how many markets are in the universe for a scope, how much history sits behind them, and how densely it is populated. Pick bar (1d, the default, or 1h for completed hours) to describe completed days or completed hours. The range counts cover the last 7 days at bar: 1h (pass days, 1..30, to widen them) and the whole published range at bar: 1d. A compact SUMMARY by default — pass top_n (1..100, clamped) only if you need the per-market counts.

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": "get_universe"
  }
}

Input Schema

NameRequiredDescriptionDefault
barNo`1d` (the default) for completed UTC days, `1h` for completed UTC hours. An interval, at either grain, is stamped by the instant it **closes** — an hourly `…T09:00:00Z` is the hour that ended at 09:00.
dayNoThe day or hour to describe: `YYYY-MM-DD` or `latest` at `bar: 1d`, a completed `YYYY-MM-DDTHH:00:00Z` (the hour that *ended* there) or `latest` at `bar: 1h`.
daysNoHow many days of completed intervals the range counts cover, 1..30. Defaults to 7 at `bar: 1h` — the hourly source publishes one object per completed hour, so an unbounded inventory would open every hour ever published — and to the whole published range at `bar: 1d`, whose source is one object per month. The window the counts actually covered is `interval_start`..`interval_end`, and `notes` says when it was bounded.
scopeNo`crypto` (the default), `hip3`, or `all`.
top_nNoPer-market detail is off by default; passing a value (1..100, clamped) returns that many markets, listed by name, alongside the summary.

Output Schema

NameRequiredDescriptionDefault
barYesThe grain this answer was computed at: `1d` or `1h`.
as_ofYesThe interval the per-population counts describe.
coinsNoPer-market detail, only when requested. Markets are listed by name.
notesYes
scopeYes
sourceYes
row_countYesRows in scope over the counted range.
truncatedYesTrue when more markets exist than the detail list returned.
interval_endYesThe newest interval the counts below cover — the same interval `as_of` describes, since the counts are the history behind those populations.
published_atNo
bar_age_hoursYes
matched_countYesMarkets the counted range actually represents — the ones with at least one row in it, which is every market in `eligible_count` at the described interval.
visible_countYesMarkets in your plan's slice on the described interval, before any scope class is applied.
eligible_countYesDistinct markets in scope over the counted range.
interval_countYesDistinct intervals in the range the counts below cover.
interval_startYesThe oldest interval the counts below cover: the published range start, the caller's history floor when the plan clips it, or the start of the window `days` bounded them to. The response says which, in `notes`.
months_coveredYes
market_count_hip3YesMarkets with a deployer prefix on the described interval.
market_count_totalYesDistinct markets in scope over the counted range.
market_count_cryptoYesMarkets without a deployer prefix on the described interval, whatever scope was asked for.
coverage_from_manifestYesTrue when the interval range came from the published coverage manifest, false when it had to be read from the data or the object listing itself.
rows_per_market_intervalYes`row_count` divided by (intervals × markets) — how densely the counted range is populated. Below 1.0 means some markets are missing some intervals.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / bar_age_hours
      Added value: +{
      +  "format": "double",
      +  "type": "number"
      +}
    • addedOutput schema / properties / published_at
      Added value: +{
      +  "nullable": true,
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "bar",
      -  "source",
      -  "as_of",
      -  "scope",
      -  "interval_start",
      -  "interval_end",
      -  "interval_count",
      -  "months_covered",
      -  "visible_count",
      -  "eligible_count",
      -  "matched_count",
      -  "market_count_total",
      -  "market_count_crypto",
      -  "market_count_hip3",
      -  "row_count",
      -  "rows_per_market_interval",
      -  "coverage_from_manifest",
      -  "truncated",
      -  "notes"
      -]New value: +[
      +  "bar",
      +  "source",
      +  "as_of",
      +  "bar_age_hours",
      +  "scope",
      +  "interval_start",
      +  "interval_end",
      +  "interval_count",
      +  "months_covered",
      +  "visible_count",
      +  "eligible_count",
      +  "matched_count",
      +  "market_count_total",
      +  "market_count_crypto",
      +  "market_count_hip3",
      +  "row_count",
      +  "rows_per_market_interval",
      +  "coverage_from_manifest",
      +  "truncated",
      +  "notes"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / top_n / description
      Previous value: -"Per-market detail is off by default; passing a value (1..50) returns\nthat many markets, listed by name, alongside the summary."New value: +"Per-market detail is off by default; passing a value (1..100, clamped)\nreturns that many markets, listed by name, alongside the summary."
  3. Changed2 schema fields changed
    • changedInput schema / properties / bar / description
      Previous value: -"`1d` (the default) for completed UTC days, `1h` for the most recent\ncompleted UTC hour."New value: +"`1d` (the default) for completed UTC days, `1h` for completed UTC hours.\nAn interval, at either grain, is stamped by the instant it **closes** —\nan hourly `…T09:00:00Z` is the hour that ended at 09:00."
    • changedInput schema / properties / day / description
      Previous value: -"The day or hour to describe: `YYYY-MM-DD` or `latest` at `bar: 1d`, a\ncompleted `YYYY-MM-DDTHH:00:00Z` or `latest` at `bar: 1h`."New value: +"The day or hour to describe: `YYYY-MM-DD` or `latest` at `bar: 1d`, a\ncompleted `YYYY-MM-DDTHH:00:00Z` (the hour that *ended* there) or\n`latest` at `bar: 1h`."
  4. Changed9 schema fields changed
    • addedInput schema / properties / days
      Added value: +{
      +  "default": null,
      +  "description": "How many days of completed intervals the range counts cover, 1..30.\nDefaults to 7 at `bar: 1h` — the hourly source publishes one object per\ncompleted hour, so an unbounded inventory would open every hour ever\npublished — and to the whole published range at `bar: 1d`, whose source\nis one object per month. The window the counts actually covered is\n`interval_start`..`interval_end`, and `notes` says when it was bounded.",
      +  "format": "uint",
      +  "minimum": 0,
      +  "nullable": true,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / eligible_count / description
      Previous value: -"Distinct markets in scope over the whole range."New value: +"Distinct markets in scope over the counted range."
    • changedOutput schema / properties / interval_count / description
      Previous value: -"Distinct intervals in the range."New value: +"Distinct intervals in the range the counts below cover."
    • changedOutput schema / properties / interval_end / description
      Previous value: -"The newest complete interval — the one `latest` resolves to."New value: +"The newest interval the counts below cover — the same interval `as_of`\ndescribes, since the counts are the history behind those populations."
    • changedOutput schema / properties / interval_start / description
      Previous value: -"The oldest interval the counts below cover: the published range start, or\nthe caller's history floor when the plan clips it (the response says so\nin `notes`)."New value: +"The oldest interval the counts below cover: the published range start,\nthe caller's history floor when the plan clips it, or the start of the\nwindow `days` bounded them to. The response says which, in `notes`."
    • changedOutput schema / properties / market_count_total / description
      Previous value: -"Distinct markets in scope over the whole range."New value: +"Distinct markets in scope over the counted range."
    • changedOutput schema / properties / matched_count / description
      Previous value: -"Markets the range actually represents — the ones with at least one row in\nit, which is every market in `eligible_count` at the described interval."New value: +"Markets the counted range actually represents — the ones with at least one\nrow in it, which is every market in `eligible_count` at the described\ninterval."
    • changedOutput schema / properties / row_count / description
      Previous value: -"Rows in scope over the whole range."New value: +"Rows in scope over the counted range."
    • changedOutput schema / properties / rows_per_market_interval / description
      Previous value: -"`row_count` divided by (intervals × markets) — how densely the range is\npopulated. Below 1.0 means some markets are missing some intervals."New value: +"`row_count` divided by (intervals × markets) — how densely the counted\nrange is populated. Below 1.0 means some markets are missing some\nintervals."
  5. Changed26 schema fields changed
    • addedInput schema / properties / bar
      Added value: +{
      +  "default": null,
      +  "description": "`1d` (the default) for completed UTC days, `1h` for the most recent\ncompleted UTC hour.",
      +  "nullable": true,
      +  "type": "string"
      +}
    • changedInput schema / properties / day / description
      Previous value: -"The day to describe, `YYYY-MM-DD` or `latest`."New value: +"The day or hour to describe: `YYYY-MM-DD` or `latest` at `bar: 1d`, a\ncompleted `YYYY-MM-DDTHH:00:00Z` or `latest` at `bar: 1h`."
    • removedOutput schema / $defs / UniverseCoin / properties / days
      Removed value: -{
      -  "description": "How many days of the range this market appears on.",
      -  "format": "int64",
      -  "type": "integer"
      -}
    • addedOutput schema / $defs / UniverseCoin / properties / observations
      Added value: +{
      +  "description": "How many intervals of the range this market appears on — days at\n`bar: 1d`, completed hours at `bar: 1h`.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • changedOutput schema / $defs / UniverseCoin / required
      Previous value: -[
      -  "coin",
      -  "days"
      -]New value: +[
      +  "coin",
      +  "observations"
      +]
    • changedOutput schema / properties / as_of / description
      Previous value: -"The day the per-population counts describe."New value: +"The interval the per-population counts describe."
    • addedOutput schema / properties / bar
      Added value: +{
      +  "description": "The grain this answer was computed at: `1d` or `1h`.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / coin_count_crypto
      Removed value: -{
      -  "description": "Markets without a deployer prefix on the described day, whatever scope\nwas asked for.",
      -  "format": "int64",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / coin_count_hip3
      Removed value: -{
      -  "description": "Markets with a deployer prefix on the described day.",
      -  "format": "int64",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / coin_count_total
      Removed value: -{
      -  "description": "Distinct markets in scope over the whole range.",
      -  "format": "int64",
      -  "type": "integer"
      -}
    • changedOutput schema / properties / coverage_from_manifest / description
      Previous value: -"True when the day range came from the published coverage manifest,\nfalse when it had to be read from the data itself."New value: +"True when the interval range came from the published coverage manifest,\nfalse when it had to be read from the data or the object listing itself."
    • removedOutput schema / properties / day_count
      Removed value: -{
      -  "description": "Distinct days in the range.",
      -  "format": "int64",
      -  "type": "integer"
      -}
    • addedOutput schema / properties / eligible_count
      Added value: +{
      +  "description": "Distinct markets in scope over the whole range.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / interval_count
      Added value: +{
      +  "description": "Distinct intervals in the range.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / interval_end
      Added value: +{
      +  "description": "The newest complete interval — the one `latest` resolves to.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / interval_start
      Added value: +{
      +  "description": "The oldest interval the counts below cover: the published range start, or\nthe caller's history floor when the plan clips it (the response says so\nin `notes`).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / market_count_crypto
      Added value: +{
      +  "description": "Markets without a deployer prefix on the described interval, whatever\nscope was asked for.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / market_count_hip3
      Added value: +{
      +  "description": "Markets with a deployer prefix on the described interval.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / market_count_total
      Added value: +{
      +  "description": "Distinct markets in scope over the whole range.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / matched_count
      Added value: +{
      +  "description": "Markets the range actually represents — the ones with at least one row in\nit, which is every market in `eligible_count` at the described interval.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / max_complete_day
      Removed value: -{
      -  "description": "The newest complete day — the day `latest` resolves to.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / min_day
      Removed value: -{
      -  "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"
      -}
    • removedOutput schema / properties / rows_per_market_day
      Removed value: -{
      -  "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"
      -}
    • addedOutput schema / properties / rows_per_market_interval
      Added value: +{
      +  "description": "`row_count` divided by (intervals × markets) — how densely the range is\npopulated. Below 1.0 means some markets are missing some intervals.",
      +  "format": "double",
      +  "type": "number"
      +}
    • addedOutput schema / properties / visible_count
      Added value: +{
      +  "description": "Markets in your plan's slice on the described interval, before any scope\nclass is applied.",
      +  "format": "int64",
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "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"
      -]New value: +[
      +  "bar",
      +  "source",
      +  "as_of",
      +  "scope",
      +  "interval_start",
      +  "interval_end",
      +  "interval_count",
      +  "months_covered",
      +  "visible_count",
      +  "eligible_count",
      +  "matched_count",
      +  "market_count_total",
      +  "market_count_crypto",
      +  "market_count_hip3",
      +  "row_count",
      +  "rows_per_market_interval",
      +  "coverage_from_manifest",
      +  "truncated",
      +  "notes"
      +]
  6. Changed1 schema field changed
    • changedOutput schema / properties / min_day / description
      Previous value: -"The oldest day available."New value: +"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`)."
  7. Added

TDQS

A3.7/5.0
Behavior4/5

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

The readOnlyHint already establishes this as a safe read operation, and the description adds meaningful behavior: the default compact summary, the effect of top_n, clamping, and the fact that range counts cover 7 days at bar 1h but the whole published range at bar 1d. It does not contradict any annotation, though it does not cover response shape or pagination beyond the output schema.

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?

The description is front-loaded with the coverage concept and then moves through bar, days, and top_n without obvious filler. It is dense but appropriately sized for a five-parameter coverage tool; structure could be slightly clearer, but no sentence is wasted.

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

Completeness4/5

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

Given that an output schema exists and read-only annotations already state the safety profile, the description is largely complete: it explains the default summary behavior, widening the hourly window with days, and the optional per-market expansion. Scope is referenced conceptually but not expanded in the description, which is acceptable because the schema covers it.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented in the schema, including enum-like valid values for bar and scope. The description reinforces the defaults and the practical role of top_n, but most parameter meaning is already carried by the schema.

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

Purpose4/5

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

The description clearly states that this tool returns a coverage picture for the universe: the last complete interval, market counts for a scope, available history, and density. It distinguishes the 1d and 1h coverage modes, but it does not explicitly differentiate this from sibling tools such as screen_universe.

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

Usage Guidelines3/5

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

It gives useful in-tool guidance for choosing bar, days, and top_n, including when to request per-market detail versus the compact summary. However, it does not state when to use get_universe rather than an alternative sibling, nor does it give exclusions or prerequisites.

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.

Resources