Skip to main content

futu_mcp/tools/
position_corporate_actions.rs

1//! MCP adapter for v1.8 position-related corporate-action risk.
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_position_corporate_actions_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::<
20            futu_proto::trd_get_position_corporate_actions::C2s,
21        >("get-position-corporate-actions", &req.c2s_json)
22        .map_err(|error| error.to_string())?;
23        let client = self
24            .read_client_or_err(
25                "futu_get_position_corporate_actions",
26                &req_ctx,
27                req.api_key.as_deref(),
28                Some(c2s.header.acc_id),
29            )
30            .await?;
31        FutuServer::wrap_result(position_corporate_actions(client, c2s).await)
32    }
33}
34
35async fn position_corporate_actions(
36    client: Arc<FutuClient>,
37    c2s: futu_proto::trd_get_position_corporate_actions::C2s,
38) -> anyhow::Result<String> {
39    handlers::proto_json::position_corporate_actions(&client, c2s).await
40}
41
42include!(concat!(
43    env!("OUT_DIR"),
44    "/generated_mcp_routes_position_corporate_actions.rs"
45));