From dd7bc06306e10cd16b1c9d3ce748842f3b0f6dc6 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 14:12:28 +0000 Subject: [PATCH] fix(mcp): skip hanging alert tracking for tool calls --- litellm/proxy/utils.py | 3 ++- .../utils/proxy_logging/test_pre_call_hook.py | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index d7649b524aa..780fec7b35d 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -1349,7 +1349,8 @@ class ProxyLogging: """ verbose_proxy_logger.debug("Inside Proxy Logging Pre-call hook!") - self._init_response_taking_too_long_task(data=data) + if call_type != CallTypes.call_mcp_tool.value: + self._init_response_taking_too_long_task(data=data) if data is None: return None diff --git a/tests/test_litellm/proxy/utils/proxy_logging/test_pre_call_hook.py b/tests/test_litellm/proxy/utils/proxy_logging/test_pre_call_hook.py index 05005dae797..dc702db2fdb 100644 --- a/tests/test_litellm/proxy/utils/proxy_logging/test_pre_call_hook.py +++ b/tests/test_litellm/proxy/utils/proxy_logging/test_pre_call_hook.py @@ -12,6 +12,7 @@ import litellm from litellm.exceptions import RejectedRequestError from litellm.integrations.custom_logger import CustomLogger from litellm.proxy.utils import ProxyLogging +from litellm.types.utils import CallTypes @pytest.fixture(autouse=True) @@ -102,6 +103,25 @@ async def test_pre_call_hook_returns_none_for_none_data(proxy_logging, make_user assert out is None +@pytest.mark.asyncio +async def test_pre_call_hook_does_not_track_mcp_tool_as_hanging_request( + proxy_logging, make_user_api_key_auth, mock_callbacks_disabled +): + data = {"messages": [{"role": "user", "content": "Tool: search"}], "model": "mcp-tool-call"} + proxy_logging.slack_alerting_instance = MagicMock() + proxy_logging.slack_alerting_instance.alerting = ["slack"] + proxy_logging.slack_alerting_instance.response_taking_too_long = AsyncMock() + + out = await proxy_logging.pre_call_hook( + user_api_key_dict=make_user_api_key_auth(), + data=data, + call_type=CallTypes.call_mcp_tool.value, + ) + + assert out is data + proxy_logging.slack_alerting_instance.response_taking_too_long.assert_not_called() + + @pytest.mark.asyncio async def test_pre_call_hook_invokes_pre_call_override(proxy_logging, make_user_api_key_auth, monkeypatch): captured: Dict[str, Any] = {}