mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-28 01:32:17 +00:00
fix(mcp): match alias/server_name in _resolve_mcp_server_for_tool_call
The registry lookup in _resolve_mcp_server_for_tool_call previously only compared candidate.name against the provided server_name, but tool name prefixes can be derived from a server's alias or server_name (see get_server_prefix). When the tool→server mapping is empty/stale (cold start, dynamic tools), the lookup would fail for alias-configured servers even though get_mcp_server_by_name (used by the REST path) matches alias, server_name, and name. Match the same priority of identifiers in both the registry pass and the unprefixed fallback so the MCP protocol call_tool path is consistent with the REST path. Co-authored-by: Yassin Kortam <yassin@berri.ai>
This commit is contained in:
parent
d2438b5bef
commit
4653773376
1 changed files with 16 additions and 6 deletions
|
|
@ -2828,20 +2828,30 @@ class MCPServerManager:
|
|||
prefixed_tool_name = add_server_prefix_to_name(name, server_name)
|
||||
mcp_server = self._get_mcp_server_from_tool_name(prefixed_tool_name)
|
||||
resolved_by_server_name_only = False
|
||||
normalized_server_name = normalize_server_name(server_name)
|
||||
|
||||
def _candidate_matches_server_name(candidate: MCPServer) -> bool:
|
||||
for identifier in (
|
||||
candidate.alias,
|
||||
candidate.server_name,
|
||||
candidate.name,
|
||||
):
|
||||
if identifier and normalize_server_name(identifier) == (
|
||||
normalized_server_name
|
||||
):
|
||||
return True
|
||||
return False
|
||||
|
||||
if mcp_server is None:
|
||||
for candidate in self.get_registry().values():
|
||||
if normalize_server_name(candidate.name) == normalize_server_name(
|
||||
server_name
|
||||
):
|
||||
if _candidate_matches_server_name(candidate):
|
||||
mcp_server = candidate
|
||||
resolved_by_server_name_only = True
|
||||
break
|
||||
if mcp_server is None:
|
||||
fallback = self._get_mcp_server_from_tool_name(name)
|
||||
if fallback is not None and (
|
||||
not server_name
|
||||
or normalize_server_name(fallback.name)
|
||||
== normalize_server_name(server_name)
|
||||
not server_name or _candidate_matches_server_name(fallback)
|
||||
):
|
||||
mcp_server = fallback
|
||||
if mcp_server is None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue