BerriAI/litellm · error · HTTPException
MCP server '{mcp_server_name}' is {description}
Error message
MCP server '{mcp_server_name}' is {description} What it means
Shared 404 detail for a named /.well-known lookup that resolved to an unknown, hidden, or non-oauth2 server. The deliberate uniformity prevents callers from using the well-known endpoints to enumerate non-OAuth server names; only oauth2 and DCR-bridge servers are admitted here.
Source
Thrown at litellm/proxy/_experimental/mcp_server/discoverable_endpoints.py:678
mcp_server_name: str | None,
description: str,
) -> None:
"""404 a NAMED discovery request unless it resolves to an oauth2 or DCR-bridge server.
A named server that is unknown (or hidden from the caller) and one that exists
but is non-oauth2 both return the same 404, so the well-known discovery paths
cannot be used to enumerate non-OAuth server names. Root discovery (no name) is
unaffected, and pass-through servers are resolved by the caller before this runs.
DCR-bridge servers are admitted because they serve the gateway's own authorization
server metadata (the register, authorize, and token relays).
"""
if mcp_server_name is None:
return
if mcp_server is not None and mcp_server.auth_type == MCPAuth.oauth2:
return
if mcp_server is not None and mcp_server.is_dcr_bridge:
return
raise HTTPException(
status_code=404,
detail=f"MCP server '{mcp_server_name}' is {description}",
)
def _dcr_bridge_relays_client_registration(mcp_server: MCPServer) -> bool:
"""True when a DCR-bridge server relays client registration to the upstream authorization
server instead of short-circuiting to an admin-configured OAuth client. In the relay arm the
upstream holds each client's own registration, so the authorize and token relays pass the
client's ``client_id`` and ``redirect_uri`` through verbatim and the authorization code
returns directly to the client's redirect URI without transiting the gateway. Gateway-side
redirect trust and the ``/callback`` state relay therefore only apply to the short-circuit
arm, where the upstream only knows the gateway's own callback."""
return mcp_server.is_dcr_bridge and bool(mcp_server.registration_url) and not mcp_server.client_id
def _require_s256_pkce(
code_challenge: str | None,View on GitHub (pinned to 77b7c6c40c)
Solutions
- Read the server status description and address it (e.g. server disabled or misconfigured).
Example fix
Check server config/status in the proxy admin UI.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/proxy/_experimental/mcp_server/discoverable_endpoints.py:678 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18).
Data as JSON: /api/errors/06382142641a9890.
Report an issue: GitHub.