CV Financial Market Data
Prefer MCP tools when they exist in the session. Use REST or scripts/cv_data.py for shell, CSV/JSON, or local checks.
Access
- MCP:
https://tap.convexvalue.com/api/data/mcp - REST:
https://tap.convexvalue.com/api/data - Tools:
get_chain,screen,query_sql,get_option_bars,get_option_daily,fmp_request,list_fmp_endpoints,list_chain_fields - Auth: At authorization time, read
CVSERVER_API_TOKENfrom the current terminal/process environment and send it asAuthorization: Bearer <CVSERVER_API_TOKEN>. Do not ask the user to paste it. Never print, log, or copy the token. The CLI may use its documented legacy fallbacks only when this variable is unset. cvApi.chain/screen/query/callexist only inside a cvforge app page. Do not fetchtap.convexvalue.comfrom that page.
Details: api-access.md
Hard rules
- Current option value is
fair_market_valueonly. It is an estimate, not an executable quote. - Do not request option bid, ask, size, midpoint, NBBO, or last-trade fields. They are not provided.
- Use only the 31 supported snapshot fields. Default set: options-snapshot.md.
- Index underlyings:
I:SPX,I:VIX,I:NDX,I:RUT,I:XSP. - Snapshot refreshes about once a minute. Open interest updates after the close. SQL tables have no history.
/mas/*(get_option_bars,get_option_daily) needs the Research plan. Other plans return402.- Every data call counts against one hourly budget: Free 20, Go 1,000, Research 50,000.
- Do not invent FMP paths. If the path is unknown, call
list_fmp_endpointsfirst. list_chain_fieldsis discovery only. A raw field name is not a product promise.
Route the question
| Question | Family | Call |
|---|---|---|
| One underlying chain, IV surface, skew, OI wall, payoff | Snapshot | get_chain / POST /chains |
| Cross-name scan: high IV, unusual volume, high OI | Screener | screen / POST /screen |
| GROUP BY, PCR, GEX, ATM IV, custom aggregate | SQL | query_sql / POST /query |
| One option contract's history | Historical | get_option_bars or get_option_daily |
| Stock / ETF snapshot or price | FMP company | profile |
| Index quote | FMP indexes | quote or quote-short |
| Equity intraday or EOD bars | FMP chart | historical-chart/* or historical-price-eod/* |
| Statements, ratios, metrics, scores | FMP statements | income-statement, ratios, key-metrics, … |
| Analyst consensus | FMP analyst | analyst-estimates only |
| Earnings date | FMP calendar | earnings or earnings-calendar |
| Macro / rates | FMP economics | treasury-rates, economic-indicators, economic-calendar |
| ETF holdings / weights | FMP ETF | etf/holdings, etf/info, etf/sector-weightings |
| 13F / institutional | FMP 13F | institutional-ownership/* |
| Insider / Congress | FMP insider or senate | insider-trading/*, senate-trades, house-trades |
| SEC filings / 8-K | FMP SEC | sec-filings-search/*, sec-filings-8k |
| Transcript | FMP transcript | earning-call-transcript |
| News | FMP news | news/stock, news/stock-latest |
| Technical series | FMP technicals | technical-indicators/{sma,ema,rsi,…} |
| DCF | FMP DCF | discounted-cash-flow |
| Find a ticker | FMP search | search-symbol, search-name |
Catalog and required params: fmp-catalog.md
CLI
python3 scripts/cv_data.py doctor --symbol SPY
python3 scripts/cv_data.py chain SPY --limit 10
python3 scripts/cv_data.py screen --symbol SPY --min-oi 5000 --limit 10
python3 scripts/cv_data.py query "SELECT expiration_date, AVG(implied_volatility) FILTER (WHERE ABS(delta) BETWEEN 0.45 AND 0.55) AS atm_iv FROM options_snapshots WHERE underlying_ticker = 'SPY' GROUP BY 1 ORDER BY 1"
python3 scripts/cv_data.py fmp profile --param symbol=AAPL
python3 scripts/cv_data.py gamma-levels SPY --top 20
--format table|json|csv. Run api-help for more.
References
- options-snapshot.md — fields, chain shape, pricing boundary
- screener.md — operators and limits
- sql.md — tables and official recipes
- historical-options.md —
/mas/* - fmp-catalog.md — 157 allowlisted endpoints
- analysis.md — GEX, ATM IV, local vanna/charm