Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:00acc9d84fb56eb22882b1b8022010eff180f8987bc4babe8166d9675265740c
What it is
What a remote MCP server returned when asked what it offers: 9 tools

The blob, as servednamed by its sha256

{ "instructions": "GammaRips serves read-only options-flow data primitives. It never returns a pick. Your agent reasons to its own contract and exit. First call get_playbook(name='start-here'). Free, no credential: get_pool(view='preview'), get_daily_report, get_playbook, get_regime_context, get_market_calendar_status. Pro ($29/month, 30-day free trial) unlocks the full pool (enriched / raw / features views) plus get_signal, get_liquidity, query_outcomes, and replay_contract. To subscribe: a human starts the trial at https://gammarips.com/pricing?utm_source=mcp_instructions , then either signs in through OAuth when adding this server, or creates an API key at https://gammarips.com/account?utm_source=mcp_instructions (shown once) and sends it as an 'Authorization: Bearer gr_live_...' header. If a tool returns subscription_required, relay its message and next_steps to your human operator. All data is paper-traded research. Educational only. Not investment advice.", "tools": [ { "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" }, "limit": { "default": 10, "title": "Limit", "type": "integer" }, "view": { "default": "report", "title": "View", "type": "string" } }, "title": "get_daily_reportArguments", "type": "object" }, "name": "get_daily_report", "outputSchema": null }, { "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" }, "contracts": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Contracts" }, "live": { "default": false, "title": "Live", "type": "boolean" }, "scan_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Scan Date" } }, "title": "get_liquidityArguments", "type": "object" }, "name": "get_liquidity", "outputSchema": { "additionalProperties": true, "title": "get_liquidityDictOutput", "type": "object" } }, { "description": "\n Market-calendar reference. Three `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 raw scan's data-availability calendar).\n * view=\"freshness\" — is the pool you are about to trade the right pool?\n Returns schema \"pool-freshness/1\": expected_scan_date (the last NYSE\n session before today), each pipeline stage (scan, enrichment,\n liquidity) with its latest date, row count for the expected date,\n and ok (true / false = overdue / null = could not check); the\n enrichment stage also gives expected_rows (the rows the enrichment\n filter must produce, so rows < expected_rows is a partial pool); the\n scan_date get_pool(view=\"enriched\") serves by default\n (pool_scan_date) and its row count (pool_rows), `fresh`, and machine\n `reasons` (scan-stale, enrichment-stale, liquidity-stale, pool-stale,\n pool-empty, unknown-<stage|pool>). Fail-closed: an unknown is never\n fresh. A stage not yet due reports ok=true, due=false; before the\n 06:00 ET enrichment, fresh is false with reason pool-stale because\n the next pool does not exist yet. No row floor is applied; apply\n your own to pool_rows. Cached up to 60 s.\n\n Args:\n view: \"status\" (default) | \"scan_dates\" | \"freshness\".\n ", "inputSchema": { "properties": { "view": { "default": "status", "title": "View", "type": "string" } }, "title": "get_market_calendar_statusArguments", "type": "object" }, "name": "get_market_calendar_status", "outputSchema": null }, { "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": { "field": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Field" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Name" } }, "title": "get_playbookArguments", "type": "object" }, "name": "get_playbook", "outputSchema": null }, { "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": { "direction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Direction" }, "fields": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" }, "limit": { "default": 25, "title": "Limit", "type": "integer" }, "min_score": { "default": 0, "title": "Min Score", "type": "integer" }, "offset": { "default": 0, "title": "Offset", "type": "integer" }, "scan_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Scan Date" }, "summary": { "default": true, "title": "Summary", "type": "boolean" }, "ticker": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "view": { "default": "enriched", "title": "View", "type": "string" } }, "title": "get_poolArguments", "type": "object" }, "name": "get_pool", "outputSchema": null }, { "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" }, "name": "get_regime_context", "outputSchema": { "additionalProperties": true, "title": "get_regime_contextDictOutput", "type": "object" } }, { "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": { "contract": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Contract" }, "expiration": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Expiration" }, "full": { "default": false, "title": "Full", "type": "boolean" }, "scan_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Scan Date" }, "ticker": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "view": { "default": "detail", "title": "View", "type": "string" } }, "title": "get_signalArguments", "type": "object" }, "name": "get_signal", "outputSchema": { "additionalProperties": true, "title": "get_signalDictOutput", "type": "object" } }, { "description": "\n The realized-outcome history behind the pool: use it to set a target and\n a stop from what past pool contracts actually did. One tool, nine\n `view`s. A pool-wide result under one fixed exit describes that one rule,\n not a forecast for the plan you build.\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\" — history of a RETIRED engine test: closed paper\n trades from the engine's former one-pick-a-day tournament under one\n fixed exit (retired 2026-09-28). Not the product and not the pool; do\n not use it to judge the pool. Row-level, over `days`, `limit`.\n * view=\"performance\" — aggregate of that retired test over `days`\n (`direction`, `min_premium_score`, `policy_version`). Same caveat:\n history of one retired rule, not a GammaRips result. When it has no\n closed trades, every aggregate is `null` and `total_trades` is 0.\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": { "activation_pct": { "default": 0, "title": "Activation Pct", "type": "number" }, "aggregate_only": { "default": false, "title": "Aggregate Only", "type": "boolean" }, "days": { "default": 30, "title": "Days", "type": "integer" }, "delta_max": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Delta Max" }, "delta_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Delta Min" }, "direction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Direction" }, "exit_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Exit Reason" }, "group_by": { "default": "none", "title": "Group By", "type": "string" }, "horizon": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Horizon" }, "include_open": { "default": false, "title": "Include Open", "type": "boolean" }, "limit": { "default": 100, "title": "Limit", "type": "integer" }, "min_overnight_score": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Min Overnight Score" }, "min_premium_score": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Min Premium Score" }, "outcome": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Outcome" }, "policy_version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "V7_1_TILTED_GIGO", "title": "Policy Version" }, "rule": { "default": "bracket", "title": "Rule", "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" }, "stop_pct": { "default": 30, "title": "Stop Pct", "type": "number" }, "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" }, "targets": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Targets" }, "ticker": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "trail_pct": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Trail Pct" }, "view": { "default": "labels", "title": "View", "type": "string" } }, "title": "query_outcomesArguments", "type": "object" }, "name": "query_outcomes", "outputSchema": { "additionalProperties": true, "title": "query_outcomesDictOutput", "type": "object" } }, { "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" }, "from_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "From Date" }, "granularity": { "default": "minute", "title": "Granularity", "type": "string" }, "stop_pct": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Stop Pct" }, "target_pct": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Target Pct" }, "to_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "To Date" } }, "required": [ "contract" ], "title": "replay_contractArguments", "type": "object" }, "name": "replay_contract", "outputSchema": { "additionalProperties": true, "title": "replay_contractDictOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:00acc9d84fb56eb22882b1b8022010eff180f8987bc4babe8166d9675265740c | sha256sum