Skip to main content
Glama

Shortcut MCP Server

by currentspace
test-memory-debug.mjs4.34 kB
import v8 from 'v8'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Create directory for snapshots const snapshotDir = path.join(__dirname, 'heap-snapshots'); if (!fs.existsSync(snapshotDir)) { fs.mkdirSync(snapshotDir, { recursive: true }); } // Clean old snapshots fs.readdirSync(snapshotDir).forEach(file => { if (file.endsWith('.heapsnapshot')) { fs.unlinkSync(path.join(snapshotDir, file)); } }); function formatMemory() { const mem = process.memoryUsage(); return { heap: `${(mem.heapUsed / 1024 / 1024).toFixed(2)}MB / ${(mem.heapTotal / 1024 / 1024).toFixed(2)}MB`, rss: `${(mem.rss / 1024 / 1024).toFixed(2)}MB`, external: `${(mem.external / 1024 / 1024).toFixed(2)}MB` }; } function takeSnapshot(label) { if (global.gc) global.gc(); const filename = path.join(snapshotDir, `${label}.heapsnapshot`); v8.writeHeapSnapshot(filename); console.log(`[SNAPSHOT] ${label}: ${JSON.stringify(formatMemory())}`); } console.log('=== Memory Debug Test ===\n'); // Take initial snapshot takeSnapshot('01-initial'); // Import just the modules to see memory impact console.log('\n1. Importing test dependencies...'); const before1 = process.memoryUsage().heapUsed; import { describe, it, expect, beforeEach, vi } from 'vitest'; const after1 = process.memoryUsage().heapUsed; console.log(` Vitest import: +${((after1 - before1) / 1024 / 1024).toFixed(2)}MB`); console.log('\n2. Importing fs modules...'); const before2 = process.memoryUsage().heapUsed; import * as fsPromises from 'fs/promises'; import { existsSync } from 'fs'; const after2 = process.memoryUsage().heapUsed; console.log(` FS import: +${((after2 - before2) / 1024 / 1024).toFixed(2)}MB`); console.log('\n3. Importing language server modules...'); const before3 = process.memoryUsage().heapUsed; import { LanguageServerManager } from './dist/languageServerManager.js'; import { LanguageServerService } from './dist/languageServerService.js'; const after3 = process.memoryUsage().heapUsed; console.log(` Language server import: +${((after3 - before3) / 1024 / 1024).toFixed(2)}MB`); takeSnapshot('02-after-imports'); // Now let's see what happens when we create instances console.log('\n4. Creating LanguageServerManager instance...'); const before4 = process.memoryUsage().heapUsed; const manager = new LanguageServerManager({ monorepoRoot: '/test/monorepo', projects: [] }); const after4 = process.memoryUsage().heapUsed; console.log(` Manager creation: +${((after4 - before4) / 1024 / 1024).toFixed(2)}MB`); takeSnapshot('03-after-manager-creation'); console.log('\n5. Creating LanguageServerService instance...'); const before5 = process.memoryUsage().heapUsed; const service = new LanguageServerService(); const after5 = process.memoryUsage().heapUsed; console.log(` Service creation: +${((after5 - before5) / 1024 / 1024).toFixed(2)}MB`); takeSnapshot('04-after-service-creation'); // Try to trigger TypeScript loading console.log('\n6. Mocking fs and trying initialization...'); vi.mock('fs/promises'); vi.mock('fs', () => ({ existsSync: vi.fn(), })); vi.mocked(fsPromises.readFile).mockResolvedValue(JSON.stringify({ compilerOptions: { target: 'es2020', module: 'commonjs', skipLibCheck: true, noLib: true, types: [], typeRoots: [], }, exclude: ['node_modules'] })); vi.mocked(existsSync).mockReturnValue(true); const before6 = process.memoryUsage().heapUsed; try { await service.initialize('/test/monorepo', false); } catch (e) { console.log(' Init failed:', e.message); } const after6 = process.memoryUsage().heapUsed; console.log(` Initialization attempt: +${((after6 - before6) / 1024 / 1024).toFixed(2)}MB`); takeSnapshot('05-after-init-attempt'); // Final memory state console.log('\n=== Final Memory State ==='); console.log(formatMemory()); console.log('\n=== Heap Snapshots Saved ==='); console.log('Location:', snapshotDir); console.log('\nTo analyze:'); console.log('1. Open Chrome/Edge DevTools'); console.log('2. Go to Memory tab'); console.log('3. Click "Load" and select the .heapsnapshot files'); console.log('4. Compare snapshots to see memory growth'); process.exit(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/currentspace/shortcut_mcp'

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