Watchlists / Private Notes¶
futu_get_user_security¶
- Scope:
qot:read - Python SDK equivalent:
OpenQuoteContext.get_user_security - Route: MCP JSON-RPC
tools/callwith name ="futu_get_user_security"
Description:
List securities in a user watchlist group. Python SDK: OpenQuoteContext.get_user_security. Use futu_get_user_security_group to find available group names.
Request arguments:
| Field | Type | Required | Alias | Description |
|---|---|---|---|---|
group_name |
string | ✅ | group, name |
Watchlist group name (use futu_get_user_security_group to list groups); alias: group / name |
⚠️ Unknown fields:
deny_unknown_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_get_user_security",
"arguments": {
"group_name": "WATCHLIST1"
}
}
}
Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.
futu_modify_user_security¶
- Scope:
qot:write - Python SDK equivalent:
OpenQuoteContext.modify_user_security - Route: MCP JSON-RPC
tools/callwith name ="futu_modify_user_security"
Description:
Modify watchlist group — add / delete / move-out stocks. op is an INTEGER (not a string literal): 1=AddInto, 2=Delete-from-group, 3=MoveOut. Python SDK: OpenQuoteContext.modify_user_security.
Request arguments:
| Field | Type | Required | Alias | Description |
|---|---|---|---|---|
group_name |
string | ✅ | group, name |
Watchlist group name; alias: group / name |
op |
i32 | ✅ | op_type, operation |
Op: 1=AddInto, 2=Delete (from this group), 3=MoveOut; alias: op_type / operation |
symbols |
array of string | ✅ | stocks, code_list, symbol_list, security_list |
Security symbols to add/delete/move; alias: stocks / code_list / symbol_list / security_list |
⚠️ Unknown fields:
deny_unknown_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).Runtime validation: this request type has a
validate()method that adds runtime required-field / enum-value validation on top of the JSON schema.
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_modify_user_security",
"arguments": {
"group_name": "WATCHLIST1",
"op": 1,
"symbols": [
"HK.00700"
]
}
}
}
Response: JSON text matching the corresponding REST endpoint / Python SDK. On failure MCP CallToolResult.is_error=true + content carries {"error": "...", "status": "error"}.
futu_get_user_security_group¶
- Scope:
qot:read - Python SDK equivalent:
OpenQuoteContext.get_user_security_group - Route: MCP JSON-RPC
tools/callwith name ="futu_get_user_security_group"
Description:
List the user's custom + system watchlist groups. Python SDK: OpenQuoteContext.get_user_security_group. group_type: 1=custom, 2=system, 3=all.
Request arguments:
| Field | Type | Required | Alias | Description |
|---|---|---|---|---|
group_type |
i32 | ✓ default default_user_security_group_type |
— | Group type: 1=custom, 2=system, 3=all (default 1) |
⚠️ Unknown fields:
deny_unknown_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).Runtime validation: this request type has a
validate()method that adds runtime required-field / enum-value validation on top of the JSON schema.
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_get_user_security_group",
"arguments": {
"group_type": 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_stock_note_labels¶
- Scope:
acc:read - Python SDK equivalent:
— - Route: MCP JSON-RPC
tools/callwith name ="futu_get_stock_note_labels"
Description:
Private stock-note basic labels. Requires authenticated REST forwarding and --enable-v18-stock-notes.
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_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_get_stock_note_labels",
"arguments": {
"c2s_json": "{\"mode\":1,\"stock_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_stock_notes¶
- Scope:
acc:read - Python SDK equivalent:
— - Route: MCP JSON-RPC
tools/callwith name ="futu_get_stock_notes"
Description:
Private stock-note details for explicit nonzero stock IDs. Requires authenticated REST forwarding.
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_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_get_stock_notes",
"arguments": {
"c2s_json": "{\"stock_ids\":[7001],\"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_set_stock_note¶
- Scope:
qot:write - Python SDK equivalent:
— - Route: MCP JSON-RPC
tools/callwith name ="futu_set_stock_note"
Description:
Create, update, or delete a private stock note through authenticated REST. No automatic resend on unknown outcome.
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_fieldsis enabled — any field not listed above returns anunknown fielderror (previously silently dropped).
JSON-RPC call example:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "futu_set_stock_note",
"arguments": {
"c2s_json": "{\"operation\":3,\"stock_id\":7001,\"title\":\"watch\",\"detail\":\"review later\",\"is_display\":1,\"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"}.