Skip to main content
Glama

documcp

by tosin2013
knowledge-graph-enhanced.test.ts4.99 kB
import { promises as fs } from "fs"; import { join } from "path"; import { tmpdir } from "os"; import { KnowledgeGraph } from "../../src/memory/knowledge-graph.js"; import { MemoryManager } from "../../src/memory/manager.js"; describe("Knowledge Graph Basic Tests", () => { let tempDir: string; let memoryManager: MemoryManager; let knowledgeGraph: KnowledgeGraph; beforeEach(async () => { tempDir = join( tmpdir(), `test-kg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, ); await fs.mkdir(tempDir, { recursive: true }); memoryManager = new MemoryManager(tempDir); await memoryManager.initialize(); knowledgeGraph = new KnowledgeGraph(memoryManager); await knowledgeGraph.initialize(); // Add test data to memory manager await memoryManager.remember( "analysis", { projectType: "javascript", complexity: "medium", framework: "react", technologies: ["webpack", "babel", "jest"], }, { projectId: "project-1", tags: ["frontend", "spa"], }, ); await memoryManager.remember( "recommendation", { ssg: "docusaurus", confidence: 0.9, reasons: ["React ecosystem", "Good documentation features"], }, { projectId: "project-1", tags: ["react", "documentation"], }, ); }); afterEach(async () => { try { await fs.rm(tempDir, { recursive: true }); } catch { // Ignore cleanup errors } }); describe("Basic Functionality", () => { it("should initialize knowledge graph", async () => { expect(knowledgeGraph).toBeDefined(); }); it("should build graph from memories", async () => { await knowledgeGraph.buildFromMemories(); const stats = await knowledgeGraph.getStatistics(); expect(stats).toBeDefined(); expect(typeof stats.nodeCount).toBe("number"); expect(typeof stats.edgeCount).toBe("number"); expect(stats.nodeCount).toBeGreaterThanOrEqual(0); }); it("should get all nodes", async () => { await knowledgeGraph.buildFromMemories(); const nodes = await knowledgeGraph.getAllNodes(); expect(Array.isArray(nodes)).toBe(true); expect(nodes.length).toBeGreaterThanOrEqual(0); }); it("should get all edges", async () => { await knowledgeGraph.buildFromMemories(); const edges = await knowledgeGraph.getAllEdges(); expect(Array.isArray(edges)).toBe(true); expect(edges.length).toBeGreaterThanOrEqual(0); }); it("should get connections for a node", async () => { await knowledgeGraph.buildFromMemories(); const nodes = await knowledgeGraph.getAllNodes(); if (nodes.length > 0) { const connections = await knowledgeGraph.getConnections(nodes[0].id); expect(Array.isArray(connections)).toBe(true); } }); }); describe("Data Management", () => { it("should save and load from memory", async () => { await knowledgeGraph.buildFromMemories(); // Save the current state await knowledgeGraph.saveToMemory(); // Create new instance and load const newKG = new KnowledgeGraph(memoryManager); await newKG.initialize(); await newKG.loadFromMemory(); const originalStats = await knowledgeGraph.getStatistics(); const loadedStats = await newKG.getStatistics(); expect(loadedStats.nodeCount).toBe(originalStats.nodeCount); }); it("should remove nodes", async () => { await knowledgeGraph.buildFromMemories(); const nodes = await knowledgeGraph.getAllNodes(); if (nodes.length > 0) { const initialCount = nodes.length; const removed = await knowledgeGraph.removeNode(nodes[0].id); expect(removed).toBe(true); const remainingNodes = await knowledgeGraph.getAllNodes(); expect(remainingNodes.length).toBe(initialCount - 1); } }); }); describe("Performance", () => { it("should handle multiple memories efficiently", async () => { // Add more test data const promises = []; for (let i = 0; i < 20; i++) { promises.push( memoryManager.remember( "analysis", { projectType: i % 2 === 0 ? "javascript" : "python", complexity: ["low", "medium", "high"][i % 3], index: i, }, { projectId: `project-${Math.floor(i / 5)}`, tags: [`tag-${i % 3}`], }, ), ); } await Promise.all(promises); const startTime = Date.now(); await knowledgeGraph.buildFromMemories(); const buildTime = Date.now() - startTime; expect(buildTime).toBeLessThan(2000); // Should complete within 2 seconds const stats = await knowledgeGraph.getStatistics(); expect(stats.nodeCount).toBeGreaterThanOrEqual(0); }); }); });

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/tosin2013/documcp'

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