Add tool_names parameter to mount() for name overrides (#2619)

* Add tool_names parameter to mount() for name overrides

* Fix Docket registration to use tool_names overrides
This commit is contained in:
Jeremiah Lowin 2025-12-14 20:56:42 -05:00 committed by GitHub
commit b8ae95a4bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 118 additions and 10 deletions

View file

@ -1361,3 +1361,66 @@ class TestDeeplyNestedMount:
# Tool at level 4 should work
result = await client.call_tool("l1_l2_l3_deep_tool", {})
assert result.data == "very deep"
class TestToolNameOverrides:
"""Test tool and prompt name overrides in mount() (issue #2596)."""
async def test_tool_names_override_applied_in_get_tools(self):
"""Test that tool_names override is reflected in get_tools()."""
sub = FastMCP("Sub")
@sub.tool
def original_tool() -> str:
return "test"
main = FastMCP("Main")
main.mount(
sub,
prefix="prefix",
tool_names={"original_tool": "custom_name"},
)
tools = await main.get_tools()
assert "custom_name" in tools
assert "prefix_original_tool" not in tools
async def test_tool_names_override_applied_in_list_tools(self):
"""Test that tool_names override is reflected in list_tools()."""
sub = FastMCP("Sub")
@sub.tool
def original_tool() -> str:
return "test"
main = FastMCP("Main")
main.mount(
sub,
prefix="prefix",
tool_names={"original_tool": "custom_name"},
)
async with Client(main) as client:
tools = await client.list_tools()
tool_names = [t.name for t in tools]
assert "custom_name" in tool_names
assert "prefix_original_tool" not in tool_names
async def test_tool_call_with_overridden_name(self):
"""Test that overridden tool can be called by its new name."""
sub = FastMCP("Sub")
@sub.tool
def original_tool() -> str:
return "success"
main = FastMCP("Main")
main.mount(
sub,
prefix="prefix",
tool_names={"original_tool": "renamed"},
)
async with Client(main) as client:
result = await client.call_tool("renamed", {})
assert result.data == "success"