Skip to main content
Glama

Backtesting Arena

Get Deribit BTC Max Pain History

arena_get_max_pain_history

Does max pain actually pull price to the strike? Settled Deribit BTC options expiries with the max-pain level we compute per expiry, for measuring the convergence question: does spot drift toward the max-pain level as expiry approaches? Each row: expiry_date, max_pain_strike, spot_at_expiry, %-diff, P/C ratio, notional, expiry-type flags. The mandatory base_rates block answers the convergence question PER expiry class (n, median |diff|, shares within 1%/2%, max, sample_adequate at n>=30) — the pooled median mixes tiny daily expiries with large quarterlies, which is what the per-class split separates. Filter with expiry_type / min_contracts / snapshot_expiry_date instead of post-processing the full row set. With include_open_snapshots=true it adds the daily observation series of still-open expiries — that series starts 2026-05-28, is not backfillable, and its per-expiry depth is thin, so check open_snapshot_coverage before computing anything from it. Days auto-capped by tier: Pro 365d, Power 3650d. Max-pain levels are our own aggregation across the option chain; the chain itself is not redistributed. Source: Deribit. Related: arena_get_max_pain (current + upcoming), arena_get_iv_snapshot. [API Pro tier]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysNoDays back from today (default 90, capped by tier).
marketNoOptions market. Only DERIBIT_BTC is served: IBIT (BlackRock spot-ETF options) is still collected daily but no longer delivered — the chain comes from an unlicensed source, so it cannot be redistributed (2026-09-24).
expiry_typeNoFilter expiries AND open_snapshots to one expiry class (label = highest level reached; the nesting booleans stay untouched). base_rates are always computed BEFORE this filter.
min_contractsNoOnly finalized expiries with total_contracts >= this (rows with unknown contracts drop out when set).
snapshot_expiry_dateNoReduce open_snapshots[] to exactly this expiry date (YYYY-MM-DD). Only meaningful with include_open_snapshots=true.
include_open_snapshotsNoDefault false. When true, adds open_snapshots[] (daily observations of not-yet-expired contracts) plus open_snapshot_coverage. Omit for the unchanged response.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. Changed2 schema fields changed
    • changedInput schema / properties / market / description
      Previous value: -"Options market. Currently only 'DERIBIT_BTC' (default)."New value: +"Options market: 'DERIBIT_BTC' (default) or 'IBIT' (collected since 2026-08-24 — history is correspondingly short)."
    • changedInput schema / properties / market / enum
      Previous value: -[
      -  "DERIBIT_BTC"
      -]New value: +[
      +  "DERIBIT_BTC",
      +  "IBIT"
      +]
  4. Changed3 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / context
      Removed value: -{
      -  "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"",
      -  "type": "string"
      -}
    • removedInput schema / required
      Removed value: -[
      -  "context"
      -]
  5. Changed3 schema fields changed
    • addedInput schema / properties / expiry_type
      Added value: +{
      +  "description": "Filter expiries AND open_snapshots to one expiry class (label = highest level reached; the nesting booleans stay untouched). base_rates are always computed BEFORE this filter.",
      +  "enum": [
      +    "daily",
      +    "weekly",
      +    "monthly",
      +    "quarterly"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / min_contracts
      Added value: +{
      +  "description": "Only finalized expiries with total_contracts >= this (rows with unknown contracts drop out when set).",
      +  "exclusiveMinimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / snapshot_expiry_date
      Added value: +{
      +  "description": "Reduce open_snapshots[] to exactly this expiry date (YYYY-MM-DD). Only meaningful with include_open_snapshots=true.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • addedInput schema / properties / include_open_snapshots
      Added value: +{
      +  "description": "Default false. When true, adds open_snapshots[] (daily observations of not-yet-expired contracts) plus open_snapshot_coverage. Omit for the unchanged response.",
      +  "type": "boolean"
      +}
  7. First observed

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly: it discloses that max-pain levels are its own aggregation (chain not redistributed), that IBIT is no longer delivered due to licensing, that open snapshots start on a fixed date and are not backfillable, that days are tier-capped, and that base_rates are computed before expiry_type filtering. No contradictions.

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 long but every sentence earns its place: purpose, data contents, base_rates rationale, filtering advice, open-snapshot caveats, tier caps, source, and related tools. It's front-loaded with the core question and logically organized, though slightly dense.

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?

For a 6-parameter tool with no output schema and no annotations, the description is fairly complete: it explains the row contents, the base_rates block, the open_snapshots series and its caveats, and the tier caps. It could explicitly list the response fields or pagination, but the main behavioral aspects are covered.

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 covers all 6 parameters with detailed descriptions (e.g., market explains IBIT exclusion, expiry_type explains filtering). The description adds extra semantics: explains the base_rates block, that base_rates are computed before the filter, that snapshot_expiry_date is only meaningful with include_open_snapshots=true, and the tier caps on days. Adds value beyond the schema.

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 opens with a specific research question ('Does max pain actually pull price to the strike?') and states the exact resource: settled Deribit BTC options expiries with computed max-pain levels. It clearly differentiates from siblings by naming arena_get_max_pain (current + upcoming) and arena_get_iv_snapshot as related, and by describing its unique historical/convergence focus.

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?

Provides explicit guidance on how to filter (use expiry_type/min_contracts/snapshot_expiry_date instead of post-processing), explains why per-class base_rates are preferred over pooled medians, and warns to check open_snapshot_coverage before computing anything. Names related tools for current/upcoming data, though it doesn't explicitly state 'use this for X, not Y' with direct contrast.

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.