UNPKG

@memory-bank/mcp

Version:

Memory-enabled Co-Pilot (MCP) server for managing project documentation and context

127 lines 4.73 kB
#!/usr/bin/env node // import { promises as fs } from 'fs'; // 未使用のためコメントアウト // import path from 'path'; // 未使用のためコメントアウト // import { fileURLToPath } from 'url'; // 未使用のためコメントアウト import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import yargs from 'yargs'; import { hideBin } from 'yargs/helpers'; // アプリケーションのインポート import { createApplication } from './main/index.js'; import { logger } from './shared/utils/logger.js'; import { isValidLanguage } from '@memory-bank/schemas/v2/i18n-schema'; import { setupRoutes } from './main/routes.js'; // routes.ts から setupRoutes 関数をインポート // Parse command line arguments const argv = yargs(hideBin(process.argv)) .option('docs', { alias: 'd', type: 'string', description: 'Path to the documentation root directory', default: './docs', }) .option('verbose', { type: 'boolean', description: 'Enable verbose logging', default: false, }) .option('language', { type: 'string', description: 'Preferred language (e.g., en, ja)', // default は Application 側で設定される想定 }) .help() .parseSync(); // Logger setup (Application内で設定されるので、ここでは不要かも?一旦残す) // const logger = { // debug: (...args: any[]) => console.error('[DEBUG]', ...args), // info: (...args: any[]) => console.error('[INFO]', ...args), // error: (...args: any[]) => console.error('[ERROR]', ...args), // }; // 新しいアプリケーションインスタンス let app; // Create a server const server = new Server({ name: 'memory-bank-mcp-server', version: '3.0.0', // package.json のバージョンと合わせる }, { capabilities: { tools: {}, // ツール機能は有効 // resources: {} // リソース機能が必要なら追加 }, }); // サーバーの基本設定 // ここでは、リクエストハンドラの設定は routes.ts に委譲する // Error handling server.onerror = (error) => { logger.error('[MCP Server Error]', error); }; // Process termination handling process.on('SIGINT', async () => { logger.info('Received SIGINT signal, shutting down...'); await cleanup(); process.exit(0); }); process.on('SIGTERM', async () => { logger.info('Received SIGTERM signal, shutting down...'); await cleanup(); process.exit(0); }); // Cleanup function to properly release resources async function cleanup() { logger.info('Cleaning up resources...'); try { // Close the server connection if it's open await server.close(); logger.info('Server connection closed'); // Release application resources if available if (app) { // アプリケーションが保持するリソースを解放 (もしあれば) // await app.dispose(); // 仮のメソッド logger.info('Releasing application resources'); } } catch (error) { logger.error('Error during server cleanup:', error); } // 明示的にGCを促す(Node.jsの場合、通常は不要) // if (global.gc) { // logger.info('Forcing garbage collection'); // global.gc(); // } } // Main function to initialize and start the server async function main() { try { // language を安全に処理 let safeLanguage = undefined; if (argv.language) { if (isValidLanguage(argv.language)) { safeLanguage = argv.language; } else { logger.warn(`Invalid language code "${argv.language}" provided. Defaulting based on application logic or to 'en'.`); // デフォルトは Application 側で処理される想定なので undefined のまま渡す } } // Initialize application app = await createApplication({ docsRoot: argv.docs, verbose: argv.verbose, language: safeLanguage, }); logger.info('Application initialized successfully'); // ルーティングの設定をroutes.tsに委譲 setupRoutes(server, app); logger.info('MCP Server routes configured'); // Connect the server to the Stdio transport await server.connect(new StdioServerTransport()); logger.info('MCP Server connected to stdio transport'); } catch (error) { logger.error('Failed to start MCP server:', error); process.exit(1); } } // Run the main function main(); //# sourceMappingURL=server.js.map