Skip to main content
Glama

OptionWhales

Gamma exposure (GEX) levels

gex_levels
Read-onlyIdempotent

Modeled dealer gamma-exposure key levels for a ticker: gamma flip, max pain, call wall, put wall and spot. When timestamps are present, calculated levels belong to the options snapshot at computed_at; spot may be updated independently at spot_resolved_at. Compare each level numerically with the returned spot: do not assume the put wall is below it or the call wall above it. Explain differing timestamps or freshness limitations before treating snapshot levels as current intraday support or resistance. Max pain is struck per expiration and max_pain_expiry names the (front) expiry it belongs to — max_pain_basis / wall_basis say which definition each field carries. Use when asked where price may pin, bounce, stall or accelerate, e.g. 'what are the gamma levels on SPY?'. session defaults to the latest trading day. Without an account and on free: SPY and QQQ; Pro: any ticker.

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": {
      "ticker": "<ticker>"
    },
    "name": "gex_levels"
  }
}

Input Schema

NameRequiredDescriptionDefault
tickerYesStock or ETF ticker, e.g. NVDA, SPY, BRK.B
sessionNoTrading date YYYY-MM-DD, or 'latest' (default)
dte_filterNoOptional expiry window filter

Output Schema

NameRequiredDescriptionDefault
spotYes
tickerYes
sessionYes
max_painYes
put_wallYes
call_wallYes
dte_filterNo
gamma_flipYes
kl_versionNo
wall_basisNo
computed_atYes
gamma_basisYes
spot_sourceNo
max_pain_dteNo
net_put_wallNo
spot_age_secNo
net_call_wallNo
side_put_wallNo
max_pain_basisNo
max_pain_frontNo
side_call_wallNo
gamma_flip_typeNo
max_pain_expiryNo
max_pain_blendedNo
spot_resolved_atNo
global_gamma_flipNo
structural_spot_driftNo
local_gamma_transitionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "call_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "computed_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "dte_filter": {
      +      "type": [
      +        "integer",
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "gamma_basis": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "gamma_flip": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "gamma_flip_type": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "global_gamma_flip": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "kl_version": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "local_gamma_transition": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "max_pain": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "max_pain_basis": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "max_pain_blended": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "max_pain_dte": {
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "max_pain_expiry": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "max_pain_front": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "net_call_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "net_put_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "put_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "session": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "side_call_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "side_put_wall": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "gex": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "strike": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "strike",
      +        "gex"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "spot": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "spot_age_sec": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "spot_resolved_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "spot_source": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "structural_spot_drift": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "ticker": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "wall_basis": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "ticker",
      +    "session",
      +    "spot",
      +    "gamma_flip",
      +    "max_pain",
      +    "call_wall",
      +    "put_wall",
      +    "computed_at",
      +    "gamma_basis"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnly/idempotent/non-destructive), and the description still adds substantial behavior: two separate timestamps (computed_at vs spot_resolved_at), the warning that spot may update independently, per-expiration max pain semantics, and the max_pain_basis/wall_basis definitional caveat. It also discloses an access constraint (free: SPY and QQQ only; Pro: any ticker), which is exactly the kind of operational limit annotations cannot express.

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?

Purpose is front-loaded and the caveats follow in a sensible order (timestamps, comparison rule, expiry basis, usage, defaults, access). It is dense rather than padded, but the freshness/timestamp caution is effectively stated twice and the final two sentences could be merged.

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, single-ticker analytical endpoint with an output schema and full schema coverage, the description covers everything an agent needs: what the levels are, the snapshot-vs-spot freshness trap, expiry basis, default session, and tier gating. Return-format detail is correctly omitted since the output schema handles it.

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 100%, so the schema already documents all three parameters and the baseline is 3. The description adds real meaning beyond that for session ('defaults to the latest trading day') and implicitly scopes the ticker universe by tier, though dte_filter is not elaborated on at all.

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?

Opens with a specific verb+resource ('Modeled dealer gamma-exposure key levels for a ticker') and immediately enumerates the returned concepts — gamma flip, max pain, call wall, put wall, spot. That enumeration is distinctive enough to separate it from nearby siblings like greek_exposure or volatility_term_structure without opening either schema.

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?

Gives an explicit trigger with a worked example ('what are the gamma levels on SPY?') and interpretive guidance ('do not assume the put wall is below it or the call wall above it'). It also states an applicability condition ('session defaults to the latest trading day') and access tiers. The only gap is that no sibling alternative is ever named, so an agent must infer that greek_exposure or contract_chain are the wrong tools for this question.

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