Skip to main content
Glama

Get a race contest's live race

get_race
Read-onlyIdempotent

A race contest's live race: every racing entry run live over the ranking phase's window as the recorder takes the bars, provisional and deciding nothing; the result is the official replay of the recorded window. kind: bars (bars-replay/v1, money USDC), forecast (below) or pump (pumpfun-replay/v2). ticks: bars on a bars or forecast race, minutes on a pump race (pumpfun-replay/v2: interval 1m, money lamports of SOL, no symbols or tape, crosscheck always null); wherever this says bar, a pump race's is a minute. status: none (no race), scheduled (before window.starts_at), racing, ended (the window is over, the official result not published yet) or official (published: get_leaderboard has it). sentence: one sentence with the time (UTC) of what comes next (expected_at); action: "No action needed.". window (starts_at, ends_at, bars) and interval; rules: requires_dev_profit (only a final entry whose latest dev grade netted above 0 after every fee races and is graded on the final: the dev gate), max_racers, lag_note_bars. symbols (each one's price_scale: a close c is c / 10^price_scale USDC) and tape: each bar's closes by seq, a bars race's only; head: the latest bar's seq. racers: each entry, its entrant's handle, its tags (house, baseline, you), its status (staged, racing, timeout, failed, finished, diverged), seq_done, behind (bars closed it has not answered yet) and its provisional marks at its latest point: equity, net (equity minus start_equity), return (a fraction to nine places) and trades; error: once it ended (timeout, failed), the runner's sentence for why it stopped, only to its entrant and admins (null for everyone else and while it runs); crosscheck: once the official result is published, whether its live race matched its official run: verdict matched, diverged (seq: the first batch seq whose reply differs) or unscored (no scored official run to compare), seq null but for diverged; null before, and until it is compared. series: every racer's points {seq, equity}; since: only the bars and points after that seq (pass the lowest latest seq you hold of a racer still running: a lagging racer adds points under seqs already closed). frame: the race as the live board reads it, ranked by equity, an exact tie to the earlier receipt; its footnote "Provisional live marks; the result is the official replay of the recorded window". Money is integers of unit (a bars race's USDC quote units, a pump race's lamports of SOL). While the competition holds its placements (marks_visible false) the racers list with no marks, no series and no frame. House and internal entries are left out here. A forecast race (kind forecast: a forecast contest the house races) scores each final entry's forecast on the chart's live reads over the scored window, from the deadline to the ranking phase's start (window.bars: its reads; interval_ms: the cadence); interval, rules, symbols and tape are null or empty, start_equity "0" and unit accuracy (an integer of 4 decimals of a percent: 645200 is 64.52%): each racer's equity and net are its accuracy, 1 minus its mean log score over the reads so far divided by forecast.floor_log_score, seq_done the reads scored, forecast its means (reads, log_score, hits, agreement, valid: a forecast that is not valid stands at 0 and did not finish); the frame is ranked by accuracy (the mean log score, a tie to the higher mean agreement); series every racer's marks by read seq; forecast holds places, cadence_minutes, reads, reads_total, floor_log_score and bar (the reward bar: the best house entry's mark at each read, when a reward needs a score above it). Its marks show to everyone, provisional: the result is the official grade on the recorded hourly reads. stream names the live stream (Server-Sent Events, HTTP only): call this tool again for what moved.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "slug": "<slug>"
    },
    "name": "get_race"
  }
}

Input Schema

NameRequiredDescriptionDefault
slugYesThe competition slug, e.g. chess-engine-01 (list_competitions lists them)
sinceNoOnly the bars and points after this seq (-1: from the first batch); default every one

Output Schema

NameRequiredDescriptionDefault
headYes
kindYes
tapeYes
frameYes
phaseYes
rulesYes
sinceYes
ticksYes
actionYes
racersYes
seriesYes
statusYes
streamYes
windowYes
symbolsYes
footnoteYes
forecastYes
intervalYes
sentenceYes
competitionYes
expected_atYes
start_equityYes
marks_visibleYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedOutput schema / properties / forecast
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "bar": {
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "equity": {
      +                "type": "string"
      +              },
      +              "seq": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "seq",
      +              "equity"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "cadence_minutes": {
      +          "type": "number"
      +        },
      +        "floor_log_score": {
      +          "type": "number"
      +        },
      +        "places": {
      +          "type": "number"
      +        },
      +        "reads": {
      +          "type": "number"
      +        },
      +        "reads_total": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "places",
      +        "cadence_minutes",
      +        "reads",
      +        "reads_total",
      +        "floor_log_score",
      +        "bar"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / kind
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "bars",
      +        "forecast",
      +        "pump"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / racers / items / properties / forecast
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "agreement": {
      +          "type": "number"
      +        },
      +        "hits": {
      +          "type": "number"
      +        },
      +        "log_score": {
      +          "type": "number"
      +        },
      +        "reads": {
      +          "type": "number"
      +        },
      +        "valid": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "reads",
      +        "log_score",
      +        "hits",
      +        "agreement",
      +        "valid"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / racers / items / required
      Previous value: -[
      -  "submission_id",
      -  "handle",
      -  "tags",
      -  "status",
      -  "seq_done",
      -  "behind",
      -  "equity",
      -  "net",
      -  "return",
      -  "trades",
      -  "error",
      -  "crosscheck"
      -]New value: +[
      +  "submission_id",
      +  "handle",
      +  "tags",
      +  "status",
      +  "seq_done",
      +  "behind",
      +  "equity",
      +  "net",
      +  "return",
      +  "trades",
      +  "error",
      +  "crosscheck",
      +  "forecast"
      +]
    • addedOutput schema / properties / ticks
      Added value: +{
      +  "enum": [
      +    "bars",
      +    "minutes"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "competition",
      -  "phase",
      -  "status",
      -  "sentence",
      -  "expected_at",
      -  "action",
      -  "window",
      -  "interval",
      -  "rules",
      -  "start_equity",
      -  "head",
      -  "since",
      -  "symbols",
      -  "tape",
      -  "marks_visible",
      -  "racers",
      -  "series",
      -  "frame",
      -  "footnote",
      -  "stream"
      -]New value: +[
      +  "competition",
      +  "kind",
      +  "phase",
      +  "status",
      +  "sentence",
      +  "expected_at",
      +  "action",
      +  "window",
      +  "interval",
      +  "ticks",
      +  "rules",
      +  "start_equity",
      +  "head",
      +  "since",
      +  "symbols",
      +  "tape",
      +  "marks_visible",
      +  "racers",
      +  "series",
      +  "frame",
      +  "forecast",
      +  "footnote",
      +  "stream"
      +]
  2. Changed3 schema fields changed
    • addedOutput schema / properties / racers / items / properties / crosscheck
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "properties": {
      +        "seq": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "verdict": {
      +          "enum": [
      +            "matched",
      +            "diverged",
      +            "unscored"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "verdict",
      +        "seq"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / racers / items / properties / error
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / racers / items / required
      Previous value: -[
      -  "submission_id",
      -  "handle",
      -  "tags",
      -  "status",
      -  "seq_done",
      -  "behind",
      -  "equity",
      -  "net",
      -  "return",
      -  "trades"
      -]New value: +[
      +  "submission_id",
      +  "handle",
      +  "tags",
      +  "status",
      +  "seq_done",
      +  "behind",
      +  "equity",
      +  "net",
      +  "return",
      +  "trades",
      +  "error",
      +  "crosscheck"
      +]
  3. First observed

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the read-only annotations, the description discloses important behavior: marks are provisional, house and internal entries are excluded, errors are visible only to the entrant and admins, crosscheck stays null until comparison, and marks disappear while placements are held. It also explains the SSE stream and that the caller must invoke the tool again for updates.

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

Conciseness2/5

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

The description is a very long, dense field glossary that spends most of its text explaining return values even though an output schema exists. It is organized by semicolon-separated topics, but it is not front-loaded or concise enough for easy scanning.

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

Completeness5/5

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

For a complex live-race tool, the description covers the relevant states, visibility rules, forecast variant, unit details, crosscheck semantics, and stream behavior. Given the output schema and annotations, an agent has enough context to interpret and call the tool correctly.

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

Parameters4/5

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

Schema coverage is complete, and the description adds meaningful operational meaning for `since`: pass the lowest latest seq held for a still-running racer because a lagging racer may add points under already-closed seqs. The `slug` parameter is left mostly to the schema, but the added `since` guidance is substantive.

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 identifies a specific resource: a race contest's live race, including entries, status, provisional marks, series, and frame. It also distinguishes the official result by pointing to get_leaderboard, though it does not explicitly contrast with other live-view siblings such as get_live.

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?

Usage is mostly implied through field behavior rather than stated as when-to-use guidance. It does give operational instructions for the `since` parameter and says to call the tool again for stream updates, but it never clearly states when an agent should choose get_race over get_live or get_result.

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.