""" MCP 客户端管理模块 管理 Model Context Protocol 客户端的初始化和获取。 支持在 .env 中配置多个 MCP 服务地址(见 core.mcp_config)。 """ from typing import Optional from langchain_mcp_adapters.client import MultiServerMCPClient from core.config import settings from core.mcp_config import build_mcp_connections, parse_mcp_server_entries from logger.logging import get_logger logger = get_logger(__name__) # 全局 MCP 客户端 _mcp_client: Optional[MultiServerMCPClient] = None def is_mcp_enabled() -> bool: """是否配置了至少一个 MCP 服务地址。""" from core.mcp_config import has_mcp_servers return has_mcp_servers(settings) async def get_mcp_client() -> MultiServerMCPClient: """ 获取或创建全局 MCP 客户端 Returns: MultiServerMCPClient: MCP 客户端实例 """ global _mcp_client if _mcp_client is None: logger.info("初始化 MCP 客户端...") mcp_servers = build_mcp_connections(settings) entries = parse_mcp_server_entries(settings) if not mcp_servers: logger.warning( "未配置 MCP 服务(MCP_URL / MCP_URLS / MCP_SERVERS),Agent 不会加载 MCP 工具" ) # 多服务器时为工具名加前缀,避免 excel_get_schema 等重名冲突 _mcp_client = MultiServerMCPClient( mcp_servers, tool_name_prefix=len(entries) > 1, ) logger.info( "MCP 客户端初始化完成,共 {} 个服务器", len(mcp_servers), ) return _mcp_client async def close_mcp_client(): """关闭 MCP 客户端""" global _mcp_client if _mcp_client is not None: logger.info("关闭 MCP 客户端...") _mcp_client = None logger.info("MCP 客户端已关闭")