Skip to content

Reference / Derivatives

MCP tool overview

futu_get_rehab

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

Description:

Rehab (dividend / split / bonus) events and adjustment factors. Required for long-term K-line alignment. Python SDK: OpenQuoteContext.get_rehab.

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_rehab",
    "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_option_expiration_date

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

Description:

Option expiration-date list for an underlying (HSI / HSCEI or HK/US equity). Python SDK: OpenQuoteContext.get_option_expiration_date.

Request arguments:

Field Type Required Alias Description
owner_symbol string ✅ symbol, owner, code, stock Underlying stock symbol (HK/US equities + HSI/HSCEI only); alias: symbol / owner / code / stock
index_option_type i32? — — For index options only: Qot_Common::IndexOptionType (optional)

⚠️ 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_option_expiration_date",
    "arguments": {
      "owner_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_option_chain

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

Description:

Option chain of an underlying stock within an expiry date range, grouped by strike time with call/put symbol lists. Python SDK: OpenQuoteContext.get_option_chain.

Request arguments:

Field Type Required Alias Description
owner_symbol string ✅ symbol, owner, code, stock Underlying stock symbol (e.g. HK.00700, US.AAPL); alias: symbol / owner / code / stock
begin_time string ✅ begin, start_time, from Expiry range begin date yyyy-MM-dd; alias: begin / start_time / from
end_time string ✅ end, to Expiry range end date yyyy-MM-dd; alias: end / to
option_type string? — — Option type: all|call|put (default all)
delta_min float? — — Optional Greek filter: only return options with delta in [min, max]; min must be <= max when both are provided. Typical ATM range: 0.3 to 0.7 for calls, -0.7 to -0.3 for puts.
delta_max float? — — See delta_min; must be >= delta_min when both are provided.
iv_min float? — — Implied volatility filter min (decimal, e.g. 0.3 = 30%); must be <= iv_max when both are provided.
iv_max float? — — See iv_min; must be >= iv_min when both are provided.
oi_min float? — — Open interest (contracts) filter min, integer; must be <= oi_max when both are provided.
oi_max float? — — See oi_min; must be >= oi_min when both are provided.
gamma_min float? — — Gamma filter min (decimal); must be <= gamma_max when both are provided.
gamma_max float? — — See gamma_min; must be >= gamma_min when both are provided.
vega_min float? — — Vega filter min (decimal); must be <= vega_max when both are provided.
vega_max float? — — See vega_min; must be >= vega_min when both are provided.
theta_min float? — — Theta filter min (decimal); must be <= theta_max when both are provided.
theta_max float? — — See theta_min; must be >= theta_min when both are provided.

⚠️ 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_option_chain",
    "arguments": {
      "owner_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_warrant

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

Description:

List warrants on an underlying stock (or whole-market when owner_symbol omitted), sorted by volume desc. Python SDK: OpenQuoteContext.get_warrant. For advanced filtering (strike/premium/delta/etc.) use REST /api/warrant directly.

Request arguments:

Field Type Required Alias Description
owner_symbol string? — symbol, owner, code Underlying stock symbol (e.g. HK.00700); None = whole-market warrants. Alias: symbol / owner / code
begin i32 ✓ default default offset, skip Pagination begin index (default 0); alias: offset / skip
num i32 ✓ default default_warrant_num count, max_count, req_count Max rows (0-200, default 20); alias: count / 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_warrant",
    "arguments": {
      "owner_symbol": "HK.00700",
      "begin": "2026-01-01",
      "num": 20
    }
  }
}

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

futu_get_owner_plate

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

Description:

List plates (industry/concept/region) that contain given stocks. Python SDK: OpenQuoteContext.get_owner_plate.

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_owner_plate",
    "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_holding_change

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

Description:

Top-holder share change list (institution / fund / executive). Python SDK: OpenQuoteContext.get_holding_change_list.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock Underlying stock symbol (e.g. HK.00700, US.AAPL); alias: code / stock
holder_category i32 ✅ category Holder category: 1=Institution, 2=Fund, 3=Executive; alias: category
begin_time string? — begin, start_time, from Begin time YYYY-MM-DD HH:MM:SS (optional); alias: begin / start_time / from
end_time string? — end, to End time YYYY-MM-DD HH:MM:SS (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_holding_change",
    "arguments": {
      "symbol": "HK.00700",
      "holder_category": 1,
      "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_future_info

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

Description:

Future contract info (contract size, last trade date, trading hours). Python SDK: OpenQuoteContext.get_future_info.

Request arguments:

Field Type Required Alias Description
symbols array of string ✅ stocks, code_list, symbol_list, security_list Array of future contract symbols in MARKET.CODE format (e.g. ["HK.HSImain", "US.MNQmain"]). 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_future_info",
    "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_reference

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

Description:

Related securities of an underlying: list all warrants/futures/options derived from a given stock. Python SDK: OpenQuoteContext.get_referencestock_list.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock Underlying symbol (e.g. HK.00700, US.AAPL); alias: code / stock
reference_type string ✓ default default_reference_type — Reference type: warrant|future (default warrant). Note: option is NOT supported — use futu_get_option_chain instead.

⚠️ 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_reference",
    "arguments": {
      "symbol": "HK.00700",
      "reference_type": "warrant"
    }
  }
}

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

futu_get_financials_earnings_price_move

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

Description:

Price move around financial earnings announcement dates. Futu API v10.6: OpenQuoteContext.get_financials_earnings_price_move.

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)
period_count i32? — periodCount Financial period count, 1-50. Omit to use backend default 10.

⚠️ 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_financials_earnings_price_move",
    "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_financials_earnings_price_history

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

Description:

Price history around financial earnings announcement dates. Futu API v10.6: OpenQuoteContext.get_financials_earnings_price_history.

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_financials_earnings_price_history",
    "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_financials_statements

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

Description:

Financial statements. Futu API v10.6: OpenQuoteContext.get_financials_statements.

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)
statement_type i32? — statementType FinancialStatementsType: 0=unknown, 1=income, 2=balance_sheet, 3=cash_flow, 4=main_index; omit to use backend default 1. Alias: statementType
financial_type i32? — financialType F10Type financial period filter, supports 0-7 and 9-11; omit to use backend default 10. Alias: financialType
currency_code string? — currencyCode Currency code, e.g. CNY / USD / HKD; alias: currencyCode
next_key string? — nextKey Pagination key from previous response; alias: nextKey
num i32? — — Rows per page, 1-50. Omit to use backend default 10.

⚠️ 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_financials_statements",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_financials_revenue_breakdown

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

Description:

Financials revenue breakdown. Futu API v10.6: OpenQuoteContext.get_financials_revenue_breakdown.

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)
date u32? — screenDate Screen date timestamp from screenDateList; alias: screenDate
financial_type i32? — financialType F10Type financial period filter, supports 0-7 and 9; omit to use backend default 0. Alias: financialType
currency_code string? — currencyCode Currency code, e.g. CNY / USD / HKD; alias: currencyCode

⚠️ 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_financials_revenue_breakdown",
    "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_research_analyst_consensus

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

Description:

Research analyst consensus. Futu API v10.6: OpenQuoteContext.get_research_analyst_consensus.

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_research_analyst_consensus",
    "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_research_rating_summary

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

Description:

Research rating summary/detail list. Futu API v10.6: OpenQuoteContext.get_research_rating_summary.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. US.AAPL, CA.SHOP (alias: code / stock / security for SDK compat)
rating_dimension_type i32? — ratingDimensionType ResearchRatingDimensionType: 0/1=institution, 2=analyst
uid string? — — Institution or analyst uid; empty means summary list
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..20; omitted uses backend default 10

⚠️ 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_research_rating_summary",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_research_morningstar_report

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

Description:

Morningstar research report. Futu API v10.6: OpenQuoteContext.get_research_morningstar_report.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. 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_research_morningstar_report",
    "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_valuation_detail

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

Description:

Valuation detail for a stock or index. Futu API v10.6: OpenQuoteContext.get_valuation_detail.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Security symbol in MARKET.CODE format, e.g. HK.00700, US.AAPL, HK.800000 (alias: code / stock / security for SDK compat)
valuation_type i32? — valuationType ValuationType: 0=recommended, 1=PE, 2=PB, 3=PS; alias: valuationType
interval_type i32? — intervalType ValuationIntervalType: 0/3=1y default, 1=3m, 2=6m, 4=3y, 5=since2019, 6=5y, 7=10y, 8=2y, 9=20y, 10=30y; omit uses backend default 3. Alias: intervalType

⚠️ 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_valuation_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_valuation_plate_stock_list

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

Description:

Valuation stock list for a plate or index. Futu API v10.6: OpenQuoteContext.get_valuation_plate_stock_list.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security Plate or index symbol in MARKET.CODE format, e.g. HK.BK0001, HK.800000 (alias: code / stock / security for SDK compat)
valuation_type i32? — valuationType ValuationType: 0/1=PE, 2=PB, 3=PS; alias: valuationType
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..50; omitted uses backend default 10
sort_type i32? — sortType SortType: 0/2=asc, 1=desc; omit to use backend default asc. Alias: sortType
sort_id i32? — sortId SortField: 51=market_cap, 52=valuation, 53=forward, 54=percentile; alias: sortId
filter_security string? — filterSecurity Optional plate filter for index components, MARKET.CODE; alias: filterSecurity

⚠️ 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_valuation_plate_stock_list",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_corporate_actions_dividends

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

Description:

Corporate action dividend records for securities. Futu API v10.6: OpenQuoteContext.get_corporate_actions_dividends.

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_corporate_actions_dividends",
    "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_corporate_actions_buybacks

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

Description:

Corporate action buyback records for HK/A-share securities. Futu API v10.6: OpenQuoteContext.get_corporate_actions_buybacks.

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)
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_corporate_actions_buybacks",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_corporate_actions_stock_splits

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

Description:

Corporate action stock split records for HK/US securities. Futu API v10.6: OpenQuoteContext.get_corporate_actions_stock_splits.

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)
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_corporate_actions_stock_splits",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_shareholders_overview

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

Description:

Shareholder ownership overview for HK/US securities. Futu API v10.6: OpenQuoteContext.get_shareholders_overview.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security HK/US security symbol in MARKET.CODE format, e.g. HK.00700 or US.AAPL (alias: code / stock / security for SDK compat)
period_id i32? — periodId Optional reporting period id from holdingPeriodList; alias: periodId

⚠️ 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_shareholders_overview",
    "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_shareholders_holding_changes

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

Description:

Shareholder holding change records for HK/US securities. Futu API v10.6: OpenQuoteContext.get_shareholders_holding_changes.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security HK/US security symbol in MARKET.CODE format, e.g. HK.00700 or US.AAPL (alias: code / stock / security for SDK compat)
next_key string? — nextKey Pagination key from previous response; "-1" returns empty page
num i32? — — Page size, 1..50; omitted uses backend default 10
sort_type i32? — sortType Qot_Common.SortType: 0/1=desc, 2=asc; alias: sortType
sort_column i32? — sortColumn Qot_Common.SortField: 62/63/64/65/66; alias: sortColumn
filter_type i32? — filterType Qot_Common.HoldingChangesFilterType: 0=all,1=increase,2=decrease,3=new-in,4=close-out; alias: filterType

⚠️ 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_shareholders_holding_changes",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_shareholders_holder_detail

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

Description:

Shareholder holder detail records for HK/US securities. Futu API v10.6: OpenQuoteContext.get_shareholders_holder_detail.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security HK/US security symbol in MARKET.CODE format, e.g. HK.00700 or US.AAPL (alias: code / stock / security for SDK compat)
request_type i32? — requestType Qot_Common.HolderDetailType: 0 default, 1..15 institution types, 100/200/300/400/500, 1000 all; alias: requestType
next_key string? — nextKey Pagination key from previous response; "-1" returns empty page
num i32? — — Page size, 1..50; omitted uses backend default 10
sort_column i32? — sortColumn Qot_Common.SortField: 0/61=holder quantity, 62=share change num; alias: sortColumn
sort_type i32? — sortType Qot_Common.SortType: 0/1=desc, 2=asc; alias: sortType
period_id i32? — periodId Reporting period id from GetShareholdersOverview; alias: periodId
holder_id i32? — holderId Holder id filter; alias: holderId

⚠️ 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_shareholders_holder_detail",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_shareholders_institutional

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

Description:

Institutional shareholder ownership statistics for HK/US securities. Futu API v10.6: OpenQuoteContext.get_shareholders_institutional.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security HK/US security symbol in MARKET.CODE format, e.g. HK.00700 or US.AAPL (alias: code / stock / security for SDK compat)
next_key string? — nextKey Pagination key from previous response; "-1" returns empty page
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_shareholders_institutional",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_insider_holder_list

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

Description:

Insider holder list for US securities. Futu API v10.6: OpenQuoteContext.get_insider_holder_list.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security US security symbol in MARKET.CODE format, e.g. US.AAPL (alias: code / stock / security for SDK compat)
next_key string? — nextKey Pagination key from previous response; "-1" returns empty page
num i32? — — Page size, 1..20; omitted uses backend default 10

⚠️ 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_insider_holder_list",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_insider_trade_list

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

Description:

Insider trade list for US securities. Futu API v10.6: OpenQuoteContext.get_insider_trade_list.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security US security symbol in MARKET.CODE format, e.g. US.AAPL (alias: code / stock / security for SDK compat)
holder_id i64? — holderId Optional insider holder id filter
next_key string? — nextKey Pagination key from previous response; "-1" returns empty page
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_insider_trade_list",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_company_profile

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

Description:

Company profile labels/details for a security. Futu API v10.6: OpenQuoteContext.get_company_profile.

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_company_profile",
    "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_company_executives

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

Description:

Company executives / directors for a security. Futu API v10.6: OpenQuoteContext.get_company_executives.

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_company_executives",
    "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_company_executive_background

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

Description:

Company executive/director background for a security. Futu API v10.6: OpenQuoteContext.get_company_executive_background.

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)
leader_name string ✅ leaderName Executive/director leader name from get_company_executives

⚠️ 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_company_executive_background",
    "arguments": {
      "symbol": "HK.00700",
      "leader_name": "…"
    }
  }
}

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

futu_get_company_operational_efficiency

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

Description:

Company operational efficiency metrics such as employees and per-capita income/profit. Futu API v10.6: OpenQuoteContext.get_company_operational_efficiency.

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)
next_key string? — nextKey Pagination key from previous response; alias: nextKey
num i32? — — Rows per page, 1-50. Omit to use backend default 10.
currency_code string? — currencyCode Currency code, e.g. CNY / USD / HKD; alias: currencyCode
financial_type i32? — financialType Compatibility-only field; the backend ignores financialType for company operational efficiency and always queries the fixed annual view. Alias: financialType

⚠️ 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_company_operational_efficiency",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_top_ten_buy_sell_brokers

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

Description:

Top ten net buy/sell brokers for HK securities. Futu API v10.6: OpenQuoteContext.get_top_ten_buy_sell_brokers.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, stock, security HK security symbol in MARKET.CODE format, e.g. HK.00700 (alias: code / stock / security for SDK compat)
days_before i32? — daysBefore 0 or omitted = realtime; N = previous N trading days; must be non-negative; alias: daysBefore

⚠️ 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_top_ten_buy_sell_brokers",
    "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_daily_short_volume

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

Description:

Daily short volume for HK/US securities. Futu API v10.6: OpenQuoteContext.get_daily_short_volume.

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)
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_daily_short_volume",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_short_interest

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

Description:

Short interest for HK/US securities. Futu API v10.6: OpenQuoteContext.get_short_interest.

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)
next_key string? — nextKey Pagination key; alias: nextKey
num i32? — — Page size, 1..50; omitted uses backend default 10

⚠️ 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_short_interest",
    "arguments": {
      "symbol": "HK.00700",
      "num": 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_option_volatility

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

Description:

Option implied-volatility analysis. Futu API v10.6: OpenQuoteContext.get_option_volatility.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, option, security Option symbol in MARKET.CODE format, e.g. US.AAPL260116C200000 (alias: code / option / security for SDK compat)
query_time_period i32? — queryTimePeriod Query period: 0/omitted=month, 1=week, 2=month, 3=quarter, 4=half-year, 5=year
hv_time_period i32? — hvTimePeriod Underlying historical-volatility period in days, 5..250; omitted uses backend default 30

⚠️ 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_option_volatility",
    "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_option_exercise_probability

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

Description:

Option exercise probability history. Futu API v10.6: OpenQuoteContext.get_option_exercise_probability.

Request arguments:

Field Type Required Alias Description
symbol string ✅ code, option, security Option symbol in MARKET.CODE format, e.g. US.AAPL260116C200000 (alias: code / option / 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_option_exercise_probability",
    "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_stock_screen

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

Description:

Stock screener. Futu API v10.6: OpenQuoteContext.stock_screen. The c2s argument is the full Qot_StockScreen C2S JSON object.

Request arguments:

Field Type Required Alias Description
c2s Value ✅ — Full Qot_StockScreen C2S JSON object. Use snake_case generated proto fields, e.g. filter_list/retrieve_list/page_from/page_count.

⚠️ 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_stock_screen",
    "arguments": {
      "c2s": "…"
    }
  }
}

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

futu_option_screen

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

Description:

Option screener. Futu API v10.6: OpenQuoteContext.option_screen. The c2s argument is the full Qot_OptionScreen C2S JSON object.

Request arguments:

Field Type Required Alias Description
c2s Value ✅ — Full Qot_OptionScreen C2S JSON object. Use snake_case generated proto fields, e.g. market_category_list/filter_list/sort_list/page_from/page_count.

⚠️ 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_option_screen",
    "arguments": {
      "c2s": "…"
    }
  }
}

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

futu_warrant_screen

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

Description:

Warrant screener. Futu API v10.6: OpenQuoteContext.warrant_screen. The c2s argument is the full Qot_WarrantScreen C2S JSON object.

Request arguments:

Field Type Required Alias Description
c2s Value ✅ — Full Qot_WarrantScreen C2S JSON object. Use snake_case generated proto fields, e.g. market_type/filter_list/sort_list/page_from/page_count.

⚠️ 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_warrant_screen",
    "arguments": {
      "c2s": "…"
    }
  }
}

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

futu_get_technical_unusual

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

Description:

Technical indicator unusual-move summary. Futu API v10.6: OpenQuoteContext.get_technical_unusual.

Request arguments:

Field Type Required Alias Description
stock_symbol string ✅ symbol, code, stock, security Stock symbol accepted by Futu SkillWrap, e.g. HK.00700 / US.AAPL (alias: symbol / code / stock / security)
time_range i32? — timeRange Time range in calendar days; omit or <=0 uses backend default 7
indicator_filters array of string ✓ default default indicatorFilters Optional technical indicator filters; omitted means all
language_id i32? — languageId Language id: 0=simplified Chinese, 1=traditional, 2=English

⚠️ 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_technical_unusual",
    "arguments": {
      "stock_symbol": "…",
      "indicator_filters": []
    }
  }
}

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

futu_get_financial_unusual

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

Description:

Financial unusual-change summary. Futu API v10.6: OpenQuoteContext.get_financial_unusual.

Request arguments:

Field Type Required Alias Description
stock_symbol string ✅ symbol, code, stock, security Stock symbol accepted by Futu SkillWrap, e.g. HK.00700 / US.AAPL (alias: symbol / code / stock / security)
time_range i32? — timeRange Time range in calendar days; omit or <=0 uses backend default 7
analysis_dimensions array of string ✓ default default analysisDimensions Optional financial analysis dimensions; omitted means all
language_id i32? — languageId Language id: 0=simplified Chinese, 1=traditional, 2=English

⚠️ 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_financial_unusual",
    "arguments": {
      "stock_symbol": "…",
      "analysis_dimensions": []
    }
  }
}

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

futu_get_derivative_unusual

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

Description:

Derivative unusual-change summary. Futu API v10.6: OpenQuoteContext.get_derivative_unusual.

Request arguments:

Field Type Required Alias Description
stock_symbol string ✅ symbol, code, stock, security Stock symbol accepted by Futu SkillWrap, e.g. HK.00700 / US.AAPL (alias: symbol / code / stock / security)
time_range i32? — timeRange Time range in calendar days; omit or <=0 uses backend default 7
analysis_dimensions array of string ✓ default default analysisDimensions Optional derivative analysis dimensions; omitted means all
language_id i32? — languageId Language id: 0=simplified Chinese, 1=traditional, 2=English

⚠️ 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_derivative_unusual",
    "arguments": {
      "stock_symbol": "…",
      "analysis_dimensions": []
    }
  }
}

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

futu_get_option_quote

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

Description:

Get option quote data for one option leg or a combo-option leg set. Futu API v10.7: OpenQuoteContext.get_option_quote. c2s_json must be generated-proto 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_get_option_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_option_strategy

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

Description:

Get option strategy candidates for an underlying security. Futu API v10.7: OpenQuoteContext.get_option_strategy. c2s_json must be generated-proto 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_get_option_strategy",
    "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_option_strategy_analysis

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

Description:

Analyze payoff/risk metrics for a combo-option leg set. Futu API v10.7: OpenQuoteContext.get_option_strategy_analysis. c2s_json must be generated-proto 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_get_option_strategy_analysis",
    "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_option_strategy_spread

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

Description:

Get available strike/expiry spread metadata for an option strategy. Futu API v10.7: OpenQuoteContext.get_option_strategy_spread. c2s_json must be generated-proto 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_get_option_strategy_spread",
    "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_rating_change

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

Description:

Get analyst rating-change data. Public QOT 3426. c2s_json must be generated-proto 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_get_rating_change",
    "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_option_market_statistic

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

Description:

Get option market volume/open-interest statistics. Public QOT 3301.

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_option_market_statistic",
    "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_option_underlying_his_statistic

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

Description:

Get historical option-underlying volume/open-interest statistics. Public QOT 3302.

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_option_underlying_his_statistic",
    "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_option_underlying_overview

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

Description:

Get latest batched option-underlying analytics. Public QOT 3303.

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_option_underlying_overview",
    "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_option_underlying_his_volatility

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

Description:

Get historical IV/HV for an option underlying. Public QOT 3304.

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_option_underlying_his_volatility",
    "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_option_underlying_rank

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

Description:

Get ranked option underlyings. Public QOT 3305.

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_option_underlying_rank",
    "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_option_rank

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

Description:

Get ranked option contracts. Public QOT 3306.

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_option_rank",
    "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_option_event

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

Description:

Get option unusual-activity events. Public QOT 3307.

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_option_event",
    "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_option_zero_dte_screener

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

Description:

Screen zero-DTE option underlyings. Public QOT 3311.

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_option_zero_dte_screener",
    "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_option_zero_dte_contract

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

Description:

Get zero-DTE option contracts for a returned chain. Public QOT 3312.

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_option_zero_dte_contract",
    "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_option_earnings_screener

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

Description:

Screen option underlyings around earnings. Public QOT 3313.

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_option_earnings_screener",
    "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_option_seller_screener

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

Description:

Screen covered-call or cash-secured-put contracts. Public QOT 3314.

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_option_seller_screener",
    "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"}.