跳转至

案例:LLM 量化研究员

让 Claude 帮你读实时行情和账户状态,写分析报告。不下单

需求

  • Claude Desktop 能看到腾讯 / 苹果 / 特斯拉等的实时报价 + K 线 + 基本面
  • Claude 能列我所有账户的持仓 + 当天订单 + 历史成交
  • 所有读取走 MCP,Claude 不写任何数据
  • 审计完整保留

key 策略

只给只读 scope,不给 trade:*

futucli gen-key \
  --id claude-analyst \
  --scopes qot:read,acc:read \
  --expires 90d \
  --bind-this-machine
  • 不给交易 scope —— 即使 Claude 心血来潮想下单,调 futu_place_order 会被 missing scope trade:real
  • 机器绑定 —— keys.json 被拷到别处用不了
  • 90 天过期 —— 定期轮转

启动

# 网关
futu-opend \
  --login-account 12345678 --login-pwd "$FUTU_PWD" \
  --rest-port 22222 \
  --rest-keys-file ~/.config/futu/keys.json

# MCP(stdio,Claude Desktop 会启子进程)
# 见下面 Claude Desktop 配置

Claude Desktop 配置

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "futu": {
      "command": "/usr/local/bin/futu-mcp",
      "args": [
        "--gateway", "127.0.0.1:11111",
        "--keys-file", "/Users/you/.config/futu/keys.json",
        "--audit-log", "/Users/you/Library/Logs/futu-mcp-audit.jsonl"
      ],
      "env": {
        "FUTU_MCP_API_KEY": "fc_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

问 Claude 试试

"给我看一下腾讯控股和苹果的最新报价,分析一下今天的盘面"

Claude 会调 futu_get_quote + futu_get_snapshot + futu_get_kline,综合数据给你写分析。

"我账户里有什么持仓?今天成交过什么?"

futu_list_accountsfutu_get_positionsfutu_get_deals

"下单买 100 股腾讯"

Claude 会告诉你工具调用失败:missing scope trade:real。符合预期 —— 这把 key 只读。

审计查询

# Claude 这周都看了啥
jq 'select(.key_id=="claude-analyst" and .iface=="mcp")' \
  ~/Library/Logs/futu-mcp-audit.jsonl | tail -100

# 被拒的调用(scope 不够)
jq 'select(.key_id=="claude-analyst" and .outcome=="reject")' \
  ~/Library/Logs/futu-mcp-audit.jsonl

升级路径

想给 Claude 下单权限?不推荐。如果非要:

  1. 生成独立的key,绑定 trade:simulate 先跑 1 周
  2. 配非常紧的限额(--max-order-value 10000 --max-orders-per-minute 1
  3. 验证没翻车再考虑 trade:real,且仍然保留严格限额
  4. 监控 futu_auth_limit_rejects_total{key_id="claude-real"} 长期看告警

LLM 犯错是常态,护栏是必须。