Skip to main content
Glama
joelmnz

Article Manager MCP Server

by joelmnz
test-mcp-embedding-integration.ts5.07 kB
#!/usr/bin/env bun /** * Test script for MCP server embedding integration * Tests the new embedding status features in MCP responses */ import { createArticle, readArticle, listArticles } from '../src/backend/services/articles.js'; import { embeddingQueueService } from '../src/backend/services/embeddingQueue.js'; import { databaseArticleService } from '../src/backend/services/databaseArticles.js'; const SEMANTIC_SEARCH_ENABLED = process.env.SEMANTIC_SEARCH_ENABLED?.toLowerCase() === 'true'; async function testMCPEmbeddingIntegration() { console.log('🧪 Testing MCP Embedding Integration...\n'); if (!SEMANTIC_SEARCH_ENABLED) { console.log('⚠️ Semantic search is not enabled. Set SEMANTIC_SEARCH_ENABLED=true to test embedding features.'); return; } try { // Test 1: Create an article and verify it queues embedding task console.log('📝 Test 1: Creating article with background embedding...'); const timestamp = Date.now(); const testArticle = await createArticle( `MCP Test Article ${timestamp}`, 'This is a test article for MCP embedding integration.', 'Test article for MCP integration' ); console.log('✅ Article created:', testArticle.filename); // Test 2: Check if embedding task was queued console.log('\n🔍 Test 2: Checking embedding task status...'); const slug = testArticle.filename.replace(/\.md$/, ''); const articleId = await databaseArticleService.getArticleId(slug); if (articleId) { const tasks = await embeddingQueueService.getTasksForArticle(articleId); console.log(`✅ Found ${tasks.length} embedding task(s) for article`); if (tasks.length > 0) { const latestTask = tasks[0]; console.log(` - Task ID: ${latestTask.id}`); console.log(` - Status: ${latestTask.status}`); console.log(` - Operation: ${latestTask.operation}`); console.log(` - Priority: ${latestTask.priority}`); } } // Test 3: Test queue statistics console.log('\n📊 Test 3: Getting queue statistics...'); const queueStats = await embeddingQueueService.getDetailedQueueStats(); console.log('✅ Queue statistics:'); console.log(` - Pending: ${queueStats.stats.pending}`); console.log(` - Processing: ${queueStats.stats.processing}`); console.log(` - Completed: ${queueStats.stats.completed}`); console.log(` - Failed: ${queueStats.stats.failed}`); console.log(` - Total: ${queueStats.stats.total}`); // Test 4: Test queue health console.log('\n🏥 Test 4: Checking queue health...'); const queueHealth = await embeddingQueueService.getQueueHealth(); console.log('✅ Queue health:'); console.log(` - Is Healthy: ${queueHealth.isHealthy}`); console.log(` - Total Tasks: ${queueHealth.totalTasks}`); console.log(` - Failed Last 24h: ${queueHealth.failedTasksLast24h}`); if (queueHealth.issues.length > 0) { console.log(` - Issues: ${queueHealth.issues.join(', ')}`); } // Test 5: Simulate MCP readArticle with embedding status console.log('\n📖 Test 5: Simulating MCP readArticle with embedding status...'); const articleWithStatus = await readArticle(testArticle.filename); if (articleWithStatus && articleId) { const tasks = await embeddingQueueService.getTasksForArticle(articleId); const latestTask = tasks.length > 0 ? tasks[0] : null; const embeddingStatus = { status: latestTask?.status || 'no_tasks', lastUpdated: latestTask?.completedAt || latestTask?.createdAt, hasEmbedding: latestTask?.status === 'completed', isPending: latestTask?.status === 'pending' || latestTask?.status === 'processing', errorMessage: latestTask?.errorMessage }; console.log('✅ Article with embedding status:'); console.log(` - Title: ${articleWithStatus.title}`); console.log(` - Embedding Status: ${embeddingStatus.status}`); console.log(` - Has Embedding: ${embeddingStatus.hasEmbedding}`); console.log(` - Is Pending: ${embeddingStatus.isPending}`); } // Test 6: Test bulk operation identification console.log('\n🔍 Test 6: Identifying articles needing embedding...'); const articlesNeedingEmbedding = await embeddingQueueService.identifyArticlesNeedingEmbedding(); console.log(`✅ Found ${articlesNeedingEmbedding.length} articles needing embedding updates`); if (articlesNeedingEmbedding.length > 0) { console.log(' Sample articles:'); articlesNeedingEmbedding.slice(0, 3).forEach(article => { console.log(` - ${article.slug}: ${article.reason}`); }); } console.log('\n🎉 All MCP embedding integration tests completed successfully!'); } catch (error) { console.error('❌ Test failed:', error); process.exit(1); } } // Run the test testMCPEmbeddingIntegration().catch((error) => { console.error('❌ Test failed during top-level execution:', 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/joelmnz/mcp-markdown-manager'

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