Skip to main content

futu_mcp/tools/
order_relations.rs

1//! MCP adapter for the cache-only v1.8 order-relation graph.
2
3use std::sync::Arc;
4
5use futu_net::client::FutuClient;
6use rmcp::{RoleServer, handler::server::wrapper::Parameters, service::RequestContext};
7
8use crate::handlers;
9use crate::tool_args::ProtoJsonReq;
10
11use super::FutuServer;
12
13impl FutuServer {
14    async fn futu_get_order_relations_impl(
15        &self,
16        Parameters(req): Parameters<ProtoJsonReq>,
17        req_ctx: RequestContext<RoleServer>,
18    ) -> std::result::Result<String, String> {
19        let c2s = handlers::proto_json::parse_c2s_json::<futu_proto::trd_get_order_relations::C2s>(
20            "get-order-relations",
21            &req.c2s_json,
22        )
23        .map_err(|error| error.to_string())?;
24        let client = self
25            .read_client_or_err(
26                "futu_get_order_relations",
27                &req_ctx,
28                req.api_key.as_deref(),
29                Some(c2s.header.acc_id),
30            )
31            .await?;
32        FutuServer::wrap_result(order_relations(client, c2s).await)
33    }
34}
35
36async fn order_relations(
37    client: Arc<FutuClient>,
38    c2s: futu_proto::trd_get_order_relations::C2s,
39) -> anyhow::Result<String> {
40    handlers::proto_json::order_relations(&client, c2s).await
41}
42
43include!(concat!(
44    env!("OUT_DIR"),
45    "/generated_mcp_routes_order_relations.rs"
46));