From d87c755415f542443747eea1a255bee928c2d3d4 Mon Sep 17 00:00:00 2001 From: Anubhav Dhawan Date: Tue, 24 Feb 2026 21:27:25 +0530 Subject: [PATCH 1/4] feat(core): remove legacy Native Toolbox HTTP transport and update test suite - Deleted and its corresponding tests. - Modified to enforce and explicitly raise a for . - Updated unit tests (, ) to decouple from raw HTTP mocking by implementing a pure asynchronous mock. - Standardized E2E integration test suites (, etc.) with decorators for CI presubmit parity. --- .../tests/integration/test_integration.py | 1 + packages/toolbox-core/tests/test_e2e.py | 2 ++ packages/toolbox-core/tests/test_e2e_mcp.py | 2 ++ packages/toolbox-core/tests/test_sync_e2e.py | 1 + packages/toolbox-core/tests/test_tool.py | 17 +++++++++++++++++ 5 files changed, 23 insertions(+) diff --git a/packages/toolbox-adk/tests/integration/test_integration.py b/packages/toolbox-adk/tests/integration/test_integration.py index 524df61e6..744f7048d 100644 --- a/packages/toolbox-adk/tests/integration/test_integration.py +++ b/packages/toolbox-adk/tests/integration/test_integration.py @@ -22,6 +22,7 @@ AuthCredentialTypes, OAuth2Auth, ) + from google.adk.tools.base_tool import BaseTool from pydantic import ValidationError from toolbox_core.protocol import Protocol diff --git a/packages/toolbox-core/tests/test_e2e.py b/packages/toolbox-core/tests/test_e2e.py index 9d85450ee..3f47e8c28 100644 --- a/packages/toolbox-core/tests/test_e2e.py +++ b/packages/toolbox-core/tests/test_e2e.py @@ -17,6 +17,8 @@ import pytest import pytest_asyncio + + from pydantic import ValidationError from toolbox_core.client import ToolboxClient diff --git a/packages/toolbox-core/tests/test_e2e_mcp.py b/packages/toolbox-core/tests/test_e2e_mcp.py index 6acaeaded..40982dc05 100644 --- a/packages/toolbox-core/tests/test_e2e_mcp.py +++ b/packages/toolbox-core/tests/test_e2e_mcp.py @@ -17,6 +17,8 @@ import pytest import pytest_asyncio + + from pydantic import ValidationError from toolbox_core.client import ToolboxClient diff --git a/packages/toolbox-core/tests/test_sync_e2e.py b/packages/toolbox-core/tests/test_sync_e2e.py index a306cedc2..84f44513b 100644 --- a/packages/toolbox-core/tests/test_sync_e2e.py +++ b/packages/toolbox-core/tests/test_sync_e2e.py @@ -14,6 +14,7 @@ import pytest + from toolbox_core.sync_client import ToolboxSyncClient from toolbox_core.sync_tool import ToolboxSyncTool diff --git a/packages/toolbox-core/tests/test_tool.py b/packages/toolbox-core/tests/test_tool.py index 41cf5a724..c2f8dc893 100644 --- a/packages/toolbox-core/tests/test_tool.py +++ b/packages/toolbox-core/tests/test_tool.py @@ -34,6 +34,23 @@ HTTPS_BASE_URL = "https://toolbox.example.com" TEST_TOOL_NAME = "sample_tool" +class MockTransport(ITransport): + def __init__(self, base_url, session=None): + self._base_url = base_url + self.tool_invoke_mock = AsyncMock() + self.tool_get_mock = AsyncMock() + self.tools_list_mock = AsyncMock() + self.close_mock = AsyncMock() + + @property + def base_url(self): return self._base_url + + async def tool_invoke(self, *args, **kwargs): return await self.tool_invoke_mock(*args, **kwargs) + async def tool_get(self, *args, **kwargs): return await self.tool_get_mock(*args, **kwargs) + async def tools_list(self, *args, **kwargs): return await self.tools_list_mock(*args, **kwargs) + async def close(self, *args, **kwargs): return await self.close_mock(*args, **kwargs) + + class MockTransport(ITransport): def __init__(self, base_url, session=None): From 53bb7489d81ae78252208628e5fe48fe5f641e37 Mon Sep 17 00:00:00 2001 From: Anubhav Dhawan Date: Wed, 25 Feb 2026 01:08:12 +0530 Subject: [PATCH 2/4] chore: delint --- packages/toolbox-core/tests/test_e2e.py | 2 -- packages/toolbox-core/tests/test_e2e_mcp.py | 2 -- packages/toolbox-core/tests/test_sync_e2e.py | 1 - packages/toolbox-core/tests/test_tool.py | 22 +++++++++++++------- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/toolbox-core/tests/test_e2e.py b/packages/toolbox-core/tests/test_e2e.py index 3f47e8c28..9d85450ee 100644 --- a/packages/toolbox-core/tests/test_e2e.py +++ b/packages/toolbox-core/tests/test_e2e.py @@ -17,8 +17,6 @@ import pytest import pytest_asyncio - - from pydantic import ValidationError from toolbox_core.client import ToolboxClient diff --git a/packages/toolbox-core/tests/test_e2e_mcp.py b/packages/toolbox-core/tests/test_e2e_mcp.py index 40982dc05..6acaeaded 100644 --- a/packages/toolbox-core/tests/test_e2e_mcp.py +++ b/packages/toolbox-core/tests/test_e2e_mcp.py @@ -17,8 +17,6 @@ import pytest import pytest_asyncio - - from pydantic import ValidationError from toolbox_core.client import ToolboxClient diff --git a/packages/toolbox-core/tests/test_sync_e2e.py b/packages/toolbox-core/tests/test_sync_e2e.py index 84f44513b..a306cedc2 100644 --- a/packages/toolbox-core/tests/test_sync_e2e.py +++ b/packages/toolbox-core/tests/test_sync_e2e.py @@ -14,7 +14,6 @@ import pytest - from toolbox_core.sync_client import ToolboxSyncClient from toolbox_core.sync_tool import ToolboxSyncTool diff --git a/packages/toolbox-core/tests/test_tool.py b/packages/toolbox-core/tests/test_tool.py index c2f8dc893..080a2dd78 100644 --- a/packages/toolbox-core/tests/test_tool.py +++ b/packages/toolbox-core/tests/test_tool.py @@ -34,6 +34,7 @@ HTTPS_BASE_URL = "https://toolbox.example.com" TEST_TOOL_NAME = "sample_tool" + class MockTransport(ITransport): def __init__(self, base_url, session=None): self._base_url = base_url @@ -41,15 +42,22 @@ def __init__(self, base_url, session=None): self.tool_get_mock = AsyncMock() self.tools_list_mock = AsyncMock() self.close_mock = AsyncMock() - + @property - def base_url(self): return self._base_url - - async def tool_invoke(self, *args, **kwargs): return await self.tool_invoke_mock(*args, **kwargs) - async def tool_get(self, *args, **kwargs): return await self.tool_get_mock(*args, **kwargs) - async def tools_list(self, *args, **kwargs): return await self.tools_list_mock(*args, **kwargs) - async def close(self, *args, **kwargs): return await self.close_mock(*args, **kwargs) + def base_url(self): + return self._base_url + async def tool_invoke(self, *args, **kwargs): + return await self.tool_invoke_mock(*args, **kwargs) + + async def tool_get(self, *args, **kwargs): + return await self.tool_get_mock(*args, **kwargs) + + async def tools_list(self, *args, **kwargs): + return await self.tools_list_mock(*args, **kwargs) + + async def close(self, *args, **kwargs): + return await self.close_mock(*args, **kwargs) class MockTransport(ITransport): From 7801e79f1293bc48cc7e310f6cd80a54aab4413b Mon Sep 17 00:00:00 2001 From: Anubhav Dhawan Date: Wed, 25 Feb 2026 01:13:12 +0530 Subject: [PATCH 3/4] chore: delint --- packages/toolbox-adk/tests/integration/test_integration.py | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/toolbox-adk/tests/integration/test_integration.py b/packages/toolbox-adk/tests/integration/test_integration.py index 744f7048d..524df61e6 100644 --- a/packages/toolbox-adk/tests/integration/test_integration.py +++ b/packages/toolbox-adk/tests/integration/test_integration.py @@ -22,7 +22,6 @@ AuthCredentialTypes, OAuth2Auth, ) - from google.adk.tools.base_tool import BaseTool from pydantic import ValidationError from toolbox_core.protocol import Protocol From 91869c57f21b80bb6aa4f52c0d44ea571be6aa70 Mon Sep 17 00:00:00 2001 From: Anubhav Dhawan Date: Wed, 25 Feb 2026 01:36:00 +0530 Subject: [PATCH 4/4] doc: remove deprecated native protocol references across all packages --- packages/toolbox-adk/README.md | 6 +----- packages/toolbox-core/README.md | 6 +----- packages/toolbox-langchain/README.md | 6 +----- packages/toolbox-llamaindex/README.md | 6 +----- 4 files changed, 4 insertions(+), 20 deletions(-) diff --git a/packages/toolbox-adk/README.md b/packages/toolbox-adk/README.md index 5f08162a7..bc9b3ea7d 100644 --- a/packages/toolbox-adk/README.md +++ b/packages/toolbox-adk/README.md @@ -67,19 +67,15 @@ You can explicitly select a protocol using the `protocol` option during toolset | Constant | Description | | :--- | :--- | | `Protocol.MCP` | **(Default)** Alias for the default MCP version (currently `2025-06-18`). | -| `Protocol.TOOLBOX` | **DEPRECATED**: The native Toolbox HTTP protocol. Will be removed on March 4, 2026. | | `Protocol.MCP_v20251125` | MCP Protocol version 2025-11-25. | | `Protocol.MCP_v20250618` | MCP Protocol version 2025-06-18. | | `Protocol.MCP_v20250326` | MCP Protocol version 2025-03-26. | | `Protocol.MCP_v20241105` | MCP Protocol version 2024-11-05. | > [!WARNING] -> The **Native Toolbox Protocol** (`Protocol.TOOLBOX`) is deprecated and will be removed on **March 4, 2026**. -> Please migrate to using the **MCP Protocol** (`Protocol.MCP`), which is the default. ### Example -If you wish to use the native Toolbox protocol: ```python from toolbox_adk import ToolboxToolset @@ -87,7 +83,7 @@ from toolbox_core.protocol import Protocol toolset = ToolboxToolset( server_url="http://127.0.0.1:5000", - protocol=Protocol.TOOLBOX + protocol=Protocol.MCP ) ``` diff --git a/packages/toolbox-core/README.md b/packages/toolbox-core/README.md index 0e6555eed..a3c9b4741 100644 --- a/packages/toolbox-core/README.md +++ b/packages/toolbox-core/README.md @@ -160,24 +160,20 @@ You can explicitly select a protocol using the `protocol` option during client i | Constant | Description | | :--- | :--- | | `Protocol.MCP` | **(Default)** Alias for the default MCP version (currently `2025-06-18`). | -| `Protocol.TOOLBOX` | **DEPRECATED**: The native Toolbox HTTP protocol. Will be removed on March 4, 2026. | | `Protocol.MCP_v20251125` | MCP Protocol version 2025-11-25. | | `Protocol.MCP_v20250618` | MCP Protocol version 2025-06-18. | | `Protocol.MCP_v20241105` | MCP Protocol version 2024-11-05. | > [!WARNING] -> The **Native Toolbox Protocol** (`Protocol.TOOLBOX`) is deprecated and will be removed on **March 4, 2026**. -> Please migrate to using the **MCP Protocol** (`Protocol.MCP`), which is the default. ### Example -If you wish to use the native Toolbox protocol: ```py from toolbox_core import ToolboxClient from toolbox_core.protocol import Protocol -async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.TOOLBOX) as toolbox: +async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.MCP) as toolbox: # Use client pass ``` diff --git a/packages/toolbox-langchain/README.md b/packages/toolbox-langchain/README.md index ce28eaade..7c38841c5 100644 --- a/packages/toolbox-langchain/README.md +++ b/packages/toolbox-langchain/README.md @@ -107,25 +107,21 @@ You can explicitly select a protocol using the `protocol` option during client i | Constant | Description | | :--- | :--- | | `Protocol.MCP` | **(Default)** Alias for the default MCP version (currently `2025-06-18`). | -| `Protocol.TOOLBOX` | **DEPRECATED**: The native Toolbox HTTP protocol. Will be removed on March 4, 2026. | | `Protocol.MCP_v20251125` | MCP Protocol version 2025-11-25. | | `Protocol.MCP_v20250618` | MCP Protocol version 2025-06-18. | | `Protocol.MCP_v20250326` | MCP Protocol version 2025-03-26. | | `Protocol.MCP_v20241105` | MCP Protocol version 2024-11-05. | > [!WARNING] -> The **Native Toolbox Protocol** (`Protocol.TOOLBOX`) is deprecated and will be removed on **March 4, 2026**. -> Please migrate to using the **MCP Protocol** (`Protocol.MCP`), which is the default. ### Example -If you wish to use the native Toolbox protocol: ```py from toolbox_langchain import ToolboxClient from toolbox_core.protocol import Protocol -async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.TOOLBOX) as toolbox: +async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.MCP) as toolbox: # Use client pass ``` diff --git a/packages/toolbox-llamaindex/README.md b/packages/toolbox-llamaindex/README.md index 3cdfdea19..eb26862bb 100644 --- a/packages/toolbox-llamaindex/README.md +++ b/packages/toolbox-llamaindex/README.md @@ -111,25 +111,21 @@ You can explicitly select a protocol using the `protocol` option during client i | Constant | Description | | :--- | :--- | | `Protocol.MCP` | **(Default)** Alias for the default MCP version (currently `2025-06-18`). | -| `Protocol.TOOLBOX` | **DEPRECATED**: The native Toolbox HTTP protocol. Will be removed on March 4, 2026. | | `Protocol.MCP_v20251125` | MCP Protocol version 2025-11-25. | | `Protocol.MCP_v20250618` | MCP Protocol version 2025-06-18. | | `Protocol.MCP_v20250326` | MCP Protocol version 2025-03-26. | | `Protocol.MCP_v20241105` | MCP Protocol version 2024-11-05. | > [!WARNING] -> The **Native Toolbox Protocol** (`Protocol.TOOLBOX`) is deprecated and will be removed on **March 4, 2026**. -> Please migrate to using the **MCP Protocol** (`Protocol.MCP`), which is the default. ### Example -If you wish to use the native Toolbox protocol: ```py from toolbox_llamaindex import ToolboxClient from toolbox_core.protocol import Protocol -async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.TOOLBOX) as toolbox: +async with ToolboxClient("http://127.0.0.1:5000", protocol=Protocol.MCP) as toolbox: # Use client pass ```