UNPKG

tryaii-mcp-server

Version:

TryAII MCP Server - 15+ AI models with comparison, cost tracking, and collective intelligence

88 lines 3.21 kB
import * as net from 'net'; import { BaseTransport } from './BaseTransport.js'; import { config } from '../utils/config.js'; import { logger } from '../utils/logger.js'; import { McpConnection } from '../mcp/McpConnection.js'; export class McpTransport extends BaseTransport { server = null; connections = new Map(); port; constructor() { super(); this.port = config.server.modes.mcpPort || 3003; } async start() { return new Promise((resolve, reject) => { logger.info(`Starting MCP transport on port ${this.port}...`); this.server = net.createServer((socket) => { this.handleConnection(socket); }); this.server.on('error', (error) => { logger.error('MCP server error', { error }); reject(error); }); this.server.listen(this.port, config.server.host, () => { logger.info(`🚀 MCP transport started successfully on port ${this.port}`); resolve(); }); }); } async stop() { return new Promise((resolve) => { if (this.server) { // Close all connections for (const connection of this.connections.values()) { connection.close(); } this.connections.clear(); this.server.close(() => { logger.info('MCP transport stopped'); resolve(); }); } else { resolve(); } }); } handleConnection(socket) { const connection = new McpConnection(socket); this.connections.set(connection.id, connection); // Handle incoming requests connection.on('request', (request) => { this.emit('request', connection.id, request); }); // Handle connection close connection.on('close', () => { logger.info('MCP connection closed', { connectionId: connection.id }); this.connections.delete(connection.id); this.emit('connectionClosed', connection.id); }); // Handle connection errors connection.on('error', (error) => { logger.error('MCP connection error', { connectionId: connection.id, error }); this.connections.delete(connection.id); this.emit('connectionError', connection.id, error); }); // Emit connection event this.emit('connection', connection.id); } async sendResponse(connectionId, response) { const connection = this.connections.get(connectionId); if (!connection || !connection.isConnected()) { logger.warn('Attempted to send response to closed connection', { connectionId }); return; } connection.sendResponse(response); } isHealthy() { return this.server !== null && this.server.listening; } getConnectionCount() { return this.connections.size; } getConnections() { return Array.from(this.connections.keys()); } } //# sourceMappingURL=McpTransport.js.map