← Back to home

MCP/API Access

Machine-readable SPX dealer market structure - walls, gamma flip, GEX, the scored strike ladder, implied 50%/80% forecast bands, strike activity, and the regime label - recomputed ~every 10 seconds during market hours. Built for agents (MCP) and scripts (REST), on one key.

MCP/API Access

$100/mo

No free trial - cancel anytime

  • One key for both the MCP server (agents) and the REST API (scripts)
  • Scored strike ladder, gamma flip, call/put walls, and net GEX
  • Implied 50%/80% forecast bands and per-strike activity
  • Regime label (CHOP / TREND / BREAKOUT) recomputed ~every 10 seconds during market hours
  • Event webhooks: zero-gamma flip, new wall, regime transition
Sign up to subscribe

Already have an account? Log in

One key covers both MCP and REST. Not investment advice.

Connect - MCP (for agents)

Endpoint https://api.zdte.ai/mcp, authenticated via an X-API-Key header. Any MCP client that speaks the Streamable HTTP transport can connect.

Claude Code

claude mcp add --transport http zdte https://api.zdte.ai/mcp --header "X-API-Key: YOUR_KEY"

Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "zdte": {
      "type": "http",
      "url": "https://api.zdte.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_KEY"
      }
    }
  }
}

Any other MCP client

Point it at the endpoint above over the Streamable HTTP transport and send X-API-Key: YOUR_KEY as a request header - no OAuth flow, no session negotiation.

Connect - REST (for scripts)

Every MCP tool has a thin REST v1 mirror at https://api.zdte.ai, same auth header, same paid-call gate, byte-identical JSON body.

curl

curl https://api.zdte.ai/v1/market-structure \
  -H "X-API-Key: YOUR_KEY"

Python (httpx)

import httpx

resp = httpx.get(
    "https://api.zdte.ai/v1/market-structure",
    headers={"X-API-Key": "YOUR_KEY"},
    timeout=10.0,
)
resp.raise_for_status()
data = resp.json()
print(data["regime"], data["gamma_flip"])

GET /v1/market-structure

{
  "available": true,
  "as_of": "2026-07-19T17:32:05Z",
  "marketState": "pinned",
  "confidence_dots": 4,
  "spot": 7562.35,
  "gamma_flip": 7540.00,
  "call_wall": 7600.00,
  "put_wall": 7500.00,
  "total_gex": 2850000000,
  "gamma": {
    "flip_distance": 0.003,
    "call_gex": 3100000000,
    "put_gex": -250000000,
    "gex_above_spot": 1800000000,
    "gex_below_spot": 1050000000,
    "gex_imbalance": 0.42,
    "gex_profile_skew": 0.31
  },
  "minutes_to_close": 118,
  "pressure_points": [
    { "strike": 7600, "label": "CALL WALL", "cls": "resist", "score": 90 },
    { "strike": 7500, "label": "PUT WALL", "cls": "support", "score": 80 }
  ],
  "forecast_band": {
    "points": [
      {
        "minutes_from_now": 30,
        "median": 7563.1,
        "band_50_low": 7554.2,
        "band_50_high": 7572.0,
        "band_80_low": 7545.8,
        "band_80_high": 7580.4
      }
    ],
    "horizon_minutes": 120,
    "regime_at_compute": "pinned",
    "implied_move_atm_pts": 22.4,
    "computed_at_utc": "2026-07-19T17:32:05Z",
    "disclaimer_required": true
  },
  "strike_activity": [
    {
      "strike": 7550,
      "total_volume": 18400,
      "call_volume": 9600,
      "put_volume": 8800,
      "call_oi": 12500,
      "put_oi": 11800,
      "call_mark": 14.20,
      "put_mark": 12.85,
      "distance_pct": 0.16,
      "position_label": "at spot"
    }
  ],
  "vix": { "vix_spot": 14.82, "vix9d": 14.10, "vix3m": 15.63, "vix_basis": 0.81, "vvix": 98.40, "iv_atm": 0.142, "iv_skew_25d": 0.021 },
  "realized_vol": { "rv_mean": 0.0912, "rv_std": 0.0605 },
  "tier": "pro"
}

GET /v1/regime

{
  "available": true,
  "marketState": "pinned",
  "confidence_dots": 4,
  "tier": "pro"
}

GET /v1/history/dates

{
  "dates": ["2026-07-16", "2026-07-17", "2026-07-18"],
  "count": 3
}

GET /v1/history/2026-07-18

{
  "available": true,
  "date": "2026-07-18",
  "summary": { "open": 7480.2, "high": 7540.6, "low": 7472.9, "close": 7521.3 },
  "prices": [{ "time": 1721318400, "value": 7480.2 }],
  "sample_count": 390,
  "timeline": [
    {
      "t": 1721318400,
      "spot": 7480.2,
      "marketState": "pinned",
      "gamma_flip": 7460.0,
      "call_wall": 7520.0,
      "put_wall": 7440.0,
      "gex_total": 1240000000,
      "gex_imbalance": 0.22,
      "iv_atm": 0.138,
      "max_pain": 7500.0,
      "vix": 14.9
    }
  ]
}

timeline is included on the paid tier only.

Tool / route reference

The same 8 operations, reachable as either an MCP tool call or a REST route.

MCP toolREST routeWhat it returns
get_market_structureGET /v1/market-structureCurrent SPX dealer market structure: walls, gamma flip, net GEX + gamma-profile depth, dealer regime, scored pressure points, forecast band, strike activity, VIX term structure + IV/skew, and realized-vol stats.
get_regimeGET /v1/regimeCurrent SPX dealer regime label + confidence only.
list_history_datesGET /v1/history/datesAvailable historical replay dates.
get_dayGET /v1/history/{date}Per-day market-structure timeline + summary for one replay date (YYYY-MM-DD).
get_regime_segmentsGET /v1/history/{date}/segmentsCompressed dealer-regime segment tape for one replay date.
subscribe_eventPOST /v1/subscriptionsRegister an HTTPS callback for an event (see Webhooks below).
unsubscribeDELETE /v1/subscriptions/{id}Remove a webhook subscription.
list_subscriptionsGET /v1/subscriptionsList your active webhook subscriptions.

Event webhooks

Subscribe to a callback via POST /v1/subscriptions (or the subscribe_event MCP tool) with an event name and a callback_url. Callback URLs must be HTTPS and resolve to a public address - no localhost, no private/internal hosts. Every delivery carries an HMAC-SHA256 signature (computed with your subscription's own signing secret over the event payload) so you can verify authenticity before acting on it.

EventFires when
zero_gamma_flipSpot crosses the computed gamma-flip level.
new_wallThe call wall or put wall level changes.
regime_transitionThe dealer regime label changes (e.g. CHOP to TREND).

Cadence, freshness, and terms

Market structure is recomputed roughly every 10 seconds while the market is open; a typical read is under 15 seconds old. Outside market hours, or if the underlying feed goes stale, the surface returns an honest available: false rather than serving a stale number silently.

This is computed market-structure data for your own decisions - not investment advice, and not a directional signal. Your key is for your own use: no redistribution or resale of the feed, no compiling it into a dataset, and no training models on it. See the full Terms of Service for the complete usage terms and the Investment Disclaimer for the full risk statement.

For informational and educational purposes only. Not investment advice and not a recommendation to buy or sell any security. Options trading involves substantial risk of loss. Market-structure figures described here are zdte.ai's proprietary estimates of dealer positioning, which can be wrong. Always do your own research.