codeprism_mcp/tools/
mod.rs1pub mod analysis;
6pub mod core;
7pub mod dynamic_enablement; pub mod search;
9pub mod workflow;
10
11pub use crate::tools_legacy::{
13 CallToolParams, CallToolResult, ListToolsParams, ListToolsResult, Tool, ToolCapabilities,
14 ToolContent, ToolManager,
15};
16
17use crate::CodePrismMcpServer;
18use anyhow::Result;
19
20pub struct ToolRegistry {
22 server: std::sync::Arc<tokio::sync::RwLock<CodePrismMcpServer>>,
23}
24
25impl ToolRegistry {
26 pub fn new(server: std::sync::Arc<tokio::sync::RwLock<CodePrismMcpServer>>) -> Self {
28 Self { server }
29 }
30
31 pub async fn list_tools(&self, _params: ListToolsParams) -> Result<ListToolsResult> {
33 let mut tools = Vec::new();
34
35 tools.extend(core::navigation::list_tools());
37 tools.extend(core::symbols::list_tools());
38 tools.extend(core::repository::list_tools());
39
40 tools.extend(search::content::list_tools());
42 tools.extend(search::patterns::list_tools());
43
44 tools.extend(analysis::complexity::list_tools());
46 tools.extend(analysis::flow::list_tools());
47 tools.extend(analysis::specialized::list_tools());
48 tools.extend(analysis::quality::list_tools());
49 tools.extend(analysis::javascript::list_tools()); tools.extend(workflow::register_workflow_tools());
53
54 Ok(ListToolsResult {
55 tools,
56 next_cursor: None,
57 })
58 }
59
60 pub async fn call_tool(&self, params: CallToolParams) -> Result<CallToolResult> {
62 let server = self.server.read().await;
63
64 match params.name.as_str() {
65 "repository_stats" => core::repository::call_tool(&server, ¶ms).await,
67 "trace_path" | "find_dependencies" | "find_references" => {
68 core::navigation::call_tool(&server, ¶ms).await
69 }
70 "explain_symbol" | "search_symbols" => core::symbols::call_tool(&server, ¶ms).await,
71
72 "search_content" | "find_files" | "content_stats" => {
74 search::content::call_tool(&server, ¶ms).await
75 }
76 "detect_patterns" => search::patterns::call_tool(&server, ¶ms).await,
77
78 "analyze_complexity" => analysis::complexity::call_tool(&server, ¶ms).await,
80 "trace_data_flow" | "analyze_transitive_dependencies" => {
81 analysis::flow::call_tool(&server, ¶ms).await
82 }
83 "trace_inheritance" | "analyze_decorators" => {
84 analysis::specialized::call_tool(&server, ¶ms).await
85 }
86 "find_duplicates"
87 | "find_unused_code"
88 | "analyze_security"
89 | "analyze_performance"
90 | "analyze_api_surface" => analysis::quality::call_tool(&server, ¶ms).await,
91
92 "analyze_javascript_frameworks"
94 | "analyze_react_components"
95 | "analyze_nodejs_patterns" => analysis::javascript::call_tool(&server, ¶ms).await,
96
97 "suggest_analysis_workflow" | "batch_analysis" | "optimize_workflow" => {
99 workflow::handle_workflow_tool(¶ms.name, &server, params.arguments.as_ref())
100 .await
101 }
102
103 _ => Err(anyhow::anyhow!("Unknown tool: {}", params.name)),
104 }
105 }
106}