gex.live

SPX dealer positioning measured from the 0DTE tape: zero-gamma flip, call/put walls and hold band for 1,000+ finished sessions, plus a backtesting Lab; measurement only, no signals.

Documentation

gex.live for AI assistants (MCP)

Point your assistant at one URL and it can read dealer positioning for 1,000+ finished SPX sessions — and, with your account connected, compile and backtest ideas in the Lab without leaving the conversation.

gex.live speaks the Model Context Protocol:

Endpoint   https://mcp.gex.live/mcp   (streamable HTTP)
Registry   live.gex/gex-mcp   (official MCP registry)

Everything served is a measurement verifiable against the free history — no buy/sell signals, by design. Only derived per-session aggregates cross this interface, one session per call.

Free tools — no account, no key

toolreturns
list_sessions{ limit? } — up to 50 days per call. Finished trading days in the archive, newest first.
get_session{ day: "YYYY-MM-DD" } One session: OHLC, zero-gamma flip and crossings, call/put walls, hold band, net-gamma percentile, ATM IV.
get_levels{ day: "YYYY-MM-DD" } Just the level set and where the session closed against it.

Connect

Claude.ai and Claude Desktop

Settings → Connectors → Add custom connector → paste https://mcp.gex.live/mcp. The free tools appear immediately; press Connect to sign in with your gex.live account and the Lab tools unlock too — no keys to copy. See Sign in (OAuth).

Claude Code

claude mcp add --transport http gex https://mcp.gex.live/mcp

Cursor

// .cursor/mcp.json
{ "mcpServers": { "gex": { "url": "https://mcp.gex.live/mcp" } } }

Any MCP client, or curl

The server is plain streamable HTTP: POST JSON-RPC to the endpoint, no session state.

curl -s https://mcp.gex.live/mcp -H "content-type: application/json" -d '{
  "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "get_session", "arguments": { "day": "2026-08-13" } }
}'

Lab tools — your account, your credits

Signed in (or with a Lab token attached), five more tools appear. They drive the Lab's conveyor — the same one the LAB page drives. Every idea walks the same road, in order:

plain words --> rule --> BACKTEST --> QUANT OPTIMIZE --> your desk
      (compile)          (1 credit)     (1 credit)
toolwhat it doescost
lab_compile{ message, id? } Turns a plain-words idea — “fade a +3σ stretch above vwap on top-decile volume” — into a testable rule, or amends an existing idea by id. Answers with the compiled spec, a clarifying question, or compile errors. Amending an idea resets it to the start of the conveyor: a re-test is owed.free, needs a positive balance
lab_run{ id, kind: "backtest" | "quant" } Runs the idea's current conveyor step — kind is not a menu: "backtest" first (rule → tested), then "quant" (tested → ready). Returns the engine's verdict: per-leg era tables (all / this year / holdout), the full rule against its core-only baseline, and interesting: true only when the rule clears costs out-of-sample and beats that baseline there. The quant optimize returns every variant — never a picked winner.1 credit per run, refunded on failure
lab_stateno arguments Everything in one call: your ideas with their stages and results, which idea currently holds the conveyor, and your credit balance.free
lab_thread{ id } The compile-chat history for one idea — how the rule got to its current wording.free
lab_idea{ id, action: "desk" | "drop" | "delete" | "set", on?, draw?, alert? } Desk actions on an idea you own: desk (ready → onto the desk, frees the conveyor), drop (back to the start, frees the conveyor), delete, and set (desk display and alert options: on, draw, alert).free

You never type this JSON yourself: your assistant discovers every tool's schema automatically and builds the calls — you ask in plain words. The shapes above are what it sends under the hood. Out of credits, a paid run answers 402 {"error":"no credits","buy":"lab"} — top up on the LAB page.

Manual token (scripts, clients without OAuth)

Create a token on your account page (LAB & API section — shown once, revocable, scoped to LAB only), then attach it as a header:

claude mcp add --transport http gex https://mcp.gex.live/mcp \
  --header "Authorization: Bearer labk_YOUR_TOKEN"
// .cursor/mcp.json
{ "mcpServers": { "gex": {
  "url": "https://mcp.gex.live/mcp",
  "headers": { "Authorization": "Bearer labk_YOUR_TOKEN" }
} } }

One idea, end to end

# 1. plain words -> a compiled rule (free)
lab_compile  { "message": "fade a +3 sigma stretch above vwap on top-decile volume" }
         ->  { "kind": "spec", "idea": { "id": "i_4f2a", "name": "...", "spec": { ... } } }

# 2. backtest the rule (1 credit; this is the step the idea is on)
lab_run      { "id": "i_4f2a", "kind": "backtest" }
         ->  { "result": { legs, era tables: all / this year / holdout, verdict },
               "state":  { balance, ideas } }

# 3. quant optimize the parameters (1 credit; only after a backtest)
lab_run      { "id": "i_4f2a", "kind": "quant" }
         ->  every variant scored -- no picked winner, that judgment stays yours

# 4. keep it: onto the desk, conveyor freed
lab_idea     { "id": "i_4f2a", "action": "desk" }

Then ask things like: “compile this idea — fade a +3σ stretch above vwap on top-decile volume — backtest it, and show me the holdout verdict.”

Full request/response shapes: Lab API docs — the MCP tools mirror those endpoints one to one.

Not investment advice. Options trading carries substantial risk of loss. Backtested performance does not guarantee future results.