fix(mcp): resolve OAuth endpoints by server_id when name lookup fails

The OAuth broker endpoints (authorize, register, token, callback, and
metadata) use get_mcp_server_by_name() to resolve the MCP server from
the URL path parameter. However, the LiteLLM UI sends the server_id
(SHA-256 hash) in the path, which doesn't match any alias, server_name,
or name — causing the lookup to fail with "MCP server authorization url
is not set".

Add get_mcp_server_by_id() as a fallback at all five call sites in
discoverable_endpoints.py so that servers can be resolved by either
name or ID.

Fixes #30997
This commit is contained in:
KK-MCP 2026-06-22 12:16:23 -07:00
parent 2be0183cc7
commit cdecfe24e1

View file

@ -611,6 +611,8 @@ async def authorize(
if lookup_name
else None
)
if mcp_server is None and lookup_name:
mcp_server = global_mcp_server_manager.get_mcp_server_by_id(lookup_name)
if mcp_server is None and mcp_server_name is None:
mcp_server = _resolve_oauth2_server_for_root_endpoints(client_ip=client_ip)
if mcp_server is None:
@ -673,6 +675,8 @@ async def token_endpoint(
mcp_server = global_mcp_server_manager.get_mcp_server_by_name(
lookup_name, client_ip=client_ip
)
if mcp_server is None and lookup_name:
mcp_server = global_mcp_server_manager.get_mcp_server_by_id(lookup_name)
if mcp_server is None and mcp_server_name is None:
mcp_server = _resolve_oauth2_server_for_root_endpoints(client_ip=client_ip)
if mcp_server is None:
@ -991,6 +995,10 @@ async def _build_oauth_protected_resource_response(
mcp_server = global_mcp_server_manager.get_mcp_server_by_name(
mcp_server_name, client_ip=client_ip
)
if mcp_server is None:
mcp_server = global_mcp_server_manager.get_mcp_server_by_id(
mcp_server_name
)
# Build resource URL based on the pattern
if mcp_server_name:
@ -1144,6 +1152,10 @@ def _build_oauth_authorization_server_response(
mcp_server = global_mcp_server_manager.get_mcp_server_by_name(
mcp_server_name, client_ip=client_ip
)
if mcp_server is None:
mcp_server = global_mcp_server_manager.get_mcp_server_by_id(
mcp_server_name
)
return {
"issuer": request_base_url, # point to your proxy
@ -1310,6 +1322,10 @@ async def register_client(request: Request, mcp_server_name: Optional[str] = Non
mcp_server = global_mcp_server_manager.get_mcp_server_by_name(
mcp_server_name, client_ip=client_ip
)
if mcp_server is None:
mcp_server = global_mcp_server_manager.get_mcp_server_by_id(
mcp_server_name
)
if mcp_server is None:
return dummy_return
return await register_client_with_server(