fastmcp: allow passing Tool directly to FastMCP constructor (#699)

This commit is contained in:
Vadym Barda
2025-05-19 22:52:02 -04:00
committed by GitHub
parent e33cd41c7a
commit 5a9340af71
3 changed files with 47 additions and 4 deletions

View File

@@ -37,7 +37,7 @@ from mcp.server.auth.settings import (
from mcp.server.fastmcp.exceptions import ResourceError
from mcp.server.fastmcp.prompts import Prompt, PromptManager
from mcp.server.fastmcp.resources import FunctionResource, Resource, ResourceManager
from mcp.server.fastmcp.tools import ToolManager
from mcp.server.fastmcp.tools import Tool, ToolManager
from mcp.server.fastmcp.utilities.logging import configure_logging, get_logger
from mcp.server.fastmcp.utilities.types import Image
from mcp.server.lowlevel.helper_types import ReadResourceContents
@@ -141,6 +141,8 @@ class FastMCP:
auth_server_provider: OAuthAuthorizationServerProvider[Any, Any, Any]
| None = None,
event_store: EventStore | None = None,
*,
tools: list[Tool] | None = None,
**settings: Any,
):
self.settings = Settings(**settings)
@@ -155,7 +157,7 @@ class FastMCP:
),
)
self._tool_manager = ToolManager(
warn_on_duplicate_tools=self.settings.warn_on_duplicate_tools
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

View File

@@ -19,8 +19,19 @@ logger = get_logger(__name__)
class ToolManager:
"""Manages FastMCP tools."""
def __init__(self, warn_on_duplicate_tools: bool = True):
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
self.warn_on_duplicate_tools = warn_on_duplicate_tools
def get_tool(self, name: str) -> Tool | None: