Manages MCP servers and capabilities
| 499 | return False |
| 500 | |
| 501 | class MCPServerManager: |
| 502 | """Manages MCP servers and capabilities""" |
| 503 | |
| 504 | def __init__(self, config_manager: MCPConfigManager): |
| 505 | self.config_manager = config_manager |
| 506 | self.servers: Dict[str, MCPServer] = {} |
| 507 | self.initialized = False |
| 508 | |
| 509 | # Cache of capabilities |
| 510 | self.all_tools = [] |
| 511 | self.all_resources = [] |
| 512 | self.all_prompts = [] |
| 513 | |
| 514 | async def initialize(self) -> bool: |
| 515 | """Initialize and cache all server capabilities""" |
| 516 | if self.initialized: |
| 517 | return True |
| 518 | |
| 519 | # Create servers |
| 520 | for server_name, server_config in self.config_manager.servers.items(): |
| 521 | self.servers[server_name] = MCPServer(server_name, server_config) |
| 522 | |
| 523 | # Connect to all servers and discover capabilities |
| 524 | connected_servers = 0 |
| 525 | for server_name, server in self.servers.items(): |
| 526 | success = await server.connect_and_discover() |
| 527 | if success: |
| 528 | connected_servers += 1 |
| 529 | # Cache server capabilities |
| 530 | for tool in server.tools: |
| 531 | tool_info = { |
| 532 | "server": server_name, |
| 533 | "name": tool.name, |
| 534 | "description": tool.description, |
| 535 | "input_schema": tool.inputSchema |
| 536 | } |
| 537 | self.all_tools.append(tool_info) |
| 538 | logger.debug(f"Cached tool: {tool_info}") |
| 539 | |
| 540 | for resource in server.resources: |
| 541 | resource_info = { |
| 542 | "server": server_name, |
| 543 | "uri": resource.uri, |
| 544 | "name": resource.name, |
| 545 | "description": resource.description |
| 546 | } |
| 547 | self.all_resources.append(resource_info) |
| 548 | logger.debug(f"Cached resource: {resource_info}") |
| 549 | |
| 550 | for prompt in server.prompts: |
| 551 | prompt_info = { |
| 552 | "server": server_name, |
| 553 | "name": prompt.name, |
| 554 | "description": prompt.description, |
| 555 | "arguments": prompt.arguments |
| 556 | } |
| 557 | self.all_prompts.append(prompt_info) |
| 558 | logger.debug(f"Cached prompt: {prompt_info}") |
no outgoing calls