BerriAI/litellm · error · HTTPException
Server misconfigured: MCP server has no routable name
Error message
Server misconfigured: MCP server has no routable name
What it means
HTTP 500 in the alias/server-name injection logic: the resolved MCP server row has neither an alias nor a server_name, so there is no x-mcp-{name}-authorization header key to inject the upstream credential under. Indicates a malformed server record.
Source
Thrown at litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py:793
(``lookup_mcp_server_auth_in_headers`` tries ``alias`` before ``server_name``). Keying
under ``server_name`` would leave a caller-supplied ``x-mcp-{alias}-authorization`` at the
higher-priority alias slot, pairing the admitted identity with an attacker's upstream
credential; the alias-keyed injection overwrites any such caller value.
"""
from litellm.proxy.proxy_server import master_key
if not master_key:
raise HTTPException(status_code=500, detail="Server misconfigured: master_key is not set")
await MCPRequestHandler._run_pre_db_read_auth_checks(request=request, route=route)
keys: Final = envelope_keys_from_master_key(master_key)
result: Final = resolve_bridge_envelope(authorization_value, keys, datetime.now(timezone.utc), server.server_id)
match result:
case BridgeEnvelopeAdmitted():
header_key: Final = server.alias or server.server_name
if header_key is None:
raise HTTPException(status_code=500, detail="Server misconfigured: MCP server has no routable name")
admitted: Final = await MCPRequestHandler._reload_admitted_principal(result.identity)
await MCPRequestHandler._enforce_admitted_live_policy(admitted=admitted, request=request, route=route)
injected: Final = {header_key: {"Authorization": result.upstream_authorization.get_secret_value()}}
new_headers: Final = {**(mcp_server_auth_headers or {}), **injected}
return admitted, new_headers
case BridgeEnvelopeInvalid() | NotBridgeEnvelope():
raise HTTPException(status_code=401, detail="Invalid or expired credential")
case _:
assert_never(result)
@staticmethod
async def _admit_gateway_session(
authorization_value: str,
request: Request,
route: str,
mcp_servers: list[str] | None,
) -> UserAPIKeyAuth:
"""Open a gateway DCR session bearer and admit the live litellm user it references.View on GitHub (pinned to 77b7c6c40c)
Solutions
- Give the MCP server a name/alias in the proxy config so requests can be routed.
Example fix
mcp_servers: {my_server: {url: ..., alias: my_server}} Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py:793 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/b839a95ec8141525.
Report an issue: GitHub.