Source code for axio_tools_mcp.loader

"""Load MCP tools from server configurations."""

from __future__ import annotations

import logging
from typing import Any

from axio.tool import Tool

from .config import MCPServerConfig
from .handler import build_tools
from .session import MCPSession

logger = logging.getLogger(__name__)


[docs] async def load_mcp_tools( servers: list[MCPServerConfig], ) -> tuple[list[Tool[Any]], list[MCPSession]]: """Connect to MCP servers and discover their tools. Returns ``(tools, sessions)``. The caller is responsible for closing sessions. Failed servers are logged and skipped. """ all_tools: list[Tool[Any]] = [] sessions: list[MCPSession] = [] for config in servers: session = MCPSession(config) try: await session.connect() mcp_tools = await session.list_tools() except Exception: logger.error("Failed to connect to MCP server %r", config.name, exc_info=True) try: await session.close() except Exception: pass continue sessions.append(session) for tool in build_tools(session, mcp_tools): all_tools.append(tool) logger.info("Loaded MCP tool %r from server %r", tool.name, config.name) return all_tools, sessions