Financial data for your AI agents.
Implied-vol surfaces, skew, realized vol, vol cones, option chains with Greeks, and scored trade ideas for more than 3,400 tickers. Your agent calls a REST endpoint or an MCP tool and gets the numbers behind Moontower's own charts.
claude mcp add --transport http moontower https://api.moontower.ai/mcp. Added moontower (http). /mcp → moontower → Authenticate → Allow. Connect Claude Code to Moontower: Claude Code wants to call the Moontower API and MCP tools as you. Signed in to Moontower. 18 tools available. Is implied vol rich or cheap against realized on SPY, QQQ, IWM, NVDA, AMD, and TSLA? get_realized_vs_implied_volatility (ticker: SPY, QQQ, IWM, NVDA, AMD, TSLA): 6 rows, snapshot 2026-11-11. SPY: rv_30d 18.90, atmiv 13.65, vrp −32.54, rv_percentile 97.21. QQQ: rv_30d 30.98, atmiv 22.95, vrp −30.01, rv_percentile 96.41. IWM: rv_30d 22.96, atmiv 17.47, vrp −27.34, rv_percentile 80.08. NVDA: rv_30d 52.77, atmiv 55.08, vrp 4.29, rv_percentile 99.60. AMD: rv_30d 106.75, atmiv 61.10, vrp −55.80, rv_percentile 99.60. TSLA: rv_30d 56.53, atmiv 41.21, vrp −31.61, rv_percentile 90.84. Implied vol is below 30-day realized on five of the six, so options look cheap against recent movement. NVDA is the exception at a vrp of 4.29, and AMD has the widest gap: 61.10 implied against 106.75 realized.
What a call returns.
Call the API or MCP for your preferred data, for one ticker or 100. Computed every minute across 3,400+ tickers.
Clean endpoints for all the financial data you need.
18 endpoints under api.moontower.ai/v1, each with an MCP tool named after its OpenAPI operation. All of them return JSON, and 9 also return CSV.
| Endpoint | Returns | MCP tool | Formats |
|---|---|---|---|
| Prices and calendar | |||
| GET /v1/price | Market prices. Open, high, low, close, volume, and the bid-ask mid, with a capture timestamp on every row.open, high, low, close, volume, mid, snapshot_at | get_ | JSON, CSV |
| GET /v1/earnings | Earnings dates. Next and prior earnings date per ticker. Rows flagged with data-quality issues are left out.next_earnings_date, prior_earnings_date | get_ | JSON |
| Implied volatility | |||
| GET /v1/impliedvol | IV surface. Smoothed implied vol at every 10 delta points, vol0 through vol100, for each listed expiry.expiry_date, dte, spot_price, vol10, vol50, vol90 | get_ | JSON, CSV |
| GET /v1/cmiv | Constant-maturity IV. ATM implied vol at 10, 20, 30, 60, and 90 days, 6 months, and 1 year, interpolated between expiries.iv_10d, iv_30d, iv_90d, iv_6m, iv_1y | get_ | JSON, CSV |
| GET /v1/skew | Volatility skew. Call and put skew at 10 and 25 delta and risk reversals, each with a percentile, per expiry.skew_25d_put, skew_25d_call, risk_reversal_25d, skew_25d_put_percentile | get_ | JSON, CSV |
| GET /v1/ivrank | IV rank and percentile. Where 30-day IV sits in its own range over 1-month, 3-month, and 1-year lookbacks.iv, iv_rank_1m, iv_pct_3m, iv_rank_1y, iv_pct_1y | get_ | JSON, CSV |
| Realized vol and risk premium | |||
| GET /v1/realvol | Realized volatility. Annualized realized vol over eight windows from 1 day to 1 year, computed from daily OHLC.rv_1d, rv_7d, rv_30d, rv_90d, rv_365d | get_ | JSON, CSV |
| GET /v1/rviv | Realized vs implied. 30-day realized vol beside 30-day ATM implied vol, with the realized percentile and the risk premium.rv_30d, atmiv, rv_percentile, vrp | get_ | JSON, CSV |
| GET /v1/volcone | Volatility cone. Per window: the range and quartiles of realized vol, the current reading, and nearest-expiry 50-delta IV.window_days, rv_q25, rv_median, rv_q75, rv_current, iv_50d | get_ | JSON |
| Option chains | |||
| GET /v1/optionchain | Option chain. Every strike and expiry at the close: prices, sizes, volume, open interest, five Greeks, and bid, mid, and ask IV.strike, dte, call_mid_price, call_delta, put_mid_iv, smoothed_vol, put_open_interest | get_ | JSON, CSV |
| Pricing and hedging calculators | |||
| GET /v1/early-exercise | American early exercise. Prices an American put against its European value and says whether exercising now is optimal.american_value, european_value, early_exercise_premium, should_exercise_now | get_ | JSON |
| POST /v1/pnl-attribution | P&L attribution. Splits the P&L of up to eight option legs between two market states into Greek contributions and a residual.delta_pnl, gamma_pnl, theta_pnl, vega_pnl, rho_pnl, residual | compute_ | JSON |
| GET /v1/implied-yield | Implied yield. The forward and the dividend-plus-borrow yield implied by put-call parity, per strike.forward_price, total_implied_rate, implied_dividend_yield, per_strike | get_ | JSON |
| GET /v1/options-pair-hedge | Options pair hedge. Vega-, theta-, and gamma-weighted hedge ratios between two option legs, with Greeks per leg.correlation, beta, weightings.vega.ratio, weightings.gamma.suggested_qty_b | get_ | JSON |
| GET /v1/hedge-ratios | Pair delta hedge. Sizes a stock or ETF hedge from correlation and realized vols, and reports the idiosyncratic vol left over.vol_core, vol_hedge, correlation, beta, hedge_ratio, idio_vol_remaining | get_ | JSON |
| Screens | |||
| GET /v1/cockpit | Cockpit statistics. Moving averages, IV by tenor with its changes, term structure, return z-scores, and risk premium per ticker.sd_from_200ma, iv_30d_weekly_change, term_structure_90d_30d, monthly_return_zscore, vrp_monthly | get_ | JSON, CSV |
| GET /v1/trade-ideas | Trade ideas. Long Calendar, Sell Vol, Buy Vol, and Short Calendar candidates, scored against the list you send.idea, ivPercentile, vrpPercentile, steepnessPercentile, totalScore | get_ | JSON |
| Reference | |||
| GET /v1/tickers | Ticker directory. Every ticker with its category and the first and last dates on file, to check coverage before asking.ticker, category, min_date, max_date | get_ | JSON |
Proprietary metrics computed every minute.
Moontower computes proprietary metrics across a wide range of financial and volatility data. We provide transparency on how all metrics are computed via the API docs.
- Realized volatility
- The 1-day figure is the Parkinson high-low estimate for the last session. Longer windows are the equal-weighted mean of the close-to-close and Yang-Zhang estimates, annualized on 251 periods a year. Stocks and ETFs count trading sessions, so rv_30d covers 21 of them; BTC and ETH count calendar days.
- Constant-maturity IV
- ATM implied vol interpolated linearly between listed expiries, using delta-filtered strikes, so a 30-day series means the same thing on every date and for every ticker.
- Volatility risk premium
vrp = 100 × ln(IV30 / RV30)30-day constant-maturity ATM implied vol against 30-day realized vol.- IV rank and percentile
rank = 100 × (IV − min) / (max − min)Rank scales 30-day IV between its low and high over the lookback. Percentile is the share of days in the lookback with lower IV.- Volatility cone
- For each window, the minimum, quartiles, median, and maximum of realized vol over a lookback of 30 to 730 days. Quartiles are order statistics with no interpolation. Implied vol is the 50-delta vol of the expiry nearest the window.
- Early exercise
- An American put priced on a QuantLib CRR binomial tree against its European analytic value, using the chain's implied vol and the NY Fed's SOFR.
- Trade-idea scores
- Four presets scored cross-sectionally within the tickers you send, from IV, risk-premium, realized-vol, and term-structure percentiles, with liquidity filters and an earnings-week exclusion.
API or MCP, your call.
One API key works for both, and MCP clients can sign in with OAuth instead.
REST API
Plain HTTPS with repeated ticker parameters. JSON by default; add format=csv on the time-series endpoints. openapi.json imports into Postman, Insomnia, or a client generator.
Read the API docscurl -H "X-API-Key: $MOONTOWER_API_KEY" \
"https://api.moontower.ai/v1/cmiv?ticker=SPY&ticker=QQQ"MCP server
A hosted HTTP server with 18 tools whose schemas come from the OpenAPI definitions. Sign in with OAuth from Claude Code, or pass the X-API-Key header from a headless client.
Setup stepsclaude mcp add --transport http moontower https://api.moontower.ai/mcpCLIComing soon
A moontower command for shells, cron jobs, and notebooks is on the way. It will use the same API key, with one command per endpoint and the endpoint's parameters as flags.
moontower cmiv SPY QQQ
moontower realvol NVDA --start-date 2026-10-01 --end-date 2026-10-31 --format csvUse with any AI agent.
Add the Moontower MCP server to your AI agent of choice, then sign in with OAuth. It is a hosted HTTP server, so any MCP client that supports remote servers can connect. The steps here use Claude Code.
Add the server
Run this on its own. It registers the server. It does not finish sign-in.
claude mcp add --transport http moontower https://api.moontower.ai/mcpSign in with OAuth
In Claude Code, open /mcp, select moontower, and choose Authenticate. Approve the connection in the browser.
/mcp → moontower → Authenticate → AllowOr pass an API key
For scripts or headless clients, send the same key as the REST API in the X-API-Key header. The value starts with mtw_. The export uses the placeholder mtw_.... A real key typed into that export is stored in shell history.
export MOONTOWER_API_KEY="mtw_..." claude mcp add --transport http moontower https://api.moontower.ai/mcp \ --header "X-API-Key: $MOONTOWER_API_KEY"Or write .mcp.json
Same API-key path, in a project file. Claude Code expands ${MOONTOWER_API_KEY}. A raw $MOONTOWER_API_KEY, or an unexpanded ${MOONTOWER_API_KEY}, will not authenticate.
{ "mcpServers": { "moontower": { "type": "http", "url": "https://api.moontower.ai/mcp", "headers": { "X-API-Key": "${MOONTOWER_API_KEY}" } } } }Verify the connection
After you allow the connection, claude mcp get moontower should show https://api.moontower.ai/mcp. On the API-key path it should also show an X-API-Key header.
claude mcp get moontower claude mcp list
Included on every paid plan.
API and MCP access is part of the Individual, Team, and Enterprise plans. Create keys at moontower.ai/api-keys once you are on a plan.
- Individual
- $99/mo billed annually, or $149/mo billed quarterly
- Team
- $499/seat/mo billed annually, or $699/seat/mo billed quarterly
- Enterprise
- Custom