Skip to main content

tvscreener/mcp/
tool_args.rs

1// Copyright 2026 tvscreener-rs contributors
2// SPDX-License-Identifier: Apache-2.0
3
4//! JSON-schema parameter structs for rmcp `Parameters<T>` tool handlers.
5
6use schemars::JsonSchema;
7use serde::Deserialize;
8
9#[derive(Debug, Deserialize, JsonSchema)]
10pub(crate) struct DiscoverFieldsArgs {
11    pub(crate) search_term: String,
12    #[serde(default)]
13    pub(crate) asset_type: Option<String>,
14    #[serde(default)]
15    pub(crate) limit: Option<u32>,
16}
17
18#[derive(Debug, Default, Deserialize, JsonSchema)]
19pub(crate) struct AssetTypeArgs {
20    #[serde(default)]
21    pub(crate) asset_type: Option<String>,
22}
23
24#[derive(Debug, Default, Deserialize, JsonSchema)]
25pub(crate) struct CustomQueryArgs {
26    #[serde(default)]
27    pub(crate) asset_type: Option<String>,
28    #[serde(default)]
29    pub(crate) fields: Option<String>,
30    #[serde(default)]
31    pub(crate) filters: Option<String>,
32    #[serde(default)]
33    pub(crate) sort_by: Option<String>,
34    #[serde(default)]
35    pub(crate) ascending: Option<bool>,
36    #[serde(default)]
37    pub(crate) limit: Option<u32>,
38}
39
40#[derive(Debug, Default, Deserialize, JsonSchema)]
41pub(crate) struct SearchStocksArgs {
42    #[serde(default)]
43    pub(crate) price_range: Option<String>,
44    #[serde(default)]
45    pub(crate) market_cap_billions_range: Option<String>,
46    #[serde(default)]
47    pub(crate) sectors: Option<String>,
48    #[serde(default)]
49    pub(crate) sort_by: Option<String>,
50    #[serde(default)]
51    pub(crate) limit: Option<u32>,
52}
53
54#[derive(Debug, Default, Deserialize, JsonSchema)]
55pub(crate) struct SearchCryptoArgs {
56    #[serde(default)]
57    pub(crate) min_volume_millions: Option<f64>,
58    #[serde(default)]
59    pub(crate) min_market_cap_billions: Option<f64>,
60    #[serde(default)]
61    pub(crate) limit: Option<u32>,
62}
63
64#[derive(Debug, Default, Deserialize, JsonSchema)]
65pub(crate) struct SearchForexArgs {
66    #[serde(default)]
67    pub(crate) min_volume_millions: Option<f64>,
68    #[serde(default)]
69    pub(crate) limit: Option<u32>,
70}
71
72#[derive(Debug, Default, Deserialize, JsonSchema)]
73pub(crate) struct GetTopMoversArgs {
74    #[serde(default)]
75    pub(crate) asset_type: Option<String>,
76    #[serde(default)]
77    pub(crate) direction: Option<String>,
78    #[serde(default)]
79    pub(crate) limit: Option<u32>,
80}
81
82#[derive(Debug, Deserialize, JsonSchema)]
83pub(crate) struct GetPresetArgs {
84    pub(crate) name: String,
85}
86
87#[derive(Debug, Default, Deserialize, JsonSchema)]
88pub(crate) struct BuildPayloadArgs {
89    #[serde(default)]
90    pub(crate) asset_type: Option<String>,
91    #[serde(default)]
92    pub(crate) fields: Option<String>,
93    #[serde(default)]
94    pub(crate) filters: Option<String>,
95    #[serde(default)]
96    pub(crate) sort_by: Option<String>,
97    #[serde(default)]
98    pub(crate) indices: Option<String>,
99    #[serde(default)]
100    pub(crate) markets: Option<String>,
101}
102
103#[derive(Debug, Deserialize, JsonSchema)]
104pub(crate) struct SearchByIndexArgs {
105    pub(crate) indices: String,
106    #[serde(default)]
107    pub(crate) markets: Option<String>,
108    #[serde(default)]
109    pub(crate) fields: Option<String>,
110    #[serde(default)]
111    pub(crate) sort_by: Option<String>,
112    #[serde(default)]
113    pub(crate) limit: Option<u32>,
114}