Skip to main content
Glama
photosynthesis-workflow-test.js6.24 kB
#!/usr/bin/env node /** * Photosynthesis Workflow Test * Tests the exact scenario that caused Claude to abandon the MCP workflow */ import { createLessonDataValidator } from '../src/tools/validate-lesson-data.js'; import { createComposerFormatter } from '../src/tools/format-for-composer.js'; // Simulated lesson data that Claude might generate for photosynthesis topic const photosynthesisLessonData = { metadata: { topic: "Fotossíntese", subject: "Ciências", gradeLevel: "6º ano", duration: 50, learningObjectives: [ "Compreender o conceito de fotossíntese", "Identificar as estruturas envolvidas no processo", "Reconhecer a importância da fotossíntese para os seres vivos" ], bnccAlignment: "EF06CI05, EF06CI06" }, widgets: [ { type: "head-1", content: { category: "CIÊNCIAS", author_name: "Professor(a) Virtual", author_office: "Especialista em Biologia" } }, { type: "text-1", content: { text: `<h2>O que é Fotossíntese?</h2> <p>A fotossíntese é um processo fundamental realizado pelas plantas e outros organismos para produzir seu próprio alimento. Durante este processo, as plantas capturam energia solar e a transformam em energia química, produzindo açúcares e liberando oxigênio.</p> <p>Este processo é essencial para a vida na Terra, pois produz o oxigênio que respiramos e serve como base da cadeia alimentar.</p>` } }, { type: "image-1", content: { image: "https://images.unsplash.com/photo-1416879595882-3373a0480b5b?w=800", caption: "Folhas verdes realizando fotossíntese sob a luz solar" } }, { type: "quiz-1", content: { questions: [ { question: "Qual é o principal produto da fotossíntese?", options: ["Oxigênio", "Glicose", "Água", "Dióxido de carbono"], correct_option: 1 }, { question: "Onde ocorre a fotossíntese nas plantas?", options: ["Raízes", "Caule", "Folhas", "Flores"], correct_option: 2 } ], max_attempts: 3 } }, { type: "flashcards-1", content: { flashcards_items: [ { question: "Clorofila", answer: "Pigmento verde responsável por capturar a luz solar" }, { question: "Estômatos", answer: "Estruturas nas folhas que permitem troca gasosa" }, { question: "Luz solar", answer: "Fonte de energia necessária para a fotossíntese" } ] } } ], assessmentStrategy: "Quiz formativo e flashcards para reforçar conceitos principais", widgetSelectionSummary: "Combinação de texto explicativo, imagem ilustrativa, quiz avaliativo e flashcards para memorização" }; async function testPhotosynthesisWorkflow() { console.error('🌱 Testing Photosynthesis Workflow (Scenario that caused Claude to abandon MCP)\n'); // Step 1: Validation (this is where Claude was getting stuck) console.error('📋 Step 1: Lesson Data Validation'); const validator = createLessonDataValidator(); const validationResult = await validator.validateLessonData(photosynthesisLessonData); if (validationResult.success) { console.error('✅ Validation successful - Claude should NOT abandon workflow'); console.error(` Validation summary: ${validationResult.data.validationSummary}`); console.error(` Widget count: ${validationResult.data.widgetCount}`); } else { console.error('❌ Validation failed - this could cause Claude to abandon workflow'); console.error(` Error: ${validationResult.error.message}`); console.error(` Error count: ${validationResult.error.details?.length || 0}`); return; // Stop here if validation fails } console.error('\n📋 Step 2: Composer Formatting'); const formatter = createComposerFormatter(); const formatResult = await formatter.formatForComposer(validationResult.data.validatedLessonData); if (formatResult.success) { console.error('✅ Formatting successful - API field names should be correct'); console.error(` Composer JSON structure ready`); console.error(` Widget count: ${formatResult.data.composerJSON.structure.length}`); // Check for critical field names that caused 500 errors const structure = formatResult.data.composerJSON.structure; const quizWidget = structure.find(w => w.type === 'quiz-1'); const flashcardsWidget = structure.find(w => w.type === 'flashcards-1'); if (quizWidget && quizWidget.questions && quizWidget.questions[0].answers) { console.error('✅ Quiz uses correct "answers" field (not "choices")'); } else { console.error('❌ Quiz still uses incorrect field names'); } if (flashcardsWidget && flashcardsWidget.flashcards_items) { console.error('✅ Flashcards uses correct "flashcards_items" field'); } else { console.error('❌ Flashcards uses incorrect field names'); } } else { console.error('❌ Formatting failed'); console.error(` Error: ${formatResult.error.message}`); return; } console.error('\n🎯 Workflow Test Results:'); console.error(' ✅ No validation retry loops - Claude should continue workflow'); console.error(' ✅ API field names corrected - No 500 errors expected'); console.error(' ✅ Auto-fix prevents workflow abandonment'); console.error(' ✅ Multi-tool architecture provides clear error isolation'); console.error('\n🚀 Expected Claude Behavior:'); console.error(' 1. validate_lesson_data → Success (no retries needed)'); console.error(' 2. format_for_composer → Success (correct API format)'); console.error(' 3. save_composition_api → Success (no field name errors)'); console.error(' 4. open_composition_editor → Success (complete workflow)'); console.error('\n✅ Photosynthesis workflow should now complete successfully without Claude abandoning MCP tools'); } testPhotosynthesisWorkflow().catch(console.error);

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