Skip to main content
Glama

Agent Einstein — Crypto & Market Intelligence

Bitcoin On-Chain Cycle

get_bitcoin_cycle_position
Read-onlyIdempotent

Where Bitcoin sits in its cycle by on-chain measures — realized-profit, holder-behaviour and valuation indicators rather than price alone.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
nvtNoNVT ratio. Null when the metric is not in this pass.
mvrvNoMVRV ratio with its cycle signal and 7d trend.
staleNoTrue when the snapshot is past its refresh interval.
reasonNoWhy the payload is absent, when `available` is false.
sourceNoOn-chain data source.
txCountNoTransaction count.
priceUsdNoBTC price, raw and formatted.
txVolumeNoOn-chain transaction volume. Null when not in this pass.
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.
fetchedAtNoWhen the underlying snapshot was refreshed (epoch ms, or ISO-8601 for the Bitcoin cycle feed). Age matters: these are cached reads, not live queries.
marketCapNoMarket cap, raw and formatted.
totalFeesNoTotal fees paid.
timeSeriesNoHistory behind the metrics, one point per day.
realizedCapNoRealized cap. Null when not in this pass.
exchangeFlowNoExchange inflow/outflow and the net signal.
minerRevenueNoMiner revenue.
activeAddressesNoActive addresses, with a 7d trend.
dormantSupplyPctNoShare of supply dormant. Null when not in this pass.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "activeAddresses": {
      +      "additionalProperties": true,
      +      "description": "Active addresses, with a 7d trend."
      +    },
      +    "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"
      +    },
      +    "dormantSupplyPct": {
      +      "additionalProperties": true,
      +      "description": "Share of supply dormant. Null when not in this pass."
      +    },
      +    "exchangeFlow": {
      +      "additionalProperties": true,
      +      "description": "Exchange inflow/outflow and the net signal.",
      +      "properties": {
      +        "inflow": {
      +          "description": "Coins moving to exchanges."
      +        },
      +        "net": {
      +          "description": "Net flow."
      +        },
      +        "outflow": {
      +          "description": "Coins leaving exchanges."
      +        },
      +        "signal": {
      +          "description": "What the net flow implies."
      +        }
      +      }
      +    },
      +    "fetchedAt": {
      +      "description": "When the underlying snapshot was refreshed (epoch ms, or ISO-8601 for the Bitcoin cycle feed). Age matters: these are cached reads, not live queries."
      +    },
      +    "marketCap": {
      +      "additionalProperties": true,
      +      "description": "Market cap, raw and formatted."
      +    },
      +    "minerRevenue": {
      +      "additionalProperties": true,
      +      "description": "Miner revenue."
      +    },
      +    "mvrv": {
      +      "additionalProperties": true,
      +      "description": "MVRV ratio with its cycle signal and 7d trend.",
      +      "properties": {
      +        "signal": {
      +          "description": "What that level has historically meant."
      +        },
      +        "trend7d": {
      +          "description": "Change over 7 days."
      +        },
      +        "value": {
      +          "description": "MVRV ratio."
      +        }
      +      }
      +    },
      +    "nvt": {
      +      "additionalProperties": true,
      +      "description": "NVT ratio. Null when the metric is not in this pass."
      +    },
      +    "priceUsd": {
      +      "additionalProperties": true,
      +      "description": "BTC price, raw and formatted."
      +    },
      +    "realizedCap": {
      +      "additionalProperties": true,
      +      "description": "Realized cap. Null when not in this pass."
      +    },
      +    "reason": {
      +      "description": "Why the payload is absent, when `available` is false.",
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "On-chain data source."
      +    },
      +    "stale": {
      +      "description": "True when the snapshot is past its refresh interval."
      +    },
      +    "timeSeries": {
      +      "description": "History behind the metrics, one point per day.",
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "activeAddresses": {
      +            "description": "Active addresses at that point."
      +          },
      +          "marketCap": {
      +            "description": "Market cap at that point."
      +          },
      +          "mvrv": {
      +            "description": "MVRV at that point."
      +          },
      +          "time": {
      +            "description": "ISO-8601 timestamp."
      +          },
      +          "txCount": {
      +            "description": "Transactions at that point."
      +          }
      +        }
      +      },
      +      "type": "array"
      +    },
      +    "totalFees": {
      +      "additionalProperties": true,
      +      "description": "Total fees paid."
      +    },
      +    "txCount": {
      +      "additionalProperties": true,
      +      "description": "Transaction count."
      +    },
      +    "txVolume": {
      +      "additionalProperties": true,
      +      "description": "On-chain transaction volume. Null when not in this pass."
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, so the description only needs to add contextual value; it does so by enumerating the indicator families used and clarifying the non-price perspective. No additional side effects or response traits are mentioned, but none are needed for a zero-param read-only tool with an 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.

Conciseness5/5

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

Single front-loaded sentence: the object ('where Bitcoin sits in its cycle') comes first, followed by the method. No filler or redundant restatement of annotations.

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 parameterless, read-only, idempotent tool with an output schema, the description is sufficient: it states the core question, the data basis, and the contrast to price analysis. The only mild gap is the absence of explicit sibling routing, which is already reflected in the usage-guidelines score.

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?

The tool has zero parameters and the schema already covers all of them (100% coverage). The description adds nothing about parameters, but there are no parameters to document, so the baseline 4 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 ('Bitcoin's cycle position') and the method ('on-chain measures: realized-profit, holder-behaviour and valuation indicators'), making it clearly distinct from price-only or market-sentiment tools in the sibling list. Although phrased as a noun clause, the inherited verb 'get' makes the operation unambiguous.

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 implies usage when an on-chain cycle view is needed and explicitly contrasts itself with price-only analysis ('rather than price alone'). However, it never names a sibling alternative or states explicit when/when-not conditions, so routing decisions are left to inference.

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.