(
tool_executor: &Arc<ToolExecutor>,
opts: &SessionOptions,
global_mcp: Option<&Arc<McpManager>>,
cached_global_mcp_tools: Vec<(String, McpTool)>,
)
| 224 | } |
| 225 | |
| 226 | fn register_mcp_capabilities( |
| 227 | tool_executor: &Arc<ToolExecutor>, |
| 228 | opts: &SessionOptions, |
| 229 | global_mcp: Option<&Arc<McpManager>>, |
| 230 | cached_global_mcp_tools: Vec<(String, McpTool)>, |
| 231 | ) { |
| 232 | let Some(ref mcp) = opts.mcp_manager else { |
| 233 | return; |
| 234 | }; |
| 235 | |
| 236 | let all_tools = if is_global_mcp(mcp, global_mcp) { |
| 237 | cached_global_mcp_tools |
| 238 | } else { |
| 239 | fetch_session_mcp_tools(mcp) |
| 240 | }; |
| 241 | |
| 242 | for (server_name, tools) in group_mcp_tools_by_server(all_tools) { |
| 243 | for tool in crate::mcp::tools::create_mcp_tools(&server_name, tools, Arc::clone(mcp)) { |
| 244 | tool_executor.register_dynamic_tool(tool); |
| 245 | } |
| 246 | } |
| 247 | } |
| 248 | |
| 249 | fn is_global_mcp(mcp: &Arc<McpManager>, global_mcp: Option<&Arc<McpManager>>) -> bool { |
| 250 | std::ptr::eq( |
no test coverage detected