Source code for autogen_ext.tools.mcp._host._roots
from abc import ABC, abstractmethod
from typing import List, Sequence
from autogen_core import Component, ComponentBase
from pydantic import BaseModel
from mcp import types as mcp_types
[docs]
class RootsProvider(ABC, ComponentBase[BaseModel]):
"""A serializable base class for handling callable roots listing."""
component_type = "mcp_roots_provider"
[docs]
@abstractmethod
async def list_roots(self) -> mcp_types.ListRootsResult | mcp_types.ErrorData:
"""List the available roots."""
...
[docs]
class StaticRootsProviderConfig(BaseModel):
roots: List[mcp_types.Root]
[docs]
class StaticRootsProvider(RootsProvider, Component[StaticRootsProviderConfig]):
component_config_schema = StaticRootsProviderConfig
component_provider_override = "autogen_ext.tools.mcp.StaticRootsProvider"
def __init__(self, roots: Sequence[mcp_types.Root]):
self._roots = list(roots)
[docs]
async def list_roots(self) -> mcp_types.ListRootsResult:
# Return a copy so callers can't mutate our internal list.
return mcp_types.ListRootsResult(roots=list(self._roots))
[docs]
def _to_config(self) -> BaseModel:
return StaticRootsProviderConfig(roots=self._roots)
[docs]
@classmethod
def _from_config(cls, config: StaticRootsProviderConfig) -> "StaticRootsProvider":
return StaticRootsProvider(roots=config.roots)