From f3ad04c80c8a649134f95d7fd6fd62d29c60d82a Mon Sep 17 00:00:00 2001 From: hcadioli Date: Mon, 20 Oct 2025 20:05:32 -0300 Subject: [PATCH] feat: Cache MCP tools to avoid calling multiple times when streaming --- src/google/adk/tools/mcp_tool/mcp_toolset.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index 06c57a452f..319f99e0af 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -155,6 +155,7 @@ def __init__( self._auth_scheme = auth_scheme self._auth_credential = auth_credential self._require_confirmation = require_confirmation + self._loaded_mcp_tools: List[BaseTool] | None = None @retry_on_closed_resource async def get_tools( @@ -170,6 +171,9 @@ async def get_tools( Returns: List[BaseTool]: A list of tools available under the specified context. """ + if self._loaded_mcp_tools is not None: + return self._loaded_mcp_tools + headers = ( self._header_provider(readonly_context) if self._header_provider and readonly_context @@ -195,6 +199,8 @@ async def get_tools( if self._is_tool_selected(mcp_tool, readonly_context): tools.append(mcp_tool) + + self._loaded_mcp_tools = tools return tools async def close(self) -> None: