Skip to main content

Crate futu_mcp

Crate futu_mcp 

Source
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
FileConfig 🔒
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_nums resolve 成 allowed_acc_ids. 与 futu-opend daemon card_num_reload_and_expand_fn 启动 retry loop 同节奏 (6 × 10s).
spawn_sighup_reload 🔒
wait_for_ctrl_c_or_pending 🔒