# NousResearch/hermes-agent · Pre-compile and unify MCP env-var regex interpolation

## Open now

- Nothing open on GitHub.

These items all address the same change: pre-compiling the environment variable interpolation regex in MCP-related code and unifying that interpolation logic across relevant modules. The members appear to be duplicate or iterative versions of the same fix or refactor.

## TL;DR

- 4 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 2 PR(s) closed without merging.
- A fix was merged to main in PR #26240. Verify it addresses your case.
- **Recommended:** read PR #26240 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-26240`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.50`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #2711: Pre-compile env-var interpolation regex in mcp_tool.py

## Prior & competing PRs

- **#2728: refactor(mcp): unify env-var interpolation and pre-compile regex**. closed without merge · fix tier `suggested`
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#26240: fix(mcp): pre-compile env-var regex and unify interpolation**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `hermes_cli/mcp_config.py`, `scripts/release.py`, `tools/mcp_tool.py`
  - fix hunks:
  - `hermes_cli/mcp_config.py`

    ```diff
    @@ -25,6 +25,7 @@
     )
     from hermes_cli.colors import Colors, color
     from hermes_constants import display_hermes_home
    +from tools.mcp_tool import _ENV_VAR_PATTERN
     
     logger = logging.getLogger(__name__)
     
    ```

    ```diff
    @@ -551,7 +552,7 @@ def cmd_mcp_test(args):
             for k, v in headers.items():
                 if isinstance(v, str) and ("key" in k.lower() or "auth" in k.lower()):
                     # Mask the value
    -                resolved = _interpolate_value(v)
    +                resolved = _ENV_VAR_PATTERN.sub(lambda m: os.getenv(m.group(1), ""), v)
                     if len(resolved) > 8:
                         masked = resolved[:4] + "***" + resolved[-4:]
                     else:
    ```

    ```diff
    @@ -581,13 +582,6 @@ def cmd_mcp_test(args):
         print()
     
     
    -def _interpolate_value(value: str) -> str:
    -    """Resolve ``${ENV_VAR}`` references in a string."""
    -    def _replace(m):
    -        return os.getenv(m.group(1), "")
    -    return re.sub(r"\$\{(\w+)\}", _replace, value)
    -
    -
     # ─── hermes mcp login ────────────────────────────────────────────────────────
     
     def cmd_mcp_login(args):
    ```
  - `scripts/release.py`

    ```diff
    @@ -111,6 +111,7 @@
         "oswaldb22@users.noreply.github.com": "oswaldb22",
         "[redacted:email]": "AJV20",
         "[redacted:email]": "masonjames",
    +    "108541149+amethystani@users.noreply.github.com": "amethystani",
         "[redacted:email]": "liquidchen",
         "[redacted:email]": "subtract0",
         "[redacted:email]": "ReqX",
    ```
  - `tools/mcp_tool.py`

    ```diff
    @@ -279,6 +279,11 @@ def _check_message_handler_support() -> bool:
         re.IGNORECASE,
     )
     
    +# Pre-compiled pattern for ${VAR_NAME} style env-var interpolation.
    +# Supports any non-} characters in the variable name (hyphens, dots, etc.)
    +# so providers like MY-VAR or my.var work correctly.
    +_ENV_VAR_PATTERN = re.compile(r"\$\{([^}]+)\}")
    +
     
     # ---------------------------------------------------------------------------
     # Security helpers
    ```

    ```diff
    @@ -2104,7 +2109,7 @@ def _interpolate_env_vars(value):
         if isinstance(value, str):
             def _replace(m):
                 return os.environ.get(m.group(1), m.group(0))
    -        return re.sub(r"\$\{([^}]+)\}", _replace, value)
    +        return _ENV_VAR_PATTERN.sub(_replace, value)
         if isinstance(value, dict):
             return {k: _interpolate_env_vars(v) for k, v in value.items()}
         if isinstance(value, list):
    ```
- **#2719: fix(mcp): pre-compile env-var regex and unify interpolation across mcp_tool and mcp_config**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#26240`

## Fix status

- Merged to main in PR #26240 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-05-15`.
- Subsystem: `mcp`
