""" MCP管理器 统一管理所有MCP适配器和外部接口 """ from typing import Dict, Any, Optional, List, Type from .mcp_client import MCPClient, MCPServerConfig from .adapters.base_adapter import BaseAdapter, AdapterResult class MCPManager: """ MCP管理器 职责: 1. 管理MCP客户端 2. 注册和管理适配器 3. 提供统一的调用接口 """ def __init__(self): self._mcp_client = MCPClient() self._adapters: Dict[str, BaseAdapter] = {} self._initialized = False def configure_servers(self, servers_config: Dict[str, Dict[str, Any]]): """ 配置MCP服务器 Args: servers_config: 服务器配置字典 { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"] }, "news": {...} } """ for name, config in servers_config.items(): server_config = MCPServerConfig( name=name, server_type=config.get("type", "stdio"), command=config.get("command"), args=config.get("args", []), url=config.get("url"), headers=config.get("headers", {}), env=config.get("env", {}), enabled=config.get("enabled", True) ) self._mcp_client.register_server(server_config) def register_adapter(self, adapter: BaseAdapter): """注册适配器""" adapter.mcp_client = self._mcp_client self._adapters[adapter.name] = adapter def get_adapter(self, name: str) -> Optional[BaseAdapter]: """获取适配器""" return self._adapters.get(name) async def initialize(self): """初始化MCP系统""" if self._initialized: return await self._mcp_client.initialize() # 初始化所有适配器 for name, adapter in self._adapters.items(): print(f"[MCP] 初始化适配器: {name}") self._initialized = True print(f"[MCP] 管理器初始化完成,适配器: {list(self._adapters.keys())}") async def execute( self, adapter_name: str, action: str, **kwargs ) -> AdapterResult: """ 统一执行接口 Args: adapter_name: 适配器名称 action: 操作类型 **kwargs: 操作参数 Returns: AdapterResult: 执行结果 """ if not self._initialized: await self.initialize() adapter = self._adapters.get(adapter_name) if not adapter: return AdapterResult( success=False, error=f"适配器 {adapter_name} 不存在" ) return await adapter.execute(action, **kwargs) def get_available_adapters(self) -> List[str]: """获取所有可用适配器""" return list(self._adapters.keys()) def get_available_tools(self) -> List[str]: """获取所有可用MCP工具""" return self._mcp_client.get_available_tools() # 全局单例 mcp_manager = MCPManager()