Servidor MCP

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

com.firmtape/spx-options-gamma
Datos y analítica Finanzas e inversión Público y accesible MCP 2026-07-28

Qué hace este MCP

Provides SPX and other-symbol options gamma exposure, dealer-positioning levels, market-event context, session history, and strategy backtesting.

fetch
Fetch a FirmTape document
Retrieve the full text of one FirmTape document by the id `search` returned: `session:YYYY-MM-DD` for a finished trading session, `page:/path` for an explainer or research page. A FirmTape URL or a bare YYYY-MM-DD trading day is accepted too. Use when: you hold an id from `search`, or a client that only speaks search/fetch (ChatGPT). Not for: structured numbers — get_session and get_levels answer the same day with fields instead of prose. Limits: public FirmTape documents only; long pages are truncated with a link to the rest.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'An id from `search`, a FirmTape URL, or a YYYY-MM-DD trading day'}}, 'additionalProperties': False}
get_events
Market calendar
The scheduled US market events for a window of days, from the same calendar the FirmTape terminal draws: FOMC decisions, press conferences and minutes, CPI, payrolls, PCE, PPI, GDP, retail sales, JOLTS, ISM, the Fed Chair's speeches, the Beige Book, 10/20/30-year Treasury auctions, mega-cap earnings, monthly and quarterly expiration and early closes. Each event carries its minute in ET, a link to its source, and, where the archive has measured it, what usually follows, what the dealer book did, and for the releases the forecast, the prior and the actual print. Use when: 'what is on the calendar this week', 'when is the next FOMC', 'is there anything at 14:00 today'. Not for: session measurements (get_session) or levels (get_levels). Limits: US only, 2019 to about a year ahead, at most 31 days per call.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Last day, YYYY-MM-DD (default from + 6 days; at most 31 days)'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'First day, YYYY-MM-DD (default today, ET)'}, 'impact': {'enum': ['high', 'med', 'low'], 'type': 'string', 'description': 'Lowest impact to include (default med: high and medium)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'from', 'to', 'events'], 'properties': {'to': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'from': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'events': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'time', 'kind', 'name', 'impact', 'in_session'], 'properties': {'url': {'type': 'string', 'description': 'Where to read the event itself (statement, release, report), when known'}, 'book': {'type': 'string', 'description': 'What the dealer book did around this kind of event, from the archive, when measured: the flip, the gamma sign at the start of the window, the expected-hold band'}, 'date': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'kind': {'type': 'string', 'description': 'fomc, macro, fed, auction, earn, opex, early or ff'}, 'name': {'type': 'string'}, 'time': {'type': 'string', 'description': 'Clock time in ET, HH:MM; empty for an all-day item such as expiration'}, 'impact': {'type': 'string', 'description': 'high, med or low'}, 'prints': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'label': {'type': 'string'}, 'prior': {'type': ['string', 'null']}, 'actual': {'type': ['string', 'null']}, 'forecast': {'type': ['string', 'null']}}}, 'description': "The release's numbers, when known: label, forecast, prior and (after the print) actual, as the release quotes them"}, 'usually': {'type': 'string', 'description': 'What usually follows this kind of event, from the archive, when measured'}, 'in_session': {'type': 'boolean', 'description': 'True when the event falls inside 09:30-16:00 ET'}}}, 'description': 'Scheduled US market events in the window, in date and time order'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}}}
get_gex_profile
Gamma by strike
The SPX dealer gamma LADDER for one minute of a finished session: gamma by strike around spot, the level set, and the heaviest strikes. Readable as the MEASURED book (signed off the trade tape, FirmTape's own read), as the OPEN_INTEREST convention every other public GEX chart draws, or as the VOLUME convention — the same minute through three lenses. 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). 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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['day'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'examples': ['2026-08-24'], 'description': 'A finished trading day, YYYY-MM-DD. Call list_sessions if unsure which days exist.'}, 'book': {'enum': ['measured', 'open_interest', 'volume'], 'type': 'string', 'description': 'Which book to read (default measured). open_interest is the convention rival tools print.'}, 'minute': {'type': 'string', 'pattern': '^\\d{2}:\\d{2}$', 'examples': ['10:30'], 'description': 'ET 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.'}, 'expiry_scope': {'enum': ['all', '0dte'], 'type': 'string', 'description': "all = every expiry the session's book was pulled with (default); 0dte = the same-day slice alone"}, 'strikes_around_spot': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'How many strikes to return each side of spot (default 20). Raise it for the whole published window, which is +/-2.5% of spot.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'day', 'minute', 'book', 'expiry_scope', 'unit', 'spot', 'levels', 'strikes', 'strikes_returned', 'net_gamma_in_window', 'heaviest', 'replay'], 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'book': {'type': 'string', 'description': 'Which book was read: measured, open_interest or volume'}, 'spot': {'type': ['number', 'null'], 'description': 'SPX at that minute'}, 'unit': {'type': 'string', 'description': 'Unit of every gamma number below'}, 'levels': {'type': 'object', 'required': ['zero_gamma_flip', 'call_resistance', 'put_support', 'hold_band'], 'properties': {'hold_band': {'type': 'array', 'items': {'type': ['number', 'null']}, 'maxItems': 2, 'minItems': 2, 'description': '[low, high] band where dealer hedging tends to pin price'}, 'put_support': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike below spot'}, 'call_resistance': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike above spot'}, 'zero_gamma_flip': {'type': ['number', 'null'], 'description': 'Strike where net dealer gamma changes sign'}}, 'description': 'Dealer-positioning levels in SPX index points; null when the session did not produce one'}, 'minute': {'type': 'string', 'description': 'The 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.'}, 'replay': {'type': 'string', 'format': 'uri', 'description': 'Free minute-by-minute replay of the session on FirmTape'}, 'strikes': {'type': 'array', 'items': {'type': 'object', 'required': ['strike', 'gamma'], 'properties': {'gamma': {'type': ['number', 'null']}, 'strike': {'type': 'number'}}}, 'description': 'Dealer gamma by strike at that minute, lowest strike first'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'heaviest': {'type': 'array', 'items': {'type': 'object', 'required': ['strike', 'gamma'], 'properties': {'gamma': {'type': ['number', 'null']}, 'strike': {'type': 'number'}}}, 'description': 'The largest strikes by absolute gamma inside the window, heaviest first'}, 'book_note': {'type': 'string', 'description': 'How this book is built, and what it can and cannot be compared with'}, 'expiry_scope': {'type': 'string', 'description': "all = every expiry this session's book was pulled with; 0dte = the same-day slice alone"}, 'strikes_returned': {'type': 'integer', 'description': 'How many strikes the window actually held'}, 'net_gamma_in_window': {'type': ['number', 'null'], 'description': "Sum of the returned strikes — a window total, not the session's net gamma"}}}
get_level_history
Level history
How the SPX dealer-positioning levels MOVED across recent finished sessions: the zero-gamma flip, call resistance and put support day by day, each session's change from the one before, and summary statistics for the window (flip range, net drift, mean daily movement, how often price closed above the flip). Use when: the question is about a trend or a window — has the flip been climbing, how far does it travel in a week — instead of calling get_levels once per day. Not for: one day (get_levels / get_session) or anything inside a session (get_gex_profile). Limits: finished sessions only, max 40 per call; days absent from the archive are reported in `missing`, never interpolated. Measurements only — no buy/sell signals, no forecast.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'examples': ['2026-08-24'], 'description': 'End of an explicit window, YYYY-MM-DD (inclusive). Defaults to the newest finished session.'}, 'days': {'type': 'integer', 'maximum': 40, 'minimum': 2, 'description': 'How many of the most recent finished sessions to read (default 20, max 40). Ignored when `from` is given.'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'examples': ['2026-08-01'], 'description': 'Start of an explicit window, YYYY-MM-DD (inclusive). Overrides `days`.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'from', 'to', 'sessions', 'movement', 'missing'], 'properties': {'to': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'from': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'missing': {'type': 'array', 'items': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'description': 'Days in the requested window with no payload in the archive; the window is reported over what was actually read'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'movement': {'type': 'object', 'required': ['sessions_counted', 'flip_low', 'flip_high', 'flip_net_change', 'flip_mean_abs_daily_change', 'closes_above_flip', 'closes_below_flip'], 'properties': {'flip_low': {'type': ['number', 'null']}, 'flip_high': {'type': ['number', 'null']}, 'flip_net_change': {'type': ['number', 'null'], 'description': 'Oldest flip to newest flip, index points'}, 'sessions_counted': {'type': 'integer'}, 'closes_above_flip': {'type': 'integer', 'description': 'Sessions that closed above the zero-gamma flip'}, 'closes_below_flip': {'type': 'integer'}, 'flip_mean_abs_daily_change': {'type': ['number', 'null'], 'description': 'Mean |flip_change| over the window — how much the level moves on an average day'}}, 'description': 'How the level set travelled across the window. Descriptive statistics, not a forecast.'}, 'sessions': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'levels', 'close', 'close_minus_flip', 'flip_change'], 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'close': {'type': ['number', 'null']}, 'levels': {'type': 'object', 'required': ['zero_gamma_flip', 'call_resistance', 'put_support', 'hold_band'], 'properties': {'hold_band': {'type': 'array', 'items': {'type': ['number', 'null']}, 'maxItems': 2, 'minItems': 2, 'description': '[low, high] band where dealer hedging tends to pin price'}, 'put_support': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike below spot'}, 'call_resistance': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike above spot'}, 'zero_gamma_flip': {'type': ['number', 'null'], 'description': 'Strike where net dealer gamma changes sign'}}, 'description': 'Dealer-positioning levels in SPX index points; null when the session did not produce one'}, 'flip_change': {'type': ['number', 'null'], 'description': "This session's flip minus the PREVIOUS session's flip, index points; null on the oldest entry"}, 'close_minus_flip': {'type': ['number', 'null'], 'description': 'Close minus zero-gamma flip; positive = closed above'}, 'put_support_change': {'type': ['number', 'null']}, 'call_resistance_change': {'type': ['number', 'null']}}}, 'description': 'One entry per finished session, NEWEST FIRST, same order as list_sessions'}}}
get_levels
Level set
Only the dealer-positioning level set for one finished SPX session: zero-gamma flip, call resistance, put support, hold band — plus where the session closed relative to them. A strict subset of get_session. Use when: the levels are the whole question and the rest of the session would be noise. Not for: OHLC, flip crossings, net-gamma percentile or ATM IV (get_session); more than one day (get_level_history); gamma by strike (get_gex_profile). Limits: finished sessions only, one day per call.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['day'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'examples': ['2026-08-24'], 'description': 'A finished trading day, YYYY-MM-DD. Weekends, holidays and days before coverage return an error — call list_sessions to see which days exist.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'day', 'levels', 'close', 'close_minus_flip', 'replay'], 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'close': {'type': ['number', 'null'], 'description': 'Session close'}, 'levels': {'type': 'object', 'required': ['zero_gamma_flip', 'call_resistance', 'put_support', 'hold_band'], 'properties': {'hold_band': {'type': 'array', 'items': {'type': ['number', 'null']}, 'maxItems': 2, 'minItems': 2, 'description': '[low, high] band where dealer hedging tends to pin price'}, 'put_support': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike below spot'}, 'call_resistance': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike above spot'}, 'zero_gamma_flip': {'type': ['number', 'null'], 'description': 'Strike where net dealer gamma changes sign'}}, 'description': 'Dealer-positioning levels in SPX index points; null when the session did not produce one'}, 'replay': {'type': 'string', 'format': 'uri', 'description': 'Free minute-by-minute replay of the session on FirmTape'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'close_minus_flip': {'type': ['number', 'null'], 'description': 'Close minus zero-gamma flip, index points; positive = closed above the flip'}}}
get_market_moving_minutes
Minutes that moved the tape
The minutes of one finished SPX session that the tape itself marked as market-moving, with what stood beside each: the scheduled event that owned the minute, the moment two or more public news desks carried an item (timed to the second, labelled by class, never the headline's text), or the honest reading that no headline existed and the dealer book moved on its own. Each minute carries the index move over the next 5 and 15 minutes and the flip and expected-hold band at that minute. Use when: 'what moved SPX at 14:25 on 2026-09-10', 'were there news-driven minutes yesterday', 'which afternoon moves had no headline'. Not for: the scheduled calendar itself (get_events) or the day's levels (get_levels). Limits: finished sessions only (the live day is part of the paid live stream), sessions from 2022-04 on, ET clock.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'The session, YYYY-MM-DD (default: the last finished session)'}, 'tape_only': {'type': 'boolean', 'description': 'Only minutes the tape confirmed (default true; false adds the flashes the tape ignored and the calendar events it did not react to)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'day', 'minutes'], 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'minutes': {'type': 'array', 'items': {'type': 'object', 'required': ['time', 'kind', 'tape_confirmed', 'label'], 'properties': {'z': {'type': ['number', 'null'], 'description': 'The one-minute spot move in sigmas of the trailing half hour'}, 'tag': {'type': ['string', 'null'], 'description': 'geopolitics, macro, central_bank, energy, rates, stock, clock or other'}, 'url': {'type': 'string', 'description': "The first official article on the item, from the publisher's own feed (flash rows, when matched)"}, 'flip': {'type': ['number', 'null'], 'description': 'The zero-gamma flip at the minute'}, 'kind': {'type': 'string', 'description': 'calendar (a scheduled event owned the minute), flash (public news desks carried an item beside it), or book (no headline: the dealer book moved on its own)'}, 'time': {'type': 'string', 'description': 'Clock minute in ET, HH:MM'}, 'desks': {'type': 'integer', 'description': 'How many public desks carried an item inside three minutes (flash rows)'}, 'label': {'type': 'string', 'description': "FirmTape's own label: the event's name, a headline class, or 'no headline, the book did this'. Never a headline's text."}, 'move_5': {'type': ['number', 'null'], 'description': 'Index points from the minute before to five minutes on'}, 'url_at': {'type': 'string', 'description': 'HH:MM ET the article appeared'}, 'move_15': {'type': ['number', 'null'], 'description': 'Index points from the minute before to fifteen minutes on'}, 'usually': {'type': 'string', 'description': 'What usually followed this class of minute across every session measured: count, median 15-minute move, share that continued the 5-minute move'}, 'flash_at': {'type': ['string', 'null'], 'description': "HH:MM:SS ET of the first desk's item (flash rows)"}, 'hold_band': {'type': ['string', 'null'], 'description': "The expected-hold band at the minute, 'lo / hi': the corridor of spot over which the measured book's gamma stays positive. Not the walls. (Was misnamed `walls` before 0.2.4.)"}, 'publisher': {'type': 'string', 'description': 'The publisher of that article'}, 'tape_confirmed': {'type': 'boolean', 'description': 'True when the tape itself moved at the minute (a one-minute index move of 4 sigma of the trailing half hour, or 3 sigma with the book moving too)'}}}, 'description': 'The marked minutes of the session in clock order'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}}}
get_session
Session summary
Everything FirmTape measured for ONE finished SPX session: OHLC and VWAP, the zero-gamma flip and how often price crossed it, call/put walls, the hold band, net-gamma percentile, ATM IV at the open. Use when: you want a whole day in a single call. Not for: the level set alone (get_levels returns the same day, narrower), how the levels moved across days (get_level_history), or gamma by strike (get_gex_profile). Limits: finished sessions only, one day per call. Measurements only — FirmTape deliberately publishes no buy/sell signals.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['day'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'examples': ['2026-08-24'], 'description': 'A finished trading day, YYYY-MM-DD. Weekends, holidays and days before coverage return an error — call list_sessions to see which days exist.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'day', 'session', 'dealer_positioning', 'replay'], 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'events': {'type': 'array', 'items': {'type': 'object', 'required': ['time', 'name', 'impact'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'time': {'type': 'string', 'description': 'HH:MM ET; empty for an all-day item'}, 'after': {'type': 'string', 'description': 'spot over the 15 minutes after the event, the flip and the expected-hold band before and after, the net gamma sign; only for events inside the session'}, 'impact': {'type': 'string'}, 'prints': {'type': 'array', 'items': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'prior': {'type': ['string', 'null']}, 'actual': {'type': ['string', 'null']}, 'forecast': {'type': ['string', 'null']}}}}}}, 'description': "The day's scheduled market events (high and medium impact), each with its minute in ET, its source, the release's prints when known, and, for an event inside the session, what the book did in the 15 minutes after it"}, 'replay': {'type': 'string', 'format': 'uri', 'description': 'Free minute-by-minute replay of the session on FirmTape'}, 'session': {'type': 'object', 'required': ['open', 'close', 'high', 'low', 'change_pct', 'vwap_close', 'atm_iv_open'], 'properties': {'low': {'type': ['number', 'null']}, 'high': {'type': ['number', 'null']}, 'open': {'type': ['number', 'null']}, 'close': {'type': ['number', 'null']}, 'change_pct': {'type': ['number', 'null'], 'description': 'Close vs open, percent'}, 'vwap_close': {'type': ['number', 'null'], 'description': 'Session VWAP at the close'}, 'atm_iv_open': {'type': ['number', 'null'], 'description': '0DTE at-the-money implied vol at the open, in percent (7.5 = 7.5%)'}}, 'description': 'SPX price facts for the session'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'dealer_positioning': {'type': 'object', 'required': ['net_gamma_percentile', 'levels', 'flip_crossings', 'first_flip_crossing'], 'properties': {'levels': {'type': 'object', 'required': ['zero_gamma_flip', 'call_resistance', 'put_support', 'hold_band'], 'properties': {'hold_band': {'type': 'array', 'items': {'type': ['number', 'null']}, 'maxItems': 2, 'minItems': 2, 'description': '[low, high] band where dealer hedging tends to pin price'}, 'put_support': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike below spot'}, 'call_resistance': {'type': ['number', 'null'], 'description': 'Largest positive-gamma strike above spot'}, 'zero_gamma_flip': {'type': ['number', 'null'], 'description': 'Strike where net dealer gamma changes sign'}}, 'description': 'Dealer-positioning levels in SPX index points; null when the session did not produce one'}, 'flip_crossings': {'type': 'integer', 'description': 'How many times spot crossed the zero-gamma flip'}, 'first_flip_crossing': {'type': ['string', 'null'], 'description': 'Minute (HH:MM ET) of the first crossing, null if none'}, 'net_gamma_percentile': {'type': ['number', 'null'], 'description': 'Net dealer gamma vs the archive, 0-100'}}}}}
get_symbol_gamma
Gamma for another symbol
The latest dealer gamma picture for a symbol OTHER than the SPX archive: index, ETF and stock option chains (for example QQQ, SPY, IWM, NDX, RUT, NVDA, TSLA, GLD, TLT). Returns spot, the zero-gamma flip, call and put walls and net gamma for the VOLUME book and the OPEN_INTEREST book, the heaviest strikes, a per-expiry table and a trust grade. Use when: the question is about a ticker's gamma exposure, flip or walls right now or at the last close. Not for: SPX history, a past date, or the tape-signed measured book (get_session, get_levels, get_gex_profile); anything inside a past session. Limits: latest snapshot only (rebuilt every few minutes in session hours); calls count as dealer-long and puts as dealer-short, which is a convention, not a measurement, and on single stocks it is an approximation (see trust.grade: A and B are indices and ETFs, C and D single stocks). Units: US dollars of dealer delta per 1% move.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['symbol'], 'properties': {'symbol': {'type': 'string', 'pattern': '^[A-Za-z]{1,5}$', 'examples': ['QQQ', 'NVDA'], 'description': 'The ticker. Carried symbols are listed at https://firmtape.com/gex; an unknown ticker returns an error naming that page.'}}, 'additionalProperties': False}
list_sessions
List sessions
List the finished SPX trading sessions in the free FirmTape archive, newest first, with the total count and how far back coverage runs. Every listed day can be fetched with get_session / get_levels and replayed free at FirmTape. Use when: you need to know which days exist, or the size and span of the archive, before asking about one. Not for: any measurement about a day — call get_session with that date instead. Limits: finished sessions only (today's session appears after the close), max 50 days per call.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many days to return (default 10, max 50)'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'total_sessions', 'newest'], 'properties': {'newest': {'type': 'array', 'items': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'description': 'Trading days, newest first'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'total_sessions': {'type': 'integer', 'description': 'How many finished sessions the free archive holds'}}}
options_strategy_test
Test an options strategy on the archive
Test an SPX 0DTE options strategy — a condor, strangle, straddle or any leg set — against every session in the FirmTape archive on real quotes and real settlement. One call prices it 63 ways: seven widths of your geometry across nine entry times, so the answer is WHERE TO PUT THE STRIKES rather than a verdict on one guess. Short legs are sold at the bid and long legs bought at the ask, $1.25 a leg — measured on 13.1M prints, the median SPX 0DTE print pays the full quoted half-spread, so these fills are the median outcome and not a conservative one. Returns the marginal by width and by entry, a recommended direction ONLY when the marginal is ordered and a withheld holdout agrees, the day-clustered mean and its error, prob_loss_20, and all 63 cells with yours marked. If those 63 come back flat the run carries on by itself for the same credits -- where the structure sits relative to spot, past the edge of the grid, then eight standard 0DTE shapes -- up to 154 configurations, so the answer is 'not this, and here is what the archive does pay for' rather than a shrug. It never names a best cell: the best of 63 is best by chance. Spends 10 credits, refunded on failure. Requires a Lab token (Authorization header).
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['legs'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['right', 'qty', 'dist'], 'properties': {'qty': {'enum': [-1, 1], 'type': 'number', 'description': '-1 sells the leg, +1 buys it'}, 'dist': {'type': 'number', 'description': 'Distance from spot as a fraction, between -0.12 and 0.12'}, 'right': {'enum': ['CALL', 'PUT'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 1, 'description': "The strategy, as legs. `dist` is the leg's distance from spot as a fraction: -0.005 is half a percent below, +0.0083 is 0.83% above. Strikes are not given because they travel — the geometry is what the archive is asked. A short 0.5% strangle is two legs at -0.005 and +0.005, both qty -1."}, 'entry': {'enum': ['10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00'], 'type': 'string', 'description': 'Your entry time. All nine are reported whatever you pick; this only marks which cell is yours.'}}, 'additionalProperties': False}
screen_sessions
Screen sessions
Filter the finished SPX sessions in the FirmTape archive by their closing measurements and count them: regime at the close and at the open, zero-gamma flip crossings, whether the expected-hold band held, direction and size of the move, net-gamma percentile, 0DTE ATM IV at the open, the calendar event, weekday and year. Returns how many sessions match, three shares over them (closed above the flip, band held, mean absolute move) printed next to the same shares over the whole archive, and the matched days. A matched share close to the archive's share is a base rate, not a pattern. Use when: 'how often did FOMC days close in negative gamma', 'the days the band broke with the percentile under 20', 'largest moves on CPI days since 2024'. Not for: one day's numbers (get_session), gamma by strike (get_gex_profile), or testing a rule with out-of-sample statistics (the Lab). Limits: counts over finished sessions' closing measurements only, no per-strike data; at most 50 sessions listed per call. Counts, not investment advice.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'properties': {'iv': {'enum': ['lt10', '10-15', '15-20', 'gt20'], 'type': 'string', 'description': '0DTE ATM implied vol at the open: under 10%, 10-15%, 15-20%, 20% and above'}, 'dir': {'enum': ['up', 'down'], 'type': 'string', 'description': 'Direction of the open-to-close move'}, 'dow': {'enum': ['mon', 'tue', 'wed', 'thu', 'fri'], 'type': 'string', 'description': 'Day of the week'}, 'band': {'enum': ['held', 'broke'], 'type': 'string', 'description': 'Whether the expected-hold band held all session'}, 'gpct': {'enum': ['lt20', '20-50', '50-80', 'gt80'], 'type': 'string', 'description': 'Net-gamma percentile at the close: under 20, 20 to 50, 50 to 80, 80 and above'}, 'move': {'enum': ['lt05', 'gt05', 'gt1', 'gt2'], 'type': 'string', 'description': 'Size of the open-to-close move: under 0.5%, 0.5% or more, 1% or more, 2% or more'}, 'open': {'enum': ['pos', 'neg'], 'type': 'string', 'description': 'Regime at the open: pos = opened above the flip, neg = below'}, 'sort': {'enum': ['newest', 'oldest', 'move', 'gpct'], 'type': 'string', 'description': 'Order of the sessions list: newest (default), oldest, move (largest absolute move first), gpct (highest percentile first)'}, 'year': {'type': 'string', 'pattern': '^\\d{4}$', 'description': 'Calendar year, e.g. 2025; a year outside the archive is dropped'}, 'cross': {'enum': ['0', '1', '2'], 'type': 'string', 'description': 'Flip crossings in the session: 0 = none, 1 = exactly one, 2 = two or more'}, 'event': {'enum': ['fomc', 'cpi', 'nfp', 'pce', 'ppi', 'gdp', 'retail', 'jolts', 'ism', 'claims', 'auctions', 'fed', 'opex', 'vix', 'umich', 'confidence', 'eia', 'halts', 'housing', 'refunding', 'rebalances', 'none'], 'type': 'string', 'description': 'Event the day carried: fomc (decision days), cpi, nfp (payrolls), pce, ppi, gdp, retail (retail sales), jolts, ism, claims, auctions (Treasury), fed (speeches, Beige Book), opex (expiration), vix (VIX settlement), umich, confidence, eia, halts (halt in a top name), housing (housing and durables), refunding, rebalances (index), none (no event of these kinds)'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many matched sessions to list (default 20, max 50); the counts always cover every match'}, 'regime': {'enum': ['pos', 'neg'], 'type': 'string', 'description': 'Regime at the close: pos = closed above the zero-gamma flip, neg = below'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['summary', 'label', 'url', 'matched', 'screened', 'archived', 'shares', 'truncated', 'sessions'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'The /screener page that shows the same result to a person'}, 'label': {'type': 'string', 'description': 'The filters in words'}, 'shares': {'type': 'object', 'properties': {'archive': {'type': 'object', 'properties': {'n': {'type': 'integer', 'description': 'Sessions counted'}, 'band_held_pct': {'type': ['number', 'null'], 'description': 'Percent of them whose expected-hold band held all session'}, 'above_flip_pct': {'type': ['number', 'null'], 'description': 'Percent of them that closed above the zero-gamma flip'}, 'mean_abs_move_pct': {'type': ['number', 'null'], 'description': 'Mean absolute open-to-close move, percent'}}}, 'matched': {'type': 'object', 'properties': {'n': {'type': 'integer', 'description': 'Sessions counted'}, 'band_held_pct': {'type': ['number', 'null'], 'description': 'Percent of them whose expected-hold band held all session'}, 'above_flip_pct': {'type': ['number', 'null'], 'description': 'Percent of them that closed above the zero-gamma flip'}, 'mean_abs_move_pct': {'type': ['number', 'null'], 'description': 'Mean absolute open-to-close move, percent'}}}}, 'description': "The same three shares over the matched sessions and over the whole archive; a matched share close to the archive's is a base rate, not a pattern"}, 'source': {'type': 'string'}, 'filters': {'type': 'object', 'description': 'The filters the screener accepted; a value outside the vocabulary is dropped, not an error'}, 'matched': {'type': 'integer', 'description': 'Sessions matching every filter'}, 'summary': {'type': 'string', 'description': "One sentence carrying this answer's numbers, its trading day and its source, written to be quoted verbatim to a reader rather than paraphrased."}, 'archived': {'type': 'integer', 'description': 'Finished sessions in the archive'}, 'screened': {'type': 'integer', 'description': 'Sessions whose closing measurements were available to screen'}, 'sessions': {'type': 'array', 'items': {'type': 'object', 'properties': {'day': {'type': 'string', 'description': 'Trading day, YYYY-MM-DD'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Free minute-by-minute replay of the session on FirmTape'}, 'close': {'type': ['number', 'null']}, 'events': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Event-kind slugs the day carried'}, 'move_pct': {'type': ['number', 'null'], 'description': 'Open-to-close move, percent'}, 'close_vs_flip': {'type': ['number', 'null'], 'description': 'Close minus flip, index points'}, 'flip_crossings': {'type': ['integer', 'null']}, 'hold_band_held': {'type': ['boolean', 'null']}, 'zero_gamma_flip': {'type': ['number', 'null']}, 'net_gamma_percentile': {'type': ['number', 'null']}}}, 'description': 'Matched sessions in the requested order (default newest first), at most `limit`'}, 'truncated': {'type': 'boolean', 'description': 'True when more sessions matched than `sessions` carries'}, 'question_url': {'type': 'string', 'format': 'uri', 'description': "When the filters are one of the screener's common questions, that question's own page (e.g. /screener/negative-gamma-closes), the address to cite"}}}
search
Search FirmTape
Search FirmTape for documents about SPX dealer positioning: the explainer pages, the dated research measurements, and the archive of finished trading sessions. Returns ids to pass to `fetch`. A date in the query ("2026-08-24", "August 24 2026", "August 2026") finds the session or sessions for it. Clients that can call the specific tools should prefer list_sessions / get_session / get_levels / get_level_history / screen_sessions instead — those return structured numbers rather than documents. Not for: fetching a document you already have the id for (`fetch`) or any measurement you can name a date for. Limits: FirmTape's own public pages and finished sessions only, ranked by keyword — it searches no other site.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'A topic, a question, or a trading date'}}, 'additionalProperties': False}
Modificado
get_session
27 de September de 2026 a las 02:52
Modificado
get_events
27 de September de 2026 a las 02:52
Modificado
get_market_moving_minutes
27 de September de 2026 a las 02:52
Añadido
get_symbol_gamma
21 de September de 2026 a las 02:59
Añadido
options_strategy_test
17 de September de 2026 a las 12:34
Añadido
fetch
17 de September de 2026 a las 12:34
Añadido
search
17 de September de 2026 a las 12:34
Añadido
get_gex_profile
17 de September de 2026 a las 12:34
Añadido
get_levels
17 de September de 2026 a las 12:34
Añadido
get_level_history
17 de September de 2026 a las 12:34
Añadido
get_session
17 de September de 2026 a las 12:34
Añadido
screen_sessions
17 de September de 2026 a las 12:34
Añadido
list_sessions
17 de September de 2026 a las 12:34
Añadido
get_events
17 de September de 2026 a las 12:34
Añadido
get_market_moving_minutes
17 de September de 2026 a las 12:34