ruvnet/ruflo · error

[security] WARNING: terminal_execute is enabled. This tool g

Error message

[security] WARNING: terminal_execute is enabled. This tool grants shell access inside the bridge container to any client the auth layer accepts. Ensure MCP_AUTH_TOKEN is set on any non-loopback bind. See ADR-166 §6 Phase 1d.

What it means

Error "[security] WARNING: terminal_execute is enabled. This tool grants shell access inside the bridge container to any client the auth layer accepts. Ensure MCP_AUTH_TOKEN is set on any non-loopback bind. See ADR-166 §6 Phase 1d." thrown in ruvnet/ruflo.

Source

Thrown at ruflo/src/mcp-bridge/index.js:1765

  const isPublic = BIND_HOST !== "127.0.0.1" && BIND_HOST !== "localhost";
  if (isPublic && !process.env.MCP_AUTH_TOKEN) {
    console.error(
      "FATAL: refusing to bind a public interface without MCP_AUTH_TOKEN. " +
      "Generate one with: MCP_AUTH_TOKEN=$(openssl rand -base64 32)"
    );
    process.exit(1);
  }
  app.listen(PORT, BIND_HOST, () => {
    console.log(`MCP Bridge v2.0.0 on port ${PORT} (${BIND_HOST})`);
    const enabled = Object.entries(TOOL_GROUPS).filter(([, g]) => g.enabled).map(([n]) => n);
    console.log(`Active groups: ${enabled.join(", ")}`);
    // ADR-166 §6 — startup posture banner
    console.log(
      `[security] bind=${BIND_HOST} auth=${process.env.MCP_AUTH_TOKEN ? "bearer" : "off (local-only)"} ` +
      `terminal=${MCP_ENABLE_TERMINAL ? "ENABLED (⚠ opt-in)" : "disabled"}`,
    );
    if (MCP_ENABLE_TERMINAL) {
      console.warn(
        "[security] WARNING: terminal_execute is enabled. This tool grants shell access " +
        "inside the bridge container to any client the auth layer accepts. Ensure " +
        "MCP_AUTH_TOKEN is set on any non-loopback bind. See ADR-166 §6 Phase 1d.",
      );
    }
  });

  const anyBackendNeeded = BACKEND_DEFS.some(isBackendNeeded);
  if (anyBackendNeeded) {
    console.log("Initializing MCP backends...");
    await initBackends();
  }
}

main().catch(err => { console.error("Fatal:", err); process.exit(1); });

View on GitHub (pinned to fa13ee4ad6)

Solutions

  1. If shell access is not required, disable terminal_execute. If it is required, set MCP_AUTH_TOKEN and keep the bridge on a loopback bind.

When it happens

Trigger: Thrown at ruflo/src/mcp-bridge/index.js:1765 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/823df0df0c4d3177. Report an issue: GitHub.