"""Tests for deprecated add_tool_transformation API.""" import warnings from fastmcp import FastMCP from fastmcp.client import Client from fastmcp.tools.tool_transform import ToolTransformConfig class TestAddToolTransformationDeprecated: """Test that add_tool_transformation still works but emits deprecation warning.""" async def test_add_tool_transformation_emits_warning(self): """add_tool_transformation should emit deprecation warning.""" mcp = FastMCP("test") @mcp.tool def my_tool() -> str: return "hello" with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") mcp.add_tool_transformation( "my_tool", ToolTransformConfig(name="renamed_tool") ) assert len(w) == 1 assert issubclass(w[0].category, DeprecationWarning) assert "add_tool_transformation is deprecated" in str(w[0].message) async def test_add_tool_transformation_still_works(self): """add_tool_transformation should still apply the transformation.""" mcp = FastMCP("test") @mcp.tool def verbose_tool_name() -> str: return "result" # Suppress warning for this test - we just want to verify it works with warnings.catch_warnings(): warnings.simplefilter("ignore", DeprecationWarning) mcp.add_tool_transformation( "verbose_tool_name", ToolTransformConfig(name="short") ) async with Client(mcp) as client: tools = await client.list_tools() tool_names = [t.name for t in tools] # Original name should be gone, renamed version should exist assert "verbose_tool_name" not in tool_names assert "short" in tool_names # Should be callable by new name result = await client.call_tool("short", {}) assert result.content[0].text == "result" async def test_remove_tool_transformation_emits_warning(self): """remove_tool_transformation should emit deprecation warning.""" mcp = FastMCP("test") with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") mcp.remove_tool_transformation("any_tool") assert len(w) == 1 assert issubclass(w[0].category, DeprecationWarning) assert "remove_tool_transformation is deprecated" in str(w[0].message) assert "no effect" in str(w[0].message) async def test_tool_transformations_constructor_raises_type_error(self): """tool_transformations constructor param should raise TypeError.""" import pytest with pytest.raises(TypeError, match="no longer accepts `tool_transformations`"): FastMCP( "test", tool_transformations={"my_tool": ToolTransformConfig(name="renamed")}, )