UNPKG

@spryker-sdk/spryker-mcp-server

Version:

AI-powered e-commerce server that enables intelligent shopping assistants for Spryker Commerce OS platforms

86 lines 3.36 kB
/** * Stdio MCP Server Implementation */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { config } from '../config/index.js'; import { logger } from '../utils/logger.js'; import { validateEnvironment } from '../utils/validation.js'; export class StdioMCPServer { server; transport = null; options; registerHandlers; constructor(options, registerHandlers) { this.options = options; this.registerHandlers = registerHandlers; this.server = new Server({ name: config.server.name, version: config.server.version, }, { capabilities: { tools: {}, prompts: {}, logging: {}, }, }); // Register all handlers this.registerHandlers(this.server); } async start() { logger.info('Starting Spryker MCP Server (stdio)...'); logger.info(`Transport: ${this.options.transport}`); try { // Validate environment configuration validateEnvironment(); // Initialize stdio transport this.transport = new StdioServerTransport(); logger.info('Initialized stdio transport'); // Add event listeners to monitor stdio transport health process.stdin.on('end', () => { logger.info('stdin ended'); }); process.stdin.on('close', () => { logger.info('stdin closed'); }); process.stdout.on('end', () => { logger.info('stdout ended'); }); process.stdout.on('close', () => { logger.info('stdout closed'); }); // Connect server to transport logger.info('Connecting server to stdio transport...'); await this.server.connect(this.transport); logger.info('Server connected to stdio transport successfully'); // Add connection event listeners to monitor transport health this.server.onclose = () => { logger.info('MCP server connection closed'); }; this.server.onerror = error => { logger.error('MCP server connection error:', error); }; logger.info(`Spryker MCP Server started successfully`); logger.info(`Server Name: ${config.server.name}`); logger.info(`Server Version: ${config.server.version}`); logger.info(`API Base URL: ${config.api.baseUrl}`); logger.info('Server is ready to accept MCP requests via stdio'); } catch (error) { logger.error('Failed to start stdio server:', error instanceof Error ? error : new Error(String(error))); throw error; } } async shutdown() { logger.info('Shutting down Stdio MCP Server...'); try { // Close the MCP server await this.server.close(); logger.info('Stdio server shutdown complete'); } catch (error) { logger.error('Error during stdio server shutdown:', error instanceof Error ? error : new Error(String(error))); } } } //# sourceMappingURL=stdio-server.js.map