{
  "schemaVersion": 2,
  "scope": "client-features",
  "title": "Feature API",
  "description": "Read-only market analytics, research and your own trading data through the feature tools available in Connect AI.",
  "baseUrl": "https://gwtrade.app/mcp",
  "reviewedAt": "2026-10-24",
  "sections": [
    {
      "id": "getting-started",
      "title": "Getting started",
      "body": [
        "Read market analytics through the same read-only feature tools available in Connect AI. Start with `market_brief` for an overview, then use a focused tool for details.",
        "",
        "### Connect",
        "",
        "In the desktop app, open **Settings → Connect AI** to connect a supported AI client. For your own code, create an MCP key in the Advanced section and keep it in your environment. An MCP key is different from your desktop sign-in token.",
        "",
        "Endpoint: `https://gwtrade.app/mcp`. Code examples use `Authorization: Bearer` with your MCP key. AI clients that support sign-in can use their normal connection flow.",
        "",
        "### Discover available features",
        "",
        "`tools/list` returns the tools available to your membership on the connected service, with their current input schemas. Features can vary with data availability. Use those schemas for supported values, defaults and limits.",
        "",
        "```bash",
        "export MCP_KEY='YOUR_MCP_KEY'",
        "curl --fail-with-body --silent --show-error 'https://gwtrade.app/mcp' \\",
        "  -H \"Authorization: Bearer $MCP_KEY\" \\",
        "  -H 'Content-Type: application/json' \\",
        "  -H 'Accept: application/json, text/event-stream' \\",
        "  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}'",
        "```",
        "",
        "The feature catalog below describes inputs and the information you receive. These tools read analytics; they do not place trades or modify your account."
      ]
    },
    {
      "id": "examples",
      "title": "Examples",
      "body": [
        "Call a feature with `tools/call`, its `name`, and an `arguments` object. Keep keys in your own environment. The documentation page does not send requests on your behalf.",
        "",
        "### Futures quote · curl",
        "",
        "```bash",
        "curl --fail-with-body --silent --show-error 'https://gwtrade.app/mcp' \\",
        "  -H \"Authorization: Bearer $MCP_KEY\" \\",
        "  -H 'Content-Type: application/json' \\",
        "  -H 'Accept: application/json, text/event-stream' \\",
        "  -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"get_quote\",\"arguments\":{\"symbol\":\"ES\"}}}'",
        "```",
        "",
        "### Market brief · Python",
        "",
        "Set `MCP_KEY` in your environment first. This uses Python's standard library:",
        "",
        "```python",
        "import json",
        "import os",
        "from urllib.request import Request, urlopen",
        "",
        "request = Request(",
        "    \"https://gwtrade.app/mcp\",",
        "    data=json.dumps({",
        "        \"jsonrpc\": \"2.0\", \"id\": 3, \"method\": \"tools/call\",",
        "        \"params\": {\"name\": \"market_brief\", \"arguments\": {\"symbol\": \"NQ\"}}",
        "    }).encode(),",
        "    headers={",
        "        \"Authorization\": \"Bearer \" + os.environ[\"MCP_KEY\"],",
        "        \"Content-Type\": \"application/json\",",
        "        \"Accept\": \"application/json, text/event-stream\"",
        "    },",
        ")",
        "with urlopen(request, timeout=45) as response:",
        "    print(json.load(response))",
        "```",
        "",
        "### Headlines · JavaScript",
        "",
        "Node.js 22+, with `MCP_KEY` in the environment:",
        "",
        "```javascript",
        "const response = await fetch(\"https://gwtrade.app/mcp\", {",
        "  method: \"POST\",",
        "  headers: {",
        "    Authorization: `Bearer ${process.env.MCP_KEY}`,",
        "    \"Content-Type\": \"application/json\",",
        "    Accept: \"application/json, text/event-stream\",",
        "  },",
        "  body: JSON.stringify({",
        "    jsonrpc: \"2.0\", id: 4, method: \"tools/call\",",
        "    params: { name: \"get_headlines\", arguments: { limit: 5 } },",
        "  }),",
        "  signal: AbortSignal.timeout(45_000),",
        "});",
        "if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);",
        "const reply = await response.json();",
        "if (reply.error || reply.result?.isError) throw new Error(JSON.stringify(reply));",
        "console.log(reply.result.content);",
        "```",
        "",
        "### More feature calls",
        "",
        "Use one of these as the JSON body of a `tools/call` request:",
        "",
        "```json",
        "{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"tools/call\",\"params\":{\"name\":\"get_gex_levels\",\"arguments\":{\"symbol\":\"NQ\",\"category\":\"zero\"}}}",
        "```",
        "",
        "```json",
        "{\"jsonrpc\":\"2.0\",\"id\":6,\"method\":\"tools/call\",\"params\":{\"name\":\"get_wheel_candidates\",\"arguments\":{\"strategy\":\"CSP\",\"profile\":\"balanced\",\"limit\":5}}}",
        "```",
        "",
        "```json",
        "{\"jsonrpc\":\"2.0\",\"id\":7,\"method\":\"tools/call\",\"params\":{\"name\":\"get_my_trades\",\"arguments\":{\"period\":\"week\",\"limit\":10}}}",
        "```"
      ]
    },
    {
      "id": "using-results",
      "title": "Using results",
      "body": [
        "### Reading a result",
        "",
        "Successful calls return MCP content blocks. Feature results are JSON encoded inside a text block. Check `isError` before treating that text as analytics. A protocol error can appear in the top-level `error` field.",
        "",
        "`as_of` and `data_age_sec` describe the observation's freshness. A result can represent the last session when markets are closed. Follow the tool's notes, units and missing-value indicators; a missing value is not zero. A `truncated` result contains a reduced list or text.",
        "",
        "### Symbols and dates",
        "",
        "Use discovery tools such as `list_gex_symbols`, `search_option_symbols`, `search_sentiment_symbols` and `get_scenario_instruments` to choose supported instruments. Futures tools commonly accept `ES` and `NQ`; some options tools map them to their index. Follow each tool's returned notes and input schema. Date strings are usually `YYYY-MM-DD`; the schema identifies the applicable session and timezone.",
        "",
        "### Errors and retries",
        "",
        "An invalid or revoked key returns HTTP `401`; expired access can return `403`. For `429`, wait for `Retry-After`. A tool can instead return `isError` for an invalid argument, unavailable data or a feature warming up. Follow the error's instructions and use bounded retry backoff.",
        "",
        "### Personal data",
        "",
        "`get_my_trades` and `get_my_trading_stats` use the member attached to your connection. They return your own account data. Community leaderboard results are public summaries; positioning is anonymous and appears only for markets with at least three participating members."
      ]
    },
    {
      "id": "market-overview",
      "title": "Market overview",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "quotes-liquidity",
      "title": "Quotes & liquidity",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "dealer-gamma",
      "title": "Dealer gamma & Greeks",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "gamma-map",
      "title": "SPX gamma map",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "options-levels",
      "title": "Options & key levels",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "options-flow",
      "title": "Options flow",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "dark-pool",
      "title": "Dark pool activity",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "news-research",
      "title": "News & research",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "calendar",
      "title": "Calendar & trading hours",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "structure",
      "title": "Structure & auction",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "sentiment",
      "title": "Sentiment & rotation",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "scenarios",
      "title": "Scenarios",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "wheel",
      "title": "Wheel candidates",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "companies",
      "title": "Company relationships",
      "body": [
        "Inputs below are optional unless marked **required**. Use `tools/list` for the current input schema."
      ]
    },
    {
      "id": "my-performance",
      "title": "My trades & community",
      "body": [
        "Your personal trade and statistics tools use your authenticated membership. Community tools return public summaries or anonymous aggregates."
      ]
    }
  ],
  "tools": [
    {
      "name": "market_brief",
      "section": "market-overview",
      "summary": "A combined market read: price, session range, gamma levels, structure, major events and headlines.",
      "arguments": "`symbol` (string)"
    },
    {
      "name": "get_quote",
      "section": "quotes-liquidity",
      "summary": "Latest futures price, bid/ask, spread and the last minute of buy/sell trade flow.",
      "arguments": "`symbol` (string)"
    },
    {
      "name": "get_order_book_summary",
      "section": "quotes-liquidity",
      "summary": "Resting liquidity, book imbalance, the largest bid/ask walls and recent pull/stack activity.",
      "arguments": "`depth` (integer, 5–200, default 20), `pull_stack_seconds` (integer, 10–300, default 60), `symbol` (string)"
    },
    {
      "name": "get_book_depth_history",
      "section": "quotes-liquidity",
      "summary": "How bid/ask depth and imbalance changed through the futures session.",
      "arguments": "`bucket_min` (integer, 5, 15, 30 or 60, default 15), `hours` (integer, 0–24, default 0 = since the 18:00 New York open), `symbol` (string)"
    },
    {
      "name": "get_liquidity_levels",
      "section": "quotes-liquidity",
      "summary": "Prices where large resting orders persisted, with size, duration and distance from the current market.",
      "arguments": "`hours` (integer, 0–168, default 0 = since the session open), `min_minutes` (integer, 1–1440, default 15), `symbol` (string), `top` (integer, 1–25, default 10)"
    },
    {
      "name": "get_session_ohlc",
      "section": "quotes-liquidity",
      "summary": "Session, overnight and regular-hours open/high/low/last, plus session and regular-hours VWAP.",
      "arguments": "`symbol` (string), `vwap_path` (boolean, default False)"
    },
    {
      "name": "get_desk_levels",
      "section": "quotes-liquidity",
      "summary": "The ES or NQ Desk’s key levels and session VWAP in futures points, with distance from price.",
      "arguments": "`symbol` (string)"
    },
    {
      "name": "list_gex_symbols",
      "section": "dealer-gamma",
      "summary": "Available dealer-gamma symbols and expiry categories. Use this before choosing a symbol.",
      "arguments": "None."
    },
    {
      "name": "get_gex_levels",
      "section": "dealer-gamma",
      "summary": "Dealer gamma levels, zero gamma and the strongest call/put strikes for the selected expiry category.",
      "arguments": "`category` (zero|one|full, default zero), `date` (string), `strikes` (integer, 1–25, default 8), `symbol` (string, default NQ_NDX)"
    },
    {
      "name": "get_gex_greeks",
      "section": "dealer-gamma",
      "summary": "Per-strike gamma, delta, vanna, charm and volume; optionally the expiry’s implied-volatility smile.",
      "arguments": "`expiry` (zero|one|latest|next, default zero), `include_iv` (boolean, default False), `metric` (all|volume|delta|gamma|vanna|charm, default all), `strikes` (integer, 1–25, default 8), `symbol` (string, default NQ_NDX)"
    },
    {
      "name": "get_gex_greeks_history",
      "section": "dealer-gamma",
      "summary": "How one dealer greek changed per strike during a selected session.",
      "arguments": "`day` (string), `expiry` (zero|one|latest|next, default zero), `metric` (volume|delta|gamma|vanna|charm, default gamma), `step_min` (integer, 1–60, default 15), `strikes` (integer, 1–15, default 6), `symbol` (string, default NQ_NDX)"
    },
    {
      "name": "get_gex_ranked_levels",
      "section": "dealer-gamma",
      "summary": "Ranked gamma and net-open-interest levels, with optional paths showing how the levels moved during the session.",
      "arguments": "`step_min` (integer, 1–60, default 15), `symbol` (string, default NQ; NQ / NDX → NQ_NDX, ES / SPX → ES_SPX, QQQ), `trails` (boolean, default True)"
    },
    {
      "name": "get_gex_orderflow",
      "section": "dealer-gamma",
      "summary": "Dealer greek orderflow: gamma, convexity, vanna, charm and aggregate delta exposure.",
      "arguments": "`symbol` (string, default NQ_NDX)"
    },
    {
      "name": "get_options_flow_gamma",
      "section": "dealer-gamma",
      "summary": "Trade-based dealer gamma by strike: the hot strike, positive/negative totals and expiry breakdown.",
      "arguments": "`symbol` (string, default SPX; ES → SPX, NQ → NDX), `top` (integer, 1–25, default 8)"
    },
    {
      "name": "get_daily_gamma_index",
      "section": "dealer-gamma",
      "summary": "Daily 0DTE call/put gamma, the net-to-total gamma index and delta exposure for SPX, NDX, SPY or QQQ.",
      "arguments": "`date` (string: YYYY-MM-DD, New York, within the last 30 days; default today), `symbol` (string, default SPX; NDX, SPY, QQQ; ES → SPX, NQ → NDX)"
    },
    {
      "name": "get_gamma_map_dates",
      "section": "gamma-map",
      "summary": "Available SPX participant groups, current market date and selectable forward sessions.",
      "arguments": "None."
    },
    {
      "name": "get_gamma_levels",
      "section": "gamma-map",
      "summary": "Daily SPX call/put walls, zero/max gamma and other key dealer-gamma levels.",
      "arguments": "None."
    },
    {
      "name": "get_gamma_surface",
      "section": "gamma-map",
      "summary": "A summary of the SPX gamma, charm or delta-pressure surface for a participant group.",
      "arguments": "`actor` (mm|bd|procust|cust|firm, default mm), `date` (string, default today), `greek` (gamma|charm|delta, default gamma), `levels_n` (integer, 3–25, default 10)"
    },
    {
      "name": "get_net_gex_by_strike",
      "section": "gamma-map",
      "summary": "Intraday 0DTE SPX gamma exposure by strike near spot for a participant group.",
      "arguments": "`actor` (mm|bd|procust|cust|firm, default mm), `top_n` (integer, 1–25, default 8)"
    },
    {
      "name": "get_net_gex_timeline",
      "section": "gamma-map",
      "summary": "The selected participant group’s total 0DTE SPX gamma exposure through today’s session.",
      "arguments": "`actor` (mm|bd|procust|cust|firm, default mm), `step_min` (integer, 1–60, default 10)"
    },
    {
      "name": "get_net_oi_by_strike",
      "section": "gamma-map",
      "summary": "Market makers’ net 0DTE SPX open interest near spot, split into call and put legs.",
      "arguments": "`strikes` (integer, 3–25, default 10)"
    },
    {
      "name": "get_gamma_condors",
      "section": "gamma-map",
      "summary": "Iron-condor-shaped positions inferred from same-day SPX open interest.",
      "arguments": "None."
    },
    {
      "name": "get_0dte_chain",
      "section": "options-levels",
      "summary": "Same-day-expiry option chain, ATM volatility and nearby strikes, live or at a selected session minute.",
      "arguments": "`at` (string), `date` (string), `strikes` (integer, 1–30, default 10), `ticker` (string, default SPX), `top` (integer, 1–15, default 5)"
    },
    {
      "name": "get_0dte_volume",
      "section": "options-levels",
      "summary": "Same-day-expiry call/put volume by strike, live or at a selected session minute.",
      "arguments": "`at` (string), `date` (string), `strikes` (integer, 1–30, default 10), `ticker` (string, default SPX), `top` (integer, 1–15, default 5)"
    },
    {
      "name": "get_gex_confluence",
      "section": "options-levels",
      "summary": "Cross-asset gamma-wall confluence across SPX, NDX, QQQ and SPY.",
      "arguments": "`at` (string), `date` (string)"
    },
    {
      "name": "get_gex_walls",
      "section": "options-levels",
      "summary": "0DTE call wall, put wall and gamma flip, with distance from price.",
      "arguments": "`date` (string), `ticker` (string, default SPX)"
    },
    {
      "name": "get_options_key_levels",
      "section": "options-levels",
      "summary": "Daily call/put/hedge walls, key gamma/delta strikes and the implied one-day move, with distance from spot.",
      "arguments": "`symbol` (string, default SPX)"
    },
    {
      "name": "search_option_symbols",
      "section": "options-levels",
      "summary": "Find supported option symbols by prefix, including their last price and exercise style.",
      "arguments": "`limit` (integer, 1–25, default 10), `query` **required** (string)"
    },
    {
      "name": "get_iv_term_structure",
      "section": "options-levels",
      "summary": "ATM implied volatility across expirations, including 30-/90-day IV and term-structure shape.",
      "arguments": "`points` (integer, 4–40, default 12), `symbol` (string, default SPX)"
    },
    {
      "name": "get_large_options_flow",
      "section": "options-flow",
      "summary": "Large 0DTE option trades filtered by ticker, premium, side, moneyness, sweeps and spreads.",
      "arguments": "`date` (string), `hide_spreads` (boolean, default False), `limit` (integer, 1–30, default 10), `min_premium` (number, 0–1000000000), `moneyness` (any|otm|near2|near1, default any), `side` (all|bought|sold, default all), `sweeps_only` (boolean, default False), `ticker` (string, default SPX)"
    },
    {
      "name": "get_options_delta_flow",
      "section": "options-flow",
      "summary": "Intraday options delta flow for the selected supported symbol.",
      "arguments": "`symbol` (string, default SPX)"
    },
    {
      "name": "get_flow_alerts",
      "section": "options-flow",
      "summary": "Recent options-flow alerts, including positive/negative surges and closing activity.",
      "arguments": "`top` (integer, 1–30, default 10)"
    },
    {
      "name": "get_options_tape_analytics",
      "section": "options-flow",
      "summary": "A summary of options-print imbalance, directional flow and the most significant prints.",
      "arguments": "`symbol` (string, default SPX), `top` (integer, 1–15, default 5)"
    },
    {
      "name": "get_dark_pool_levels",
      "section": "dark-pool",
      "summary": "The largest clustered off-exchange levels from the last three QQQ/SPY sessions.",
      "arguments": "`symbol` (string), `top` (integer, 1–10, default 10)"
    },
    {
      "name": "get_dark_pool_history",
      "section": "dark-pool",
      "summary": "Off-exchange levels across a chosen historical session window.",
      "arguments": "`date` (string), `sessions` (integer, 1–20, default 3), `symbol` (string, default QQQ), `top` (integer, 1–20, default 10)"
    },
    {
      "name": "get_dark_pool_activity",
      "section": "dark-pool",
      "summary": "When QQQ/SPY off-exchange activity occurred, with notional totals and the busiest intervals.",
      "arguments": "`date` (string), `hours` (regular|extended, default regular), `interval` (5m|15m, default 5m), `symbol` (string, default QQQ), `top` (integer, 1–20, default 5)"
    },
    {
      "name": "get_dark_pool_blocks",
      "section": "dark-pool",
      "summary": "The largest and most recent QQQ/SPY off-exchange prints of at least $5 million.",
      "arguments": "`date` (string), `min_usd` (number, at least 5,000,000, default 5,000,000), `symbol` (string, default QQQ), `top` (integer, 1–50, default 10)"
    },
    {
      "name": "get_headlines",
      "section": "news-research",
      "summary": "Latest market headlines, with timestamps and age, optionally filtered by words.",
      "arguments": "`limit` (integer, 1–100, default 20), `query` (string)"
    },
    {
      "name": "search_news_articles",
      "section": "news-research",
      "summary": "Search full news articles by text, ticker, sentiment, topic and recency.",
      "arguments": "`limit` (integer, 1–50, default 20), `query` (string), `sentiment` (any|bull|bear, default any), `since_hours` (integer, 1 to the retention in hours), `tickers` (list), `topics` (list)"
    },
    {
      "name": "get_news_article",
      "section": "news-research",
      "summary": "Read an article by its ID, including text, tickers, sentiment and topics.",
      "arguments": "`id` **required** (integer)"
    },
    {
      "name": "get_news_impact",
      "section": "news-research",
      "summary": "SPX’s five-minute price reaction after today’s headlines matching selected keywords.",
      "arguments": "`keywords` (list), `limit` (integer, 1–50, default 15)"
    },
    {
      "name": "get_market_summary",
      "section": "news-research",
      "summary": "The latest options-market research summary, trading context and key levels.",
      "arguments": "`limit` (integer, 1–5, default 1)"
    },
    {
      "name": "get_release_brief",
      "section": "news-research",
      "summary": "Pre-release and follow-up reads of major economic events, including actual/forecast/previous values.",
      "arguments": "`day` (string: today or YYYY-MM-DD, New York), `include_x_posts` (boolean, default False), `limit` (integer, 1–10, default 3), `when` (all|recent|upcoming, default all)"
    },
    {
      "name": "get_economic_calendar",
      "section": "calendar",
      "summary": "Scheduled economic releases and earnings, filtered by country, days and importance.",
      "arguments": "`country` (string), `days` (integer, 0–14, default 2), `earnings` (boolean, default True), `min_importance` (high|medium|all, default medium)"
    },
    {
      "name": "get_market_status",
      "section": "calendar",
      "summary": "Current regular-session state of NYSE, Nasdaq and the London Stock Exchange.",
      "arguments": "None."
    },
    {
      "name": "get_session_hours",
      "section": "calendar",
      "summary": "An exchange’s session times on a selected date and its next trading dates.",
      "arguments": "`date` (string), `market` (nyse|nasdaq|lse, default nyse), `next` (integer, 0–20, default 5)"
    },
    {
      "name": "get_market_holidays",
      "section": "calendar",
      "summary": "Exchange holidays and special hours within a date range.",
      "arguments": "`from` (string), `limit` (integer, 1–200, default 50), `markets` (string, default core), `status` (closed|early_close|all, default all), `to` (string)"
    },
    {
      "name": "list_exchanges",
      "section": "calendar",
      "summary": "Find exchanges covered by the trading calendar.",
      "arguments": "`query` (string)"
    },
    {
      "name": "get_market_structure",
      "section": "structure",
      "summary": "Top-down ES/NQ price structure, bias, trend, key levels and primary scenario across timeframes.",
      "arguments": "`symbol` (string, default NQ; ES, SPX and SPY → ES, NDX and QQQ → NQ)"
    },
    {
      "name": "get_stock_structure",
      "section": "structure",
      "summary": "Top-down stock/ETF price structure across 4-hour, 1-hour, 30-minute and 15-minute bars.",
      "arguments": "`symbol` **required** (string)"
    },
    {
      "name": "get_market_auction",
      "section": "structure",
      "summary": "ES/NQ volume and TPO profiles, value areas, auction context and nearby key levels.",
      "arguments": "`days` (integer, 0–60, default 0), `history` (integer, 0–20, default 0), `symbol` (string, default NQ; ES, SPX and SPY → ES, NDX and QQQ → NQ)"
    },
    {
      "name": "get_market_stability",
      "section": "structure",
      "summary": "SPX’s short-horizon stability gauge based on dealer gamma positioning.",
      "arguments": "None."
    },
    {
      "name": "get_options_sentiment",
      "section": "sentiment",
      "summary": "Options sentiment for selected tickers, including IV rank and risk-reversal rank.",
      "arguments": "`lookback` (integer, 0–30, default 5), `symbols` (list)"
    },
    {
      "name": "get_options_sentiment_history",
      "section": "sentiment",
      "summary": "Daily options-sentiment readings over the chosen lookback.",
      "arguments": "`lookback` (integer, 1–30, default 20), `symbols` (list)"
    },
    {
      "name": "list_sector_groups",
      "section": "sentiment",
      "summary": "Available sectors and sub-industries, with group IDs and member counts.",
      "arguments": "`kind` (sector|sub_industry|all, default sector), `query` (string)"
    },
    {
      "name": "scan_sector_sentiment",
      "section": "sentiment",
      "summary": "Rank a sector or sub-industry by IV rank, risk reversal, volatility spread or skew.",
      "arguments": "`group` **required** (string), `limit` (integer, 1–30, default 15), `order` (desc|asc, default desc), `sort_by` (iv_rank|rr_rank|iv_minus_rv|call_skew|put_skew, default iv_rank)"
    },
    {
      "name": "search_sentiment_symbols",
      "section": "sentiment",
      "summary": "Find tickers by ticker prefix or company name for sentiment analysis.",
      "arguments": "`indexes_only` (boolean, default False), `limit` (integer, 1–25, default 10), `query` **required** (string)"
    },
    {
      "name": "get_rrg_quadrants",
      "section": "sentiment",
      "summary": "Relative strength and momentum versus a benchmark, including each symbol’s rotation quadrant.",
      "arguments": "`benchmark` (string), `period` (daily|weekly|monthly, default weekly), `symbols` (list)"
    },
    {
      "name": "get_scenario_instruments",
      "section": "scenarios",
      "summary": "Instruments and historical date coverage available for scenario analysis.",
      "arguments": "None."
    },
    {
      "name": "get_scenario_odds",
      "section": "scenarios",
      "summary": "Historical-analog probabilities and expected ranges over the selected horizon.",
      "arguments": "`anchor` (close|open, default close), `asof` (string), `horizon` (1, 5, 10 or 20 sessions; default 1), `lookback` (integer, 60–2500, default 1260), `matches` (integer, 5–300, default 100), `method` (regime|recent|weekday, default regime), `symbol` (string)"
    },
    {
      "name": "get_scenario_analogs",
      "section": "scenarios",
      "summary": "The historical matching windows behind a scenario, with returns and price excursions.",
      "arguments": "`anchor` (close|open, default close), `asof` (string), `horizon` (1, 5, 10 or 20 sessions; default 1), `lookback` (integer, 60–2500, default 1260), `matches` (integer, 5–300, default 100), `method` (regime|recent|weekday, default regime), `symbol` (string), `top` (integer, 1–30, default 10)"
    },
    {
      "name": "get_scenario_levels",
      "section": "scenarios",
      "summary": "Statistical range levels across 1-, 5-, 10- and 20-session horizons.",
      "arguments": "`anchor` (close|open, default close), `symbol` (string)"
    },
    {
      "name": "get_wheel_candidates",
      "section": "wheel",
      "summary": "Cash-secured-put or covered-call candidates for a chosen risk profile and earnings policy.",
      "arguments": "`limit` (integer, 1–30, default 10), `policy` (advisory|exclude_known_events|require_checked_window|context_score, default advisory), `profile` (conservative|balanced|aggressive, default balanced), `strategy` (CSP|CC, default CSP)"
    },
    {
      "name": "get_wheel_detail",
      "section": "wheel",
      "summary": "One ticker’s wheel candidates, volatility, trend, support/resistance and event context.",
      "arguments": "`policy` (advisory|exclude_known_events|require_checked_window|context_score, default advisory), `symbol` **required** (string)"
    },
    {
      "name": "get_supply_chain",
      "section": "companies",
      "summary": "A company’s profile and its customers, suppliers and other business relationships.",
      "arguments": "`per_role` (integer, 1–25, default 10), `ticker` (string)"
    },
    {
      "name": "search_companies",
      "section": "companies",
      "summary": "Find companies in the business-relationships dataset by ticker or name.",
      "arguments": "`limit` (integer, 1–25, default 10), `query` **required** (string)"
    },
    {
      "name": "get_my_trades",
      "section": "my-performance",
      "summary": "Your own closed trades and, optionally, open positions and working orders.",
      "arguments": "`account` (all|live|prop|demo|real, default all; real = live), `include_open` (boolean, default True), `limit` (integer, 1–100, default 25), `outcome` (all|win|loss|scratch, default all), `period` (today|week|month|all, default week), `symbol` (string)"
    },
    {
      "name": "get_my_trading_stats",
      "section": "my-performance",
      "summary": "Your own trading statistics by period and account kind, with an optional prior-period comparison.",
      "arguments": "`account` (all|live|prop|demo|real, default all; real = live), `compare_previous` (boolean, default False), `period` (today|week|month|all, default week)"
    },
    {
      "name": "get_community_leaderboard",
      "section": "my-performance",
      "summary": "The community’s public leaderboard, filtered by period, account kind and ranking.",
      "arguments": "`account` (all|live|prop|demo|real, default all; real = live), `board` (score|net|pf|winrate|consistency, default score), `limit` (integer, 1–50, default 15), `period` (today|week|month|all, default week)"
    },
    {
      "name": "get_community_positioning",
      "section": "my-performance",
      "summary": "Anonymous aggregate positioning for markets with at least three participating members.",
      "arguments": "`symbol` (string)"
    }
  ]
}
