Expand description
FutuOpenD-rs MCP 服务器
通过 Model Context Protocol 把 Futu 行情/账户能力暴露给 Claude / LLM 客户端。
授权有两种模式:
- Scope 模式:
--keys-file <path>启用,客户端必须通过FUTU_MCP_API_KEY环境变量传入明文 key。服务器用 SHA-256 hash 比对 keys.json 中的记录, 按 scope + 限额放行。 - Legacy 模式:未提供 keys-file 时回退到旧的
--enable-trading/--allow-real-trading两级开关。
Modules§
- guard 🔒
- Scope 守卫 + 限额检查 + 审计日志
- handlers 🔒
- 工具实现(按域拆分)
- state 🔒
- 共享状态:网关连接 + 订阅状态 + 授权
- tool_
account 🔒 - MCP account-locator helpers shared by thin tool wrappers.
- tool_
args 🔒 - MCP tool request/parameter schemas.
- tool_
auth 🔒 - MCP caller-auth helper types and pure policy decisions.
- tool_
enums 🔒 - v1.4.84 §5 B2: 结构化 MCP tool enum 类型 + 泛型 int/string 双接 deserializer
- tools 🔒
- MCP 工具定义(#[tool] 薄封装,业务逻辑在 handlers/)
- trade_
pwd 🔒 - 交易密码来源封装
- transport 🔒
- Resilient stdio transport for MCP server (v1.4.90 P0-A).
Structs§
- Cli 🔒
- FutuOpenD-rs MCP server
- File
Config 🔒 - TOML 配置文件映射——字段名与 CLI 参数完全一致
Functions§
- build_
card_ 🔒num_ resolver - v1.4.105 eli #4 fix: 用
Vec<TrdAcc>构造 card_num resolver closure. - expand_
card_ 🔒nums_ via_ daemon - v1.4.105 eli #4 fix: 连 daemon → call GetAccList → 用 acc_list 构造 resolver →
调用 [
KeyStore::expand_allowed_card_nums]. - inject_
www_ 🔒authenticate - Tower middleware: 如果下游(MCP service)返回 401/403 又没
WWW-Authenticate头,补一个Bearer resource_metadata="...",指向/.well-known/oauth-protected-resource。 - is_
cli_ 🔒explicit - codex 0547 F5 (P3) fix: clap
ValueSource区分 “CLI 显式传” vs “默认值”. - main 🔒
- oauth_
protected_ 🔒resource_ metadata - RFC 9728 — OAuth 2.0 Protected Resource Metadata
- render_
mcp_ 🔒metrics_ body - HTTP 模式:axum + rmcp StreamableHttpService,
/mcp路径跑 MCP,/metrics暴露 Prometheus counters(无需 token),/.well-known/oauth-protected-resource暴露 OAuth2 Protected Resource Metadata(RFC 9728,给 MCP 客户端发现鉴权要求用)。 - render_
mcp_ 🔒metrics_ body_ for - serve_
http 🔒 - serve_
stdio 🔒 - stdio 模式:MCP 客户端启动子进程,stdin/stdout 传协议帧
- setup_
logging 🔒 - 初始化 stderr 日志 + 可选 audit JSONL 层
- shutdown_
signal 🔒 - 监听 SIGTERM / SIGINT,任一到达即返回。 同时兼容 Windows(只有 ctrl_c)和 Unix(SIGTERM + SIGINT)。
- spawn_
card_ 🔒num_ expand_ retry - v1.4.105 eli #4 fix: 启动时后台 retry 把 KeyStore 的
allowed_card_numsresolve 成allowed_acc_ids. 与 futu-opend daemoncard_num_reload_and_expand_fn启动 retry loop 同节奏 (6 × 10s). - spawn_
sighup_ 🔒reload - wait_
for_ 🔒ctrl_ c_ or_ pending