ruvnet/ruflo · error
Upgrade Required - WebSocket connection expected
Error message
Upgrade Required - WebSocket connection expected
What it means
HTTP 426 plain-text response written by the WebSocket transport's start(): any plain HTTP (non-upgrade) request hitting the server is told it must perform a WebSocket upgrade to connect — the server only speaks WebSocket on this port.
Source
Thrown at v3/@claude-flow/mcp/src/transport/websocket.ts:81
private readonly logger: ILogger,
private readonly config: WebSocketTransportConfig
) {
super();
}
async start(): Promise<void> {
if (this.running) {
throw new Error('WebSocket transport already running');
}
this.logger.info('Starting WebSocket transport', {
host: this.config.host,
port: this.config.port,
path: this.config.path || '/ws',
});
this.server = createServer((req, res) => {
res.writeHead(426, { 'Content-Type': 'text/plain' });
res.end('Upgrade Required - WebSocket connection expected');
});
this.wss = new WebSocketServer({
server: this.server,
path: this.config.path || '/ws',
maxPayload: this.config.maxMessageSize || 10 * 1024 * 1024,
perMessageDeflate: true,
});
this.setupWebSocketHandlers();
this.startHeartbeat();
await new Promise<void>((resolve, reject) => {
this.server!.listen(this.config.port, this.config.host, () => {
resolve();
});
this.server!.on('error', reject);View on GitHub (pinned to fa13ee4ad6)
Solutions
- Send a WebSocket upgrade request (Upgrade: websocket header) instead of a plain HTTP request.
- Use a WebSocket client to connect to this endpoint; plain HTTP is not supported here.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at v3/@claude-flow/mcp/src/transport/websocket.ts:81 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/bdf66bb75bbe6749.
Report an issue: GitHub.