javascript
#!/usr/bin/env node

const http = require('http');

const PORT = 8743;
const HOST = 'localhost';

// JSON-RPC message handling
function readMessages() {
    let buffer = '';
    
    process.stdin.on('data', (chunk) => {
        buffer += chunk.toString();
        
        // Process complete messages
        let newlineIndex;
        while ((newlineIndex = buffer.indexOf('\n')) !== -1) {
            const message = buffer.slice(0, newlineIndex);
            buffer = buffer.slice(newlineIndex + 1);
            
            if (message.trim()) {
                handleMessage(message);
            }
        }
    });
}

function handleMessage(message) {
    try {
        const request = JSON.parse(message);
        
        // Forward to AltoIndex HTTP server
        const options = {
            hostname: HOST,
            port: PORT,
            path: '/',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': Buffer.byteLength(message)
            }
        };
        
        const req = http.request(options, (res) => {
            let data = '';
            
            res.on('data', (chunk) => {
                data += chunk;
            });
            
            res.on('end', () => {
                // Send response back to Claude Desktop
                if (data.trim()) {
                    process.stdout.write(data.trim() + '\n');
                } else {
                    sendError(request.id, -32603, 'Empty response from server');
                }
            });
        });
        
        req.on('error', (error) => {
            sendError(request.id, -32603, `Could not connect to AltoIndex. Make sure AltoIndex is running with MCP server started on port ${PORT}.`);
        });
        
        req.write(message);
        req.end();
        
    } catch (error) {
        sendError(null, -32700, 'Parse error: ' + error.message);
    }
}

function sendError(id, code, message) {
    const errorResponse = {
        jsonrpc: '2.0',
        id: id || null,
        error: {
            code: code,
            message: message
        }
    };
    process.stdout.write(JSON.stringify(errorResponse) + '\n');
}

// Handle process termination gracefully
process.on('SIGINT', () => {
    process.exit(0);
});

process.on('SIGTERM', () => {
    process.exit(0);
});

// Start reading messages
readMessages();