Skip to main content
Glama
compare-ui-vs-mcp.cjs6.75 kB
#!/usr/bin/env node // Compare UI export CSV with MCP data to identify discrepancies const fs = require('fs'); // Parse the UI CSV data const uiCsvContent = `"groupBy","2025-07-16","2025-07-17","2025-07-18","2025-07-19","2025-07-20","2025-07-21","2025-07-22","2025-07-23","2025-07-24","2025-07-25","2025-07-26","2025-07-27","2025-07-28","2025-07-29","2025-07-30","2025-07-31","2025-08-01","2025-08-02","2025-08-03","2025-08-04","2025-08-05","2025-08-06","2025-08-07","2025-08-08","2025-08-09","2025-08-10","2025-08-11","2025-08-12","2025-08-13","2025-08-14","2025-08-15","2025-08-16","2025-08-17","2025-08-18","2025-08-19","2025-08-20","2025-08-21","2025-08-22","2025-08-23" "AmazonCloudWatch","196.68288151421126","193.90091801946846","202.5132040778832","208.50923218225478","222.56046011284377","204.01611576437912","228.52705383178744","255.67124339266775","216.8055207468458","199.3970962027484","199.63213159249426","210.91250777675492","215.98039116029224","236.650944064537","216.81055481751164","223.55762608785545","184.04474927860574","166.01170751351913","182.9246281485415","198.5030184002399","191.45241802548693","185.0955147890043","205.57010892387672","205.24484294857052","199.38036862977646","234.93824352172697","212.5099945696006","190.00885468451668","237.66987117296884","176.97810287498555","185.73182408203553","176.44954666040195","350.6173483889874","198.58151806015638","206.70842922704702","303.32250407653027","210.82346481286737","234.65223450860225","202.58001208879512"`; // Parse CSV const lines = uiCsvContent.split('\n'); const headers = lines[0].split(',').map(h => h.replace(/"/g, '')); const values = lines[1].split(',').map(v => v.replace(/"/g, '')); // Build UI data map const uiData = {}; for (let i = 1; i < headers.length; i++) { uiData[headers[i]] = parseFloat(values[i]); } // MCP data from our successful retrieval const mcpData = { "2025-07-28": 218.55, "2025-07-29": 239.16, "2025-07-30": 219.35, "2025-07-31": 226.08, "2025-08-01": 186.45, "2025-08-02": 166.64, "2025-08-03": 183.30, "2025-08-04": 201.06, "2025-08-05": 193.93, "2025-08-06": 187.54, "2025-08-07": 207.99, "2025-08-08": 207.10, "2025-08-09": 199.84, "2025-08-10": 235.40, "2025-08-11": 214.45, "2025-08-12": 191.86, "2025-08-13": 239.32, "2025-08-14": 177.44, "2025-08-15": 186.85, "2025-08-16": 176.93, "2025-08-17": 351.09, "2025-08-18": 199.06, "2025-08-19": 207.19, "2025-08-20": 303.80, "2025-08-21": 211.30, "2025-08-22": 235.13, "2025-08-23": 203.12, "2025-08-24": 195.39, "2025-08-25": 112.50 }; console.log('🔍 COMPARING UI EXPORT VS MCP DATA'); console.log('=' .repeat(70)); // Find overlapping dates const overlappingDates = Object.keys(mcpData).filter(date => uiData[date] !== undefined); console.log(`\n📊 Analysis Period:`); console.log(` UI Data: ${Object.keys(uiData)[0]} to ${Object.keys(uiData)[Object.keys(uiData).length - 1]}`); console.log(` MCP Data: ${Object.keys(mcpData)[0]} to ${Object.keys(mcpData)[Object.keys(mcpData).length - 1]}`); console.log(` Overlapping dates: ${overlappingDates.length}`); // Compare overlapping dates console.log('\n📈 DETAILED COMPARISON (Overlapping Dates):'); console.log('-'.repeat(70)); console.log('Date | UI Export | MCP Data | Difference | % Diff'); console.log('-'.repeat(70)); let totalUi = 0; let totalMcp = 0; let maxDiff = 0; let maxDiffDate = ''; overlappingDates.sort().forEach(date => { const uiValue = uiData[date]; const mcpValue = mcpData[date]; const diff = mcpValue - uiValue; const percentDiff = ((diff / uiValue) * 100).toFixed(1); totalUi += uiValue; totalMcp += mcpValue; if (Math.abs(diff) > Math.abs(maxDiff)) { maxDiff = diff; maxDiffDate = date; } const dateObj = new Date(date + 'T12:00:00Z'); const dayName = dateObj.toLocaleDateString('en-US', { weekday: 'short' }); console.log( `${date} (${dayName}) | $${uiValue.toFixed(2).padStart(9)} | $${mcpValue.toFixed(2).padStart(9)} | ${diff >= 0 ? '+' : ''}$${diff.toFixed(2).padStart(7)} | ${percentDiff.padStart(6)}%` ); }); console.log('-'.repeat(70)); console.log(`TOTALS | $${totalUi.toFixed(2).padStart(9)} | $${totalMcp.toFixed(2).padStart(9)} | ${totalMcp >= totalUi ? '+' : ''}$${(totalMcp - totalUi).toFixed(2).padStart(7)} | ${((totalMcp - totalUi) / totalUi * 100).toFixed(1).padStart(6)}%`); // Calculate statistics const avgUi = totalUi / overlappingDates.length; const avgMcp = totalMcp / overlappingDates.length; console.log('\n📊 KEY FINDINGS:'); console.log(` Average daily (UI): $${avgUi.toFixed(2)}`); console.log(` Average daily (MCP): $${avgMcp.toFixed(2)}`); console.log(` Average difference: $${(avgMcp - avgUi).toFixed(2)} (${((avgMcp - avgUi) / avgUi * 100).toFixed(1)}%)`); console.log(` Max difference: $${Math.abs(maxDiff).toFixed(2)} on ${maxDiffDate}`); // Check specific high-variance dates console.log('\n⚠️ NOTABLE DISCREPANCIES:'); const aug17Ui = uiData['2025-08-17']; const aug17Mcp = mcpData['2025-08-17']; console.log(` Aug 17: UI = $${aug17Ui.toFixed(2)}, MCP = $${aug17Mcp.toFixed(2)}, Diff = $${(aug17Mcp - aug17Ui).toFixed(2)}`); const aug20Ui = uiData['2025-08-20']; const aug20Mcp = mcpData['2025-08-20']; console.log(` Aug 20: UI = $${aug20Ui.toFixed(2)}, MCP = $${aug20Mcp.toFixed(2)}, Diff = $${(aug20Mcp - aug20Ui).toFixed(2)}`); // Calculate UI total for full period const uiTotal = Object.values(uiData).reduce((sum, val) => sum + val, 0); console.log('\n💰 FULL PERIOD TOTALS:'); console.log(` UI Export (Jul 16 - Aug 23): $${uiTotal.toFixed(2)} (${Object.keys(uiData).length} days)`); console.log(` MCP Data (Jul 28 - Aug 25): $${Object.values(mcpData).reduce((sum, val) => sum + val, 0).toFixed(2)} (${Object.keys(mcpData).length} days)`); // Show dates missing from MCP const missingFromMcp = Object.keys(uiData).filter(date => !mcpData[date]); console.log(`\n📅 Dates in UI but not MCP (${missingFromMcp.length}):`); console.log(` ${missingFromMcp.slice(0, 5).join(', ')}...`); console.log('\n🔍 ANALYSIS SUMMARY:'); console.log('1. Both datasets show the same general patterns'); console.log('2. Small differences (~1-3%) on most days'); console.log('3. Both correctly identify the Aug 17 spike ($350+)'); console.log('4. Both show similar daily variations'); console.log('5. The differences could be due to:'); console.log(' - Rounding differences in API responses'); console.log(' - Different precision in calculations'); console.log(' - Potential caching or timing differences'); console.log(' - API version differences between UI and MCP endpoints'); console.log('\n✅ CONCLUSION: MCP data closely matches UI export with minor variations!');

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/daviddraiumbrella/invoice-monitoring'

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