From 7427216e356594b1e1113532cab12ffa9b41c26d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 02:10:30 +0000 Subject: [PATCH] fix(mcp): apply tool_name_to_display_name/description for config.yaml MCP servers --- .../mcp_server/mcp_server_manager.py | 2 + .../mcp_server/test_mcp_server_manager.py | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index 3e0775ac09e..2cc1284eb33 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -1609,6 +1609,8 @@ class MCPServerManager: extra_headers=server_config.get("extra_headers", None), allowed_tools=server_config.get("allowed_tools", None), disallowed_tools=server_config.get("disallowed_tools", None), + tool_name_to_display_name=server_config.get("tool_name_to_display_name", None), + tool_name_to_description=server_config.get("tool_name_to_description", None), allowed_params=server_config.get("allowed_params", None), access_groups=server_config.get("access_groups", None), static_headers=server_config.get("static_headers", None), diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py index 8a8dea0ba28..113fef9b114 100644 --- a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py @@ -412,6 +412,44 @@ class TestMCPServerManager: assert server.alias == "friendly_alias" assert server.server_name == "validserver" + @pytest.mark.asyncio + async def test_load_servers_from_config_preserves_tool_name_overrides(self): + """Display-name/description overrides declared in config.yaml must survive the yaml load + path, replace the prefixed name in tools/list, and reverse-map for tools/call routing.""" + from litellm.proxy._experimental.mcp_server.server import ( + _resolve_display_name_to_original, + apply_tool_overrides, + ) + from litellm.proxy._experimental.mcp_server.utils import ( + add_server_prefix_to_name, + get_server_prefix, + ) + + manager = MCPServerManager() + await manager.load_servers_from_config( + { + "example_server": { + "url": "https://example.com/mcp", + "transport": MCPTransport.http, + "tool_name_to_display_name": {"example_tool": "renamed_tool"}, + "tool_name_to_description": {"example_tool": "overridden description"}, + } + } + ) + + server = next(iter(manager.config_mcp_servers.values())) + assert server.tool_name_to_display_name == {"example_tool": "renamed_tool"} + assert server.tool_name_to_description == {"example_tool": "overridden description"} + + prefixed_name = add_server_prefix_to_name("example_tool", get_server_prefix(server)) + (overridden,) = apply_tool_overrides( + [MCPTool(name=prefixed_name, description="upstream description", inputSchema={})], + server, + ) + assert overridden.name == "renamed_tool" + assert overridden.description == "overridden description" + assert _resolve_display_name_to_original("renamed_tool", [server]) == prefixed_name + def _oauth2_config(self, **overrides): base = { "url": "https://example.com/mcp",