Skip to main content
Glama

FirmTape - SPX, ES, NQ, RTY gamma levels, 100+ symbols

Gamma by strike

get_gex_profile
Read-onlyIdempotent

The SPX dealer gamma LADDER for one minute of a finished session: gamma by strike around spot, the level set, and the heaviest strikes. Read by default as the VOLUME book, the one the terminal's chart draws; also as the MEASURED book (signed off the trade tape, FirmTape's own read) or the OPEN_INTEREST convention every other public GEX chart draws — the same minute through three lenses. The level set is the volume book's whichever ladder is read. Use when: the question is about SHAPE — where gamma sits, how heavy a wall is, how far the three conventions disagree — or about one moment inside a session rather than the day as a whole. Not for: a day's headline numbers (get_session), the level set alone (get_levels), or movement across days (get_level_history). ES: pass symbol ES (or MES) for ES strikes, the SPX ladder moved by the ES basis at the frame's minute. Limits: finished sessions only, one frame every 5 minutes (a requested minute snaps back to the frame at or before it), published window ±2.5% of spot; the three books are not comparable in magnitude. Measurements only, no buy/sell signals.

Input Schema

NameRequiredDescriptionDefault
dayYesA finished trading day, YYYY-MM-DD. Call list_sessions if unsure which days exist.
bookNoWhich book's ladder to read (default volume, the chart's book). open_interest is the convention rival tools print.
minuteNoET minute HH:MM inside 09:30-16:00. Snaps back to the frame at or before it, so quote the minute the answer returns. Default: the last frame of the session.
symbolNoSPX (default), or ES / MES: every strike, spot and level moved by the ES basis at the frame's minute. A day without a measured basis answers with SPX strikes and says so.
contractNoOptional dated contract for a future symbol. Default is the front contract; in the two weeks before a roll the next one is measured too.
expiry_scopeNoall = every expiry the session's book was pulled with (default); 0dte = the same-day slice alone
strikes_around_spotNoHow many strikes to return each side of spot (default 20). Raise it for the whole published window, which is +/-2.5% of spot.

Output Schema

NameRequiredDescriptionDefault
dayYesTrading day, YYYY-MM-DD
bookYesWhich book was read: measured, open_interest or volume
noteNoPresent when a future was asked and its basis is not measured for the day
spotYesSPX at that minute
unitYesUnit of every gamma number below
basisNoPresent when an ES/MES (or NQ/MNQ, RTY/M2K) symbol was asked: the futures basis every price here was moved by; null when the day has no measured basis and the answer is the index's
levelsYesDealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one
minuteYesThe ET minute (HH:MM) this profile actually belongs to. The archive keeps a frame every 5 minutes, so a requested minute snaps back to the frame at or before it — quote the minute returned here, not the one asked for.
replayYesFree minute-by-minute replay of the session on FirmTape
symbolNoWhat the prices are in: SPX, or ES / MES when asked and the day's basis is measured
strikesYesDealer gamma by strike at that minute, lowest strike first
summaryYesOne sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased.
heaviestYesThe largest strikes by absolute gamma inside the window, heaviest first
book_noteNoHow this book is built, and what it can and cannot be compared with
data_as_ofYesThe time this answer's data is true as of, ISO 8601 with the ET offset: a finished session's close (13:00 on an early close), the minute a ladder was read at, or the source's own build stamp. Null when the source states none.
expiry_scopeYesall = every expiry this session's book was pulled with; 0dte = the same-day slice alone
server_versionYesVersion of the FirmTape MCP server that produced this answer
requested_symbolNoPresent when a future was asked but the day has no measured basis, so the answer is SPX's
strikes_returnedYesHow many strikes the window actually held
net_gamma_in_windowYesSum of the returned strikes — a window total, not the session's net gamma

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / basis / description
      Previous value: -"Present when an ES/MES (or NQ/MNQ) symbol was asked: the futures basis every price here was moved by; null when the day has no measured basis and the answer is the index's"New value: +"Present when an ES/MES (or NQ/MNQ, RTY/M2K) symbol was asked: the futures basis every price here was moved by; null when the day has no measured basis and the answer is the index's"
    • changedOutput schema / properties / basis / properties / index / description
      Previous value: -"The index whose book was moved: SPX or NDX"New value: +"The index whose book was moved: SPX, NDX or RUT"
  2. Changed5 schema fields changed
    • addedOutput schema / properties / data_as_of
      Added value: +{
      +  "description": "The time this answer's data is true as of, ISO 8601 with the ET offset: a finished session's close (13:00 on an early close), the minute a ladder was read at, or the source's own build stamp. Null when the source states none.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / levels / properties / hold_band
      Removed value: -{
      -  "description": "[low, high] band where dealer hedging tends to pin price",
      -  "items": {
      -    "type": [
      -      "number",
      -      "null"
      -    ]
      -  },
      -  "maxItems": 2,
      -  "minItems": 2,
      -  "type": "array"
      -}
    • changedOutput schema / properties / levels / required
      Previous value: -[
      -  "zero_gamma_flip",
      -  "call_resistance",
      -  "put_support",
      -  "hold_band"
      -]New value: +[
      +  "zero_gamma_flip",
      +  "call_resistance",
      +  "put_support"
      +]
    • addedOutput schema / properties / server_version
      Added value: +{
      +  "description": "Version of the FirmTape MCP server that produced this answer",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "summary",
      -  "day",
      -  "minute",
      -  "book",
      -  "expiry_scope",
      -  "unit",
      -  "spot",
      -  "levels",
      -  "strikes",
      -  "strikes_returned",
      -  "net_gamma_in_window",
      -  "heaviest",
      -  "replay"
      -]New value: +[
      +  "summary",
      +  "day",
      +  "minute",
      +  "book",
      +  "expiry_scope",
      +  "unit",
      +  "spot",
      +  "levels",
      +  "strikes",
      +  "strikes_returned",
      +  "net_gamma_in_window",
      +  "heaviest",
      +  "replay",
      +  "data_as_of",
      +  "server_version"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / book / description
      Previous value: -"Which book to read (default measured). open_interest is the convention rival tools print."New value: +"Which book's ladder to read (default volume, the chart's book). open_interest is the convention rival tools print."
  4. Changed7 schema fields changed
    • addedInput schema / properties / contract
      Added value: +{
      +  "description": "Optional dated contract for a future symbol. Default is the front contract; in the two weeks before a roll the next one is measured too.",
      +  "examples": [
      +    "ESZ26",
      +    "ESH27"
      +  ],
      +  "pattern": "^M?(ES|NQ)[FGHJKMNQUVXZ]\\d{1,2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / symbol
      Added value: +{
      +  "description": "SPX (default), or ES / MES: every strike, spot and level moved by the ES basis at the frame's minute. A day without a measured basis answers with SPX strikes and says so.",
      +  "examples": [
      +    "SPX",
      +    "ES",
      +    "MES"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / basis
      Added value: +{
      +  "description": "Present when an ES/MES (or NQ/MNQ) symbol was asked: the futures basis every price here was moved by; null when the day has no measured basis and the answer is the index's",
      +  "properties": {
      +    "at": {
      +      "description": "ET minute the basis belongs to",
      +      "type": "string"
      +    },
      +    "contract": {
      +      "description": "The quarterly contract, e.g. ESZ26",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "contracts": {
      +      "description": "History only: the contracts the window's sessions were priced as",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "expiry": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "future": {
      +      "type": "string"
      +    },
      +    "index": {
      +      "description": "The index whose book was moved: SPX or NDX",
      +      "type": "string"
      +    },
      +    "method": {
      +      "type": "string"
      +    },
      +    "name": {
      +      "type": "string"
      +    },
      +    "passes": {
      +      "description": "Basis passes measured that day",
      +      "type": "integer"
      +    },
      +    "points": {
      +      "description": "Future minus index, index points, added to every level, strike and spot",
      +      "type": "number"
      +    },
      +    "source": {
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / levels / description
      Previous value: -"Dealer-positioning levels in SPX index points; null when the session did not produce one"New value: +"Dealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one"
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Present when a future was asked and its basis is not measured for the day",
      +  "type": "string"
      +}
    • addedOutput schema / properties / requested_symbol
      Added value: +{
      +  "description": "Present when a future was asked but the day has no measured basis, so the answer is SPX's",
      +  "type": "string"
      +}
    • addedOutput schema / properties / symbol
      Added value: +{
      +  "description": "What the prices are in: SPX, or ES / MES when asked and the day's basis is measured",
      +  "type": "string"
      +}
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: finished sessions only, 5-minute frame granularity with snap-back behavior, ±2.5% published window, non-comparability of the three books, and a 'measurements only, no signals' disclaimer.

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?

Front-loads the resource definition, then usage, then limits, and every block carries information. It is dense and relies on stylistic emphasis (capitalized book names, em-dashes) that slightly hurts scanability, but no sentence is pure filler.

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?

With an output schema present, return values need not be described; the description instead covers the constraints an agent must know (session state, frame granularity, window, symbol basis behavior). Nothing needed to call this 7-parameter tool correctly is missing.

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 baseline is 3, but the description adds interpretive meaning beyond the schema: the three books are 'not comparable in magnitude', the level set belongs to the volume book regardless of which ladder is read, and ES/MES strikes are the SPX ladder shifted by the ES basis at the frame's minute.

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 ('gamma LADDER ... gamma by strike around spot, the level set, and the heaviest strikes') and scopes it to one minute of a finished session. It explicitly distinguishes itself from siblings by naming get_session, get_levels, and get_level_history as the wrong tools for adjacent questions.

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

Usage Guidelines5/5

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

Provides an explicit 'Use when' clause (questions about SHAPE or a single intraday moment) and a 'Not for' clause that routes three named alternatives to their own tools. An agent can select between this and the siblings without opening any schema.

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