Skip to content

News / Announcements

MCP tool overview

futu_search_news

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

Description:

Search news, notices, and ratings. Public QOT 3263. c2s_json uses Qot_GetSearchNews.C2S JSON.

Request arguments:

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

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

JSON-RPC call example:

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

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

Description:

Get structured hot news (page_size 1..50). 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_hot_news",
    "arguments": {
      "c2s_json": "{\"page_size\":20,\"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_latest_news

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

Description:

Get latest news with older/newer cursors and optional read-only filter sidecars. 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_latest_news",
    "arguments": {
      "c2s_json": "{\"page_size\":20,\"seq_mark\":\"\",\"page_flip\":0,\"tag_indexes\":[0],\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

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

futu_get_watchlist_news

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

Description:

Get news for explicit nonempty watchlist stock IDs; never falls back to the whole market. 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_watchlist_news",
    "arguments": {
      "c2s_json": "{\"page_size\":20,\"seq_mark\":\"\",\"stock_ids\":[7000700],\"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_watchlist_announcement

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

Description:

Get announcements for explicit stock IDs and notice types 0..5 (0 alone means all). 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_watchlist_announcement",
    "arguments": {
      "c2s_json": "{\"page_size\":20,\"seq_mark\":\"\",\"stock_ids\":[7000700],\"notice_types\":[0],\"extension_version\":1}",
      "api_key": "optional-per-call-api-key"
    }
  }
}

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

futu_get_watchlist_rating

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

Description:

Get analyst reports for explicit nonempty stock IDs; never falls back to the whole market. 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_watchlist_rating",
    "arguments": {
      "c2s_json": "{\"page_size\":20,\"seq_mark\":\"\",\"stock_ids\":[7000700],\"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_stock_news

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

Description:

Get per-stock news with cursor, dedup-ID, and request-level tracking echo. 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_stock_news",
    "arguments": {
      "c2s_json": "{\"stock_id\":7000700,\"page_size\":20,\"id_type\":1,\"seq_mark\":\"\",\"dedup_ids\":[],\"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_news_translation

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

Description:

Get news translation with lossless optional fields. 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_news_translation",
    "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: qot:read
  • API: GetNewsTranslation
  • REST: POST /api/news-translation

Requires --extended-data-reads; ON by default; live backend UNVERIFIED.

Field Type Required Description
c2s_json string Yes Requires news_id, is_translate, list_type, skip_image_crop, and extension_version=1.
api_key string No Optional per-call key; HTTP still requires its Bearer identity.

Full C2S fields, MCP argument example, responses and precision.

futu_get_platform_announcements

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

Description:

Platform announcements, complete or paginated; 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_platform_announcements",
    "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: GetPlatformAnnouncements

Scope: qot:read

Default ON, live UNVERIFIED. Request fields and snapshot semantics.

futu_get_platform_announcements_by_ids

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

Description:

Query by announcement ID; 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_platform_announcements_by_ids",
    "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: GetPlatformAnnouncementsByIds

Scope: qot:read

Default ON, live UNVERIFIED. Request fields and snapshot semantics.

futu_get_news_push_settings

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

Description:

News push settings; Writes return a separate ACK/read-back status; ambiguous outcomes are not resent. 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_news_push_settings",
    "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: GetNewsPushSettings

Scope: qot:read

Default ON; live UNVERIFIED. Fields, caller identity and ACK/readback receipts.

futu_set_news_push_settings

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

Description:

Set news push preferences; Writes return a separate ACK/read-back status; ambiguous outcomes are not resent. 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_set_news_push_settings",
    "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: SetNewsPushSettings

Scope: qot:write

Default ON; live UNVERIFIED. Fields, caller identity and ACK/readback receipts.