Options Sentiment
options_sentimentWhat the US OPTIONS MARKET is saying — the POSITIONING lens (~547 popular US optionable names,
stocks + ETFs). Pairs with the news→impact read: for "how is doing?" fetch THIS and
stock_impact/news_feed and fuse them (news = what's happening + WHY; options = how the market is
positioned — direction lean via put/call, fear/greed via skew, IV level, dealer-gamma stability,
max-pain pinning, notable expiries). For a name the user HOLDS it shows how the market is hedging that
position. Broad-INDEX question → pass the liquid ETF proxy: S&P 500→SPY, Nasdaq 100→QQQ, Dow→
DIA, Russell 2000→IWM, 20y Treasuries→TLT, Gold→GLD. Tickers = bare US symbol or SYMBOL.US
(NVDA/NVDA.US); US-only. style = plain (everyday language, default) | technical.
TWO MODES:
• SINGLE deep read — pass `ticker=<one>` (+ optional `as_of`). Returns the FULL narrative payload
(horizons, buckets, per-signal `read`+`because`, `_guide`). Use for a focused "how is NVDA doing".
• BATCH / COMPARE — pass `tickers=[...]` and/or `dates=[...]` → ONE call returns a COMPACT grid, one
small row per (ticker × date) cell: `spot`, `positioning_score` ([-1,+1], + bullish), per-horizon
positioning, and medium-term signal `reads`. THIS is how you answer "NVDA vs AAPL, last week vs
this week" — do NOT fire the single tool N×M times. `dates=[]` (omit) → a single "latest" column.
📅 HISTORICAL: `as_of`/`dates` = ISO date/timestamp; the snapshot AT-OR-BEFORE that instant. A bare
date (`2026-07-15`) is read as END of that day. Every response carries `available_from`/`available_to`
(the stored window); a cell whose date predates it comes back `covered:false` with the range — relay
THAT honestly (say history only goes back to `available_from`), never invent an older reading.
⚠️ Narrate from `read`+`because` (or the batch `reads`); DON'T recompute, DON'T compare raw O/S or IV
across assets, `baseline_pending`/`level` ≠ "unusual" (only a `_percentile`/`_rank` read flags
unusual), and the VERDICT is YOURS (opana stops at interpretation). Not covered → `{covered:false}`:
say options data isn't available and use the news/impact read instead — never fabricate.Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "options_sentiment"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | As-of date YYYY-MM-DD (point-in-time positioning). | |
| dates | No | Specific expiry dates YYYY-MM-DD to focus the read on. | |
| style | No | Narration style: `plain` (layperson, default) | `technical`. | plain |
| ticker | No | A US-listed OPTIONABLE ticker OR a plain company name (resolved server-side) — ~547 names — or an index-ETF proxy (S&P→SPY, Nasdaq→QQQ). Non-US / uncovered → `covered:false` (not an error). | |
| context | No | OPTIONAL but RECOMMENDED — paste the user's FULL request VERBATIM (any language: 'ขอราคาผลไม้ apple', 'compare Apple and Microsoft stock'). The server uses it to disambiguate which candidate each `ticker` entity means (the apple COMPANY vs the fruit COMMODITY; which Samsung). One context per call, shared by all tickers here. | |
| tickers | No | Batch form — several tickers at once (instead of `ticker`). |