1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//! Parameter structures for MCP tools
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SearchCodeParams {
/// The search query (supports regex)
pub query: String,
/// Directory to search in (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Case-insensitive search
#[serde(default)]
pub ignore_case: Option<bool>,
/// Enable fuzzy search (handles typos and variations)
#[serde(default)]
pub fuzzy: Option<bool>,
/// Fuzzy search threshold (0.0 = exact match, 1.0 = very loose)
#[serde(default)]
pub fuzzy_threshold: Option<f64>,
/// Maximum number of results per file
#[serde(default)]
pub max_results: Option<usize>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
/// Sort results by relevance score
#[serde(default)]
pub rank: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ListFilesParams {
/// Directory to scan (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct AnalyzeCodebaseParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ComplexityParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
/// Show only files above complexity threshold
#[serde(default)]
pub threshold: Option<u32>,
/// Sort by complexity (highest first)
#[serde(default)]
pub sort: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct DuplicatesParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
/// Minimum number of lines to consider as duplicate
#[serde(default)]
pub min_lines: Option<usize>,
/// Similarity threshold (0.0-1.0, default: 0.9)
#[serde(default)]
pub similarity: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct DeadcodeParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CircularParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FindSymbolParams {
/// Symbol to find (function, class, or identifier)
pub symbol: String,
/// Directory to search (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
/// Filter: definition, references, callers, or all
#[serde(default)]
pub find_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct GetHealthParams {
/// Directory to analyze (default: current directory)
#[serde(default)]
pub path: Option<String>,
/// File extensions to include (e.g., ["rs", "py", "js"])
#[serde(default)]
pub extensions: Option<Vec<String>>,
/// Exclude directories (e.g., ["target", "node_modules"])
#[serde(default)]
pub exclude: Option<Vec<String>>,
}