fix(mcp): sanitize server names for auth env keys

Server names with non-env-safe characters (dots, slashes, spaces)
produced invalid env-var keys like MCP_MY.SERVER_API_KEY or
MCP_GITHUB/MCP_API_KEY, breaking .env writes and ${VAR} header
substitution. _env_key_for_server now replaces any character outside
[A-Za-z0-9_] with an underscore.

Co-authored-by: Hermes Agent <agent@nousresearch.com>
This commit is contained in:
giggling-ginger 2026-07-06 02:21:44 -07:00 committed by Teknium
parent ef79ad014d
commit e53e8a782c
2 changed files with 4 additions and 1 deletions

View file

@ -152,7 +152,8 @@ def _replace_mcp_servers(servers: Dict[str, dict]) -> Tuple[bool, List[str]]:
def _env_key_for_server(name: str) -> str:
"""Convert server name to an env-var key like ``MCP_MYSERVER_API_KEY``."""
return f"MCP_{name.upper().replace('-', '_')}_API_KEY"
suffix = re.sub(r"[^A-Za-z0-9_]", "_", name.upper()).strip("_")
return f"MCP_{suffix}_API_KEY"
def _strip_bearer_prefix(token: str) -> str:

View file

@ -776,6 +776,8 @@ class TestConfigHelpers:
assert _env_key_for_server("ink") == "MCP_INK_API_KEY"
assert _env_key_for_server("my-server") == "MCP_MY_SERVER_API_KEY"
assert _env_key_for_server("my.server") == "MCP_MY_SERVER_API_KEY"
assert _env_key_for_server("github/mcp") == "MCP_GITHUB_MCP_API_KEY"
# ---------------------------------------------------------------------------