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