Skip to content

Quote Queries

MCP tool overview

futu_get_snapshot

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_market_snapshot
  • Route: MCP JSON-RPC tools/call with name = "futu_get_snapshot"

Description:

Get a security snapshot (one-shot, no subscription) with extended fields: 52-week high/low, avg price, volume ratio, amplitude, bid/ask.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL (alias: code / stock / security for SDK compat)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_snapshot",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_quote

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_stock_quote
  • Route: MCP JSON-RPC tools/call with name = "futu_get_quote"

Description:

Get real-time basic quote (price, volume, turnover) for a security. Auto-subscribes SubType::Basic on first call.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL (alias: code / stock / security for SDK compat)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_quote",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.request_history_kline
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline"

Description:

Get the latest N historical K-line (OHLCV) bars within the requested date range, in ascending time order after reading all pages. This is not a subscribed current-K-line query; use futu_get_history_kline for explicit forward pagination.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock Security symbol (MARKET.CODE); alias: code / stock
kl_type string ✓ default default_kl_type ktype, k_type K-line type: day|week|month|quarter|year|1min|3min|5min|10min|15min|30min|60min|120min|180min|240min (alias: ktype / k_type / kl_type for SDK compat)
count i32? — num, max_count, req_count Latest candles within the requested historical date range (default 100), returned in ascending time order after all pages are read; alias: num / max_count / req_count
begin string? — begin_time, from Start date yyyy-MM-dd (optional; default computed from count); alias: begin_time / from
end string? — end_time, to End date yyyy-MM-dd (optional; default today); alias: end_time / to

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

Runtime validation: this request type has a validate() method that adds runtime required-field / enum-value validation on top of the JSON schema.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline",
    "arguments": {
      "symbol": "HK.00700",
      "kl_type": "day"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_ticker

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_rt_ticker
  • Route: MCP JSON-RPC tools/call with name = "futu_get_ticker"

Description:

Get recent ticker (trade-by-trade). Auto-subscribes Ticker.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol (MARKET.CODE); alias: code / stock / security
count i32 ✓ default default_ticker_count num, max_count, req_count Number of ticks to fetch (default 100, max 1000); alias: num / max_count / req_count

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

Runtime validation: this request type has a validate() method that adds runtime required-field / enum-value validation on top of the JSON schema.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_ticker",
    "arguments": {
      "symbol": "HK.00700",
      "count": 100
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_orderbook

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_order_book
  • Route: MCP JSON-RPC tools/call with name = "futu_get_orderbook"

Description:

Get the order book (bids and asks with price, volume, order count). Auto-subscribes OrderBook; set odd_lot=true for SG/MY odd-lot orderbook.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol (MARKET.CODE); alias: code / stock / security
depth i32 ✓ default default_depth num Order book depth, 1-40 (default 10); alias: num
odd_lot boolean ✓ default default oddLot, is_odd_lot Set true to query SG/MY odd-lot orderbook (SubType_OrderBook_Odd=22)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

Runtime validation: this request type has a validate() method that adds runtime required-field / enum-value validation on top of the JSON schema.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_orderbook",
    "arguments": {
      "symbol": "HK.00700",
      "depth": 10,
      "odd_lot": false
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_rt

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_rt_data
  • Route: MCP JSON-RPC tools/call with name = "futu_get_rt"

Description:

Get intraday (RT / time-sharing) minute-by-minute price series. Auto-subscribes RT.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL (alias: code / stock / security for SDK compat)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_rt",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_broker

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_broker_queue
  • Route: MCP JSON-RPC tools/call with name = "futu_get_broker"

Description:

Get the broker queue (HK only). Auto-subscribes Broker.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL (alias: code / stock / security for SDK compat)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_broker",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_history_kline

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.request_history_kline
  • Route: MCP JSON-RPC tools/call with name = "futu_get_history_kline"

Description:

Historical K-line / OHLCV time series with rehab type control (forward/backward/none) and pagination-friendly max_count. Python SDK: OpenQuoteContext.request_history_kline.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock Security symbol (MARKET.CODE); alias: code / stock
kl_type string ✓ default default_kl_type ktype, k_type K-line type: day|week|month|quarter|year|1min|3min|5min|10min|15min|30min|60min|120min|180min|240min (default day); alias: ktype / k_type
rehab_type string ✓ default default_rehab_none — Rehab type: none|forward|backward (default none)
begin string ✅ begin_time, start_time, from Start date yyyy-MM-dd; alias: begin_time / start_time / from
end string ✅ end_time, to End date yyyy-MM-dd; alias: end_time / to
max_count i32? — num, count, req_count Max number of candles to return (default 1000, range 1-1000). If omitted, the gateway uses 1000; pass explicit 0 to request no limit only when you can handle a large response. alias: num / count / req_count
need_kl_fields_flag i64? — needKLFieldsFlag Optional Qot_Common.KLFields bitmask; alias: needKLFieldsFlag
extended_time boolean? — extendedTime Fetch US extended-hours K-line data when supported; alias: extendedTime
session i32? — — Session: 0=NONE, 1=RTH, 2=ETH, 3=ALL. OVERNIGHT is not supported for this operation.
next_req_key string? — nextReqKey, next_key Pagination key from previous response, base64-encoded; alias: nextReqKey / next_key

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

Runtime validation: this request type has a validate() method that adds runtime required-field / enum-value validation on top of the JSON schema.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_history_kline",
    "arguments": {
      "symbol": "HK.00700",
      "kl_type": "day",
      "rehab_type": "none",
      "begin": "2026-01-01",
      "end": "2026-12-31",
      "max_count": 100
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_history_kl_quota

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_history_kl_quota
  • Route: MCP JSON-RPC tools/call with name = "futu_get_history_kl_quota"

Description:

Historical K-line download quota (used / remain). Total follows the account's dynamic API quota after login; requested symbols synchronize through UserCloudConfig. Python SDK: OpenQuoteContext.get_history_kl_quota.

Request arguments:

Field Type Required Alias Description
get_detail boolean ✓ default default — Whether to fetch detailed per-symbol download history (default false)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_history_kl_quota",
    "arguments": {
      "get_detail": false
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_static

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_stock_basicinfo
  • Route: MCP JSON-RPC tools/call with name = "futu_get_static"

Description:

Get static info (name, lot size, listing date) for one or more securities. No subscription needed.

Request arguments:

Field Type Required Alias Description
symbols array of string ✅ stocks, code_list, symbol_list, security_list Array of security symbols in MARKET.CODE format (e.g. ["HK.00700", "US.AAPL"]). Field name is symbols (Rust native snake_case); aliases: stocks / code_list / symbol_list / security_list for SDK compat.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_static",
    "arguments": {
      "symbols": [
        "HK.00700"
      ]
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_market_state

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_market_state
  • Route: MCP JSON-RPC tools/call with name = "futu_get_market_state"

Description:

Query current market state for a list of securities (open/closed/lunch-break etc). Python SDK: OpenQuoteContext.get_market_state.

Request arguments:

Field Type Required Alias Description
symbols array of string ✅ stocks, code_list, symbol_list, security_list Symbols list in MARKET.CODE format; alias: stocks / code_list / symbol_list / security_list

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_market_state",
    "arguments": {
      "symbols": [
        "HK.00700"
      ]
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_capital_flow

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_capital_flow
  • Route: MCP JSON-RPC tools/call with name = "futu_get_capital_flow"

Description:

Capital flow (net inflow) time series for a security. Python SDK: OpenQuoteContext.get_capital_flow.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock Security symbol in MARKET.CODE format (e.g. HK.00700); alias: code / stock
period_type i32? — — Period type: 1=INTRADAY 2=DAY 3=WEEK 4=MONTH (default 1)
begin_time string? — begin, start_time, from Begin time 'yyyy-MM-dd' (optional, DAY/WEEK/MONTH only); alias: begin / start_time / from
end_time string? — end, to End time 'yyyy-MM-dd' (optional); alias: end / to

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_capital_flow",
    "arguments": {
      "symbol": "HK.00700",
      "begin_time": "2026-01-01",
      "end_time": "2026-12-31"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_risk_free_rate

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_risk_free_rate
  • Route: MCP JSON-RPC tools/call with name = "futu_get_risk_free_rate"

Description:

Risk-free rate for HK / US / JP markets (option pricing baseline, e.g. Black-Scholes). Returns percent values (e.g. 4.5 means 4.5%) plus raw uint64 (×10^9). Useful for pricing options or computing implied volatility / cost of carry.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_risk_free_rate",
    "arguments": {}
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_spread_table

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_spread_table
  • Route: MCP JSON-RPC tools/call with name = "futu_get_spread_table"

Description:

Get full spread tables (price tick rules per market). Returns spread_table_list with spread_code + price intervals (price_from / price_to / value, in actual decimals). Useful for client-side price validation before PlaceOrder / ModifyOrder.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_spread_table",
    "arguments": {}
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_ticker_statistic

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_ticker_statistic
  • Route: MCP JSON-RPC tools/call with name = "futu_get_ticker_statistic"

Description:

Per-stock ticker statistic (avg_price / volume / buy_volume / sell_volume / neutral_volume / trade_num). Symbol format: 'HK.00700' / 'US.AAPL'. Pre-condition: must subscribe / get_static_info first to populate stock_id in static_cache. ticker_type: 0=ALL, 1=BUY, 2=SELL, 3=BUY_AND_SELL, 4=NEUTRAL. stat_type: 0=ALL, 1=BEFORE, 2=TRADING, 3=AFTER (market session).

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL
ticker_type i32? — — Ticker type filter: 0=ALL, 1=BUY, 2=SELL, 3=BUY_AND_SELL, 4=NEUTRAL (default ALL)
stat_type u32? — — Market session: 0=ALL, 1=BEFORE, 2=TRADING, 3=AFTER (default ALL)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_ticker_statistic",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_ticker_statistic_detail

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_ticker_statistic_detail
  • Route: MCP JSON-RPC tools/call with name = "futu_get_ticker_statistic_detail"

Description:

Per-stock ticker statistic detail (price-level distribution). Companion of futu_get_ticker_statistic. Typical flow: (1) call futu_get_ticker_statistic to get ticker_time + summary stats, (2) call this tool with same ticker_time to get DetailItem list (price / buy_volume / sell_volume / volume / ratio / neutral_volume per price level). Symbol format: 'HK.00700' / 'US.AAPL'. Pre-condition: must subscribe / get_static_info first to populate stock_id in static_cache. ticker_type: 0=ALL, 1=BUY, 2=SELL, 3=BUY_AND_SELL, 4=NEUTRAL. stat_type: 0=ALL, 1=BEFORE, 2=TRADING, 3=AFTER. select_num: 0=all levels, 1..N=top N (backend max ~100). data_from / data_max_count: pagination.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL
ticker_type i32? — — Ticker type filter: 0=ALL, 1=BUY, 2=SELL, 3=BUY_AND_SELL, 4=NEUTRAL (default ALL)
ticker_time u64? — — Ticker timestamp (ms) — usually from prior futu_get_ticker_statistic call. 0 / omit = use backend latest available.
select_num u32? — — Filter type: 0=all price levels, 1..N=top N levels (backend max ~100)
data_from u32? — — Pagination start offset (default 0)
data_max_count u32? — — Pagination size, max items returned; if provided, must be positive
stat_type u32? — — Market session: 0=ALL, 1=BEFORE, 2=TRADING, 3=AFTER (default ALL)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

Runtime validation: this request type has a validate() method that adds runtime required-field / enum-value validation on top of the JSON schema.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_ticker_statistic_detail",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_used_quota

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_used_quota
  • Route: MCP JSON-RPC tools/call with name = "futu_get_used_quota"

Description:

Get current daemon used quota counters: subscribed quote quota and historical K-line quota. Python SDK: OpenQuoteContext.get_used_quota.

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_used_quota",
    "arguments": {}
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_capital_distribution

  • Scope: qot:read
  • Python SDK equivalent: OpenQuoteContext.get_capital_distribution
  • Route: MCP JSON-RPC tools/call with name = "futu_get_capital_distribution"

Description:

Capital distribution (super/big/mid/small order in/out flow amounts) snapshot. Python SDK: OpenQuoteContext.get_capital_distribution.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL (alias: code / stock / security for SDK compat)

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_capital_distribution",
    "arguments": {
      "symbol": "HK.00700"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_search_quote

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_search_quote"

Description:

Search quote, fund, and ETF securities. Public QOT 3262. c2s_json uses Qot_GetSearchQuote.C2S JSON.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_search_quote",
    "arguments": {
      "c2s_json": "…",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline_pattern

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline_pattern"

Description:

Get source-aligned K-line pattern points and guide lines. Requires --enable-v18-kline-patterns.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline_pattern",
    "arguments": {
      "c2s_json": "{\"stock_id\":7001,\"kline_type\":2,\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline_pattern_statistics

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline_pattern_statistics"

Description:

Get K-line pattern forecast and historical statistics. Values are descriptive, not investment advice.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline_pattern_statistics",
    "arguments": {
      "c2s_json": "{\"stock_id\":7001,\"kline_type\":2,\"shape\":1,\"color\":0,\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline_pattern_stocks

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline_pattern_stocks"

Description:

List securities matching a K-line pattern with exact Desktop pagination and sort sentinels.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline_pattern_stocks",
    "arguments": {
      "c2s_json": "{\"kline_type\":2,\"shape\":1,\"market\":3,\"sort_order\":1,\"sort_type\":-1,\"count\":-1,\"start_count\":0,\"user_stock_list_mode\":0,\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline_pattern_performance

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline_pattern_performance"

Description:

Get source-derived pattern performance. No Desktop caller exists at the pinned source; requires the independent performance flag.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline_pattern_performance",
    "arguments": {
      "c2s_json": "{\"shape\":1,\"duration\":0,\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.

futu_get_kline_pattern_catalog

  • Scope: qot:read
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_kline_pattern_catalog"

Description:

List K-line pattern metadata with exact Desktop count and pagination semantics.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — Official generated C2S JSON. Field names use generated proto serde snake_case, e.g. multi_legs / combo_legs / order_type.
api_key string? — — Optional per-call API key plaintext. HTTP scope mode still requires a valid Bearer on every /mcp request; this field overrides that identity for the tool handler. In stdio mode: tool argument > startup key.

⚠️ Unknown fields: deny_unknown_fields is enabled — any field not listed above returns an unknown field error (previously silently dropped).

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_kline_pattern_catalog",
    "arguments": {
      "c2s_json": "{\"filter\":0,\"count\":-1,\"start_count\":0,\"color\":0,\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.