Skip to main content
Glama

MCP Memory Service

test-recency-scoring.js5.01 kB
#!/usr/bin/env node /** * Test script to validate recency-focused scoring improvements */ const { scoreMemoryRelevance, calculateTimeDecay, calculateRecencyBonus } = require('./utilities/memory-scorer'); const config = require('./config.json'); // Test project context const projectContext = { name: 'mcp-memory-service', language: 'Python', frameworks: ['FastAPI'], tools: ['pytest'] }; // Test memories with different ages const testMemories = [ { content: 'Fixed critical bug in HTTP protocol implementation for memory hooks', tags: ['mcp-memory-service', 'bug-fix', 'http-protocol'], memory_type: 'bug-fix', created_at_iso: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString() // 3 days ago }, { content: 'Comprehensive README restructuring and organization completed successfully for MCP Memory Service project', tags: ['mcp-memory-service', 'claude-code-reference', 'documentation'], memory_type: 'reference', created_at_iso: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000).toISOString() // 60 days ago }, { content: 'Implemented dashboard dark mode with improved UX', tags: ['mcp-memory-service', 'feature', 'dashboard'], memory_type: 'feature', created_at_iso: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString() // 5 days ago }, { content: 'CONTRIBUTING.md Structure - Created comprehensive contribution guidelines', tags: ['mcp-memory-service', 'claude-code-reference', 'documentation'], memory_type: 'reference', created_at_iso: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString() // 30 days ago }, { content: 'Removed ChromaDB backend - major refactoring for v8.0', tags: ['mcp-memory-service', 'refactor', 'architecture'], memory_type: 'architecture', created_at_iso: new Date(Date.now() - 4 * 24 * 60 * 60 * 1000).toISOString() // 4 days ago } ]; // Calculate daysAgo once for each memory (DRY principle) const memoriesWithAge = testMemories.map(mem => ({ ...mem, daysAgo: Math.floor((Date.now() - new Date(mem.created_at_iso)) / (1000 * 60 * 60 * 24)) })); console.log('\n=== RECENCY SCORING TEST ===\n'); // Show decay and bonus calculations console.log('📊 Time Decay and Recency Bonus Analysis:'); console.log('─'.repeat(80)); memoriesWithAge.forEach((mem, idx) => { const decayScore = calculateTimeDecay(mem.created_at_iso, config.memoryScoring.timeDecayRate); // Using decay rate from config const recencyBonus = calculateRecencyBonus(mem.created_at_iso); console.log(`Memory ${idx + 1}: ${mem.daysAgo} days old`); console.log(` Time Decay (${config.memoryScoring.timeDecayRate} rate): ${decayScore.toFixed(3)}`); console.log(` Recency Bonus: ${recencyBonus > 0 ? '+' + recencyBonus.toFixed(3) : '0.000'}`); console.log(` Content: ${mem.content.substring(0, 60)}...`); console.log(''); }); // Score memories with new algorithm console.log('\n📈 Final Scoring Results (New Algorithm):'); console.log('─'.repeat(80)); const scoredMemories = scoreMemoryRelevance(memoriesWithAge, projectContext, { verbose: false, weights: config.memoryScoring.weights, timeDecayRate: config.memoryScoring.timeDecayRate }); scoredMemories.forEach((memory, index) => { console.log(`${index + 1}. Score: ${memory.relevanceScore.toFixed(3)} (${memory.daysAgo} days old)`); console.log(` Content: ${memory.content.substring(0, 70)}...`); console.log(` Breakdown:`); console.log(` - Time Decay: ${memory.scoreBreakdown.timeDecay.toFixed(3)} (weight: ${config.memoryScoring.weights.timeDecay})`); console.log(` - Tag Relevance: ${memory.scoreBreakdown.tagRelevance.toFixed(3)} (weight: ${config.memoryScoring.weights.tagRelevance})`); console.log(` - Content Quality: ${memory.scoreBreakdown.contentQuality.toFixed(3)} (weight: ${config.memoryScoring.weights.contentQuality})`); console.log(` - Recency Bonus: ${memory.scoreBreakdown.recencyBonus.toFixed(3)} (direct boost)`); console.log(''); }); console.log('\n✅ Test Summary:'); console.log('─'.repeat(80)); console.log('Expected Behavior:'); console.log(' - Recent memories (3-5 days old) should rank higher'); console.log(' - Recency bonus (+0.15 for <7 days, +0.10 for <14 days, +0.05 for <30 days)'); console.log(' - Gentler time decay (0.05 rate vs old 0.1 rate)'); console.log(' - Higher time weight (0.40 vs old 0.25)'); console.log(' - Old memories with perfect tags should rank lower despite tag advantage\n'); // Check if recent memories are ranked higher const top3 = scoredMemories.slice(0, 3); const recentInTop3 = top3.filter(m => m.daysAgo <= 7).length; if (recentInTop3 >= 2) { console.log('✅ SUCCESS: At least 2 of top 3 memories are from the last week'); } else { console.log('❌ ISSUE: Recent memories are not prioritized as expected'); } console.log('');

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/doobidoo/mcp-memory-service'

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