From 490995d5b5accac47e67e5e8802b5505b020bc19 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Fri, 6 Feb 2026 16:48:55 -0800 Subject: [PATCH] get_public_mcp_servers --- .../mcp_server/mcp_server_manager.py | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index f343115f934..1d404a37a55 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -2290,7 +2290,10 @@ class MCPServerManager: """ Get the MCP Server from the server name. - Matches against alias (highest priority), server_name, or name fields. + Uses priority-based matching to avoid collisions: + 1. First pass: exact alias match (highest priority) + 2. Second pass: exact server_name match + 3. Third pass: exact name match (lowest priority) Args: server_name: The server name to look up. @@ -2298,16 +2301,28 @@ class MCPServerManager: non-public servers are hidden from external IPs. """ registry = self.get_registry() + + # Pass 1: Match by alias (highest priority) for server in registry.values(): - # Match against alias, server_name, or name - if ( - server.alias == server_name - or server.server_name == server_name - or server.name == server_name - ): + if server.alias == server_name: if not self._is_server_accessible_from_ip(server, client_ip): return None return server + + # Pass 2: Match by server_name + for server in registry.values(): + if server.server_name == server_name: + if not self._is_server_accessible_from_ip(server, client_ip): + return None + return server + + # Pass 3: Match by name (lowest priority) + for server in registry.values(): + if server.name == server_name: + if not self._is_server_accessible_from_ip(server, client_ip): + return None + return server + return None def get_filtered_registry(