feat: 集成MCP统一外部接口管理系统
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m38s
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m38s
- 添加MCP Manager统一入口管理 - 实现Contact/Dictionary/News三个适配器 - 三层降级策略:MCP -> Database -> Mock - 保持原有api_client向后兼容 - 添加完整文档和测试
This commit is contained in:
114
backend/app/mcp/mcp_manager.py
Normal file
114
backend/app/mcp/mcp_manager.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user