File size: 1,257 Bytes
b380004
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from json import loads

from agno.tools.mcp import MultiMCPTools
from agno.utils.log import log_info, log_warning

from chattr.app.settings import MCPSettings


async def setup_mcp_tools(mcp: MCPSettings) -> MultiMCPTools | None:
    """Return and setup MCP tools connection."""
    if not mcp.path.exists():
        log_warning("MCP config file not found.")
        return None
    mcp_servers: list[dict] = loads(mcp.path.read_text()).get("mcp_servers", [])
    url_servers: list[dict] = [m for m in mcp_servers if m.get("type") == "url"]
    if not url_servers:
        log_info("No Remote MCP servers found.")
        return None
    mcp_tools = MultiMCPTools(
        urls=[m["url"] for m in url_servers],
        urls_transports=[m["transport"] for m in url_servers],
        allow_partial_failure=True,
    )
    log_info(f"MCP servers: {len(mcp_tools.tools)}")
    if not mcp_tools.tools or len(mcp_tools.tools) == 0:
        log_info("No MCP servers available.")
        return None
    await mcp_tools.connect()
    return mcp_tools


async def close_mcp_tools(mcp_tools: MultiMCPTools | None) -> None:
    """Close the MCP tools connection."""
    log_info("Closing MCP tools...")
    if not mcp_tools:
        return
    await mcp_tools.close()