All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m38s
- 添加MCP Manager统一入口管理 - 实现Contact/Dictionary/News三个适配器 - 三层降级策略:MCP -> Database -> Mock - 保持原有api_client向后兼容 - 添加完整文档和测试
115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
"""
|
|
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()
|