#!/usr/bin/env node
// MCP stdio bridge for LM Studio connection
// Converts between LM Studio's stdio transport and WebSocket MCP server
import { WebSocket } from 'ws';
const WEBSOCKET_URL = 'ws://localhost:3000/mcp';
async function startBridge() {
const ws = new WebSocket(WEBSOCKET_URL);
let connectionReady = false;
ws.on('open', () => {
connectionReady = true;
// Handle stdin messages from LM Studio
process.stdin.on('data', (data) => {
const message = data.toString().trim();
if (message && connectionReady) {
ws.send(message);
}
});
// Forward WebSocket responses to LM Studio via stdout
ws.on('message', (data) => {
const message = data.toString().trim();
if (message) {
// Send response to LM Studio
process.stdout.write(message + '\n');
}
});
});
ws.on('error', (error) => {
process.exit(1);
});
ws.on('close', () => {
process.exit(0);
});
// Clean shutdown on termination signals
process.on('SIGINT', () => ws.close());
process.on('SIGTERM', () => ws.close());
process.on('exit', () => ws.close());
}
startBridge().catch(error => {
console.error('Bridge error:', error);
process.exit(1);
});