Module agents.mcp.mcp_manager
Classes
class MCPToolManager-
Expand source code
class MCPToolManager: """ Manages MCP service providers and their tools for agents. """ def __init__(self) -> None: """ Initialize the MCPToolManager. """ self._active_providers: List[MCPServiceProvider] = [] self._registered_tools: List[FunctionTool] = [] @property def providers(self) -> List[MCPServiceProvider]: """ Get all active MCP service providers. Returns: List[MCPServiceProvider]: A copy of the list of active providers. """ return self._active_providers.copy() @property def tools(self) -> List[FunctionTool]: """ Get all registered tools from all providers. Returns: List[FunctionTool]: A copy of the list of all available tools. """ return self._registered_tools.copy() async def add_mcp_server(self, provider: MCPServiceProvider) -> None: """ Add a new MCP service provider and initialize it. Args: provider (MCPServiceProvider): The MCP service provider to add. Raises: Exception: If provider initialization fails (connection, tool discovery, etc.). """ if not provider.is_ready: try: await provider.connect() tools = await provider.get_available_tools() self._registered_tools.extend(tools) if provider not in self._active_providers: self._active_providers.append(provider) except Exception as e: await provider.disconnect() raise async def remove_provider(self, provider: MCPServiceProvider) -> None: """ Remove a service provider and its tools. Args: provider (MCPServiceProvider): The MCP service provider to remove. """ if provider in self._active_providers: await provider.disconnect() self._active_providers.remove(provider) self._registered_tools.clear() for active_provider in self._active_providers: if active_provider.is_ready: tools = await active_provider.get_available_tools() self._registered_tools.extend(tools) async def refresh_tools(self) -> None: """ Refresh tools from all active providers. """ self._registered_tools.clear() for provider in self._active_providers: if provider.is_ready: provider.invalidate_tool_cache() tools = await provider.get_available_tools() self._registered_tools.extend(tools) async def cleanup(self) -> None: """ Close all MCP service providers and clear the tools list. """ for provider in self._active_providers: await provider.disconnect() self._active_providers.clear() self._registered_tools.clear() def get_tool_by_name(self, tool_name: str) -> Optional[FunctionTool]: """ Get a specific tool by name from the registry. Args: tool_name (str): The name of the tool to find. Returns: Optional[FunctionTool]: The found tool or None if not found. """ for tool in self._registered_tools: tool_info = getattr(tool, "_tool_info", None) if tool_info and hasattr(tool_info, 'name') and tool_info.name == tool_name: return tool elif hasattr(tool, 'name') and tool.name == tool_name: return tool return None def get_tools_by_provider(self, provider: MCPServiceProvider) -> List[FunctionTool]: """ Get all tools from a specific provider. Args: provider (MCPServiceProvider): The provider whose tools to retrieve. Returns: List[FunctionTool]: List of tools from the specified provider, or empty list if provider not found. """ if provider not in self._active_providers: return [] return [tool for tool in self._registered_tools if hasattr(tool, "_tool_info")] async def add_mcp_server_http( self, url: str, headers: Optional[Dict[str, Any]] = None, connection_timeout: float = 10.0, stream_read_timeout: float = 300.0, session_timeout: float = 5.0 ) -> MCPServerHTTP: """ Convenience method to create and add an HTTP MCP server. Args: url (str): The endpoint URL for the MCP server. headers (Optional[Dict[str, Any]], optional): Optional request headers for authentication or configuration. connection_timeout (float, optional): Connection timeout in seconds. Defaults to 10.0. stream_read_timeout (float, optional): Stream read timeout in seconds. Defaults to 300.0. session_timeout (float, optional): Session timeout in seconds. Defaults to 5.0. Returns: MCPServerHTTP: The created and configured MCPServerHTTP instance. """ provider = MCPServerHTTP( endpoint_url=url, request_headers=headers, connection_timeout=connection_timeout, stream_read_timeout=stream_read_timeout, session_timeout=session_timeout ) await self.add_mcp_server(provider) return provider async def add_mcp_server_stdio( self, executable_path: str, process_arguments: List[str], environment_vars: Optional[Dict[str, str]] = None, working_directory: Optional[str | Path] = None, session_timeout: float = 5.0 ) -> MCPServerStdio: """ Convenience method to create and add a stdio MCP server. Args: executable_path (str): Path to the executable MCP server. process_arguments (List[str]): Command line arguments to pass to the executable. environment_vars (Optional[Dict[str, str]], optional): Optional environment variables for the process. working_directory (Optional[str | Path], optional): Working directory for the process. Can be string or Path. session_timeout (float, optional): Session timeout in seconds. Defaults to 5.0. Returns: MCPServerStdio: The created and configured MCPServerStdio instance. """ provider = MCPServerStdio( executable_path=executable_path, process_arguments=process_arguments, environment_vars=environment_vars, working_directory=working_directory, session_timeout=session_timeout ) await self.add_mcp_server(provider) return provider async def __aenter__(self): """ Async context manager entry point. """ return self async def __aexit__(self, exc_type, exc_val, exc_tb): """ Async context manager exit point. """ await self.cleanup()Manages MCP service providers and their tools for agents.
Initialize the MCPToolManager.
Instance variables
prop providers : List[videosdk.agents.mcp.mcp_server.MCPServiceProvider]-
Expand source code
@property def providers(self) -> List[MCPServiceProvider]: """ Get all active MCP service providers. Returns: List[MCPServiceProvider]: A copy of the list of active providers. """ return self._active_providers.copy()Get all active MCP service providers.
Returns
List[MCPServiceProvider]- A copy of the list of active providers.
prop tools : List[videosdk.agents.utils.FunctionTool]-
Expand source code
@property def tools(self) -> List[FunctionTool]: """ Get all registered tools from all providers. Returns: List[FunctionTool]: A copy of the list of all available tools. """ return self._registered_tools.copy()Get all registered tools from all providers.
Returns
List[FunctionTool]- A copy of the list of all available tools.
Methods
async def add_mcp_server(self, provider: videosdk.agents.mcp.mcp_server.MCPServiceProvider) ‑> None-
Expand source code
async def add_mcp_server(self, provider: MCPServiceProvider) -> None: """ Add a new MCP service provider and initialize it. Args: provider (MCPServiceProvider): The MCP service provider to add. Raises: Exception: If provider initialization fails (connection, tool discovery, etc.). """ if not provider.is_ready: try: await provider.connect() tools = await provider.get_available_tools() self._registered_tools.extend(tools) if provider not in self._active_providers: self._active_providers.append(provider) except Exception as e: await provider.disconnect() raiseAdd a new MCP service provider and initialize it.
Args
provider:MCPServiceProvider- The MCP service provider to add.
Raises
Exception- If provider initialization fails (connection, tool discovery, etc.).
async def add_mcp_server_http(self,
url: str,
headers: Dict[str, Any] | None = None,
connection_timeout: float = 10.0,
stream_read_timeout: float = 300.0,
session_timeout: float = 5.0) ‑> videosdk.agents.mcp.mcp_server.MCPServerHTTP-
Expand source code
async def add_mcp_server_http( self, url: str, headers: Optional[Dict[str, Any]] = None, connection_timeout: float = 10.0, stream_read_timeout: float = 300.0, session_timeout: float = 5.0 ) -> MCPServerHTTP: """ Convenience method to create and add an HTTP MCP server. Args: url (str): The endpoint URL for the MCP server. headers (Optional[Dict[str, Any]], optional): Optional request headers for authentication or configuration. connection_timeout (float, optional): Connection timeout in seconds. Defaults to 10.0. stream_read_timeout (float, optional): Stream read timeout in seconds. Defaults to 300.0. session_timeout (float, optional): Session timeout in seconds. Defaults to 5.0. Returns: MCPServerHTTP: The created and configured MCPServerHTTP instance. """ provider = MCPServerHTTP( endpoint_url=url, request_headers=headers, connection_timeout=connection_timeout, stream_read_timeout=stream_read_timeout, session_timeout=session_timeout ) await self.add_mcp_server(provider) return providerConvenience method to create and add an HTTP MCP server.
Args
url:str- The endpoint URL for the MCP server.
headers:Optional[Dict[str, Any]], optional- Optional request headers for authentication or configuration.
connection_timeout:float, optional- Connection timeout in seconds. Defaults to 10.0.
stream_read_timeout:float, optional- Stream read timeout in seconds. Defaults to 300.0.
session_timeout:float, optional- Session timeout in seconds. Defaults to 5.0.
Returns
MCPServerHTTP- The created and configured MCPServerHTTP instance.
async def add_mcp_server_stdio(self,
executable_path: str,
process_arguments: List[str],
environment_vars: Dict[str, str] | None = None,
working_directory: str | pathlib.Path | None = None,
session_timeout: float = 5.0) ‑> videosdk.agents.mcp.mcp_server.MCPServerStdio-
Expand source code
async def add_mcp_server_stdio( self, executable_path: str, process_arguments: List[str], environment_vars: Optional[Dict[str, str]] = None, working_directory: Optional[str | Path] = None, session_timeout: float = 5.0 ) -> MCPServerStdio: """ Convenience method to create and add a stdio MCP server. Args: executable_path (str): Path to the executable MCP server. process_arguments (List[str]): Command line arguments to pass to the executable. environment_vars (Optional[Dict[str, str]], optional): Optional environment variables for the process. working_directory (Optional[str | Path], optional): Working directory for the process. Can be string or Path. session_timeout (float, optional): Session timeout in seconds. Defaults to 5.0. Returns: MCPServerStdio: The created and configured MCPServerStdio instance. """ provider = MCPServerStdio( executable_path=executable_path, process_arguments=process_arguments, environment_vars=environment_vars, working_directory=working_directory, session_timeout=session_timeout ) await self.add_mcp_server(provider) return providerConvenience method to create and add a stdio MCP server.
Args
executable_path:str- Path to the executable MCP server.
process_arguments:List[str]- Command line arguments to pass to the executable.
environment_vars:Optional[Dict[str, str]], optional- Optional environment variables for the process.
working_directory:Optional[str | Path], optional- Working directory for the process. Can be string or Path.
session_timeout:float, optional- Session timeout in seconds. Defaults to 5.0.
Returns
MCPServerStdio- The created and configured MCPServerStdio instance.
async def cleanup(self) ‑> None-
Expand source code
async def cleanup(self) -> None: """ Close all MCP service providers and clear the tools list. """ for provider in self._active_providers: await provider.disconnect() self._active_providers.clear() self._registered_tools.clear()Close all MCP service providers and clear the tools list.
def get_tool_by_name(self, tool_name: str) ‑> videosdk.agents.utils.FunctionTool | None-
Expand source code
def get_tool_by_name(self, tool_name: str) -> Optional[FunctionTool]: """ Get a specific tool by name from the registry. Args: tool_name (str): The name of the tool to find. Returns: Optional[FunctionTool]: The found tool or None if not found. """ for tool in self._registered_tools: tool_info = getattr(tool, "_tool_info", None) if tool_info and hasattr(tool_info, 'name') and tool_info.name == tool_name: return tool elif hasattr(tool, 'name') and tool.name == tool_name: return tool return NoneGet a specific tool by name from the registry.
Args
tool_name:str- The name of the tool to find.
Returns
Optional[FunctionTool]- The found tool or None if not found.
def get_tools_by_provider(self, provider: videosdk.agents.mcp.mcp_server.MCPServiceProvider) ‑> List[videosdk.agents.utils.FunctionTool]-
Expand source code
def get_tools_by_provider(self, provider: MCPServiceProvider) -> List[FunctionTool]: """ Get all tools from a specific provider. Args: provider (MCPServiceProvider): The provider whose tools to retrieve. Returns: List[FunctionTool]: List of tools from the specified provider, or empty list if provider not found. """ if provider not in self._active_providers: return [] return [tool for tool in self._registered_tools if hasattr(tool, "_tool_info")]Get all tools from a specific provider.
Args
provider:MCPServiceProvider- The provider whose tools to retrieve.
Returns
List[FunctionTool]- List of tools from the specified provider, or empty list if provider not found.
async def refresh_tools(self) ‑> None-
Expand source code
async def refresh_tools(self) -> None: """ Refresh tools from all active providers. """ self._registered_tools.clear() for provider in self._active_providers: if provider.is_ready: provider.invalidate_tool_cache() tools = await provider.get_available_tools() self._registered_tools.extend(tools)Refresh tools from all active providers.
async def remove_provider(self, provider: videosdk.agents.mcp.mcp_server.MCPServiceProvider) ‑> None-
Expand source code
async def remove_provider(self, provider: MCPServiceProvider) -> None: """ Remove a service provider and its tools. Args: provider (MCPServiceProvider): The MCP service provider to remove. """ if provider in self._active_providers: await provider.disconnect() self._active_providers.remove(provider) self._registered_tools.clear() for active_provider in self._active_providers: if active_provider.is_ready: tools = await active_provider.get_available_tools() self._registered_tools.extend(tools)Remove a service provider and its tools.
Args
provider:MCPServiceProvider- The MCP service provider to remove.