{"server":{"name":"orats","version":"0.1.0","mcp":"https://mcp.orats.com/mcp"},"tools":[{"name":"delete_intraday_backtest","title":"Delete an intraday backtest","description":"Permanently delete an intraday backtest and its results from the account.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Delete an intraday backtest","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_catalog","title":"Backtest finder catalog","description":"Which tickers and strategies the ORATS backtest finder has precomputed backtests for, with counts. Filter with ticker.","inputSchema":{"type":"object","properties":{"ticker":{"description":"Slice the catalog to one or more comma-separated tickers","type":"string"}},"additionalProperties":false},"annotations":{"title":"Backtest finder catalog","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_input","title":"Backtest finder input settings","description":"The input configuration of a precomputed backtest, by the rootBaseId from a search_backtest_finder row.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"rootBaseId from a performance row"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder input settings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_returns","title":"Backtest finder daily returns","description":"Daily returns of a precomputed backtest, by the id from a search_backtest_finder row. Paged: limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder daily returns","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_stats","title":"Backtest finder summary stats","description":"Summary statistics and monthly returns for a precomputed backtest, by the id from a search_backtest_finder row.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder summary stats","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_backtest_finder_trades","title":"Backtest finder trade log","description":"Trade log of a precomputed backtest (one row per leg: date, option, ratio, P&L), by the id from a search_backtest_finder row. Paged: limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"id from a performance row"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Backtest finder trade log","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_cores","title":"Core volatility metrics (15-min delayed)","description":"ORATS core analytics per ticker, about 15 minutes delayed: implied vs forecast and historical volatility, IV percentile, skew (slope/deriv), term structure, earnings (wksNextErn, implied earnings move), dividends and liquidity. 340 columns, so pick fields. IV, HV and borrow values are in percentage points (28.8 = 28.8%). Classic screen: iv30d/orFcst20d above 1.15 = rich, below 0.85 = cheap.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Core volatility metrics (15-min delayed)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_ivrank","title":"IV rank and percentile (15-min delayed)","description":"Implied-volatility rank and percentile over 1 month and 1 year, about 15 minutes delayed. The IV column is `iv` (ex-earnings 20-day), not iv30d. IV, HV and borrow values are in percentage points (28.8 = 28.8%). Percentile is more robust than rank for screening.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"IV rank and percentile (15-min delayed)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_delayed_tickers","title":"Ticker coverage","description":"Every symbol ORATS covers (including delisted ones) with the first and last date of data. Use it to check a symbol exists before other calls.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT,SPY\" (comma-separated, batched automatically). Omit for every active ticker (large: combine with fields, where, sort and limit). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Ticker coverage","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_cores","title":"Historical core volatility metrics (end of day)","description":"End-of-day ORATS core analytics from 2007 (implied vs forecast vs historical vol, IV percentile, skew, earnings, liquidity). Give tickers, a trade date, or both: a date alone returns every ticker that day; a ticker alone returns its full history. IV, HV and borrow values are in percentage points (28.8 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical core volatility metrics (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_dailies","title":"Daily underlying values (end of day)","description":"Daily open, high, low, close and volume for the underlying, split- and dividend-adjusted plus unadjusted columns.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Daily underlying values (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_divs","title":"Dividends (history)","description":"Dividend history: ex-date, amount, frequency (payments per year) and declared date. Includes revisions and projected future dividends; for one paid dividend per month use where \"divAmt > 0\" with uniqueBy \"substr(exDate,0,7)\".","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Dividends (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_earnings","title":"Earnings dates (history)","description":"Past earnings announcement dates with time of day (anncTod: 0900 before the open, 1630 after the close). Upcoming dates are not included: use get_delayed_cores fields wksNextErn and nextErnTod.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Earnings dates (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_hvs","title":"Historical volatility (end of day)","description":"Realized (historical) volatility from 1 day to 1000 days: open-to-close range (orHv*), close-to-close (clsHv*) and ex-earnings variants. IV, HV and borrow values are in percentage points (28.8 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical volatility (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_ivrank","title":"Historical IV rank and percentile (end of day)","description":"End-of-day implied-volatility rank and percentile (1 month and 1 year). The IV column is `iv` (ex-earnings 20-day). IV, HV and borrow values are in percentage points (28.8 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical IV rank and percentile (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_monies_forecast","title":"Historical forecast volatility by delta (end of day)","description":"End-of-day ORATS forecast volatility surface for a past trade date, one row per expiration. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical forecast volatility by delta (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_monies_implied","title":"Historical implied volatility by delta (end of day)","description":"End-of-day implied volatility surface for a past trade date: one row per expiration with ATM IV, skew and IV at fixed call deltas vol0..vol100. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical implied volatility by delta (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_splits","title":"Stock splits (history)","description":"Split history for a ticker: date and divisor.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Stock splits (history)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_strikes","title":"Historical option chain (end of day)","description":"End-of-day option chain for a past trade date (2007 on): every strike and expiration with quotes, smoothed IV and Greeks. Narrow with dte and delta ranges.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Historical option chain (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_strikes_options","title":"Historical option contract (end of day)","description":"End-of-day history of one contract chosen by ticker, expiration and strike (both call and put on each row). Omit tradeDate for the contract's whole life.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","expirDate","strike"],"additionalProperties":false},"annotations":{"title":"Historical option contract (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_eod_summaries","title":"Historical volatility summary (end of day)","description":"End-of-day constant-maturity volatility summary (IV term structure, ex-earnings IV, skew pillars, implied move) from 2007. Give tickers, a trade date, or both: a date alone returns every ticker that day; a ticker alone returns its full history. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD, or a range \"START,END\" (up to 60 trading days; weekends and holidays are skipped). End-of-day history runs from 2007 to the last trading day."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Historical volatility summary (end of day)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_monies_implied","title":"Implied volatility by delta at past minutes (intraday)","description":"Minute-level implied volatility surface (from August 2020): per expiration ATM IV, skew and IV at fixed call deltas, for one minute or a whole day. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Implied volatility by delta at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_strikes_chain","title":"Option chain at a past minute (intraday)","description":"The full option chain as of one past minute (from August 2020): quotes, smoothed IV and Greeks per strike. Minute timestamps only; narrow with dte and delta.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\". Whole days are not available for full chains. Coverage starts August 2020."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Option chain at a past minute (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_strikes_option","title":"One option at past minutes (intraday)","description":"One contract's minute-by-minute quotes, IV and Greeks (from January 2022), by ORATS compact symbol. Use a minute or a whole day.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"ORATS compact option symbol (no call/put letter; both sides come back per row): ROOT + YYMMDD expiry + strike x1000 padded to 8 digits, e.g. AAPL28012100250000 for AAPL 2028-01-21 $250."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"One option at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_intraday_summaries","title":"Volatility summary at past minutes (intraday)","description":"Minute-level constant-maturity volatility summary (from August 2020) for one minute or a whole day. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"One minute as YYYYMMDDHHMM in Eastern time (09:30-16:15), e.g. \"202410171400\", or a whole day as YYYY-MM-DD. Coverage starts August 2020."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","tradeDate"],"additionalProperties":false},"annotations":{"title":"Volatility summary at past minutes (intraday)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_hist_time_sales_option","title":"Option trade prints for a past day","description":"Every OPRA option trade for a ticker (or one contract) on a past day, from 2022-09-09: price, size, NBBO at the trade, inferred aggressor side, and delta/IV from the one-minute snapshot. Filter by expiration, call/put, strike, time window and minimum size.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"tradeDate":{"type":"string","description":"Trade date YYYY-MM-DD. History begins 2022-09-09; a day's tape is complete after about 20:30 ET (use get_live_time_sales_option during the session)."},"symbol":{"type":"string","description":"One OCC contract instead of a whole chain, e.g. SPY260821P00630000."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"callPut":{"type":"string","enum":["C","P"],"description":"Calls (C) or puts (P) only."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"from":{"type":"string","description":"Start of an Eastern-time window HH:MM, inclusive."},"to":{"type":"string","description":"End of an Eastern-time window HH:MM, inclusive."},"minSize":{"type":"integer","minimum":1,"description":"Only prints of at least this many contracts."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["tradeDate"],"additionalProperties":false},"annotations":{"title":"Option trade prints for a past day","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_inputs","title":"Intraday backtest inputs","description":"The inputs an intraday backtest was submitted with.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Intraday backtest inputs","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_results","title":"Intraday backtest results","description":"Results of a completed intraday backtest: summary statistics, monthly returns, diagnostics, warnings and the effective configuration the engine ran, plus the per-leg trade log (tradeId groups legs) and daily returns, paged with limit and order (latest or earliest).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Rows to return (default 100, max 1000)."},"order":{"type":"string","enum":["latest","earliest"],"description":"Which end of the series to return (default latest)."}},"required":["id"],"additionalProperties":false},"annotations":{"title":"Intraday backtest results","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_intraday_backtest_status","title":"Intraday backtest status","description":"Status of one intraday backtest by id (queued, running with progress, completed with headline stats, timed_out, or error with the reason), or every backtest on the account when id is omitted.","inputSchema":{"type":"object","properties":{"id":{"description":"backtestId to look up","type":"string"}},"additionalProperties":false},"annotations":{"title":"Intraday backtest status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_expirations","title":"Expiration dates (real time)","description":"All listed expiration dates for a ticker. With include=true, each date comes with its strikes and settlement time (expiryTod: am or pm).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"include":{"type":"boolean","description":"true returns {expirDate, strikes, expiryTod} objects instead of plain dates."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Expiration dates (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_monies_forecast","title":"Forecast volatility by delta, per expiration (real time)","description":"ORATS forecast volatility surface for one ticker: one row per expiration with forecast vol at fixed call deltas vol0..vol100 (vol50 is ATM). Compare with get_live_monies_implied to find mispriced expirations. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Forecast volatility by delta, per expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_monies_implied","title":"Implied volatility by delta, per expiration (real time)","description":"The implied volatility surface for one ticker in real time: one row per expiration with ATM IV (atmiv), skew (slope, deriv) and IV at fixed call deltas vol0..vol100 (a 25-delta put is vol75). IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Implied volatility by delta, per expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes","title":"Option chain (real time)","description":"Full option chain for one ticker in real time: every strike and expiration, call and put quotes on one row, ORATS smoothed IV (smvVol), and Greeks (one set per row from the call side; put delta = call delta - 1). Narrow with dte and delta ranges; chains can run to thousands of rows.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"dte":{"type":"string","description":"Days-to-expiration range \"min,max\", e.g. \"25,35\". Same-day expiry counts as 1."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Option chain (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes_monthly","title":"Option chain for one expiration (real time)","description":"Real-time chain for one ticker and one expiration date: quotes, smoothed IV and Greeks per strike. Get valid expirations from get_live_expirations.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"expiry":{"type":"string","description":"Expiration date YYYY-MM-DD (list them with get_live_expirations)."},"delta":{"type":"string","description":"Call-delta range \"min,max\" between 0 and 1, e.g. \"0.20,0.80\" (puts: put delta = call delta - 1)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker","expiry"],"additionalProperties":false},"annotations":{"title":"Option chain for one expiration (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_strikes_options","title":"Specific option contracts (real time)","description":"Real-time quote, smoothed IV and Greeks for specific contracts by OCC symbol, one row per contract (call or put as the symbol says).","inputSchema":{"type":"object","properties":{"tickers":{"type":"string","description":"OCC option symbols, comma-separated: ROOT + YYMMDD + C or P + strike x1000 padded to 8 digits, e.g. AAPL280121C00250000 (AAPL 2028-01-21 $250 call)."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["tickers"],"additionalProperties":false},"annotations":{"title":"Specific option contracts (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_summaries","title":"Volatility summary (real time)","description":"Real-time constant-maturity volatility summary: IV at 10 days to 1 year (iv10d..iv1y), ex-earnings IV, delta-skew pillars (dlt25Iv30d etc.), term-structure contango, implied move, borrow and risk-free rates. IV and borrow values are decimals (0.288 = 28.8%).","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol(s), e.g. \"AAPL\" or \"AAPL,MSFT\" (comma-separated, batched automatically). Class shares use an underscore, e.g. BRK_B."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"required":["ticker"],"additionalProperties":false},"annotations":{"title":"Volatility summary (real time)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_live_time_sales_option","title":"Option trade prints today (live)","description":"Today's OPRA option trades for a ticker (or one contract) as the session builds. Same filters as get_hist_time_sales_option. Outside market hours there is no live tape.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Underlying symbol, e.g. \"AAPL\" (one per call). Class shares use an underscore, e.g. BRK_B."},"symbol":{"type":"string","description":"One OCC contract instead of a whole chain, e.g. SPY260821P00630000."},"expirDate":{"type":"string","description":"Expiration date YYYY-MM-DD."},"callPut":{"type":"string","enum":["C","P"],"description":"Calls (C) or puts (P) only."},"strike":{"type":"number","description":"Strike price, e.g. 225."},"from":{"type":"string","description":"Start of an Eastern-time window HH:MM, inclusive."},"to":{"type":"string","description":"End of an Eastern-time window HH:MM, inclusive."},"minSize":{"type":"integer","minimum":1,"description":"Only prints of at least this many contracts."},"fields":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":200,"description":"Columns to return, e.g. [\"ticker\",\"iv30d\",\"slope\"]. Wildcards (\"iv*\") and field aliases work. Omit for a compact default set; lookup_field_definition explains any field."},"where":{"type":"string","maxLength":1000,"description":"Keep rows matching a predicate, e.g. \"iv30d > 0.3 and slope < 0\". Operators: > >= < <= == != and or not + - * / and parentheses; functions abs floor ceil round lower upper substr. Strings in double quotes."},"sort":{"type":"string","maxLength":300,"description":"Sort rows by a field (\"-field\" for descending, comma for several) or an expression such as \"-(iv30d/orFcst20d)\"."},"uniqueBy":{"type":"string","maxLength":300,"description":"Keep the first row (after sort) per distinct key: a field, comma-separated fields, or an expression such as \"substr(exDate,0,7)\"."},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum rows to return (default 50, max 1000). Applied after where and sort."},"precision":{"type":"integer","minimum":0,"maximum":15,"description":"Round numbers to this many decimal places."}},"additionalProperties":false},"annotations":{"title":"Option trade prints today (live)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_scanner_body_example","title":"Scanner request body template","description":"A complete, runnable scanner request body to adapt for scan_option_trades `body` (single-leg or multi-leg). No API call.","inputSchema":{"type":"object","properties":{"bodyExample":{"description":"Print an exact, runnable body template (no API call) — start multi-leg strategies from this","type":"string","enum":["single-leg","multi-leg"]},"kind":{"type":"string","enum":["single-leg","multi-leg"],"description":"Which template: single-leg (default) or multi-leg."}},"additionalProperties":false},"annotations":{"title":"Scanner request body template","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"lookup_field_definition","title":"Look up ORATS field definitions","description":"Definition, units (decimal vs percentage points, price, count, days) and endpoints for any ORATS field, by exact name or wildcard (e.g. \"iv30d\", \"exErn*\", \"*Hv20d\"). No API call.","inputSchema":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":100,"description":"Field name or wildcard pattern, e.g. \"orFcst20d\" or \"iv*\"."}},"required":["field"],"additionalProperties":false},"annotations":{"title":"Look up ORATS field definitions","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"match_backtest_finder_environment","title":"Backtests matching today's market","description":"Precomputed backtests whose entry conditions (VIX, SMA, RSI, IV percentile, slope) match the latest market environment, for the given strategies.","inputSchema":{"type":"object","properties":{"strategies":{"type":"string","description":"Comma-separated strategy names to include, e.g. IronCondor,ShortPutSpread. One or more of: IronButterfly, IronCondor, LongCall, LongCallCalendar, LongCallSpread, LongPut, LongPutCalendar, LongPutSpread, LongStraddle, ShortCall, ShortCallSpread, ShortPut, ShortPutSpread, ShortStraddle, ShortStrangle"},"sort":{"description":"Client-side re-sort of the returned rows by row field(s): '-stratWinRate' desc, comma for multi (applied before limit)","type":"string"},"limit":{"description":"Client-side cap on returned rows (after sort)","type":"number"}},"required":["strategies"],"additionalProperties":false},"annotations":{"title":"Backtests matching today's market","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"scan_option_trades","title":"Scan for option trade candidates","description":"Scan current option chains for trade candidates matching a strategy, ranked by closeness to the delta and DTE targets, with pricing, Greeks and probability of profit (and with distribution=true: risk, max gain/loss, breakevens). Arguments build a single-leg scan; pass `body` (see get_scanner_body_example) for multi-leg strategies. Rate limit: 10 scans per minute.","inputSchema":{"type":"object","properties":{"symbols":{"description":"Comma-separated underlyings to scan (e.g. AAPL,MSFT). Response time scales with symbol count.","type":"string"},"optionType":{"description":"Leg option type (single-leg builder) Default: call.","type":"string","enum":["call","put"]},"ratio":{"description":"Leg ratio; negative = short (single-leg builder) Default: 1.","type":"number"},"dte":{"description":"Days-to-expiration band 'min,max' (same-day expiry is dte 1, so 0,0 is widened to 0,1) Default: 20,45.","type":"string"},"dteTarget":{"description":"DTE target (defaults to band midpoint)","type":"number"},"delta":{"description":"Absolute delta band 'min,max' Default: 0.2,0.5.","type":"string"},"deltaTarget":{"description":"Delta target (defaults to band midpoint)","type":"number"},"totalTrades":{"description":"Total cap across symbols — applied ONLY when tradesPerSymbol is 0/null; otherwise ignored Default: 20.","type":"number"},"tradesPerSymbol":{"description":"Max candidates per symbol (no cap; non-negative integer). Multi-leg bodies also use it to size EACH leg's candidate pool (tradesPerSymbol / leg count closest-to-target strikes) before pairing, so use 20+ for spreads and 40+ for 4-leg bodies or the width band may match nothing Default: 5.","type":"number"},"dataSource":{"description":"Quote feed to scan Default: delayed.","type":"string","enum":["real-time","delayed"]},"distribution":{"type":"boolean","description":"Include risk/maxGain/maxLoss/pop/breakevens (explicit value: distribution false) Default: true."},"drift":{"description":"Assumed stock drift %, changes pop (0 neutral, + bullish, - bearish; ±10 is already a strong view). Capped at ±50 here: the API accepts any number and pop saturates at 100 past roughly ±20 Default: 0.","type":"number"},"id":{"description":"Echoed label for bookkeeping","type":"string"},"body":{"type":"object","description":"Full scanner request body (multi-leg strategies). Overrides the single-leg arguments. Start from get_scanner_body_example."}},"additionalProperties":false},"annotations":{"title":"Scan for option trade candidates","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search_backtest_finder","title":"Search precomputed backtests","description":"Rank ORATS precomputed option-strategy backtests for a ticker and strategy (CamelCase, e.g. IronCondor) by a composite or metric, with an optional quality screen and metric filters. Returns up to 100 rows; each row id feeds get_backtest_finder_stats/trades/returns and rootBaseId feeds get_backtest_finder_input.","inputSchema":{"type":"object","properties":{"ticker":{"description":"Underlying to search (required unless id)","type":"string"},"strategy":{"description":"One of: IronButterfly, IronCondor, LongCall, LongCallCalendar, LongCallSpread, LongPut, LongPutCalendar, LongPutSpread, LongStraddle, ShortCall, ShortCallSpread, ShortPut, ShortPutSpread, ShortStraddle, ShortStrangle","type":"string"},"rank":{"description":"Ranking: a composite (bestReturnOnRisk, bestOverallPerformance, bestConservativeWinner) or a metric id (annualReturn, sharpe, sortino, maxDrawDown, ...) Default: bestReturnOnRisk.","type":"string"},"rankDir":{"description":"asc = best-ranked first Default: asc.","type":"string","enum":["asc","desc"]},"filters":{"type":"object","description":"Metric bands, e.g. {\"pctOfTimeInMarket\":{\"min\":40}}."},"screen":{"type":"boolean","description":"Server-side default quality screen (pctOfTimeInMarket >= 40, marginToStockPct <= 20, riskRewardAvg >= 0.07) that keeps degenerate single-trade rows out of the ranking; screen false returns the raw ranking Default: true."},"environment":{"type":"object","description":"Current-environment entry levels {entryVix, entrySma, entryRsi, entryIvPct, entrySlopePct}; omit to search all backtests."},"id":{"description":"Fetch a single performance row by its id instead of searching","type":"string"},"sort":{"description":"Client-side re-sort of the returned rows by row field(s): '-stratWinRate' desc, comma for multi (applied before limit; server ranking comes from rank)","type":"string"},"limit":{"description":"Client-side cap on returned rows (after sort). The ranked search returns at most 100 rows, so values above 100 still yield 100; narrow with filters or environment instead","type":"number"}},"additionalProperties":false},"annotations":{"title":"Search precomputed backtests","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"set_intraday_backtest_note","title":"Save a note on an intraday backtest","description":"Save a text note on an intraday backtest, replacing any existing note.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"backtestId"},"text":{"type":"string","description":"Note text"}},"required":["id","text"],"additionalProperties":false},"annotations":{"title":"Save a note on an intraday backtest","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"submit_intraday_backtest","title":"Submit an intraday option backtest","description":"Start a custom one-minute option backtest on the ORATS Intraday backtester (data from October 2020). Returns a backtestId at once: poll get_intraday_backtest_status until status is completed (or timed_out, which still has partial results), then call get_intraday_backtest_results. Bad inputs fail within seconds with status error and the reason. Uses the account's backtest quota.","inputSchema":{"type":"object","properties":{"symbol":{"description":"Underlying to backtest (e.g. SPY)","type":"string"},"startDate":{"description":"First trade date YYYY-MM-DD (2020-10-01 or later)","type":"string"},"endDate":{"description":"Last trade date YYYY-MM-DD (default: the last completed session). Today or a future date is clamped to the last completed session by the engine; effectiveConfig.endDate in the results shows what ran","type":"string"},"entryTime":{"description":"Entry time HHMM ET, 0934-1600 (the engine rejects anything before 0934; 1600 enters on the closing bar) Default: 0934.","type":"string"},"exitTime":{"description":"Exit time HHMM ET, 0934-1600 (omit = hold to expiration). Fills at the first available bar at or after it; half days exit on the last bar of the session","type":"string"},"strategy":{"description":"One of: PUT_CREDIT_SPREAD, CALL_DEBIT_SPREAD, LONG_CALL, SHORT_PUT, CALL_CREDIT_SPREAD, PUT_DEBIT_SPREAD, SHORT_CALL, LONG_PUT, IRON_CONDOR, IRON_BUTTERFLY, LONG_STRADDLE, SHORT_STRADDLE, SHORT_STRANGLE, LONG_CALL_CALENDAR, LONG_PUT_CALENDAR, DOUBLE_CALENDAR, LONG_CALL_BUTTERFLY, LONG_PUT_BUTTERFLY","type":"string"},"legs":{"type":"array","items":{"type":"object"},"minItems":1,"description":"Leg objects, e.g. [{\"optionType\":\"put\",\"ratio\":-1,\"deltaTarget\":0.3,\"deltaMin\":0.2,\"deltaMax\":0.4,\"dteTarget\":5,\"dteMin\":3,\"dteMax\":9}]. Later legs can use legRelation."},"expiryTod":{"description":"Settlement-time filter: both (default, no filter), weekly/pm (PM-settled), monthly/am (AM-settled). AM settlement exists only on cash-settled index options (SPX, NDX, RUT...): on equities and ETFs, monthly/am matches NOTHING and weekly/pm includes every expiration, monthlies too Default: both.","type":"string","enum":["both","weekly","monthly","am","pm"]},"stopLossPct":{"description":"Stop loss % of entry cost (omit, 0 or 'none' = no stop; the engine applies no default and rejects negatives)","type":"string"},"profitTargetPct":{"description":"Profit target % of entry cost (omit or 0 = none; negatives are rejected)","type":"number"},"tradePct":{"description":"IGNORED by the engine (fills use a per-leg-count fraction of the bid-ask spread: 1 leg 0.75, 2 legs 0.66, 3 legs 0.56, 4+ legs 0.53); sending it only adds a warning to the results, so it is left out unless set","type":"number"},"commissionPerContract":{"description":"Commission $/contract/leg, entry and exit Default: 0.65.","type":"number"},"maxHoldDays":{"description":"Max trading days held before forced exit","type":"number"},"maxConcurrentTrades":{"description":"Cap on simultaneously open trades (0 = unlimited). Server default: 1 for daily entries, unlimited for signals; capital-weighted portfolio returns when > 1","type":"number"},"groups":{"type":"array","items":{"type":"object"},"description":"Per-group exit overrides {group, stopLossPct, profitTargetPct, exitTime, maxHoldDays} for legs tagged \"group\": N."},"signals":{"type":"array","items":{"type":"object"},"description":"Entry/exit signal pairs [{\"entry\":\"YYYYMMDDHHMM\",\"exit\":\"YYYYMMDDHHMM\"}]; omit to trade every day at entryTime."},"body":{"type":"object","description":"Full request body {inputs: {...}} (overrides the other arguments)."}},"additionalProperties":false},"annotations":{"title":"Submit an intraday option backtest","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}}]}