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
- 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.