fix(mcp): URL-encode server_id in env-var setup deep link

This commit is contained in:
mateo-berri 2026-06-03 18:44:19 +00:00
parent dbc5193fc0
commit 3392cd0e98
No known key found for this signature in database
2 changed files with 13 additions and 1 deletions

View file

@ -20,6 +20,7 @@ from typing import (
import hashlib
import importlib
import os
from urllib.parse import quote
# Constants
LITELLM_MCP_SERVER_NAME = "litellm-mcp-server"
@ -501,7 +502,7 @@ def interpolate_headers(
def build_env_var_setup_url(server_id: str) -> str:
"""The frontend URL where a user can fill in their per-user env vars."""
base = os.environ.get("PROXY_BASE_URL", "").rstrip("/")
path = f"/ui/?page=mcp-servers&fill_env_vars={server_id}"
path = f"/ui/?page=mcp-servers&fill_env_vars={quote(server_id, safe='')}"
return f"{base}{path}" if base else path

View file

@ -106,6 +106,17 @@ def test_build_env_var_setup_url_prepends_proxy_base_url(monkeypatch):
assert "fill_env_vars=abc-123" in url
def test_build_env_var_setup_url_encodes_unsafe_server_id(monkeypatch):
from urllib.parse import parse_qs, urlsplit
monkeypatch.delenv("PROXY_BASE_URL", raising=False)
server_id = "a&b=c #d/e"
url = _u("build_env_var_setup_url")(server_id)
assert "a&b=c #d/e" not in url
parsed = parse_qs(urlsplit(url).query)
assert parsed["fill_env_vars"] == [server_id]
def test_missing_user_env_vars_error_message_is_friendly():
with pytest.raises(_u("MCPMissingUserEnvVarsError")) as exc_info:
raise _u("MCPMissingUserEnvVarsError")(