tryaii-mcp-server
Version:
TryAII MCP Server - 15+ AI models with comparison, cost tracking, and collective intelligence
88 lines • 3.21 kB
JavaScript
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