Server definition
- Hash
- sha256:76525fdd2d1ddc868e1f5d5091412b8197fd21062e8ca9a6bb48d01e9376c7bc
- What it is
- What a remote MCP server returned when asked what it offers: 12 tools
The blob, as servednamed by its sha256
{
"instructions": "FirmTape SPX, ES and NQ dealer gamma. Free tools (REPLAY): 1,000+ finished SPX sessions, each with the zero-gamma flip, call/put walls and net-gamma percentile — measurements (screen_sessions filters and counts them across the archive) verifiable against the free history at https://firmtape.com, deliberately no buy/sell signals. get_symbol_gamma answers for about a hundred more index, ETF and stock option chains (QQQ, SPY, IWM, NDX, RUT, sector ETFs, NVDA, TSLA and others, listed at https://firmtape.com/gex): the conventional volume and open-interest books, flip and walls from five-minute chain snapshots, with a trust grade; say it is not a tape-signed book. ES and NQ (MES, MNQ) are the SPX and NDX books moved by the day's basis (future minus index, from put-call parity on the index options; no CME data): get_levels, get_session, get_level_history and get_gex_profile take symbol ES for past days, and get_symbol_gamma takes ES or NQ for the latest levels. A day without a measured basis answers with the index levels and says so. lab_* tools drive LAB, the backtester (compile an idea → backtest → quant optimize, honest out-of-sample verdicts) and need the user's Lab token as an Authorization header: created at https://firmtape.com/account, jobs spend Lab credits. `search` and `fetch` are the generic document pair ChatGPT uses; a client that can call the tools above should prefer them, since they answer with numbers rather than prose.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"id": {
"description": "An id from `search`, a FirmTape URL, or a YYYY-MM-DD trading day",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "fetch",
"outputSchema": null
},
{
"description": "What the free FirmTape SPX archive holds: the first and last finished session, how many sessions, and the NYSE trading days in that span that are MISSING from it (weekdays minus US market holidays; early closes count as trading days), optionally inside a from/to window. Use when: 'is 2024-03-15 in the archive', 'how complete is 2023', 'which days are missing' before a study that needs every session. Not for: the newest days themselves (list_sessions) or any measurement (get_session). Limits: the trading calendar covers 2022 to 2026; missing days are reported, never filled in.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"from": {
"description": "First day of the window, YYYY-MM-DD (default: the archive's first session)",
"examples": [
"2024-01-01"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"to": {
"description": "Last day of the window, YYYY-MM-DD (default: the archive's last session)",
"examples": [
"2024-12-31"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
},
"type": "object"
},
"name": "get_coverage",
"outputSchema": {
"properties": {
"calendar": {
"description": "Which trading calendar the missing days were computed against",
"type": "string"
},
"data_as_of": {
"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"
]
},
"first_session": {
"description": "Oldest session the archive holds in the window, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"last_session": {
"description": "Newest session the archive holds in the window, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"missing": {
"description": "NYSE trading days in that span the archive does not hold, oldest first",
"items": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"type": "array"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"sessions": {
"description": "Sessions the archive holds in the window",
"type": "integer"
},
"summary": {
"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.",
"type": "string"
},
"trading_days": {
"description": "NYSE trading days from first_session to last_session, inclusive",
"type": "integer"
},
"unchecked": {
"description": "Archived sessions outside the calendar's years, so not checked for gaps",
"items": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"type": "array"
},
"window": {
"description": "The from/to filter as applied (null when not given)",
"properties": {
"from": {
"type": [
"string",
"null"
]
},
"to": {
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"required": [
"summary",
"first_session",
"last_session",
"sessions",
"trading_days",
"missing",
"window",
"calendar",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"from": {
"description": "First day, YYYY-MM-DD (default today, ET)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"impact": {
"description": "Lowest impact to include (default med: high and medium)",
"enum": [
"high",
"med",
"low"
],
"type": "string"
},
"to": {
"description": "Last day, YYYY-MM-DD (default from + 6 days; at most 31 days)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
},
"type": "object"
},
"name": "get_events",
"outputSchema": {
"properties": {
"data_as_of": {
"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"
]
},
"events": {
"description": "Scheduled US market events in the window, in date and time order",
"items": {
"properties": {
"book": {
"description": "What the dealer book did around this kind of event, from the archive, when measured: the flip and the gamma sign at the start of the window",
"type": "string"
},
"date": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"impact": {
"description": "high, med or low",
"type": "string"
},
"in_session": {
"description": "True when the event falls inside 09:30-16:00 ET",
"type": "boolean"
},
"kind": {
"description": "fomc, macro, fed, auction, earn, opex, early or ff",
"type": "string"
},
"name": {
"type": "string"
},
"prints": {
"description": "The release's numbers, when known: label, forecast, prior and (after the print) actual, as the release quotes them",
"items": {
"properties": {
"actual": {
"type": [
"string",
"null"
]
},
"forecast": {
"type": [
"string",
"null"
]
},
"label": {
"type": "string"
},
"prior": {
"type": [
"string",
"null"
]
}
},
"required": [
"label"
],
"type": "object"
},
"type": "array"
},
"time": {
"description": "Clock time in ET, HH:MM; empty for an all-day item such as expiration",
"type": "string"
},
"url": {
"description": "Where to read the event itself (statement, release, report), when known",
"type": "string"
},
"usually": {
"description": "What usually follows this kind of event, from the archive, when measured",
"type": "string"
}
},
"required": [
"date",
"time",
"kind",
"name",
"impact",
"in_session"
],
"type": "object"
},
"type": "array"
},
"from": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"summary": {
"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.",
"type": "string"
},
"to": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
}
},
"required": [
"summary",
"from",
"to",
"events",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"book": {
"description": "Which book's ladder to read (default volume, the chart's book). open_interest is the convention rival tools print.",
"enum": [
"measured",
"open_interest",
"volume"
],
"type": "string"
},
"contract": {
"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"
},
"day": {
"description": "A finished trading day, YYYY-MM-DD. Call list_sessions if unsure which days exist.",
"examples": [
"2026-08-24"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"expiry_scope": {
"description": "all = every expiry the session's book was pulled with (default); 0dte = the same-day slice alone",
"enum": [
"all",
"0dte"
],
"type": "string"
},
"minute": {
"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.",
"examples": [
"10:30"
],
"pattern": "^\\d{2}:\\d{2}$",
"type": "string"
},
"strikes_around_spot": {
"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.",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"symbol": {
"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"
}
},
"required": [
"day"
],
"type": "object"
},
"name": "get_gex_profile",
"outputSchema": {
"properties": {
"basis": {
"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"
]
},
"book": {
"description": "Which book was read: measured, open_interest or volume",
"type": "string"
},
"book_note": {
"description": "How this book is built, and what it can and cannot be compared with",
"type": "string"
},
"data_as_of": {
"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"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"expiry_scope": {
"description": "all = every expiry this session's book was pulled with; 0dte = the same-day slice alone",
"type": "string"
},
"heaviest": {
"description": "The largest strikes by absolute gamma inside the window, heaviest first",
"items": {
"properties": {
"gamma": {
"type": [
"number",
"null"
]
},
"strike": {
"type": "number"
}
},
"required": [
"strike",
"gamma"
],
"type": "object"
},
"type": "array"
},
"levels": {
"description": "Dealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one",
"properties": {
"call_resistance": {
"description": "Largest positive-gamma strike above spot",
"type": [
"number",
"null"
]
},
"put_support": {
"description": "Largest positive-gamma strike below spot",
"type": [
"number",
"null"
]
},
"zero_gamma_flip": {
"description": "Strike where net dealer gamma changes sign",
"type": [
"number",
"null"
]
}
},
"required": [
"zero_gamma_flip",
"call_resistance",
"put_support"
],
"type": "object"
},
"minute": {
"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.",
"type": "string"
},
"net_gamma_in_window": {
"description": "Sum of the returned strikes — a window total, not the session's net gamma",
"type": [
"number",
"null"
]
},
"note": {
"description": "Present when a future was asked and its basis is not measured for the day",
"type": "string"
},
"replay": {
"description": "Free minute-by-minute replay of the session on FirmTape",
"format": "uri",
"type": "string"
},
"requested_symbol": {
"description": "Present when a future was asked but the day has no measured basis, so the answer is SPX's",
"type": "string"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"spot": {
"description": "SPX at that minute",
"type": [
"number",
"null"
]
},
"strikes": {
"description": "Dealer gamma by strike at that minute, lowest strike first",
"items": {
"properties": {
"gamma": {
"type": [
"number",
"null"
]
},
"strike": {
"type": "number"
}
},
"required": [
"strike",
"gamma"
],
"type": "object"
},
"type": "array"
},
"strikes_returned": {
"description": "How many strikes the window actually held",
"type": "integer"
},
"summary": {
"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.",
"type": "string"
},
"symbol": {
"description": "What the prices are in: SPX, or ES / MES when asked and the day's basis is measured",
"type": "string"
},
"unit": {
"description": "Unit of every gamma number below",
"type": "string"
}
},
"required": [
"summary",
"day",
"minute",
"book",
"expiry_scope",
"unit",
"spot",
"levels",
"strikes",
"strikes_returned",
"net_gamma_in_window",
"heaviest",
"replay",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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). ES: pass symbol ES (or MES) for the same series in E-mini prices, each session moved by its own ES basis. 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contract": {
"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"
},
"days": {
"description": "How many of the most recent finished sessions to read (default 20, max 40). Ignored when `from` is given.",
"maximum": 40,
"minimum": 2,
"type": "integer"
},
"from": {
"description": "Start of an explicit window, YYYY-MM-DD (inclusive). Overrides `days`.",
"examples": [
"2026-08-01"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"symbol": {
"description": "SPX (default), or ES / MES: each session's levels and close moved by that session's ES basis at its close. Sessions without a measured basis are left out and listed in no_basis; with fewer than two measured, the answer is SPX's and says so.",
"examples": [
"SPX",
"ES",
"MES"
],
"type": "string"
},
"to": {
"description": "End of an explicit window, YYYY-MM-DD (inclusive). Defaults to the newest finished session.",
"examples": [
"2026-08-24"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
},
"type": "object"
},
"name": "get_level_history",
"outputSchema": {
"properties": {
"basis": {
"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"
]
},
"data_as_of": {
"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"
]
},
"from": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"missing": {
"description": "Days in the requested window with no payload in the archive; the window is reported over what was actually read",
"items": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"type": "array"
},
"movement": {
"description": "How the level set travelled across the window. Descriptive statistics, not a forecast.",
"properties": {
"closes_above_flip": {
"description": "Sessions that closed above the zero-gamma flip",
"type": "integer"
},
"closes_below_flip": {
"type": "integer"
},
"flip_high": {
"type": [
"number",
"null"
]
},
"flip_low": {
"type": [
"number",
"null"
]
},
"flip_mean_abs_daily_change": {
"description": "Mean |flip_change| over the window — how much the level moves on an average day",
"type": [
"number",
"null"
]
},
"flip_net_change": {
"description": "Oldest flip to newest flip, index points",
"type": [
"number",
"null"
]
},
"sessions_counted": {
"type": "integer"
}
},
"required": [
"sessions_counted",
"flip_low",
"flip_high",
"flip_net_change",
"flip_mean_abs_daily_change",
"closes_above_flip",
"closes_below_flip"
],
"type": "object"
},
"no_basis": {
"description": "ES only: sessions in the window with no measured basis, left out of the ES series rather than shown at SPX prices",
"items": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"type": "array"
},
"note": {
"description": "Present when a future was asked and its basis is not measured for the day",
"type": "string"
},
"requested_symbol": {
"description": "Present when a future was asked but the day has no measured basis, so the answer is SPX's",
"type": "string"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"sessions": {
"description": "One entry per finished session, NEWEST FIRST, same order as list_sessions",
"items": {
"properties": {
"basis": {
"description": "ES only: the session's basis at its close, index points, added to its levels and close",
"type": "number"
},
"call_resistance_change": {
"type": [
"number",
"null"
]
},
"close": {
"type": [
"number",
"null"
]
},
"close_minus_flip": {
"description": "Close minus zero-gamma flip; positive = closed above",
"type": [
"number",
"null"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"flip_change": {
"description": "This session's flip minus the PREVIOUS session's flip, index points; null on the oldest entry",
"type": [
"number",
"null"
]
},
"levels": {
"description": "Dealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one",
"properties": {
"call_resistance": {
"description": "Largest positive-gamma strike above spot",
"type": [
"number",
"null"
]
},
"put_support": {
"description": "Largest positive-gamma strike below spot",
"type": [
"number",
"null"
]
},
"zero_gamma_flip": {
"description": "Strike where net dealer gamma changes sign",
"type": [
"number",
"null"
]
}
},
"required": [
"zero_gamma_flip",
"call_resistance",
"put_support"
],
"type": "object"
},
"put_support_change": {
"type": [
"number",
"null"
]
}
},
"required": [
"day",
"levels",
"close",
"close_minus_flip",
"flip_change"
],
"type": "object"
},
"type": "array"
},
"summary": {
"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.",
"type": "string"
},
"symbol": {
"description": "What the prices are in: SPX, or ES / MES when asked and the day's basis is measured",
"type": "string"
},
"to": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
}
},
"required": [
"summary",
"from",
"to",
"sessions",
"movement",
"missing",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "Only the dealer-positioning level set for one finished SPX session: zero-gamma flip, call resistance, put support, 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). ES: pass symbol ES (or MES) for ES gamma levels, the SPX levels moved by the day's ES basis (future minus index from put-call parity; no CME data); NQ levels come from get_symbol_gamma. Limits: finished sessions only, one day per call.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contract": {
"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"
},
"day": {
"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.",
"examples": [
"2026-08-24"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"symbol": {
"description": "SPX (default), or ES / MES for the E-mini: the SPX book moved by the day's ES basis (future minus index from put-call parity). A day without a measured basis answers with SPX index levels and says so.",
"examples": [
"SPX",
"ES",
"MES"
],
"type": "string"
}
},
"required": [
"day"
],
"type": "object"
},
"name": "get_levels",
"outputSchema": {
"properties": {
"basis": {
"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"
]
},
"close": {
"description": "Session close",
"type": [
"number",
"null"
]
},
"close_minus_flip": {
"description": "Close minus zero-gamma flip, index points; positive = closed above the flip",
"type": [
"number",
"null"
]
},
"data_as_of": {
"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"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"levels": {
"description": "Dealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one",
"properties": {
"call_resistance": {
"description": "Largest positive-gamma strike above spot",
"type": [
"number",
"null"
]
},
"put_support": {
"description": "Largest positive-gamma strike below spot",
"type": [
"number",
"null"
]
},
"zero_gamma_flip": {
"description": "Strike where net dealer gamma changes sign",
"type": [
"number",
"null"
]
}
},
"required": [
"zero_gamma_flip",
"call_resistance",
"put_support"
],
"type": "object"
},
"note": {
"description": "Present when a future was asked and its basis is not measured for the day",
"type": "string"
},
"replay": {
"description": "Free minute-by-minute replay of the session on FirmTape",
"format": "uri",
"type": "string"
},
"requested_symbol": {
"description": "Present when a future was asked but the day has no measured basis, so the answer is SPX's",
"type": "string"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"summary": {
"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.",
"type": "string"
},
"symbol": {
"description": "What the prices are in: SPX, or ES / MES when asked and the day's basis is measured",
"type": "string"
}
},
"required": [
"summary",
"day",
"levels",
"close",
"close_minus_flip",
"replay",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"day": {
"description": "The session, YYYY-MM-DD (default: the last finished session)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"tape_only": {
"description": "Only minutes the tape confirmed (default true; false adds the flashes the tape ignored and the calendar events it did not react to)",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_market_moving_minutes",
"outputSchema": {
"properties": {
"data_as_of": {
"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"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"minutes": {
"description": "The marked minutes of the session in clock order",
"items": {
"properties": {
"desks": {
"description": "How many public desks carried an item inside three minutes (flash rows)",
"type": "integer"
},
"flash_at": {
"description": "HH:MM:SS ET of the first desk's item (flash rows)",
"type": [
"string",
"null"
]
},
"flip": {
"description": "The zero-gamma flip at the minute",
"type": [
"number",
"null"
]
},
"kind": {
"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)",
"type": "string"
},
"label": {
"description": "FirmTape's own label: the event's name, a headline class, or 'no headline, the book did this'. Never a headline's text.",
"type": "string"
},
"move_15": {
"description": "Index points from the minute before to fifteen minutes on",
"type": [
"number",
"null"
]
},
"move_5": {
"description": "Index points from the minute before to five minutes on",
"type": [
"number",
"null"
]
},
"publisher": {
"description": "The publisher of that article",
"type": "string"
},
"tag": {
"description": "geopolitics, macro, central_bank, energy, rates, stock, clock or other",
"type": [
"string",
"null"
]
},
"tape_confirmed": {
"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)",
"type": "boolean"
},
"time": {
"description": "Clock minute in ET, HH:MM",
"type": "string"
},
"url": {
"description": "The first official article on the item, from the publisher's own feed (flash rows, when matched)",
"type": "string"
},
"url_at": {
"description": "HH:MM ET the article appeared",
"type": "string"
},
"usually": {
"description": "What usually followed this class of minute across every session measured: count, median 15-minute move, share that continued the 5-minute move",
"type": "string"
},
"z": {
"description": "The one-minute spot move in sigmas of the trailing half hour",
"type": [
"number",
"null"
]
}
},
"required": [
"time",
"kind",
"tape_confirmed",
"label"
],
"type": "object"
},
"type": "array"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"summary": {
"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.",
"type": "string"
}
},
"required": [
"summary",
"day",
"minutes",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "Everything FirmTape measured for ONE finished SPX session: OHLC and VWAP, the zero-gamma flip and how often price crossed it, call/put walls, 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). ES: pass symbol ES (or MES) for the same day in E-mini prices, the SPX book moved by the day's ES basis. Limits: finished sessions only, one day per call. Measurements only — FirmTape deliberately publishes no buy/sell signals.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contract": {
"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"
},
"day": {
"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.",
"examples": [
"2026-08-24"
],
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"symbol": {
"description": "SPX (default), or ES / MES for the E-mini: the SPX book moved by the day's ES basis (future minus index from put-call parity). A day without a measured basis answers with SPX index levels and says so.",
"examples": [
"SPX",
"ES",
"MES"
],
"type": "string"
}
},
"required": [
"day"
],
"type": "object"
},
"name": "get_session",
"outputSchema": {
"properties": {
"basis": {
"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"
]
},
"data_as_of": {
"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"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"dealer_positioning": {
"properties": {
"first_flip_crossing": {
"description": "Minute (HH:MM ET) of the first crossing, null if none",
"type": [
"string",
"null"
]
},
"flip_crossings": {
"description": "How many times spot crossed the zero-gamma flip",
"type": "integer"
},
"levels": {
"description": "Dealer-positioning levels in SPX index points (in ES points when `symbol` is ES or MES); null when the session did not produce one",
"properties": {
"call_resistance": {
"description": "Largest positive-gamma strike above spot",
"type": [
"number",
"null"
]
},
"put_support": {
"description": "Largest positive-gamma strike below spot",
"type": [
"number",
"null"
]
},
"zero_gamma_flip": {
"description": "Strike where net dealer gamma changes sign",
"type": [
"number",
"null"
]
}
},
"required": [
"zero_gamma_flip",
"call_resistance",
"put_support"
],
"type": "object"
},
"net_gamma_percentile": {
"description": "Net dealer gamma vs the archive, 0-100",
"type": [
"number",
"null"
]
}
},
"required": [
"net_gamma_percentile",
"levels",
"flip_crossings",
"first_flip_crossing"
],
"type": "object"
},
"events": {
"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",
"items": {
"properties": {
"after": {
"description": "spot over the 15 minutes after the event, the flip before and after, the net gamma sign; only for events inside the session",
"type": "string"
},
"impact": {
"type": "string"
},
"name": {
"type": "string"
},
"prints": {
"items": {
"properties": {
"actual": {
"type": [
"string",
"null"
]
},
"forecast": {
"type": [
"string",
"null"
]
},
"label": {
"type": "string"
},
"prior": {
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"time": {
"description": "HH:MM ET; empty for an all-day item",
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"time",
"name",
"impact"
],
"type": "object"
},
"type": "array"
},
"note": {
"description": "Present when a future was asked and its basis is not measured for the day",
"type": "string"
},
"replay": {
"description": "Free minute-by-minute replay of the session on FirmTape",
"format": "uri",
"type": "string"
},
"requested_symbol": {
"description": "Present when a future was asked but the day has no measured basis, so the answer is SPX's",
"type": "string"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"session": {
"description": "SPX price facts for the session",
"properties": {
"atm_iv_open": {
"description": "0DTE at-the-money implied vol at the open, in percent (7.5 = 7.5%)",
"type": [
"number",
"null"
]
},
"change_pct": {
"description": "Close vs open, percent",
"type": [
"number",
"null"
]
},
"close": {
"type": [
"number",
"null"
]
},
"high": {
"type": [
"number",
"null"
]
},
"low": {
"type": [
"number",
"null"
]
},
"open": {
"type": [
"number",
"null"
]
},
"vwap_close": {
"description": "Session VWAP at the close",
"type": [
"number",
"null"
]
}
},
"required": [
"open",
"close",
"high",
"low",
"change_pct",
"vwap_close",
"atm_iv_open"
],
"type": "object"
},
"summary": {
"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.",
"type": "string"
},
"symbol": {
"description": "What the prices are in: SPX, or ES / MES when asked and the day's basis is measured",
"type": "string"
}
},
"required": [
"summary",
"day",
"session",
"dealer_positioning",
"replay",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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), and the E-mini futures ES and NQ (MES, MNQ): ES/NQ are the SPX/NDX books moved by the day's basis (future minus index, from put-call parity on the index options; no CME data). 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, including ES or NQ gamma levels. Not for: SPX or ES history or a past date (get_session, get_levels, get_gex_profile, which take symbol ES for past days); 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contract": {
"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",
"NQH27"
],
"pattern": "^M?(ES|NQ)[FGHJKMNQUVXZ]\\d{1,2}$",
"type": "string"
},
"symbol": {
"description": "The ticker, or ES / MES / NQ / MNQ (a dated code such as ESZ26 works too). Carried symbols are listed at https://firmtape.com/gex; an unknown ticker returns an error naming that page.",
"examples": [
"QQQ",
"NVDA",
"ES",
"NQ"
],
"pattern": "^\\$?[A-Za-z]{1,5}(\\d{1,2})?$",
"type": "string"
}
},
"required": [
"symbol"
],
"type": "object"
},
"name": "get_symbol_gamma",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "How many days to return (default 10, max 50)",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_sessions",
"outputSchema": {
"properties": {
"data_as_of": {
"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"
]
},
"newest": {
"description": "Trading days, newest first",
"items": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"type": "array"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"summary": {
"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.",
"type": "string"
},
"total_sessions": {
"description": "How many finished sessions the free archive holds",
"type": "integer"
}
},
"required": [
"summary",
"total_sessions",
"newest",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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, 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, two shares over them (closed above the flip, 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 that closed below the flip 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cross": {
"description": "Flip crossings in the session: 0 = none, 1 = exactly one, 2 = two or more",
"enum": [
"0",
"1",
"2"
],
"type": "string"
},
"dir": {
"description": "Direction of the open-to-close move",
"enum": [
"up",
"down"
],
"type": "string"
},
"dow": {
"description": "Day of the week",
"enum": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"type": "string"
},
"event": {
"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)",
"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"
},
"gpct": {
"description": "Net-gamma percentile at the close: under 20, 20 to 50, 50 to 80, 80 and above",
"enum": [
"lt20",
"20-50",
"50-80",
"gt80"
],
"type": "string"
},
"iv": {
"description": "0DTE ATM implied vol at the open: under 10%, 10-15%, 15-20%, 20% and above",
"enum": [
"lt10",
"10-15",
"15-20",
"gt20"
],
"type": "string"
},
"limit": {
"description": "How many matched sessions to list (default 20, max 50); the counts always cover every match",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"move": {
"description": "Size of the open-to-close move: under 0.5%, 0.5% or more, 1% or more, 2% or more",
"enum": [
"lt05",
"gt05",
"gt1",
"gt2"
],
"type": "string"
},
"open": {
"description": "Regime at the open: pos = opened above the flip, neg = below",
"enum": [
"pos",
"neg"
],
"type": "string"
},
"regime": {
"description": "Regime at the close: pos = closed above the zero-gamma flip, neg = below",
"enum": [
"pos",
"neg"
],
"type": "string"
},
"sort": {
"description": "Order of the sessions list: newest (default), oldest, move (largest absolute move first), gpct (highest percentile first)",
"enum": [
"newest",
"oldest",
"move",
"gpct"
],
"type": "string"
},
"year": {
"description": "Calendar year, e.g. 2025; a year outside the archive is dropped",
"pattern": "^\\d{4}$",
"type": "string"
}
},
"type": "object"
},
"name": "screen_sessions",
"outputSchema": {
"properties": {
"archived": {
"description": "Finished sessions in the archive",
"type": "integer"
},
"data_as_of": {
"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"
]
},
"filters": {
"description": "The filters the screener accepted; a value outside the vocabulary is dropped, not an error",
"type": "object"
},
"label": {
"description": "The filters in words",
"type": "string"
},
"matched": {
"description": "Sessions matching every filter",
"type": "integer"
},
"question_url": {
"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",
"format": "uri",
"type": "string"
},
"screened": {
"description": "Sessions whose closing measurements were available to screen",
"type": "integer"
},
"server_version": {
"description": "Version of the FirmTape MCP server that produced this answer",
"type": "string"
},
"sessions": {
"description": "Matched sessions in the requested order (default newest first), at most `limit`",
"items": {
"properties": {
"close": {
"type": [
"number",
"null"
]
},
"close_vs_flip": {
"description": "Close minus flip, index points",
"type": [
"number",
"null"
]
},
"day": {
"description": "Trading day, YYYY-MM-DD",
"type": "string"
},
"events": {
"description": "Event-kind slugs the day carried",
"items": {
"type": "string"
},
"type": "array"
},
"flip_crossings": {
"type": [
"integer",
"null"
]
},
"move_pct": {
"description": "Open-to-close move, percent",
"type": [
"number",
"null"
]
},
"net_gamma_percentile": {
"type": [
"number",
"null"
]
},
"url": {
"description": "Free minute-by-minute replay of the session on FirmTape",
"format": "uri",
"type": "string"
},
"zero_gamma_flip": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"shares": {
"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",
"properties": {
"archive": {
"properties": {
"above_flip_pct": {
"description": "Percent of them that closed above the zero-gamma flip",
"type": [
"number",
"null"
]
},
"mean_abs_move_pct": {
"description": "Mean absolute open-to-close move, percent",
"type": [
"number",
"null"
]
},
"n": {
"description": "Sessions counted",
"type": "integer"
}
},
"type": "object"
},
"matched": {
"properties": {
"above_flip_pct": {
"description": "Percent of them that closed above the zero-gamma flip",
"type": [
"number",
"null"
]
},
"mean_abs_move_pct": {
"description": "Mean absolute open-to-close move, percent",
"type": [
"number",
"null"
]
},
"n": {
"description": "Sessions counted",
"type": "integer"
}
},
"type": "object"
}
},
"type": "object"
},
"source": {
"type": "string"
},
"summary": {
"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.",
"type": "string"
},
"truncated": {
"description": "True when more sessions matched than `sessions` carries",
"type": "boolean"
},
"url": {
"description": "The /screener page that shows the same result to a person",
"format": "uri",
"type": "string"
}
},
"required": [
"summary",
"label",
"url",
"matched",
"screened",
"archived",
"shares",
"truncated",
"sessions",
"data_as_of",
"server_version"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"query": {
"description": "A topic, a question, or a trading date",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:76525fdd2d1ddc868e1f5d5091412b8197fd21062e8ca9a6bb48d01e9376c7bc | sha256sum