Skip to content

Trading Accounts (Read)

MCP tool overview

futu_list_accounts

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_acc_list
  • Route: MCP JSON-RPC tools/call with name = "futu_list_accounts"

Description:

List all trading accounts (real + simulate) visible to the gateway login.

Request arguments: none (zero-arg tool)

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_list_accounts",
    "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_funds

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.accinfo_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_funds"

Description:

Get account funds summary (total assets, cash, market value, buying power) for a given account + market.

Cash semantics: top-level cash field is backend's summary cash in the response currency (i.e. union_currency for futures/universal, primary market currency for legacy accounts). It is NOT the sum of cash_info_list[].cash across currencies (different currencies cannot be summed without FX conversion). For per-currency breakdown, read cash_info_list. To match Futu mobile app's 'total cash in HKD' display, client-side compute sum(cash_info_list[i].cash * fx_rate(currency[i], HKD)) — daemon does not perform FX aggregation.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64? — — Trading account ID (u64). Either acc_id OR card_num is required. card_num accepts the 4-digit suffix shown in the App or the full 16-digit card number.
card_num string? — — App-visible card number. Accepts 4-digit suffix or 16-digit full card number. Either acc_id OR card_num is required; if both are passed, daemon validates they refer to the same account.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
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.
currency string? — — Optional currency for fund response unit (HKD|USD|CNH|JPY|SGD|AUD|CAD|MYR|NZD). If omitted, daemon uses the broker/account default view currency. Explicit values are validated against the account; single-market accounts may ignore explicit currency and return their base currency.

⚠️ 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_funds",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "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_positions

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.position_list_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_positions"

Description:

Get current positions (holdings) for an account in a given market.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA|CRYPTO) OR INT per Trd_Common.TrdMarket.
acc_id u64? — — Trading account ID (u64). Either acc_id OR card_num is required.
card_num string? — — App-visible card number. Accepts 4-digit suffix or 16-digit full card number.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
api_key string? — — Optional per-call API key plaintext.
currency string? — — Optional position view currency (HKD|USD|CNH|JPY|SGD|AUD|CAD|MYR|NZD). Crypto accounts require an explicit view currency; non-crypto accounts may ignore it.
option_strategy_view boolean ✓ default default optionStrategyView Request option strategy/combo position view. Defaults to 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_positions",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "api_key": "optional-per-call-api-key",
      "option_strategy_view": 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_orders

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.order_list_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_orders"

Description:

Get today's orders (including pending / filled / cancelled) for an account in a given market.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64? — — Trading account ID (u64). Either acc_id OR card_num is required. card_num accepts the 4-digit suffix shown in the App or the full 16-digit card number.
card_num string? — — App-visible card number. Accepts 4-digit suffix or 16-digit full card number. Either acc_id OR card_num is required; if both are passed, daemon validates they refer to the same account.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
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.
currency string? — — Optional currency for fund response unit (HKD|USD|CNH|JPY|SGD|AUD|CAD|MYR|NZD). If omitted, daemon uses the broker/account default view currency. Explicit values are validated against the account; single-market accounts may ignore explicit currency and return their base currency.

⚠️ 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_orders",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "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_deals

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.deal_list_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_deals"

Description:

Get today's deals / order fills for an account in a given market.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64? — — Trading account ID (u64). Either acc_id OR card_num is required. card_num accepts the 4-digit suffix shown in the App or the full 16-digit card number.
card_num string? — — App-visible card number. Accepts 4-digit suffix or 16-digit full card number. Either acc_id OR card_num is required; if both are passed, daemon validates they refer to the same account.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
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.
currency string? — — Optional currency for fund response unit (HKD|USD|CNH|JPY|SGD|AUD|CAD|MYR|NZD). If omitted, daemon uses the broker/account default view currency. Explicit values are validated against the account; single-market accounts may ignore explicit currency and return their base currency.

⚠️ 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_deals",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "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_margin_ratio

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_margin_ratio
  • Route: MCP JSON-RPC tools/call with name = "futu_get_margin_ratio"

Description:

Query margin ratio (long/short permissions, short-pool remaining, long/short initial margin ratios) by symbol list. Python SDK: OpenTradeContext.get_margin_ratio.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default; omitting or inventing an id fails.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
codes array of string ✅ symbols, code_list, symbol_list Symbols in MARKET.CODE format (e.g. HK.00700, US.AAPL); alias: symbols / code_list / symbol_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_margin_ratio",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "codes": [
        "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_order_fee

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.order_fee_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_order_fee"

Description:

Query order fee breakdown (commission / platform fee / stamp duty) by order_id_ex list. Python SDK: OpenTradeContext.order_fee_query.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default; omitting or inventing an id fails.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
order_id_ex_list array of string ✅ order_ids_ex, order_ids Order_id_ex list (strings) — returned by place_order response; alias: order_ids_ex / order_ids

⚠️ 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_order_fee",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "order_id_ex_list": []
    }
  }
}

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

futu_get_max_trd_qtys

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.acctradinginfo_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_max_trd_qtys"

Description:

Max buy/sell/short/buy-back qtys before placing an order. Python SDK: OpenTradeContext.acctradinginfo_query. For NORMAL (limit) orders, price is required. order_type aligns with Trd_Common.OrderType enum (1=limit, 2=market, etc).

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default; omitting or inventing an id fails.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
order_type i32 ✅ — Order type. Accepts both INTEGER (1=NORMAL/limit, 2=MARKET, 5=AUCTION, 6=ABSOLUTE_LIMIT, 7=SPECIAL_LIMIT) and STRING enum (NORMAL|MARKET|AUCTION|ABSOLUTE_LIMIT|SPECIAL_LIMIT). Example: 1 or "NORMAL".
Enum double-accept: Accepts integer or OrderType enum string (NORMAL|LIMIT|MARKET|ABSOLUTE_LIMIT|AUCTION|AUCTION_LIMIT|SPECIAL_LIMIT)
code string ✅ symbol, stock Security code WITHOUT market prefix (e.g. 00700 / AAPL); alias: symbol / stock
price float ✅ — Limit price (pass 0.0 for market orders)
jp_acc_type i32? — jpAccType JP sub-account type (Trd_Common.TrdSubAccType / TrdHeader.jpAccType). Required for JP accounts unless order_id/position context supplies the sub-account. Alias: jpAccType.
order_id u64? — — Existing order_id (for modify-order max-qty calc, 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_max_trd_qtys",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "order_type": "NORMAL",
      "code": "00700",
      "price": 300.0,
      "order_id": "123456789"
    }
  }
}

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_orders

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.history_order_list_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_history_orders"

Description:

Query historical orders (filled / cancelled) with optional time range + code filter. Python SDK: OpenTradeContext.history_order_list_query.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default; omitting or inventing an id fails.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
code_list array of string ✓ default default symbols, symbol_list Filter by codes (empty = all). Each item is bare code without market prefix. Alias: symbols / symbol_list
begin_time string? — begin, start_time, from Begin time 'yyyy-MM-dd HH🇲🇲ss' (optional); alias: begin / start_time / from
end_time string? — end, to End time 'yyyy-MM-dd HH🇲🇲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_history_orders",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "code_list": [
        "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_history_deals

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.history_deal_list_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_history_deals"

Description:

Query historical deals / fills with optional time range + code filter. Python SDK: OpenTradeContext.history_deal_list_query.

Request arguments:

Field Type Required Alias Description
market string ✅ — Trade market — accepts STRING (HK|US|CN|HKCC|FUTURES|SG|AU|JP|MY|CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 5=Futures, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default; omitting or inventing an id fails.
env string ✓ default default_env trd_env Trade environment: real|simulate (default real); alias: trd_env
code_list array of string ✓ default default symbols, symbol_list Filter by codes (empty = all). Each item is bare code without market prefix. Alias: symbols / symbol_list
begin_time string? — begin, start_time, from Begin time 'yyyy-MM-dd HH🇲🇲ss' (optional); alias: begin / start_time / from
end_time string? — end, to End time 'yyyy-MM-dd HH🇲🇲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_history_deals",
    "arguments": {
      "market": "HK",
      "acc_id": 123456,
      "env": "real",
      "code_list": [
        "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_flow_summary

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.acc_cash_flow_query (summary variant)
  • Route: MCP JSON-RPC tools/call with name = "futu_get_flow_summary"

Description:

Alias of futu_get_acc_cash_flow (MCP-REST naming symmetry with /api/flow-summary). Account cash-flow statement for a clearing date. Python SDK: OpenTradeContext.get_acc_cash_flow.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real); alias: trd_env
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default.
market string ✅ — Trade market — accepts STRING (HK / US / CN / HKCC / SG / AU / JP / MY / CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
clearing_date string ✅ date, query_date Clearing date (yyyy-MM-dd); queries flow entries for that day; alias: date / query_date
direction i32? — flow_direction Direction: 1=InFlow, 2=OutFlow, omit for both; alias: flow_direction

⚠️ 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_flow_summary",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "clearing_date": "2026-04-20",
      "direction": 1
    }
  }
}

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

futu_get_cash_log

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.cash_flow_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_cash_log"

Description:

Fetch detailed account cash log entries with richer filters than futu_get_acc_cash_flow. Native time range, business group / currency / keyword / symbol / direction filters, cursor-based pagination. When max_cnt is omitted the daemon uses the mobile default of 50.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64). Call futu_list_accounts first.
market string? — — Optional legacy market hint. Accepted for backward compatibility (HK/US/CN/HKCC/FUTURES/SG/CRYPTO/AU/JP/MY/CA/HKFUND/USFUND/SGFUND/MYFUND/JPFUND or ½/¾/⅚/⅞/15/111/112/113/123/124/125/126), but cash-log identity does not trust this field: daemon derives backend market from acc_id/account cache.
begin_time u64? — — Begin time (epoch seconds, optional)
end_time u64? — — End time (epoch seconds, optional)
biz_group_id u32? — — Business group ID filter (default all)
biz_sub_group_id u32? — — Business sub-group ID filter (optional; value from futu_get_biz_group sub_groups)
in_out u32? — — In/out direction: 1=in, 2=out, 0/omit=all
keyword string? — — Search keyword (optional)
symbol string? — — Stock symbol (e.g. AAPL.US, 00700.HK), exact match (optional)
stock_id u64? — — Backend stock_id filter (optional; use when available from upstream/account UI data)
log_id string? — — Cursor: log_id from previous response next_log_id (omit for first page)
max_cnt u32? — — Max entries per response (daemon uses mobile default 50 if omit)
currency string? — — Currency filter: CNY/HKD/USD/JPY/SGD (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_cash_log",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "begin_time": "2026-01-01",
      "end_time": "2026-12-31",
      "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_cash_detail

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.cash_flow_query (detail variant)
  • Route: MCP JSON-RPC tools/call with name = "futu_get_cash_detail"

Description:

Fetch a single cash log entry detail. Use after futu_get_cash_log; log_id comes from monthly_logs[].entries[].log_id.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64)
market string? — — Optional legacy market hint; accepted for backward compatibility but ignored. Daemon derives backend market from acc_id/account cache.
log_id string ✅ — Cash log ID (from futu_get_cash_log response)

⚠️ 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_cash_detail",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "log_id": "…"
    }
  }
}

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

futu_get_biz_group

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_biz_group
  • Route: MCP JSON-RPC tools/call with name = "futu_get_biz_group"

Description:

Fetch cash log business group, currency, and direction metadata for client UI filters. Returns biz_groups with sub_groups, currencies, and directions.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64)
market string? — — Optional legacy market hint; accepted for backward compatibility but ignored. Daemon derives backend market from acc_id/account cache.

⚠️ 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_biz_group",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK"
    }
  }
}

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

futu_get_margin_info

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_margin_info
  • Route: MCP JSON-RPC tools/call with name = "futu_get_margin_info"

Description:

Per-account margin info: buying power, leverage, risk status, liquidity, HK margin fields, and mobile risk metadata. Supports HK / US / CN_AH markets (mobile cmd 3101/3102/3107). Complements futu_get_margin_ratio, which is per-security.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64). Call futu_list_accounts first.
market string ✅ — Market: HK / US / CN_AH (only these 3 supported; mobile cmd 3101/3102/3107). Other markets: use futu_get_margin_ratio (per-security ratio).

⚠️ 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_margin_info",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK"
    }
  }
}

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

futu_get_account_flag

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_account_flag
  • Route: MCP JSON-RPC tools/call with name = "futu_get_account_flag"

Description:

Query account compliance flag (product access, risk disclosure, opt-in status). Common flag_id values: 5=US options, 22=derivatives disclosure, 10=fund KYC R1-R5, 16=PDT, 23=US OTC, 11=HK options. The response includes item_present and flag_value_present so clients can distinguish a missing flag record from an explicit flag_value=0.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
flag_id u32 ✅ — Flag ID to query. Common: 5=US options acknowledgment, 8=options assessment, 10=fund KYC (R1–R5), 11=HK options acknowledgment, 16=PDT risk disclosure, 22=derivatives risk approval (combined), 23=US OTC, 24=HK options assessment, 25=algorithmic trading risk disclosure, 34=facial-recognition risk approval, 46=OpenAPI disclaimer. Full 36+ list in proto header.

⚠️ 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_account_flag",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "flag_id": 0
    }
  }
}

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

futu_get_bond_total_asset

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_bond_total_asset
  • Route: MCP JSON-RPC tools/call with name = "futu_get_bond_total_asset"

Description:

Bond account total asset and P&L summary for HK/US/SG bond accounts. Returns total_asset, position_incomes, today_incomes, accrued_interest, and ccy.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
market string ✅ — Market: HK / US / SG; aliases USA and SG_UNIVERSAL are accepted

⚠️ 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_bond_total_asset",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK"
    }
  }
}

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

futu_get_bond_single_asset

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_bond_single_asset
  • Route: MCP JSON-RPC tools/call with name = "futu_get_bond_single_asset"

Description:

Single bond position for HK/US/SG bond accounts, including market value, quantity, cost, expiry, dividend schedule, accrued interest, legacy notice fields, notice_list, currency, and price.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
market string ✅ — Market: HK / US / SG; aliases USA and SG_UNIVERSAL are accepted
symbol string ✅ — Bond symbol (bond code, e.g. HK1234 or 11000018)

⚠️ 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_bond_single_asset",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "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_bond_position_list

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_bond_position_list
  • Route: MCP JSON-RPC tools/call with name = "futu_get_bond_position_list"

Description:

Bond account position list for HK/US/SG bond accounts. Returns total and bond_list items with name, symbol, market value, quantity, price, cost, incomes, accrued interest, notice, call flag, and ccy.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
market string ✅ — Market: HK / US / SG; aliases USA and SG_UNIVERSAL are accepted

⚠️ 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_bond_position_list",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK"
    }
  }
}

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

futu_get_bond_answer_state

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_bond_answer_state
  • Route: MCP JSON-RPC tools/call with name = "futu_get_bond_answer_state"

Description:

Query whether the user needs to answer a suitability questionnaire before bond trading. Returns need_to_answer plus notice fields such as title, content, and confirm_url.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
market string ✅ — Market: HK / US / SG; aliases USA and SG_UNIVERSAL are accepted
symbol string ✅ — Bond symbol (bond code, e.g. HK1234 or 11000018)

⚠️ 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_bond_answer_state",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "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_bond_trade_reminder

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.get_bond_trade_reminder
  • Route: MCP JSON-RPC tools/call with name = "futu_get_bond_trade_reminder"

Description:

Bond trade reminders for buy/sell availability, complex product, high risk, and pre-qualification. Returns ReminderItem fields for tradeable, complex_product, high_risk, sell_tradeable, and pre_qualification.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real)
acc_id u64 ✅ — Trading account ID (u64) for per-broker routing
market string ✅ — Market: HK / US / SG; aliases USA and SG_UNIVERSAL are accepted
symbol string ✅ — Bond symbol (bond code, e.g. HK1234 or 11000018)

⚠️ 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_bond_trade_reminder",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "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_token_state

  • Scope: acc:read
  • Python SDK equivalent: — (gateway local token diagnostics)
  • Route: MCP JSON-RPC tools/call with name = "futu_get_token_state"

Description:

Query Futu Token / moomoo Token enable + bind state. Returns 4 fields: nn_token_enable, nn_token_bind, mm_token_enable, mm_token_bind (1=enabled/bound, 0=disabled/unbound). Use case: when /api/unlock-trade fails with -20011 ("please enable Futu Token"), call this tool first to diagnose which side is missing token binding.

Request arguments: none (zero-arg tool)

JSON-RPC call example:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "futu_get_token_state",
    "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_acc_cash_flow

  • Scope: acc:read
  • Python SDK equivalent: OpenTradeContext.acc_cash_flow_query
  • Route: MCP JSON-RPC tools/call with name = "futu_get_acc_cash_flow"

Description:

Account cash-flow statement for a clearing date. Python SDK: OpenTradeContext.get_acc_cash_flow.

Request arguments:

Field Type Required Alias Description
env string ✓ default default_env trd_env Trade env: real / simulate (default real); alias: trd_env
acc_id u64 ✅ — Trading account ID (u64). ⚠️ Call futu_list_accounts first to discover — gateway does NOT infer a default.
market string ✅ — Trade market — accepts STRING (HK / US / CN / HKCC / SG / AU / JP / MY / CA) OR INT (1=HK, 2=US, 3=CN, 4=HKCC, 6=SG, 8=AU, 15=JP, 111=MY, 112=CA per Trd_Common.TrdMarket).
clearing_date string ✅ date, query_date Clearing date (yyyy-MM-dd); queries flow entries for that day; alias: date / query_date
direction i32? — flow_direction Direction: 1=InFlow, 2=OutFlow, omit for both; alias: flow_direction

⚠️ 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_acc_cash_flow",
    "arguments": {
      "env": "real",
      "acc_id": 123456,
      "market": "HK",
      "clearing_date": "2026-04-20",
      "direction": 1
    }
  }
}

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

futu_get_combo_max_trd_qtys

  • Scope: acc:read
  • Python SDK equivalent: OpenSecTradeContext.get_combo_max_trd_qtys
  • Route: MCP JSON-RPC tools/call with name = "futu_get_combo_max_trd_qtys"

Description:

Get maximum trade quantity for a combo-option order. Futu API v10.7: OpenSecTradeContext.get_combo_max_trd_qtys. c2s_json must include header.acc_id.

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_combo_max_trd_qtys",
    "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_preview_order_impact

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

Description:

Preview fee, margin and risk sidecars before placing a typed single, modify, combo or crypto order. Estimate only; local extension v1.

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_preview_order_impact",
    "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_asset_trend

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

Description:

Get the server-calculated customer and broker-area asset timeline. Local extension v1; controlled by --extended-data-reads, enabled by default.

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_asset_trend",
    "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_yield_trend

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

Description:

Get the server-calculated customer and broker-area yield timeline and benchmark comparisons. Local extension v1.

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_yield_trend",
    "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_return_calendar

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

Description:

Get the server-calculated customer and broker-area monthly or yearly return calendar. Local extension v1.

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_return_calendar",
    "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_order_relations

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

Description:

Read a complete cached order relation graph by order or group id. Returns explicit not-available or stale status and never contacts a backend.

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_order_relations",
    "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_position_corporate_actions

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

Description:

Read position-related stock and option-underlying corporate-action risk from a fresh account position snapshot. Controlled by --extended-data-reads; default ON; live backend unverified.

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_position_corporate_actions",
    "arguments": {
      "c2s_json": "{\"header\":{\"trd_env\":1,\"acc_id\":900000001,\"trd_market\":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_algo_order_logs

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

Description:

Query algorithm parent/child execution reports with zero-based pagination or fetch_all. Controlled by --extended-data-reads.

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_algo_order_logs",
    "arguments": {
      "c2s_json": "{\"header\":{\"trd_env\":1,\"acc_id\":900000001,\"trd_market\":2},\"algo_order_id\":\"server-algo-order-id\",\"page_index\":0,\"page_size\":50,\"fetch_all\":false,\"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_order_fill_details

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

Description:

Read individual order fills for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetOrderFillDetails

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_order_dates

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

Description:

Read historical order dates for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetOrderDates

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_today_fill_statistics

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

Description:

Read today's fill statistics for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetTodayFillStatistics

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_future_subpositions

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

Description:

Read futures subpositions for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetFutureSubpositions

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_symbol_history_orders

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

Description:

Read historical orders by symbol for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetSymbolHistoryOrders

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_symbol_history_fills

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

Description:

Read historical fills by symbol for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetSymbolHistoryFills

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_sub_account_fill_quantities

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

Description:

Read fills by subaccount for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetSubAccountFillQuantities

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_symbol_trade_counts

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

Description:

Read periodic fill statistics by symbol for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetSymbolTradeCounts

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_future_position_breakdown

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

Description:

Read futures position detail view for the selected account. Controlled by --extended-data-reads; default ON; live backend unverified.

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

Additional contract:

API: GetFuturePositionBreakdown

Scope: acc:read

Requires --extended-data-reads (default ON). Live status UNVERIFIED. Pass the C2S JSON string in required c2s_json; optional api_key selects call credentials. Request fields and result contract.

futu_get_option_combo_eligibility

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

Description:

Options portfolio account eligibility; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetOptionComboEligibility

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_broker_option_strategies

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

Description:

Broker options strategy configuration; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetBrokerOptionStrategies

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_transaction_fee_plan

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

Description:

Account fee schedule; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetTransactionFeePlan

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_legacy_future_fee_config

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

Description:

Historical futures fee configuration; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetLegacyFutureFeeConfig

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_premium_entitlements

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

Description:

Premium benefits; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetPremiumEntitlements

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_fractional_share_whitelist

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

Description:

Fractional-share allowlist; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetFractionalShareWhitelist

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_broker_total_assets

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

Description:

Broker total assets; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetBrokerTotalAssets

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_trade_password_state

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

Description:

Trading-password presence status; controlled by --extended-data-reads, enabled by default; not verified on a live backend.

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

Additional contract:

API: GetTradePasswordState

Scope: acc:read

Requires --extended-data-reads (default ON), live UNVERIFIED. Required c2s_json string; optional api_key. Fields, results and authorization.

futu_get_cash_sweep_configuration

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

Description:

Cash sweep configuration; read only, preserving missing and raw values; enabled by default and not verified on a live backend.

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

Additional contract:

API: GetCashSweepConfiguration

Scope: acc:read

Contract / fields and permissions. Default ON; live UNVERIFIED.

futu_get_cash_sweep_redemption_capacity

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

Description:

Cash sweep redemption limit; read only, preserving missing and raw values; enabled by default and not verified on a live backend.

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

Additional contract:

API: GetCashSweepRedemptionCapacity

Scope: acc:read

Contract / fields and permissions. Default ON; live UNVERIFIED.

futu_get_wealth_holdings

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

Description:

Account wealth positions. Enabled by default; live backend unverified. Does not buy, redeem or transfer assets.

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

Additional contract:

Scope: acc:read. Wealth read contract. Default ON; live backend UNVERIFIED. Uses the selected account; fund details require an authenticated caller with unrestricted account access.

futu_get_bond_account_positions

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

Description:

Account wealth positions. Enabled by default; live backend unverified. Does not buy, redeem or transfer assets.

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

Additional contract:

Scope: acc:read. Wealth read contract. Default ON; live backend UNVERIFIED. Uses the selected account; fund details require an authenticated caller with unrestricted account access.

futu_get_fund_account_positions

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

Description:

Account wealth positions. Enabled by default; live backend unverified. Does not buy, redeem or transfer assets.

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

Additional contract:

Scope: acc:read. Wealth read contract. Default ON; live backend UNVERIFIED. Uses the selected account; fund details require an authenticated caller with unrestricted account access.

futu_get_fund_position_details

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

Description:

Account wealth positions. Enabled by default; live backend unverified. Does not buy, redeem or transfer assets.

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

Additional contract:

Scope: acc:read. Wealth read contract. Default ON; live backend UNVERIFIED. Uses the selected account; fund details require an authenticated caller with unrestricted account access.

futu_get_forex_accounts

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; a nonempty market allowlist must contain FX. Forex read contract. Default ON; live backend UNVERIFIED.

futu_get_forex_risk_control

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; a nonempty market allowlist must contain FX. Forex read contract. Default ON; live backend UNVERIFIED.

futu_preview_forex_margin

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; a nonempty market allowlist must contain FX. Forex read contract. Default ON; live backend UNVERIFIED.

futu_get_forex_assets

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; a nonempty market allowlist must contain FX. Forex read contract. Default ON; live backend UNVERIFIED. Pass the account, currency and all six booleans in c2s_json; the current caller is preserved.

futu_get_forex_account_quote_context

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; a nonempty market allowlist must contain FX. Forex read contract. Default ON; live backend UNVERIFIED. Raw context is not subscription authority.

futu_get_forex_symbol_configs

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

Description:

Read source-owned Forex account data. Requires acc:read and FX when market-limited. Enabled by default; live backend unverified. No trading or transfers.

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

Additional contract:

Scope: acc:read; nonempty market restrictions require FX. Forex read contract. Default ON; live backend UNVERIFIED. Broker-only metadata; no account discovery or trading authority.

futu_get_forex_unlock_status

  • Scope: trade:unlock
  • Python SDK equivalent: —
  • Route: MCP JSON-RPC tools/call with name = "futu_get_forex_unlock_status"

Description:

Read safe historical attempts and current local Forex credential status. Requires trade:unlock and FX/target access; no network request or credential recovery.

Request arguments:

Field Type Required Alias Description
c2s_json string ✅ — —
api_key string? — — —

JSON-RPC call example:

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

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

Additional contract:

Scope: trade:unlock; configured market and account restrictions apply to FX and every target. Pass C2S JSON through c2s_json. Forex unlock contract. Network authentication defaults ON; local lock/status remain available. Live backend UNVERIFIED.

futu_get_account_financing_setting

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

Description:

Read account funding rules for currently authorized real accounts. Settings writes require acc:read and trade:real with explicit intent; no transfer is performed. Reads are enabled by default; settings writes retain their independent opt-in. Live backend behavior is unverified.

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

Additional contract:

Scope: acc:read. Pass the explicit request in c2s_json; current account and market permissions apply. See account funding settings. Disabled by default; writes require a separate opt-in. Live backend validation is incomplete.

futu_get_account_auto_exchange_setting

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

Description:

Read account funding rules for currently authorized real accounts. Settings writes require acc:read and trade:real with explicit intent; no transfer is performed. Reads are enabled by default; settings writes retain their independent opt-in. Live backend behavior is unverified.

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

Additional contract:

Scope: acc:read. Pass the explicit request in c2s_json; current account and market permissions apply. See account funding settings. Disabled by default; writes require a separate opt-in. Live backend validation is incomplete.

futu_get_account_foreign_exchange_setting

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

Description:

Read account funding rules for currently authorized real accounts. Settings writes require acc:read and trade:real with explicit intent; no transfer is performed. Reads are enabled by default; settings writes retain their independent opt-in. Live backend behavior is unverified.

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

Additional contract:

Scope: acc:read. Pass the explicit request in c2s_json; current account and market permissions apply. See account funding settings. Disabled by default; writes require a separate opt-in. Live backend validation is incomplete.

futu_get_account_local_exchange_setting

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

Description:

Read account funding rules for currently authorized real accounts. Settings writes require acc:read and trade:real with explicit intent; no transfer is performed. Reads are enabled by default; settings writes retain their independent opt-in. Live backend behavior is unverified.

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

Additional contract:

Scope: acc:read. Pass the explicit request in c2s_json; current account and market permissions apply. See account funding settings. Disabled by default; writes require a separate opt-in. Live backend validation is incomplete.

futu_get_forex_orders

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

Description:

List Forex orders. view: today, open, recent_three_days, recent, history. History uses history_filter; top-level times/side are exclusive to non-history views. Requires acc:read and FX/account permission; controlled by --extended-data-reads, default ON; live backend unverified.

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

Additional contract:

Requires acc:read, FX and account permission. Default ON; live backend unverified. See Forex order contracts. JSON carries the complete public request; mutations do not retry automatically.

futu_get_forex_order_detail

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

Description:

Read one Forex order by broker_id, account_id and order_id; exchange is optional. Requires acc:read and FX/account permission; controlled by --extended-data-reads, default ON; live backend unverified.

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

Additional contract:

Requires acc:read, FX and account permission. Default ON; live backend unverified. See Forex order contracts. JSON carries the complete public request; mutations do not retry automatically.