diff --git a/src/google/adk/tools/mcp_tool/mcp_tool.py b/src/google/adk/tools/mcp_tool/mcp_tool.py index 773637d1d6..f6034fd90b 100644 --- a/src/google/adk/tools/mcp_tool/mcp_tool.py +++ b/src/google/adk/tools/mcp_tool/mcp_tool.py @@ -58,6 +58,7 @@ # part of the ADK public API; consumers flip the env var, not the symbol. from .._gemini_schema_util import _to_gemini_schema from ..base_authenticated_tool import BaseAuthenticatedTool +from ..set_model_response_tool import SET_MODEL_RESPONSE_FUNCTION_NAME from ..tool_context import ToolContext from ..transfer_to_agent_tool import transfer_to_agent from .mcp_session_manager import _http_debug_var @@ -78,6 +79,7 @@ REQUEST_EUC_FUNCTION_CALL_NAME, REQUEST_CONFIRMATION_FUNCTION_CALL_NAME, REQUEST_INPUT_FUNCTION_CALL_NAME, + SET_MODEL_RESPONSE_FUNCTION_NAME, transfer_to_agent.__name__, }) diff --git a/src/google/adk/tools/set_model_response_tool.py b/src/google/adk/tools/set_model_response_tool.py index c03392935c..6bdefebd65 100644 --- a/src/google/adk/tools/set_model_response_tool.py +++ b/src/google/adk/tools/set_model_response_tool.py @@ -39,6 +39,10 @@ from .base_tool import BaseTool from .tool_context import ToolContext +# Name of the function call the framework injects when `output_schema` is set +# alongside other tools. Shared with the MCP reserved-name guard. +SET_MODEL_RESPONSE_FUNCTION_NAME = 'set_model_response' + def _merge_json_schema_descriptions( target: dict[str, Any], source: dict[str, Any] @@ -215,7 +219,7 @@ def set_model_response() -> str: self.func = set_model_response super().__init__( - name=self.func.__name__, + name=SET_MODEL_RESPONSE_FUNCTION_NAME, description=self.func.__doc__.strip() if self.func.__doc__ else '', ) diff --git a/tests/unittests/tools/mcp_tool/test_mcp_tool.py b/tests/unittests/tools/mcp_tool/test_mcp_tool.py index e67e371d2f..885e805f49 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_tool.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_tool.py @@ -729,6 +729,7 @@ def test_init_with_empty_description(self): "adk_request_credential", "adk_request_confirmation", "adk_request_input", + "set_model_response", "transfer_to_agent", ], ) diff --git a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py index 4dbfdf6c68..2149ef36ae 100644 --- a/tests/unittests/tools/mcp_tool/test_mcp_toolset.py +++ b/tests/unittests/tools/mcp_tool/test_mcp_toolset.py @@ -409,6 +409,7 @@ async def test_get_tools_skips_reserved_names(self): MockMCPTool("adk_request_credential"), MockMCPTool("adk_request_confirmation"), MockMCPTool("adk_request_input"), + MockMCPTool("set_model_response"), ] self.mock_session.list_tools = AsyncMock( return_value=MockListToolsResult(mock_tools)