From df828718c5ac91b14eabdaec16cb5f34026fa9e6 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Mon, 29 Sep 2025 13:30:37 -0700 Subject: [PATCH] feat(user_api_key_auth_mcp.py): correctly dereference mcp server name from ids --- .../mcp_server/auth/user_api_key_auth_mcp.py | 5 ++++- .../proxy/_experimental/mcp_server/mcp_server_manager.py | 8 ++++++++ litellm/proxy/_experimental/mcp_server/server.py | 8 +++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py b/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py index 61600c25d3..31032b27b2 100644 --- a/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py +++ b/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py @@ -294,6 +294,9 @@ class MCPRequestHandler: ) -> List[str]: """ Get list of allowed MCP servers for the given user/key based on permissions + + Returns: + List[str]: List of allowed MCP servers by server id """ from typing import List @@ -331,7 +334,7 @@ class MCPRequestHandler: return [] @staticmethod - async def is_tool_allowed( + def is_tool_allowed( allowed_mcp_servers: List[str], server_name: str, ) -> bool: diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index 4c866561f7..a88f94be06 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -919,6 +919,14 @@ class MCPServerManager: return server return None + def get_mcp_server_names_from_ids(self, server_ids: List[str]) -> List[str]: + server_names = [] + registry = self.get_registry() + for server in registry.values(): + if server.server_id in server_ids: + server_names.append(server.name) + return server_names + def get_mcp_server_by_name(self, server_name: str) -> Optional[MCPServer]: """ Get the MCP Server from the server name diff --git a/litellm/proxy/_experimental/mcp_server/server.py b/litellm/proxy/_experimental/mcp_server/server.py index 8074d25db7..96e4d47a91 100644 --- a/litellm/proxy/_experimental/mcp_server/server.py +++ b/litellm/proxy/_experimental/mcp_server/server.py @@ -561,13 +561,19 @@ if MCP_AVAILABLE: ) ## CHECK IF USER IS ALLOWED TO CALL THIS TOOL - allowed_mcp_servers = await MCPRequestHandler.get_allowed_mcp_servers( + allowed_mcp_server_ids = await MCPRequestHandler.get_allowed_mcp_servers( user_api_key_auth=user_api_key_auth, ) + + allowed_mcp_servers = global_mcp_server_manager.get_mcp_server_names_from_ids( + allowed_mcp_server_ids + ) + if not MCPRequestHandler.is_tool_allowed( allowed_mcp_servers=allowed_mcp_servers, server_name=server_name_from_prefix, ): + raise HTTPException( status_code=403, detail=f"User not allowed to call this tool. Allowed MCP servers: {allowed_mcp_servers}",