futu_mcp/tools/
reference_screen_unusual.rs1use crate::handlers;
4use crate::tool_args::*;
5use rmcp::{RoleServer, handler::server::wrapper::Parameters, service::RequestContext};
6
7use super::FutuServer;
8
9impl FutuServer {
10 async fn futu_stock_screen_impl(
11 &self,
12 Parameters(req): Parameters<StockScreenReq>,
13 req_ctx: RequestContext<RoleServer>,
14 ) -> std::result::Result<String, String> {
15 tracing::info!(tool = "futu_stock_screen");
16 let client = self
17 .read_client_or_err("futu_stock_screen", &req_ctx, None, None)
18 .await?;
19 Self::wrap_result(handlers::reference::stock_screen(&client, req.c2s).await)
20 }
21
22 async fn futu_option_screen_impl(
23 &self,
24 Parameters(req): Parameters<OptionScreenReq>,
25 req_ctx: RequestContext<RoleServer>,
26 ) -> std::result::Result<String, String> {
27 tracing::info!(tool = "futu_option_screen");
28 let client = self
29 .read_client_or_err("futu_option_screen", &req_ctx, None, None)
30 .await?;
31 Self::wrap_result(handlers::reference::option_screen(&client, req.c2s).await)
32 }
33
34 async fn futu_warrant_screen_impl(
35 &self,
36 Parameters(req): Parameters<WarrantScreenReq>,
37 req_ctx: RequestContext<RoleServer>,
38 ) -> std::result::Result<String, String> {
39 tracing::info!(tool = "futu_warrant_screen");
40 let client = self
41 .read_client_or_err("futu_warrant_screen", &req_ctx, None, None)
42 .await?;
43 Self::wrap_result(handlers::reference::warrant_screen(&client, req.c2s).await)
44 }
45
46 async fn futu_get_technical_unusual_impl(
47 &self,
48 Parameters(req): Parameters<TechnicalUnusualReq>,
49 req_ctx: RequestContext<RoleServer>,
50 ) -> std::result::Result<String, String> {
51 tracing::info!(
52 tool = "futu_get_technical_unusual",
53 stock_symbol = %req.stock_symbol,
54 time_range = ?req.time_range,
55 indicator_filter_count = req.indicator_filters.len(),
56 language_id = ?req.language_id
57 );
58 let client = self
59 .read_client_or_err("futu_get_technical_unusual", &req_ctx, None, None)
60 .await?;
61 Self::wrap_result(
62 handlers::reference::get_technical_unusual(
63 &client,
64 &req.stock_symbol,
65 req.time_range,
66 req.indicator_filters,
67 req.language_id,
68 )
69 .await,
70 )
71 }
72
73 async fn futu_get_financial_unusual_impl(
74 &self,
75 Parameters(req): Parameters<FinancialUnusualReq>,
76 req_ctx: RequestContext<RoleServer>,
77 ) -> std::result::Result<String, String> {
78 tracing::info!(
79 tool = "futu_get_financial_unusual",
80 stock_symbol = %req.stock_symbol,
81 time_range = ?req.time_range,
82 analysis_dimension_count = req.analysis_dimensions.len(),
83 language_id = ?req.language_id
84 );
85 let client = self
86 .read_client_or_err("futu_get_financial_unusual", &req_ctx, None, None)
87 .await?;
88 Self::wrap_result(
89 handlers::reference::get_financial_unusual(
90 &client,
91 &req.stock_symbol,
92 req.time_range,
93 req.analysis_dimensions,
94 req.language_id,
95 )
96 .await,
97 )
98 }
99
100 async fn futu_get_derivative_unusual_impl(
101 &self,
102 Parameters(req): Parameters<DerivativeUnusualReq>,
103 req_ctx: RequestContext<RoleServer>,
104 ) -> std::result::Result<String, String> {
105 tracing::info!(
106 tool = "futu_get_derivative_unusual",
107 stock_symbol = %req.stock_symbol,
108 time_range = ?req.time_range,
109 analysis_dimension_count = req.analysis_dimensions.len(),
110 language_id = ?req.language_id
111 );
112 let client = self
113 .read_client_or_err("futu_get_derivative_unusual", &req_ctx, None, None)
114 .await?;
115 Self::wrap_result(
116 handlers::reference::get_derivative_unusual(
117 &client,
118 &req.stock_symbol,
119 req.time_range,
120 req.analysis_dimensions,
121 req.language_id,
122 )
123 .await,
124 )
125 }
126}
127
128include!(concat!(
129 env!("OUT_DIR"),
130 "/generated_mcp_routes_reference_screen_unusual.rs"
131));