Skip to main content
Glama
index.ts2.93 kB
#!/usr/bin/env node import { parseArgs, printBanner, printHelp } from './cli.js'; import { loadConfig, type Config } from './config/index.js'; import { createLogger, setLogger, log } from './utils/logger.js'; import { parseSpec } from './parser/index.js'; import { convertToMCPTools, applyFilters } from './converter/index.js'; import { createMcpServer, createHttpServer, startServer } from './server/index.js'; /** * Main entry point */ async function main(): Promise<void> { // Parse CLI arguments const args = parseArgs(); // Load and validate configuration let config: Config; try { config = await loadConfig(args); } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; console.error(`Configuration error: ${message}`); printHelp(); process.exit(1); } // Setup logger const logger = createLogger({ level: config.logging.level, format: config.logging.format, }); setLogger(logger); // Print banner in pretty mode if (config.logging.format === 'pretty') { printBanner(); } log.info('Starting openapi-mcp-ts', { version: '1.0.0', spec: config.spec.url || config.spec.file || 'inline', upstream: config.upstream.baseUrl, }); try { // Step 1: Parse spec (OpenAPI or Postman) log.info('Parsing specification...'); const operations = await parseSpec( { url: config.spec.url, file: config.spec.file, inline: config.spec.inline, }, config.format ); if (operations.length === 0) { log.error('No operations found in specification'); process.exit(1); } log.info('Parsed operations', { count: operations.length }); // Step 2: Convert to MCP tools log.info('Converting to MCP tools...'); let tools = convertToMCPTools(operations); // Step 3: Apply filters tools = applyFilters(tools, config); const enabledCount = tools.filter((t) => t._ui.enabled).length; if (enabledCount === 0) { log.warn('No tools are enabled after filtering. Server will have no functionality.'); } // Step 4: Create MCP server log.info('Creating MCP server...'); const mcpServer = createMcpServer(tools, config); // Step 5: Create HTTP server log.info('Creating HTTP server...'); const httpApp = createHttpServer(mcpServer, tools, config); // Step 6: Start server startServer(httpApp, config); // Handle graceful shutdown const shutdown = () => { log.info('Shutting down...'); process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; log.error('Failed to start server', { error: message }); process.exit(1); } } // Run main main().catch((error) => { console.error('Fatal error:', error); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/procoders/openapi-mcp-ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server