Skip to main content
Glama

Agent Einstein — Crypto & Market Intelligence

Forecast Accuracy Track Record

get_forecast_accuracy
Read-onlyIdempotent

The measured, out-of-sample accuracy of Einstein's own price forecasts — MAPE and direction hit-rate per model, asset and horizon, scored after each forecast's horizon elapsed. Hit rates are computed over INDEPENDENT trials (one forecast per non-overlapping horizon window), so they are comparable to a 50% coin flip. Use this to decide how much weight to give a forecast.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
assetNoRestrict to one asset symbol, e.g. BTC. Omit for the whole board; the response lists every asset that has scored rows.
limitNoMaximum scored buckets (1-50).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsNoOne graded bucket per row.
assetNoAsset filter applied, or null for every asset.
objectNoAlways "forecast-accuracy".
reasonNoWhy the payload is absent, when `available` is false.
availableNoFalse when this call has no data — a snapshot that is not warm yet, a domain switched off, or an argument that was rejected. NOT an error, and NOT a statement about the market.
truncatedNoPresent only when a list was cut to `limit`.
assetsScoredNoAssets with a graded record.
totalBucketsNoScored asset/interval/model buckets in the whole record.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • changedOutput schema / properties / rows / items / properties / direction_hit_rate / description
      Previous value: -"Share of forecasts that called the direction correctly, 0-1."New value: +"Share of independent directional calls that got the direction right, 0-1. Neutral forecasts and ±0.5% scratches are excluded; null = no scored directional call yet."
    • changedOutput schema / properties / rows / items / properties / direction_samples / description
      Previous value: -"Graded forecasts behind the direction hit-rate — a DIFFERENT denominator from `samples`."New value: +"INDEPENDENT directional calls behind the hit-rate, one per non-overlapping horizon window — a DIFFERENT denominator from `samples`."
    • changedOutput schema / properties / rows / items / properties / first_sample_ts / description
      Previous value: -"Oldest graded sample."New value: +"Oldest graded sample (ms epoch)."
    • changedOutput schema / properties / rows / items / properties / independent_samples / description
      Previous value: -"Non-overlapping samples."New value: +"Independent trials of any kind (directional, abstained or scratched)."
    • changedOutput schema / properties / rows / items / properties / last_sample_ts / description
      Previous value: -"Newest graded sample."New value: +"Newest graded sample (ms epoch)."
    • changedOutput schema / properties / rows / items / properties / overlapping_direction_samples / description
      Previous value: -"Direction samples whose windows overlap."New value: +"Every verified directional forecast, overlaps included — audit only."
    • changedOutput schema / properties / rows / items / properties / overlapping_hit_rate / description
      Previous value: -"Hit rate over the overlapping samples."New value: +"Hit rate over the overlapping count with scratches counted as misses — audit only, not a track record."
    • changedOutput schema / properties / rows / items / properties / sample_basis / description
      Previous value: -"How the samples were counted."New value: +"\"independent\" = de-overlapped (the honest figure); \"overlapping\" = not de-overlapped yet, so the counts and hit rate are inflated."
    • changedOutput schema / properties / rows / items / properties / samples / description
      Previous value: -"Graded forecasts behind the error figures."New value: +"Every verified forecast behind the error figures (MAPE/RMSE), overlapping re-issues included — NOT a count of independent calls; never quote it beside a hit rate."
    • changedOutput schema / properties / rows / items / properties / scratch_samples / description
      Previous value: -"Samples graded from a scratch run."New value: +"Independent directional calls whose outcome landed inside the ±0.5% deadband; excluded from the hit rate."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "asset": {
      +      "description": "Asset filter applied, or null for every asset."
      +    },
      +    "assetsScored": {
      +      "description": "Assets with a graded record.",
      +      "items": {
      +        "description": "Asset symbol."
      +      },
      +      "type": "array"
      +    },
      +    "available": {
      +      "description": "False when this call has no data — a snapshot that is not warm yet, a domain switched off, or an argument that was rejected. NOT an error, and NOT a statement about the market.",
      +      "type": "boolean"
      +    },
      +    "object": {
      +      "description": "Always \"forecast-accuracy\"."
      +    },
      +    "reason": {
      +      "description": "Why the payload is absent, when `available` is false.",
      +      "type": "string"
      +    },
      +    "rows": {
      +      "description": "One graded bucket per row.",
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "asset": {
      +            "description": "Asset symbol."
      +          },
      +          "direction_hit_rate": {
      +            "description": "Share of forecasts that called the direction correctly, 0-1."
      +          },
      +          "direction_samples": {
      +            "description": "Graded forecasts behind the direction hit-rate — a DIFFERENT denominator from `samples`."
      +          },
      +          "first_sample_ts": {
      +            "description": "Oldest graded sample."
      +          },
      +          "independent_samples": {
      +            "description": "Non-overlapping samples."
      +          },
      +          "interval": {
      +            "description": "Candle interval."
      +          },
      +          "last_sample_ts": {
      +            "description": "Newest graded sample."
      +          },
      +          "mape_pct": {
      +            "description": "Mean absolute percentage error."
      +          },
      +          "model": {
      +            "description": "Forecast model (timesfm or kronos)."
      +          },
      +          "overlapping_direction_samples": {
      +            "description": "Direction samples whose windows overlap."
      +          },
      +          "overlapping_hit_rate": {
      +            "description": "Hit rate over the overlapping samples."
      +          },
      +          "rmse": {
      +            "description": "Root mean squared error."
      +          },
      +          "sample_basis": {
      +            "description": "How the samples were counted."
      +          },
      +          "samples": {
      +            "description": "Graded forecasts behind the error figures."
      +          },
      +          "scratch_samples": {
      +            "description": "Samples graded from a scratch run."
      +          }
      +        }
      +      },
      +      "type": "array"
      +    },
      +    "totalBuckets": {
      +      "description": "Scored asset/interval/model buckets in the whole record."
      +    },
      +    "truncated": {
      +      "additionalProperties": true,
      +      "description": "Present only when a list was cut to `limit`.",
      +      "properties": {
      +        "limit": {
      +          "description": "The cap that was applied.",
      +          "type": "number"
      +        },
      +        "originalLengths": {
      +          "additionalProperties": true,
      +          "description": "Field name → its full length before the cut."
      +        }
      +      }
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed3 schema fields changed
    • changedInput schema / properties / asset / description
      Previous value: -"Restrict to one asset. Omit for the full leaderboard."New value: +"Restrict to one asset symbol, e.g. BTC. Omit for the whole board; the response lists every asset that has scored rows."
    • removedInput schema / properties / asset / enum
      Removed value: -[
      -  "BTC",
      -  "ETH",
      -  "SOL",
      -  "BNB"
      -]
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 10,
      +  "description": "Maximum scored buckets (1-50).",
      +  "type": "number"
      +}
  4. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotent annotations, the description adds important behavioral context: results are out-of-sample, scored only after the horizon elapses, and hit rates are computed over independent trials comparable to a 50% coin flip. This prevents an agent from misinterpreting the metric and goes well beyond what annotations already declare.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core definition, and every sentence contributes either the method, the statistical interpretation, or the intended use. There is no filler or repetition of schema fields.

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 read-only tool with two optional parameters and an output schema, the description covers what is returned, how it is computed, and how to interpret it. Nothing an agent needs to invoke the tool correctly or judge its results is missing.

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 asset and limit are already fully documented in the input schema. The description adds no additional parameter-level semantics, so the baseline score of 3 applies.

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

Purpose5/5

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

The description names a specific resource ('Einstein's own price forecasts'), the exact metrics (MAPE and direction hit-rate), and how results are broken down (per model, asset, horizon). The phrase 'Einstein's own' also implicitly distinguishes it from sibling tools like get_analyst_accuracy or get_price_forecast, so an agent can tell them apart.

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

Usage Guidelines4/5

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

'Use this to decide how much weight to give a forecast' provides a clear decision-oriented use case. It does not explicitly name exclusions or alternatives, but for a read-only accuracy lookup the intended context is specific enough to guide selection.

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.