greeks-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_TRANSPORT | No | Transport type: stdio for MCP clients, http for HTTP mode | stdio |
| GREEKS_API_KEY | No | Your Greeks.pro API key (grk_...). Required for /api/analytics/* endpoints; public tools work without it. | |
| GREEKS_TIMEOUT | No | Per-request timeout in seconds | 30 |
| GREEKS_BASE_URL | No | API base URL | https://api.greeks.pro |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_max_painA | Max Pain per expiration — the strike that minimizes total option value (where most options expire worthless), a magnet the price tends to converge toward at expiration. Plan: Free (1 symbol, 15-min delay) and up. Args: symbol: Underlying ticker, e.g. "AAPL", "SPY", "NDAQ". expiration: Unix expiration timestamp for a single expiry, or "all" for every expiration (slower, complete). Omit for the nearest expiry. Returns the raw MaxPainResponse JSON: symbol, spotPrice, timestamp, and results[] with maxPainStrike, totalPainAtMax, spotDistance, spotDistancePct. |
| get_greeksA | Black-Scholes Greeks (Delta, Gamma, Theta, Vega, Rho) plus theoretical price and mispricing for every contract in the chain. Plan: Trader and up. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. range: Pass "atm" to restrict the chain to at-the-money contracts. moneyness: A "low,high" pair (e.g. "0.9,1.1") to filter contracts by strike/spot ratio. limit: Cap the number of contracts returned (per side). Returns GreeksResponse JSON: symbol, spotPrice, timestamp, and contracts[] each with delta/gamma/theta/vega/rho, iv, theoreticalPrice, mispricing, inTheMoney. |
| get_gexA | Gamma & Delta Exposure (GEX/DEX) per strike, plus total Net GEX and the Gamma Flip level (strike where Net GEX crosses zero — a regime transition). Positive Net GEX = dealers long gamma (price pins); negative = moves amplified. Plan: Trader and up. Args:
symbol: Underlying ticker.
expiration: Unix timestamp of a specific expiry, or "all". Omit for the
nearest expiry.
symbols: Optional comma-separated list for a multi-symbol GEX request
(e.g. "SPY,QQQ,IWM"); when set it takes precedence over Returns GEXResponse JSON: symbol, spotPrice, timestamp, totalNetGEX, gammaFlip, and strikes[] with callGEX/putGEX/netGEX and callDEX/putDEX/netDEX. |
| get_flowA | Unusual options activity detection — contracts with abnormally high volume relative to open interest, typically signalling institutional/"smart money" positioning. Signals: unusual_volume (high: Vol/OI ≥ 3.0, medium: ≥ 1.5) and opening_position (Vol ≥ 50 with OI = 0). Contracts with volume < 10 are noise. Plan: Trader and up. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. Returns FlowResponse JSON: symbol, spotPrice, timestamp, and signals[] each with contractSymbol, type, strike, expiration, dte, volumeOIRatio, iv, signal, severity. |
| get_overviewA | Full analytics dashboard for a symbol in one call: sentiment, GEX summary, max pain, expected moves, IV surface, term structure and top unusual flow. The cheapest way to get everything for a symbol at once. Plan: Pro and up. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all" (recommended for the full dashboard). Omit for the nearest expiry. Returns OverviewResponse JSON: symbol, spotPrice, timestamp, riskFreeRate, dividendYield, sentiment, gexSummary, maxPain[], expectedMoves[], termStructure[], ivSurface[], topFlow[]. |
| get_snapshotA | Compact analytics snapshot for a symbol — a lighter-weight summary than the full overview, suitable for quick checks and cards. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. Returns the SnapshotResponse JSON as computed by the analytics engine. |
| get_levelsA | Key options-derived price levels for a symbol (support/resistance style levels from gamma and open-interest structure). Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. Returns the LevelsResponse JSON as computed by the analytics engine. |
| get_vexA | Vanna & Charm Exposure (VEX) — the second-order dealer Greeks. Vanna is how dealer delta shifts as implied volatility moves (∂Delta/∂IV); Charm is how it shifts as time passes (∂Delta/∂Time, i.e. delta decay). These are the flows behind OPEX drift and end-of-day drift, sitting one layer beneath GEX. Plan: Pro and up. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. Returns VEXResponse JSON: symbol, spotPrice, timestamp, totalNetVEX ($ delta shift per +1% IV move), totalNetCharm ($ delta shift per day), and strikes[] with callVEX/putVEX/netVEX and callCharm/putCharm/netCharm. |
| get_vol_structureA | Volatility structure — the skew across strikes and the term structure across expirations, with plain-English reads. Skew (25-delta put IV minus call IV) shows where demand/fear sits; term slope (back ATM IV minus front) shows contango (calm) vs backwardation (near-term event stress). Plan: Trader and up. Args: symbol: Underlying ticker. expiration: Unix timestamp of a specific expiry, or "all". Omit for the nearest expiry. Returns VolStructureResponse JSON: symbol, spotPrice, timestamp, skew[] (per expiration: atmIV, skew25Delta, read), termStructure[] (ATM IV vs DTE), skewRead, termRead, and termSlope (back − front ATM IV; <0 = backwardation). |
| get_zero_dteA | 0DTE focus panel — isolates only today's expiring contracts and computes their GEX, gamma flip, max pain, expected move and a pin-risk read. On an expiration day, that day's dealer gamma dominates the intraday tape: positive gamma pins price toward max pain, negative gamma amplifies moves. Plan: Pro and up. Args: symbol: Underlying ticker (index/ETF names like SPY/QQQ have daily expiries; most single names do not). Returns ZeroDTEResponse JSON: symbol, spotPrice, timestamp, expiration, dte, totalNetGEX, gammaFlip, maxPainStrike, maxPainDistPct, expectedMovePct, upperBound, lowerBound, pinRisk, read, and isTrue0DTE. When isTrue0DTE is false nothing expires today (weekend / no daily expiry) and the panel falls back to the nearest expiration with pinRisk "n/a" — it never fakes a pin. |
| get_gex_intradayA | Intraday gamma-regime tracker — a time-series of Net GEX, spot, the gamma flip and the regime label ("positive"/"negative") through the session, plus the timestamp of the last regime flip. Positive gamma = dealers dampen moves (range-bound); negative = dealers amplify (trending/volatile). Plan: Pro and up. Args: symbol: Underlying ticker. date: Optional session date as "YYYY-MM-DD" (US/Eastern). Omit for today. Returns the intraday GEX JSON: symbol, date, regime (current), flippedAt
(unix ts of the last regime change today, 0 = none), flippedFrom (prior
regime), points[] (each with ts, spot, netGEX, gammaFlip, regime) and
updatedAt. Note: this endpoint takes |
| get_track_record_detailA | Authenticated track-record detail — the day-by-day report card behind the public accuracy headline. For each scored day it lists the level published that morning (call_wall / put_wall / max_pain / expected_move) and whether the session respected it: the receipts behind the percentage. Plan: Pro and up. (The public, aggregate version is the keyless
Args: symbol: Optional ticker to filter the report to one name; omit for all scored symbols. Returns the detail JSON: days, outcomes[] (newest first — each with date, symbol, spotOpen, dayHigh, dayLow, dayClose, level, value, held, detail) and updatedAt. |
| list_plansA | List the available commercial plans with prices, limits and included routes (Free / Trader / Pro / Institutional). Public — no key needed. Use this to explain to the user which analytics their plan unlocks, or why a call returned 402/403. |
| healthA | Service health check: returns {status, supabase, stripe}. Public — no key needed. Use to verify GREEKS_BASE_URL is reachable before other calls. |
| screenerA | Public options screener across the curated watchlist (~26 liquid names: SPY, QQQ, AAPL, NVDA, TSLA, …). Returns a per-symbol row with spot price, sentiment and headline analytics — the fastest way to DISCOVER which symbols are interesting before drilling in with the authenticated analytics tools. Public — no key needed (IP rate-limited). Takes no arguments; the watchlist is fixed server-side. Returns the screener JSON (rows[] of symbol/spotPrice/sentiment/…). |
| gex_heatmapA | Public GEX-by-strike heatmap for a watchlist symbol (no key needed, IP rate-limited, cached ~5 min). A lightweight, unauthenticated way to see gamma exposure per strike without a plan. Args:
symbol: A watchlist ticker (SPY, QQQ, AAPL, NVDA, TSLA, …). Defaults to
SPY. Symbols outside the public watchlist return an error — use the
authenticated Returns the heatmap JSON: symbol plus GEX by strike. |
| track_recordA | Public track record — aggregated accuracy of the published analytics over roughly the last 35 days (per-symbol daily snapshots vs realized high/low/ close). Use it to gauge how the signals have performed historically. Public — no key needed. Takes no arguments. Returns the track-record JSON as computed server-side (updatedAt + records). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Multiple tools expose overlapping gamma/GEX data (get_gex, gex_heatmap, get_gex_intraday, get_zero_dte, get_overview, get_snapshot), and the boundary between overview and snapshot is particularly blurry. Descriptions help separate them by scope and auth level, but an agent could easily select the wrong one when several return similar summaries.
The majority of tools follow a clean get_<noun> pattern (get_gex, get_flow, get_max_pain, get_overview), but five break the pattern with bare nouns or a different verb (screener, health, track_record, gex_heatmap, list_plans). The names are readable and uniformly snake_case, but the mixed verb/noun conventions prevent a higher score.
At 17 tools, the surface sits just above the ideal range and includes several near-duplicate views (overview vs snapshot; get_gex vs gex_heatmap vs intraday). The count is partly justified by the public/authenticated tier structure and different data granularities, but it still feels slightly heavy for what is ultimately a read-only analytics API.
The core options-analytics domain is well covered: Greeks, GEX, VEX, volatility structure, max pain, flow, levels, and track record are all present. Minor gaps exist—no explicit watchlist symbol listing, no historical realized-volatility endpoint—but these are workable and most agent workflows have no dead ends.