mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-10 03:28:53 +00:00
fix(mcp): resolve case-variant scoped connects with the same alias-first priority as the exact name
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
bc07570af8
commit
674356d3d8
2 changed files with 15 additions and 3 deletions
|
|
@ -7200,9 +7200,19 @@ class MCPServerManager:
|
|||
return None
|
||||
|
||||
def get_mcp_server_answering_to(self, name: str, client_ip: str | None = None) -> MCPServer | None:
|
||||
"""The server a scoped ``/mcp/{name}`` connect resolves to: the alias-first exact lookup, then
|
||||
the router's case-insensitive prefix match."""
|
||||
return self.get_mcp_server_by_name(name, client_ip=client_ip) or next(
|
||||
"""The server a scoped ``/mcp/{name}`` connect resolves to: alias, then server_name, then name, each
|
||||
case-insensitive so ``/mcp/GH`` and ``/mcp/gh`` agree, then the router's prefix match."""
|
||||
requested: Final = name.lower()
|
||||
servers: Final = tuple(self.get_registry().values())
|
||||
identifiers: Final[tuple[Callable[[MCPServer], str | None], ...]] = (
|
||||
lambda server: server.alias,
|
||||
lambda server: server.server_name,
|
||||
lambda server: server.name,
|
||||
)
|
||||
for identifier in identifiers:
|
||||
if (found := next((s for s in servers if (identifier(s) or "").lower() == requested), None)) is not None:
|
||||
return found if self._is_server_accessible_from_ip(found, client_ip) else None
|
||||
return next(
|
||||
(
|
||||
server
|
||||
for server in self.get_filtered_registry(client_ip).values()
|
||||
|
|
|
|||
|
|
@ -6225,6 +6225,8 @@ class TestMCPServerManager:
|
|||
)
|
||||
|
||||
assert manager.get_mcp_server_answering_to("gh") is gh_public
|
||||
assert manager.get_mcp_server_answering_to("GH") is gh_public
|
||||
assert manager.get_mcp_server_answering_to("Gh_Public") is gh_public
|
||||
assert manager.get_mcp_server_answering_to("gh-public-id") is gh_public
|
||||
assert manager.get_mcp_server_answering_to("GH_PUBLIC") is gh_public
|
||||
assert manager.get_mcp_server_answering_to("gh-id") is gh
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue