From 152b2290b33b5a37331c4de52fec926cc34f2b3d Mon Sep 17 00:00:00 2001 From: Shriniwas Ramesh Suram <82992833+Shriniwas410@users.noreply.github.com> Date: Tue, 23 Jun 2026 14:13:16 -0400 Subject: [PATCH] fix(mcp): add get_secret_str import and guard None-resolved env vars in static_headers --- .../mcp_server/mcp_server_manager.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index 643f31df67d..7c41e21d440 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -33,6 +33,7 @@ from pydantic import AnyUrl import litellm from litellm._logging import verbose_logger +from litellm.secret_managers.main import get_secret_str from litellm.constants import ( MCP_CLIENT_TIMEOUT, MCP_HEALTH_CHECK_TIMEOUT, @@ -1064,10 +1065,20 @@ class MCPServerManager: getattr(mcp_server, "static_headers", None) ) if static_headers_dict: - static_headers_dict = { - k: get_secret(v) if isinstance(v, str) and v.startswith("os.environ/") else v - for k, v in static_headers_dict.items() - } + resolved: dict[str, str] = {} + for k, v in static_headers_dict.items(): + if isinstance(v, str) and v.startswith("os.environ/"): + secret = get_secret_str(v) + if secret is None: + verbose_logger.warning( + f"MCP static_header {k!r}: env var {v!r} not set; keeping literal value" + ) + resolved[k] = v + else: + resolved[k] = secret + else: + resolved[k] = v + static_headers_dict = resolved env_vars_list = self._resolve_env_vars_list( mcp_server, env_vars_are_encrypted=(