From 12507dc6cc39245be568e6931749b7baae057f30 Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Fri, 16 May 2025 08:52:44 -0700 Subject: [PATCH] fix: fix tool filtering in mcp toolset PiperOrigin-RevId: 759632573 --- src/google/adk/tools/mcp_tool/mcp_toolset.py | 23 +++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index c0ebcd1..e4793cc 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -21,6 +21,7 @@ from typing import TextIO from typing_extensions import override from ...agents.readonly_context import ReadonlyContext +from ..base_tool import BaseTool from ..base_toolset import BaseToolset from ..base_toolset import ToolPredicate from .mcp_session_manager import MCPSessionManager @@ -100,7 +101,7 @@ class MCPToolset(BaseToolset): return self._session def _is_selected( - self, tool: ..., readonly_context: Optional[ReadonlyContext] + self, tool: BaseTool, readonly_context: Optional[ReadonlyContext] ) -> bool: """Checks if a tool should be selected based on the tool filter.""" if self.tool_filter is None: @@ -130,12 +131,14 @@ class MCPToolset(BaseToolset): if not self._session: await self._initialize() tools_response: ListToolsResult = await self._session.list_tools() - return [ - MCPTool( - mcp_tool=tool, - mcp_session=self._session, - mcp_session_manager=self._session_manager, - ) - for tool in tools_response.tools - if self._is_selected(tool, readonly_context) - ] + tools = [] + for tool in tools_response.tools: + mcp_tool = MCPTool( + mcp_tool=tool, + mcp_session=self._session, + mcp_session_manager=self._session_manager, + ) + + if self._is_selected(mcp_tool, readonly_context): + tools.append(mcp_tool) + return tools