Skip to main content
Glama
test-live-fixes.js6.34 kB
#!/usr/bin/env node /** * Live test of both bug fixes in the running JIT server * Tests integration with the actual MCP implementation */ import { Server } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { spawn } from 'child_process'; console.log('🧪 Live Testing JIT Bug Fixes'); console.log('============================='); // Test data that would previously cause both errors const testCompositionData = { metadata: { // Missing topic field - should trigger auto-fix duration: 50, subject: 'matemática' }, widgets: [ { type: 'head-1', content: { category: 'MATEMÁTICA', author_name: 'Professor(a) Virtual' } }, { type: 'text-1', content: { title: 'Introdução ao MMC', text: '<p>O Mínimo Múltiplo Comum é um conceito fundamental.</p>' } }, { type: 'quiz-1', content: { title: 'Quiz sobre MMC', questions: [ { question: '<p>Qual é o MMC de 6 e 8?</p>', answers: [ { text: '<p>12</p>', correct_answer: false }, { text: '<p>24</p>', correct_answer: true }, { text: '<p>48</p>', correct_answer: false } ] } ] } } ] }; // Base64 UID that previously failed validation const testCompositionUID = 'H4sIAAAAAAAAAwBiAZ3-AwAAAUEQAAAAADE0MGUwYzE1IpaoH3ndz-MxVeOzi93yJsbABDZmdWLUXb1t34bSxP9KlBRqLNuFe7rZxxkuW4d3qYyA3fRhS5-GRTu_HbLK0rof1DUcIp_zOjkIDe7Q5_qbkdeV4HEpiJTCIOCyvsT8TNQiknMahk2wM7zYjkZJx54mZ9qbnPDIctO0_xNfiUFmYFKo0ZHHqMe__s1GK9lnUQZDcNRF6j5FqeWp3ODwH7QUuK2XInsvEeLvVsJcV0uzzQbwVIgKpLeblTIg__oAN8V-IUAtwLsA2ZWaViebN3Dl2UmgwBnV5WH4POvu1hz6PkplCBseX7WjcSiceywWVuNR2aB-0HE75yXHngArvWZKLZ2sfIk2t90oyQzd25-htuPYvNqw9pL6QP1vHRIjGTSXdm8L6-5KEx57svOEaNGi9U-EBIgRGP8gIyoIpwnRATjgq_J3pQWKyn399kl3AAAA__8'; async function testMCPConnection() { console.log('📡 Testing MCP Connection...'); // Spawn the MCP server process const serverProcess = spawn('node', [ '--max-old-space-size=4096', 'dist/browser-automation-api-jit-v5.1.0.js' ], { stdio: ['pipe', 'pipe', 'pipe'] }); // Create MCP client const transport = new StdioClientTransport({ reader: serverProcess.stdout, writer: serverProcess.stdin }); const client = new Server({ name: 'test-client', version: '1.0.0' }, { capabilities: {} }); try { await client.connect(transport); console.log('✅ MCP Connection established'); // Test 1: List available tools console.log('\n📝 Test 1: Available Tools'); const tools = await client.listTools(); const relevantTools = tools.tools.filter(t => t.name === 'validate_lesson_data' || t.name === 'open_composition_editor' ); console.log(` Found ${relevantTools.length}/2 target tools:`); relevantTools.forEach(tool => { console.log(` ✅ ${tool.name}: ${tool.description.substring(0, 50)}...`); }); if (relevantTools.length !== 2) { throw new Error('Missing target tools in MCP server'); } // Test 2: Validation Auto-Fix console.log('\n📝 Test 2: Validation Auto-Fix'); console.log(' Testing with missing topic field...'); try { const validationResult = await client.callTool('validate_lesson_data', { lessonData: testCompositionData }); const parsed = JSON.parse(validationResult.content[0].text); if (parsed.success) { console.log(' ✅ Auto-fix successful!'); console.log(` 📊 Validation summary: ${parsed.data?.validationSummary || 'N/A'}`); if (parsed.debug?.autoFixesApplied) { console.log(` 🔧 Auto-fixes applied: ${parsed.debug.autoFixesApplied.length}`); } } else { console.log(' ❌ Auto-fix failed:', parsed.error?.message); return false; } } catch (error) { console.log(' ❌ Validation test error:', error.message); return false; } // Test 3: UID Format Validation (simulated) console.log('\n📝 Test 3: UID Format Validation'); console.log(' Testing base64-encoded UID format...'); // Since we can't easily test the browser component, we'll test the validation logic // by attempting to call the tool (it will fail at browser launch but pass UID validation) try { const editorResult = await client.callTool('open_composition_editor', { compositionUid: testCompositionUID }); const parsed = JSON.parse(editorResult.content[0].text); // We expect this to fail at browser launch, NOT at UID validation if (parsed.error?.code === 'MISSING_COMPOSITION_UID' || parsed.error?.code === 'NAVIGATION_ERROR' || parsed.success === false && !parsed.error?.message?.includes('Invalid composition UID format')) { console.log(' ✅ UID format validation passed (failed at expected browser step)'); console.log(` 📊 Error code: ${parsed.error?.code || 'SUCCESS'}`); } else if (parsed.error?.message?.includes('Invalid composition UID format')) { console.log(' ❌ UID format validation failed:', parsed.error.message); return false; } else { console.log(' 🎉 Unexpected success or different error (still good)'); } } catch (error) { console.log(' ❌ UID test error:', error.message); return false; } console.log('\n🎯 All Tests Completed Successfully!'); console.log('🚀 Both bug fixes are active and working correctly.'); return true; } catch (error) { console.log('❌ MCP Test failed:', error.message); return false; } finally { try { await client.close(); } catch (e) { // Ignore cleanup errors } serverProcess.kill(); } } // Run the test testMCPConnection() .then(success => { if (success) { console.log('\n✅ LIVE TEST PASSED - Bug fixes are deployed and working!'); process.exit(0); } else { console.log('\n❌ LIVE TEST FAILED - Issues detected with bug fixes'); process.exit(1); } }) .catch(error => { console.log('\n💥 TEST CRASHED:', error.message); 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/rkm097git/euconquisto-composer-mcp-poc'

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