{"serverInfo":{"name":"GammaRips","displayName":"GammaRips Options Intelligence","version":"4.3.0","description":"Options-flow intelligence primitives for AI agents: a hard-curated overnight candidate pool, point-in-time features, realized opportunity surfaces (MFE/MAE excursions), bracket outcome labels, and methodology playbooks. Your agent reasons to its own contract and exit — there is no pick endpoint. Paper-traded research data; educational only; not investment advice.","homepage":"https://gammarips.com/developers","icon":"https://gammarips.com/logo.png"},"authentication":{"required":true,"type":"bearer","scheme":"Bearer","description":"Two ways in. (1) API key: send a GammaRips key (gr_live_...) as 'Authorization: Bearer <key>' (or X-API-Key) to /mcp. (2) OAuth 2.1: connect a chat client (ChatGPT, Claude, Cursor) to /pro and complete the sign-in it offers; the access token carries your subscription tier. Free tier tools are usable without any credential on /mcp; pro tools require an active subscription. https://gammarips.com/pricing","pricing_url":"https://gammarips.com/pricing","oauth":{"endpoint":"/pro","authorization_server":"https://gammarips.com","resource_metadata":"/.well-known/oauth-protected-resource/pro","grants":["authorization_code+pkce","refresh_token","client_credentials"]}},"tools":[{"name":"get_pool","description":"\n    The GammaRips candidate pool for a scan date. One tool, four `view`s:\n\n      * view=\"enriched\" (DEFAULT) — the AI-enriched pool: news, technicals,\n        catalyst, the recommended contract (an OTM call chosen on contract\n        liquidity), and the 60-day momentum feature `mom_60`. Funnel for\n        scan_date >= 2026-08-24 (liquid-universe era): the 100 most liquid\n        optionable names, BULLISH only, one call each, roughly 40-50 rows.\n        Liquidity decides membership, not unusual activity; the $500K UOA\n        floor is retired and `overnight_score>=1` is a cosmetic floor.\n        Earlier scan dates come from the prior UOA-gated funnel (UOA>$500K,\n        top-50 BULLISH); the two eras are not one population.\n        This is the daily candidate set your agent reasons over to its OWN\n        contract (see get_playbook(\"run-your-own-tournament\")). Served from a\n        leakage-safe view (forward-outcome columns physically stripped);\n        `summary=True` gives ~21 decision columns, `fields=[...]` a strict\n        projection, `summary=False` full rows, `offset` pages.\n      * view=\"raw\" — the wide overnight scan BEFORE the pool cut (the ranked\n        liquid universe for scan_date >= 2026-08-24; the market-wide\n        unusual-activity scan for earlier dates). Honors `direction`,\n        `min_score`, `ticker`, `limit`.\n      * view=\"features\" — point-in-time FEATURE VECTORS from the leakage-safe\n        allowlist view `enriched_features_v1` (identity + features + cohort\n        metadata only; no outcome/label/telemetry column can appear). The\n        quantitative substrate for joining against query_outcomes. Lags the\n        live pool by ~1-2 trading days.\n      * view=\"preview\" — a minimal public teaser (ticker, direction, score,\n        headline, directional UOA) for the most recent scan; no contract\n        specifics or thesis.\n\n    TIER: view=\"preview\" is FREE (no key). The enriched / raw / features views\n    are the paid product — they require an active pro subscription key; an anon\n    call to them returns `subscription_required` (get_pool(view='preview') is\n    named as the free entry point).\n\n    Liquidity caveat (all views): `recommended_oi`/`recommended_volume` are\n    scan-time snapshots, not live values; `recommended_spread_pct` is\n    permanently NULL on the current data plan — re-check with get_liquidity.\n\n    Args:\n        view: \"enriched\" (default) | \"raw\" | \"features\" | \"preview\".\n        scan_date: YYYY-MM-DD (default: latest available scan for the view).\n        direction: \"bull\"/\"bear\" prefix filter (enriched / raw).\n        ticker: exact ticker filter (enriched / raw / features).\n        min_score: overnight_score floor (raw view only; clamped 0-10).\n        limit: max rows (enriched/raw clamp 1-50, features 1-100, preview 1-20).\n        summary: enriched only — True=compact columns, False=full rows.\n        fields: enriched only — explicit strict column projection.\n        offset: enriched only — pagination offset.\n    ","inputSchema":{"properties":{"view":{"default":"enriched","title":"View","type":"string"},"scan_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Direction"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"},"min_score":{"default":0,"title":"Min Score","type":"integer"},"limit":{"default":25,"title":"Limit","type":"integer"},"summary":{"default":true,"title":"Summary","type":"boolean"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Fields"},"offset":{"default":0,"title":"Offset","type":"integer"}},"title":"get_poolArguments","type":"object"},"tier":"anon","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_signal","description":"\n    Deep dive on a single ticker/contract. Two `view`s:\n\n      * view=\"detail\" (DEFAULT) — the full enriched signal for one ticker:\n        thesis, catalyst, the recommended contract, and point-in-time\n        features (leakage-safe view). `full=true` includes the long narrative\n        (news_summary, flow_intent_reasoning). If the ticker isn't in the\n        pool for the date, the error lists the dates on which it does appear.\n      * view=\"earnings\" — the doctrine earnings-window check (RM-003): the\n        next scheduled earnings date and whether it lands ON OR BEFORE the\n        contract expiration (`earnings_in_window`). The engine applies this\n        rail only at its own pick time, NOT in the pool, so pool rows CAN\n        carry earnings-window names — check every candidate yourself. Pass\n        the pool's `recommended_contract` and both ticker and expiration are\n        derived. FAIL-CLOSED: unknown date -> earnings_in_window=null, treat\n        as in-window.\n\n    Args:\n        ticker: underlying symbol (required for detail; optional for earnings\n            if `contract` is given).\n        view: \"detail\" (default) | \"earnings\".\n        scan_date: detail only — YYYY-MM-DD (default: latest for the ticker).\n        full: detail only — include the long narrative fields.\n        expiration: earnings only — option expiration YYYY-MM-DD to test.\n        contract: earnings only — OCC ticker supplying ticker+expiration.\n    ","inputSchema":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"},"view":{"default":"detail","title":"View","type":"string"},"scan_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date"},"full":{"default":false,"title":"Full","type":"boolean"},"expiration":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Expiration"},"contract":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Contract"}},"title":"get_signalArguments","type":"object"},"tier":"pro","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_liquidity","description":"\n    FRESH (entry-day) liquidity — the read the pool's session-frozen\n    `recommended_oi`/`recommended_volume` cannot give you (the overnight sweep\n    only becomes OI the next morning). Two modes, chosen by whether you pass a\n    single `contract`:\n\n      * `contract` given — ONE contract's snapshot: open interest, session\n        volume, last trade, day range, underlying price, greeks. Cache-first\n        (the engine re-reads the pool every ~10 min in market hours); pass\n        live=true to force a fresh upstream fetch or read a contract NOT in\n        today's pool.\n      * `contract` omitted — the WHOLE current pool (or your `contracts`\n        shortlist, max 60) in ONE call — the batch companion for the ~10:00 ET\n        decision window. Most-recent read per contract with explicit `as_of`.\n\n    Deliberately serves NO bid/ask/mid/spread (not available on the current\n    data plan — absent, not NULL). Judge fill risk from open_interest (updates\n    once each morning), day_volume (live session), last_trade recency, and the\n    day range.\n\n    Args:\n        contract: OCC ticker for the single-contract mode (verbatim from the\n            pool's `recommended_contract`). Omit for the whole-pool batch.\n        scan_date: pool date YYYY-MM-DD (batch mode; default: latest pool).\n        contracts: optional shortlist filter for the batch mode (max 60).\n        live: single-contract mode — force a fresh upstream fetch.\n    ","inputSchema":{"properties":{"contract":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Contract"},"scan_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date"},"contracts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Contracts"},"live":{"default":false,"title":"Live","type":"boolean"}},"title":"get_liquidityArguments","type":"object"},"tier":"pro","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"query_outcomes","description":"\n    The realized-outcome + receipts substrate behind the engine. One tool,\n    nine `view`s. Whole-pool composites under any FIXED exit are NEGATIVE by\n    construction — these are a research surface (how outcomes distribute\n    across features and exits), never a strategy track record.\n\n      * view=\"labels\" (DEFAULT) — row-level realized bracket LABELS joined to\n        point-in-time features. horizon \"same_day\" (live V7.1 GIGO +40/-30) or\n        \"3d\" (legacy +80/-60) — never pooled. NULL-label and illiquid rows\n        excluded (counts in meta). `aggregate_only=True` returns summary stats\n        instead of rows. Filters: scan_date_from/to, ticker, delta_min/max,\n        min_overnight_score, exit_reason.\n      * view=\"summary\" — grouped aggregates over the labeled pool. `group_by`\n        one of none|delta_bucket|overnight_score|premium_score|exit_reason|\n        day_of_week|moneyness_bucket.\n      * view=\"surface\" — the OPPORTUNITY SURFACE: per-contract realized MFE/MAE\n        excursions with NO exit applied (profit potential, exit free). Uses\n        scan_date OR a `days` lookback, `ticker`, `delta_min/max`,\n        `include_open`. `aggregate_only=True` returns MFE/MAE quantiles over\n        the FULL filtered set — use it for exit design. The row mode is capped\n        at 200 and truncates oldest-first WITHIN a scan_date, so its oldest\n        date is a highest-MFE-only slice; it reports `truncated`,\n        `matched_rows`, and `partial_scan_date` so you can see that happen.\n      * view=\"harvest\" — the touch-probability curve: P(premium touched +X%)\n        with CIs, day-of-peak buckets, stop-touch rates. `targets`, `stops`,\n        date range, delta band.\n      * view=\"exit_rule\" — RESEARCH-ONLY \"bring your exit, we score it\":\n        rule=\"bracket\" (target_pct/stop_pct) or rule=\"trailing\" (trail_pct,\n        activation_pct) scored against the surface / minute tape.\n      * view=\"signal_performance\" — UNDERLYING-STOCK direction outcomes for\n        the broad pool (NOT option PnL). Filters scan_date, ticker, direction,\n        outcome.\n      * view=\"win_rate\" — aggregate UNDERLYING-direction win rate over `days`\n        (NOT option PnL; headline key carries its universe).\n      * view=\"positions\" — the RECEIPTS: realized (closed) paper trades from\n        the engine's own daily pick, row-level, cohort-filtered\n        (`policy_version`, default live). Over `days`, `limit`.\n      * view=\"performance\" — cohort AGGREGATE of the receipts over `days`\n        (win rate, avg/median/best/worst), `direction`, `min_premium_score`,\n        `policy_version`. When the cohort has no closed trades, every aggregate\n        is `null` and `total_trades` is 0 — NEVER 0.0. A `null` here means \"not\n        measured yet\", not \"zero percent\"; do not render it as a result.\n\n    All returns are FRACTIONS (0.40 = +40%). Realized data serves closed\n    windows only. Paper-traded research data; not investment advice.\n\n    Args:\n        view: which surface (see above). Default \"labels\".\n        horizon: \"same_day\" | \"3d\" (labels/summary/exit_rule). If omitted, the\n            native default per view is used: labels/summary => \"same_day\" (the\n            live GIGO policy), exit_rule => \"3d\" (its excursion window).\n        group_by: summary grouping dimension.\n        scan_date / scan_date_from / scan_date_to: date filters (per view).\n        ticker / direction / delta_min / delta_max / min_overnight_score /\n            exit_reason / outcome: row/aggregate filters (per view).\n        days: lookback window (surface/win_rate/positions/performance).\n        limit: max rows (labels 1-200, signal_performance 1-50, positions 1-200).\n        aggregate_only: labels/surface views — summary stats instead of rows.\n            On `surface` this is also the only mode immune to the 200-row cap.\n        include_open: surface view — include not-yet-closed windows.\n        targets / stops: harvest view — PERCENT grids.\n        target_pct / stop_pct / rule / trail_pct / activation_pct: exit_rule view.\n        policy_version: positions/performance cohort filter. The live default\n            is the PAIR (policy label + cohort start date) — the label alone\n            does not define the cohort, since disowned cohorts remain in the\n            ledger under the same label. Responses carry `cohort_start`; a zero\n            row_count under the live cohort means it has not accrued closed\n            trades yet, not that there is no track record, and the aggregates\n            come back `null` rather than 0.0. Pass \"all\" for every era, but\n            note that \"all\" returns cohorts the engine has REPUDIATED — not\n            merely older exit mechanics — so it is not a track record and must\n            not be aggregated into one. Read the response `note` before\n            quoting any number from it.\n        min_premium_score: performance view floor.\n    ","inputSchema":{"properties":{"view":{"default":"labels","title":"View","type":"string"},"horizon":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Horizon"},"group_by":{"default":"none","title":"Group By","type":"string"},"scan_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date"},"scan_date_from":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date From"},"scan_date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date To"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Ticker"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Direction"},"delta_min":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Delta Min"},"delta_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Delta Max"},"min_overnight_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Min Overnight Score"},"exit_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Exit Reason"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Outcome"},"days":{"default":30,"title":"Days","type":"integer"},"limit":{"default":100,"title":"Limit","type":"integer"},"aggregate_only":{"default":false,"title":"Aggregate Only","type":"boolean"},"include_open":{"default":false,"title":"Include Open","type":"boolean"},"targets":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"title":"Targets"},"stops":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"title":"Stops"},"target_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Target Pct"},"stop_pct":{"default":30,"title":"Stop Pct","type":"number"},"rule":{"default":"bracket","title":"Rule","type":"string"},"trail_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Trail Pct"},"activation_pct":{"default":0,"title":"Activation Pct","type":"number"},"policy_version":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"V7_1_TILTED_GIGO","title":"Policy Version"},"min_premium_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Min Premium Score"}},"title":"query_outcomesArguments","type":"object"},"tier":"pro","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"replay_contract","description":"\n    Raw option price data for YOUR OWN entry/exit rule. This server does NOT\n    simulate or validate exits — it returns bars (the RM-002/RM-004 boundary).\n    Two `granularity` modes:\n\n      * granularity=\"minute\" (DEFAULT) — the intraday minute path for one\n        session (`date` required). Optionally pass a bracket (target_pct/\n        stop_pct, PERCENT of the 10:00 ET anchor) and the response also reports\n        the exact FIRST-CROSSING sequence measured from the tape. Pool\n        excursion windows are served from the engine's minute-path table;\n        anything else falls back to an upstream minute fetch.\n      * granularity=\"day\" — the DAILY mark series (OHLCV) over a date range,\n        to mark a live paper position day by day or replay a closed one. Uses\n        `from_date`/`to_date` (span capped at 120 days); `date` is ignored.\n\n    Option tape is THIN — minutes/days with no prints have no bar; treat\n    touch times as evidence, not tick-perfect truth. Paper-trade research\n    data; not investment advice.\n\n    Args:\n        contract: OCC option ticker (e.g. \"O:UNIT260717C00030000\").\n        date: minute mode — ET session date YYYY-MM-DD (required).\n        granularity: \"minute\" (default) | \"day\".\n        target_pct: minute mode — optional +X% level for first-crossing.\n        stop_pct: minute mode — optional -Y% level for first-crossing.\n        from_date: day mode — start YYYY-MM-DD (default: 30d before to_date).\n        to_date: day mode — end YYYY-MM-DD inclusive (default: today ET).\n    ","inputSchema":{"properties":{"contract":{"title":"Contract","type":"string"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Date"},"granularity":{"default":"minute","title":"Granularity","type":"string"},"target_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Target Pct"},"stop_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Stop Pct"},"from_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"From Date"},"to_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"To Date"}},"required":["contract"],"title":"replay_contractArguments","type":"object"},"tier":"pro","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_regime_context","description":"\n    Point-in-time market-regime context for a scan date: VIX close, VIX3M,\n    SPY trend state, and the 5-day VIX delta — all as-of <= scan_date (the\n    selection point, leakage-safe), plus the engine's regime safety rail\n    evaluated on those values.\n\n    The rail: the engine fail-closes (no trade) when spot VIX > VIX3M\n    (backwardation — the market pricing imminent volatility is an adverse\n    regime for short-dated directional longs).\n\n    Served from the labeled substrate, which lags the live pool by ~1-2\n    trading days. Values are constant per scan_date.\n\n    Args:\n        scan_date: YYYY-MM-DD. Defaults to the latest scan date carrying\n            regime features.\n\n    Returns:\n        {scan_date, vix_at_scan, vix3m_at_enrich, spy_trend_at_scan,\n         vix_5d_delta_at_scan, regime_rail_pass, rail_definition}\n    ","inputSchema":{"properties":{"scan_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scan Date"}},"title":"get_regime_contextArguments","type":"object"},"tier":"anon","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_market_calendar_status","description":"\n    Market-calendar reference. Two `view`s:\n\n      * view=\"status\" (DEFAULT) — is the US equity market open today, plus the\n        next open/close, holiday, and early-close flags (NYSE calendar,\n        deterministic — no \"is the market open?\" hallucination).\n      * view=\"scan_dates\" — which recent scan dates have GammaRips data, with\n        per-date signal counts (the pool's data-availability calendar).\n\n    Args:\n        view: \"status\" (default) | \"scan_dates\".\n    ","inputSchema":{"properties":{"view":{"default":"status","title":"View","type":"string"}},"title":"get_market_calendar_statusArguments","type":"object"},"tier":"anon","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_playbook","description":"\n    Methodology + reference, versioned server-side (re-fetch rather than\n    caching long-term). Arg-driven:\n\n      * `field` given — the plain-English DEFINITION + role of a signal field\n        (deterministic lookup, no LLM). e.g. field=\"mom_60\". The response's\n        `available_fields` lists every documented field.\n      * `name` given — a methodology playbook (markdown) by name, OR two\n        special reference pages:\n          - name=\"schema\" (or \"data-contract\") -> the machine-readable\n            substrate DATA CONTRACT: every outcome/label column with its\n            leakage classification (feature|label|opportunity|\n            regime_telemetry|identity) and as-of boundary. Only `feature`\n            columns are safe as selection inputs.\n          - any other name -> the playbook markdown (start-here,\n            daily-workflow, run-your-own-tournament, exit-lab,\n            leakage-and-data-contract, changelog).\n      * neither — the CATALOG of published playbooks (name/title/summary),\n        plus a pointer to the field dict (`field=`) and schema page.\n\n    Args:\n        name: playbook name, or \"schema\"/\"data-contract\" for the data contract.\n        field: a signal field name to explain (overrides `name`).\n    ","inputSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Field"}},"title":"get_playbookArguments","type":"object"},"tier":"anon","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_daily_report","description":"\n    The daily intelligence report. Two `view`s:\n\n      * view=\"report\" (DEFAULT) — the full report (title, markdown content,\n        scan_date) for `date`, or the most recent report if `date` is omitted.\n      * view=\"list\" — recent reports, most recent first (scan_date, title,\n        created_at), titles deduped. Use `limit`.\n\n    Args:\n        date: report date YYYY-MM-DD (report view; default: most recent).\n        view: \"report\" (default) | \"list\".\n        limit: list view — how many reports (default 10, clamped 1-30).\n    ","inputSchema":{"properties":{"date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Date"},"view":{"default":"report","title":"View","type":"string"},"limit":{"default":10,"title":"Limit","type":"integer"}},"title":"get_daily_reportArguments","type":"object"},"tier":"anon","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"resources":[{"uriTemplate":"gammarips://playbooks/{name}","name":"playbooks","description":"Methodology playbooks (markdown), server-versioned."}],"prompts":[{"name":"morning_brief","description":"Compose a morning briefing from the pool, regime, and surfaces","arguments":[]},{"name":"analyze_candidate","description":"Deep-dive one pool candidate: enrichment, features, history, excursions","arguments":[{"name":"ticker","description":"Stock ticker symbol (e.g., NVDA)","required":true}]},{"name":"run_your_own_tournament","description":"Run the bracket-tournament selection pattern over today's pool with your objective","arguments":[]}]}