UNPKG

mem100x

Version:

⚡ The FASTEST MCP memory server ever built - 66k+ entities/sec with intelligent context detection

97 lines 4.29 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.main = main; const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js"); const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js"); const types_js_1 = require("@modelcontextprotocol/sdk/types.js"); const multi_database_js_1 = require("./multi-database.js"); const tool_handlers_js_1 = require("./tool-handlers.js"); const tool_definitions_js_1 = require("./tool-definitions.js"); const fast_json_js_1 = require("./utils/fast-json.js"); const logger_js_1 = require("./utils/logger.js"); const config_js_1 = require("./config.js"); async function main() { (0, logger_js_1.logInfo)('Starting Mem100x Multi-Context MCP server...'); const manager = new multi_database_js_1.MultiDatabaseManager(config_js_1.config); (0, logger_js_1.logInfo)('MultiDatabaseManager initialized.'); const server = new index_js_1.Server({ name: 'mem100x-multi', version: '1.0.0', }, { capabilities: { tools: {}, }, }); // List tools handler server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => { return { tools: (0, tool_definitions_js_1.getAllToolDefinitions)() }; }); // Call tool handler server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { const handler = tool_handlers_js_1.toolHandlers[name]; if (!handler) { throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } const context = { manager, startTime: performance.now(), toolName: name, }; const result = handler(args, context); return { content: [{ type: 'text', text: (0, fast_json_js_1.stringifyGeneric)(result, true) }], }; } catch (error) { if (error instanceof types_js_1.McpError) { throw error; } if (error && typeof error === 'object' && 'issues' in error) { const zodError = error; const issues = zodError.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`).join(', '); throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid parameters for ${name}: ${issues}`); } (0, logger_js_1.logError)(`Error executing tool: ${name}`, error, { args }); throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Error executing ${name}: ${error instanceof Error ? error.message : String(error)}`); } }); // Graceful shutdown handler const shutdown = async (signal) => { (0, logger_js_1.logInfo)(`Received ${signal}. Shutting down gracefully...`); try { await server.close(); (0, logger_js_1.logInfo)('MCP server closed.'); manager.closeAll(); (0, logger_js_1.logInfo)('All databases closed.'); process.exit(0); } catch (error) { (0, logger_js_1.logError)('Error during shutdown', error); process.exit(1); } }; process.on('SIGINT', () => shutdown('SIGINT')); process.on('SIGTERM', () => shutdown('SIGTERM')); process.on('uncaughtException', (error) => { (0, logger_js_1.logError)('Uncaught Exception', error); shutdown('uncaughtException').catch(console.error); }); process.on('unhandledRejection', (reason, promise) => { (0, logger_js_1.logError)('Unhandled Rejection', new Error(String(reason)), { promise }); shutdown('unhandledRejection').catch(console.error); }); const transport = new stdio_js_1.StdioServerTransport(); await server.connect(transport); (0, logger_js_1.logInfo)('Mem100x Multi-Context MCP server running on stdio'); } // Only run if this is the main module if (require.main === module) { main().catch((error) => { (0, logger_js_1.logError)('Fatal error during startup', error); process.exit(1); }); } //# sourceMappingURL=server-multi.js.map