Skip to main content
Glama

Crypto Data & Market Analysis Agent

get_market_history

Read-onlyIdempotent

Where the current reading sits in its own recent distribution, from a series captured every ~10 minutes: funding, open interest, Fear & Greed and BTC dominance, each as current, median, min, max and percentile over the window. This is the one question a snapshot cannot answer — "is funding high right now?" has no absolute answer, only one relative to where it has been. A percentile near 0 means the reading is at the low end of the window, near 100 the high end. Check "samples" before trusting the percentile: a window with few measurements is not a distribution. Window defaults to 24 hours, maximum 168. Funding is in percent per 8 hours.

Input Schema

NameRequiredDescriptionDefault
hoursNoHow many hours back the window covers. Defaults to 24, maximum 168.

Output Schema

NameRequiredDescriptionDefault
toYesNewest snapshot in the window; null when there is none.
fromYesOldest snapshot in the window; null when there is none.
fundingNoCurrent reading placed in its own distribution over the window.
samplesYesSnapshots in the window, captured every ~10 minutes.
fearGreedNoCurrent reading placed in its own distribution over the window.
windowHoursYes
btcDominanceNoCurrent reading placed in its own distribution over the window.
openInterestUsdNoCurrent reading placed in its own distribution over the window.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / from / description
      Added value: +"Oldest snapshot in the window; null when there is none."
    • changedOutput schema / properties / from / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / to / description
      Added value: +"Newest snapshot in the window; null when there is none."
    • changedOutput schema / properties / to / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  2. Changed4 schema fields changed
    • addedOutput schema / properties / btcDominance / properties / samples
      Added value: +{
      +  "description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / fearGreed / properties / samples
      Added value: +{
      +  "description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / funding / properties / samples
      Added value: +{
      +  "description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / openInterestUsd / properties / samples
      Added value: +{
      +  "description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
      +  "type": "number"
      +}
  3. Changed20 schema fields changed
    • changedOutput schema / properties / btcDominance / properties / current / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / btcDominance / properties / max / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / btcDominance / properties / median / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / btcDominance / properties / min / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / btcDominance / properties / percentile / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / fearGreed / properties / current / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / fearGreed / properties / max / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / fearGreed / properties / median / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / fearGreed / properties / min / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / fearGreed / properties / percentile / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / funding / properties / current / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / funding / properties / max / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / funding / properties / median / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / funding / properties / min / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / funding / properties / percentile / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / openInterestUsd / properties / current / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / openInterestUsd / properties / max / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / openInterestUsd / properties / median / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / openInterestUsd / properties / min / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / openInterestUsd / properties / percentile / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "btcDominance": {
      +      "description": "Current reading placed in its own distribution over the window.",
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "max": {
      +          "type": "number"
      +        },
      +        "median": {
      +          "type": "number"
      +        },
      +        "min": {
      +          "type": "number"
      +        },
      +        "percentile": {
      +          "description": "0-100. Where `current` sits among the samples.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "current",
      +        "median",
      +        "min",
      +        "max",
      +        "percentile"
      +      ],
      +      "type": "object"
      +    },
      +    "fearGreed": {
      +      "description": "Current reading placed in its own distribution over the window.",
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "max": {
      +          "type": "number"
      +        },
      +        "median": {
      +          "type": "number"
      +        },
      +        "min": {
      +          "type": "number"
      +        },
      +        "percentile": {
      +          "description": "0-100. Where `current` sits among the samples.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "current",
      +        "median",
      +        "min",
      +        "max",
      +        "percentile"
      +      ],
      +      "type": "object"
      +    },
      +    "from": {
      +      "type": "string"
      +    },
      +    "funding": {
      +      "description": "Current reading placed in its own distribution over the window.",
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "max": {
      +          "type": "number"
      +        },
      +        "median": {
      +          "type": "number"
      +        },
      +        "min": {
      +          "type": "number"
      +        },
      +        "percentile": {
      +          "description": "0-100. Where `current` sits among the samples.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "current",
      +        "median",
      +        "min",
      +        "max",
      +        "percentile"
      +      ],
      +      "type": "object"
      +    },
      +    "openInterestUsd": {
      +      "description": "Current reading placed in its own distribution over the window.",
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "max": {
      +          "type": "number"
      +        },
      +        "median": {
      +          "type": "number"
      +        },
      +        "min": {
      +          "type": "number"
      +        },
      +        "percentile": {
      +          "description": "0-100. Where `current` sits among the samples.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "current",
      +        "median",
      +        "min",
      +        "max",
      +        "percentile"
      +      ],
      +      "type": "object"
      +    },
      +    "samples": {
      +      "description": "Snapshots in the window, captured every ~10 minutes.",
      +      "type": "number"
      +    },
      +    "to": {
      +      "type": "string"
      +    },
      +    "windowHours": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "windowHours",
      +    "samples",
      +    "from",
      +    "to"
      +  ],
      +  "type": "object"
      +}
  5. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description still adds substantive behavior: ~10-minute sampling cadence, default 24h and hard 168h cap, percentile interpretation (0 = low end, 100 = high end), the sparse-sample caveat, and funding's unit (percent per 8 hours). That is far more than the annotations convey.

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 purpose is front-loaded in the first sentence and the follow-ups on percentile meaning, sample-count caution and funding units each earn their place. The rhetorical framing ("'is funding high right now?' has no absolute answer") is slightly discursive but motivates the tool rather than wasting space.

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?

An output schema exists, so return fields need not be enumerated, yet the description still flags the key field to sanity-check ("samples") and gives units and window bounds. For a one-parameter read tool, nothing an agent needs to call it correctly 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 coverage is 100% and the single "hours" parameter is fully documented in the schema; the description only repeats the default of 24 and maximum of 168. With one well-documented parameter, baseline 3 applies — no additional syntax or format detail is added.

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?

States a specific verb+resource: returns each metric's current, median, min, max and percentile across a sampled window for funding, open interest, Fear & Greed and BTC dominance. It explicitly contrasts itself with snapshot-style siblings ("the one question a snapshot cannot answer"), so an agent can tell it apart from get_derivatives or get_fear_greed.

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?

The description gives clear usage context: call this when a reading must be interpreted relative to its own history rather than in absolute terms, and check the "samples" count before trusting the percentile. It does not explicitly name which sibling to use for raw current values, so the routing is implied rather than spelled out.

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