(&self, config: McpServerConfig)
| 60 | } |
| 61 | |
| 62 | pub(super) async fn add_mcp_server(&self, config: McpServerConfig) -> Result<usize> { |
| 63 | let server_name = config.name.clone(); |
| 64 | self.session.mcp_manager.register_server(config).await; |
| 65 | self.session |
| 66 | .mcp_manager |
| 67 | .connect(&server_name) |
| 68 | .await |
| 69 | .map_err(|e| crate::error::CodeError::Tool { |
| 70 | tool: server_name.clone(), |
| 71 | message: format!("Failed to connect MCP server: {}", e), |
| 72 | })?; |
| 73 | |
| 74 | let tools = self |
| 75 | .session |
| 76 | .mcp_manager |
| 77 | .get_server_tools(&server_name) |
| 78 | .await; |
| 79 | let count = tools.len(); |
| 80 | |
| 81 | for tool in crate::mcp::tools::create_mcp_tools( |
| 82 | &server_name, |
| 83 | tools, |
| 84 | Arc::clone(&self.session.mcp_manager), |
| 85 | ) { |
| 86 | self.session.tool_executor.register_dynamic_tool(tool); |
| 87 | } |
| 88 | |
| 89 | tracing::info!( |
| 90 | session_id = %self.session.session_id, |
| 91 | server = server_name, |
| 92 | tools = count, |
| 93 | "MCP server added to live session" |
| 94 | ); |
| 95 | |
| 96 | Ok(count) |
| 97 | } |
| 98 | |
| 99 | pub(super) async fn remove_mcp_server(&self, server_name: &str) -> Result<()> { |
| 100 | self.session |
no test coverage detected