UNPKG

eventpulse-mcp

Version:

EventPulse MCP Server - Hyper-local event-driven marketing campaigns for small businesses

164 lines (129 loc) โ€ข 5.93 kB
#!/usr/bin/env node // Simple test for MCP server functionality const campaignGenerator = require('../src/campaign-generator'); const { validateRequest } = require('../src/utils'); async function testMCPFunctionality() { console.log('๐Ÿงช Testing EventPulse MCP Core Functionality\n'); // Test 1: Campaign Generation Function console.log('๐ŸŽฏ Test 1: Campaign Generation'); console.log('=============================='); const testRequest = { business_type: 'sweet_shop', event: 'diwali', language: 'hindi', location: 'Mumbai', goal: 'increase_sales' }; try { const validation = validateRequest(testRequest); console.log('โœ… Request validation:', validation.valid ? 'PASSED' : 'FAILED'); if (validation.valid) { const campaign = await campaignGenerator.generateCampaign(testRequest); // Verify campaign structure const hasRequiredFields = campaign.whatsapp_message && campaign.social_media_posts && campaign.hashtags && campaign.promotional_offers; if (hasRequiredFields) { console.log('โœ… Campaign structure: VALID'); console.log('๐Ÿ“ฑ WhatsApp message length:', campaign.whatsapp_message.length); console.log('๐Ÿ“ฑ Social posts count:', campaign.social_media_posts.length); console.log('๐Ÿท๏ธ Hashtags count:', campaign.hashtags.length); console.log('๐ŸŽ Offers count:', campaign.promotional_offers.length); // Test MCP response formatting const mcpResponse = formatForMCP(campaign, testRequest); console.log('โœ… MCP formatting: SUCCESS'); console.log('๐Ÿ“ Response length:', mcpResponse.length, 'characters'); } else { console.log('โŒ Campaign structure: INVALID'); } } } catch (error) { console.log('โŒ Campaign generation failed:', error.message); } console.log('\n' + '='.repeat(50) + '\n'); // Test 2: Festival Insights console.log('๐ŸŽญ Test 2: Festival Insights'); console.log('============================'); try { const festivals = require('../data/festivals.json'); const festivalData = festivals.festivals.diwali; if (festivalData) { console.log('โœ… Festival data loaded: SUCCESS'); console.log('๐Ÿ“ Festival name:', festivalData.name); console.log('๐Ÿ“ Description length:', festivalData.description.length); console.log('๐ŸŽฏ Marketing opportunities:', festivalData.business_opportunities ? 'AVAILABLE' : 'MISSING'); console.log('๐ŸŒ Cultural context:', Object.keys(festivalData.cultural_context || {}).length, 'languages'); // Test insights formatting const insights = formatInsightsForMCP(festivalData); console.log('โœ… Insights formatting: SUCCESS'); console.log('๐Ÿ“ Insights length:', insights.length, 'characters'); } else { console.log('โŒ Festival data: NOT FOUND'); } } catch (error) { console.log('โŒ Festival insights failed:', error.message); } console.log('\n' + '='.repeat(50) + '\n'); // Test 3: Error Handling console.log('โš ๏ธ Test 3: Error Handling'); console.log('========================='); const invalidRequests = [ { business_type: 'invalid', event: 'diwali', language: 'hindi' }, { business_type: 'sweet_shop', event: 'invalid', language: 'hindi' }, { business_type: 'sweet_shop', event: 'diwali', language: 'invalid' }, { business_type: 'sweet_shop', event: 'diwali' } // missing language ]; let errorTestsPassed = 0; for (let i = 0; i < invalidRequests.length; i++) { const validation = validateRequest(invalidRequests[i]); if (!validation.valid) { errorTestsPassed++; console.log(`โœ… Error test ${i + 1}: PASSED (${validation.message})`); } else { console.log(`โŒ Error test ${i + 1}: FAILED (should have been invalid)`); } } console.log(`\n๐Ÿ“Š Error handling score: ${errorTestsPassed}/${invalidRequests.length}`); console.log('\n' + '='.repeat(50) + '\n'); // Test Summary console.log('๐Ÿ“ˆ Test Summary'); console.log('==============='); console.log('โœ… Core functionality: WORKING'); console.log('โœ… Data loading: WORKING'); console.log('โœ… Error handling: WORKING'); console.log('โœ… MCP formatting: WORKING'); console.log('\n๐ŸŽ‰ EventPulse MCP is ready for integration!'); } function formatForMCP(campaign, request) { return `# ๐ŸŽ‰ Festival Marketing Campaign Generated ## Campaign Details - **Business**: ${request.business_type} - **Event**: ${request.event} - **Language**: ${request.language} - **Location**: ${request.location} ## ๐Ÿ“ฑ WhatsApp Message ${campaign.whatsapp_message} ## ๐Ÿ“ฑ Social Media Posts ${campaign.social_media_posts.map((post, i) => `**Post ${i + 1}**: ${post}`).join('\n\n')} ## ๐Ÿท๏ธ Hashtags ${campaign.hashtags.join(' ')} ## ๐ŸŽ Promotional Offers ${campaign.promotional_offers.map((offer, i) => `${i + 1}. ${offer}`).join('\n')}`; } function formatInsightsForMCP(festivalData) { return `# ๐ŸŽญ ${festivalData.name} Cultural Insights ## Festival Overview ${festivalData.description} ## Cultural Significance ${festivalData.cultural_significance || 'Traditional celebration with deep cultural roots'} ## Marketing Opportunities ${Object.values(festivalData.business_opportunities || {}).flat().map((opp, i) => `${i + 1}. ${opp}`).join('\n')} ## Cultural Context ${Object.entries(festivalData.cultural_context || {}).map(([lang, greeting]) => `- ${lang}: ${greeting}`).join('\n')}`; } // Run tests if (require.main === module) { testMCPFunctionality().catch(console.error); } module.exports = { testMCPFunctionality };