import { NestFactory } from '@nestjs/core'; import { ConfigService } from '@nestjs/config'; import { Logger, ValidationPipe } from '@nestjs/common'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './filters/http-exception.filter'; import { LoggingInterceptor } from './interceptors/logging.interceptor'; import { name as pkgName, version as pkgVersion } from '../package.json'; async function bootstrap() { const logger = new Logger('Bootstrap'); const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe({ transform: true })); app.useGlobalFilters(new HttpExceptionFilter()); app.useGlobalInterceptors(new LoggingInterceptor()); const config = app.get(ConfigService); const port = config.get('PORT', 3000); const nodeEnv = config.get('NODE_ENV', 'development'); const swaggerConfig = new DocumentBuilder() .setTitle(pkgName) .setDescription(`${pkgName} API`) .setVersion(pkgVersion) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('api', app, document); await app.listen(port); logger.log(`Application "${pkgName}" v${pkgVersion} running on port ${port} [${nodeEnv}]`); logger.log(`Swagger UI available at http://localhost:${port}/api`); logger.log(`MCP endpoint available at http://localhost:${port}/mcp`); } bootstrap();