mem100x
Version:
⚡ The FASTEST MCP memory server ever built - 66k+ entities/sec with intelligent context detection
97 lines • 4.29 kB
JavaScript
;
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