Skip to main content
Glama
index.js4.85 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { EnhancedMemoryManager } from "./enhanced-memory-manager-modular.js"; import { BranchHandlers, EntityHandlers, SearchHandlers, } from "./modules/handlers/index.js"; import { logger } from "./modules/logger.js"; import { RelationshipIndexer } from "./modules/relationship-indexer.js"; import { ModernSimilarityEngine } from "./modules/similarity/similarity-engine.js"; import { SMART_MEMORY_TOOLS } from "./modules/smart-memory-tools.js"; // Initialize modular system const memoryManager = new EnhancedMemoryManager(); // Initialize modern similarity engine (sentence-similarity + natural) const modernSimilarity = new ModernSimilarityEngine(); const relationshipIndexer = new RelationshipIndexer(memoryManager, modernSimilarity); // Initialize specialized handlers const branchHandlers = new BranchHandlers(memoryManager); const entityHandlers = new EntityHandlers(memoryManager, modernSimilarity, relationshipIndexer); const searchHandlers = new SearchHandlers(memoryManager, modernSimilarity); // Initialize modern similarity engine modernSimilarity.initialize().catch((error) => { logger.error("Failed to initialize modern similarity engine:", error); }); relationshipIndexer.initialize().catch((error) => { logger.error("Failed to initialize relationship indexer:", error); }); const server = new Server({ name: "enhanced-memory-server", version: "3.0.0", }, { capabilities: { tools: {}, }, }); // Initialize the enhanced memory manager memoryManager.initialize().catch((error) => { logger.error("Failed to initialize enhanced memory manager:", error); process.exit(1); }); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: SMART_MEMORY_TOOLS }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; if (!args) { return { content: [ { type: "text", text: JSON.stringify({ error: "No arguments provided" }, null, 2), }, ], isError: true, }; } try { switch (name) { case "list_memory_branches": return await branchHandlers.handleListMemoryBranches(); case "create_memory_branch": return await branchHandlers.handleCreateMemoryBranch(args); case "delete_memory_branch": return await branchHandlers.handleDeleteMemoryBranch(args); case "create_entities": return await entityHandlers.handleCreateEntities(args); case "smart_search": return await searchHandlers.handleSmartSearch(args); case "read_memory_branch": return await branchHandlers.handleReadMemoryBranch(args); case "add_observations": return await entityHandlers.handleAddObservations(args); case "update_entity_status": return await entityHandlers.handleUpdateEntityStatus(args); case "delete_entities": return await entityHandlers.handleDeleteEntities(args); default: logger.warn(`Unknown tool called: ${name}`); return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true, }; } } catch (error) { logger.error(`Error handling tool call '${name}':`, error); return { content: [ { type: "text", text: JSON.stringify({ error: error instanceof Error ? error.message : String(error), tool: name, }, null, 2), }, ], isError: true, }; } }); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); logger.info("Modular Enhanced Memory MCP Server running on stdio"); } // Cleanup handlers process.on("SIGINT", async () => { logger.info("Shutting down Enhanced Memory MCP Server..."); relationshipIndexer.shutdown(); await memoryManager.close(); process.exit(0); }); process.on("SIGTERM", async () => { logger.info("Shutting down Enhanced Memory MCP Server..."); relationshipIndexer.shutdown(); await memoryManager.close(); process.exit(0); }); main().catch((error) => { logger.fatal("Fatal error in main():", 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/PrismAero/agentic-memory-server'

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