Add resources parameter to MCPServer (#2414)
Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
This commit is contained in:
parent
f27d2aac05
commit
c5f12ec1e9
3 changed files with 170 additions and 185 deletions
|
|
@ -22,28 +22,26 @@ logger = get_logger(__name__)
|
|||
class ResourceManager:
|
||||
"""Manages MCPServer resources."""
|
||||
|
||||
def __init__(self, warn_on_duplicate_resources: bool = True):
|
||||
def __init__(self, warn_on_duplicate_resources: bool = True, *, resources: list[Resource] | None = None):
|
||||
self._resources: dict[str, Resource] = {}
|
||||
self._templates: dict[str, ResourceTemplate] = {}
|
||||
self.warn_on_duplicate_resources = warn_on_duplicate_resources
|
||||
|
||||
for resource in resources or ():
|
||||
self.add_resource(resource)
|
||||
|
||||
def add_resource(self, resource: Resource) -> Resource:
|
||||
"""Add a resource to the manager.
|
||||
|
||||
Args:
|
||||
resource: A Resource instance to add
|
||||
resource: A Resource instance to add.
|
||||
|
||||
Returns:
|
||||
The added resource. If a resource with the same URI already exists,
|
||||
returns the existing resource.
|
||||
The added resource. If a resource with the same URI already exists, returns the existing resource.
|
||||
"""
|
||||
logger.debug(
|
||||
"Adding resource",
|
||||
extra={
|
||||
"uri": resource.uri,
|
||||
"type": type(resource).__name__,
|
||||
"resource_name": resource.name,
|
||||
},
|
||||
extra={"uri": resource.uri, "type": type(resource).__name__, "resource_name": resource.name},
|
||||
)
|
||||
existing = self._resources.get(str(resource.uri))
|
||||
if existing:
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ class MCPServer(Generic[LifespanResultT]):
|
|||
token_verifier: TokenVerifier | None = None,
|
||||
*,
|
||||
tools: list[Tool] | None = None,
|
||||
resources: list[Resource] | None = None,
|
||||
debug: bool = False,
|
||||
log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "INFO",
|
||||
warn_on_duplicate_resources: bool = True,
|
||||
|
|
@ -162,7 +163,9 @@ class MCPServer(Generic[LifespanResultT]):
|
|||
self.dependencies = self.settings.dependencies
|
||||
|
||||
self._tool_manager = ToolManager(tools=tools, warn_on_duplicate_tools=self.settings.warn_on_duplicate_tools)
|
||||
self._resource_manager = ResourceManager(warn_on_duplicate_resources=self.settings.warn_on_duplicate_resources)
|
||||
self._resource_manager = ResourceManager(
|
||||
resources=resources, warn_on_duplicate_resources=self.settings.warn_on_duplicate_resources
|
||||
)
|
||||
self._prompt_manager = PromptManager(warn_on_duplicate_prompts=self.settings.warn_on_duplicate_prompts)
|
||||
self._lowlevel_server = Server(
|
||||
name=name or "mcp-server",
|
||||
|
|
|
|||
|
|
@ -18,18 +18,12 @@ logger = get_logger(__name__)
|
|||
class ToolManager:
|
||||
"""Manages MCPServer tools."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
warn_on_duplicate_tools: bool = True,
|
||||
*,
|
||||
tools: list[Tool] | None = None,
|
||||
):
|
||||
def __init__(self, warn_on_duplicate_tools: bool = True, *, tools: list[Tool] | None = None):
|
||||
self._tools: dict[str, Tool] = {}
|
||||
if tools is not None:
|
||||
for tool in tools:
|
||||
if warn_on_duplicate_tools and tool.name in self._tools:
|
||||
logger.warning(f"Tool already exists: {tool.name}")
|
||||
self._tools[tool.name] = tool
|
||||
for tool in tools or ():
|
||||
if warn_on_duplicate_tools and tool.name in self._tools:
|
||||
logger.warning(f"Tool already exists: {tool.name}")
|
||||
self._tools[tool.name] = tool
|
||||
|
||||
self.warn_on_duplicate_tools = warn_on_duplicate_tools
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue