Skip to main content
Glama
bank-hapoalim-discounts.cjs8.04 kB
#!/usr/bin/env node const { spawn } = require('child_process'); class BankHapoalimDiscounts { constructor() { this.server = null; this.requestId = 1; } async start() { console.log('🏦 BANK HAPOALIM COSTS WITH/WITHOUT DISCOUNTS'); console.log('=============================================='); this.server = spawn('node', ['dist/index.js'], { stdio: ['pipe', 'pipe', 'pipe'] }); await new Promise(resolve => setTimeout(resolve, 3000)); console.log('✅ Server ready\n'); } async sendRequest(method, params = {}) { return new Promise((resolve, reject) => { const request = { jsonrpc: '2.0', id: this.requestId++, method, params }; this.server.stdin.write(JSON.stringify(request) + '\n'); const timeout = setTimeout(() => { reject(new Error(`Timeout: ${method}`)); }, 30000); const handleData = (data) => { clearTimeout(timeout); this.server.stdout.removeListener('data', handleData); try { const lines = data.toString().split('\n').filter(line => line.trim()); for (let i = lines.length - 1; i >= 0; i--) { const line = lines[i]; if (line.trim()) { try { const response = JSON.parse(line); resolve(response); return; } catch (e) { continue; } } } reject(new Error('No valid JSON response found')); } catch (error) { reject(error); } }; this.server.stdout.on('data', handleData); }); } async getCostData() { try { console.log('🔧 Initialize and Authenticate'); await this.sendRequest('initialize', { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'Bank Hapoalim Discounts', version: '1.0.0' } }); await this.sendRequest('tools/call', { name: 'authenticate_user', arguments: { username: 'david+allcloud@umbrellacost.com', password: 'B4*zcI7#F7poEC' } }); console.log('✅ Authenticated\n'); // Test 1: COST ONLY (no discounts) console.log('💰 TEST 1: COST ONLY (costType: ["cost"])'); console.log('=========================================\n'); const costOnlyResp = await this.sendRequest('tools/call', { name: 'api___invoices_caui', arguments: { startDate: '2025-08-01', endDate: '2025-08-31', costType: ['cost'], // Only cost, no discount groupBy: 'none', periodGranLevel: 'month', isUnblended: true, cloud_context: 'aws', customer_account_key: '16185' } }); const costOnlyContent = costOnlyResp.result?.content?.[0]?.text; let costOnly = 0; if (costOnlyContent) { const match = costOnlyContent.match(/"total_cost":\s*([\d.]+)/); if (match) { costOnly = parseFloat(match[1]); } console.log(`August 2025 - Cost Only: $${costOnly.toFixed(2)}`); } // Test 2: COST + DISCOUNT console.log('\n💰 TEST 2: COST + DISCOUNT (costType: ["cost", "discount"])'); console.log('===========================================================\n'); const costWithDiscountResp = await this.sendRequest('tools/call', { name: 'api___invoices_caui', arguments: { startDate: '2025-08-01', endDate: '2025-08-31', costType: ['cost', 'discount'], // Include both cost and discount groupBy: 'none', periodGranLevel: 'month', isUnblended: true, cloud_context: 'aws', customer_account_key: '16185' } }); const costWithDiscountContent = costWithDiscountResp.result?.content?.[0]?.text; let costWithDiscount = 0; if (costWithDiscountContent) { const match = costWithDiscountContent.match(/"total_cost":\s*([\d.]+)/); if (match) { costWithDiscount = parseFloat(match[1]); } console.log(`August 2025 - Cost with Discount: $${costWithDiscount.toFixed(2)}`); } // Test 3: DISCOUNT ONLY (to see if there are any discounts) console.log('\n💰 TEST 3: DISCOUNT ONLY (costType: ["discount"])'); console.log('================================================\n'); const discountOnlyResp = await this.sendRequest('tools/call', { name: 'api___invoices_caui', arguments: { startDate: '2025-08-01', endDate: '2025-08-31', costType: ['discount'], // Only discount groupBy: 'none', periodGranLevel: 'month', isUnblended: true, cloud_context: 'aws', customer_account_key: '16185' } }); const discountOnlyContent = discountOnlyResp.result?.content?.[0]?.text; let discountOnly = 0; if (discountOnlyContent) { const match = discountOnlyContent.match(/"total_cost":\s*([\d.-]+)/); if (match) { discountOnly = parseFloat(match[1]); } console.log(`August 2025 - Discount Amount: $${discountOnly.toFixed(2)}`); } // Summary console.log('\n📊 DISCOUNT ANALYSIS FOR AUGUST 2025:'); console.log('======================================'); console.log(`Cost Only: $${costOnly.toFixed(2)}`); console.log(`Cost with Discount: $${costWithDiscount.toFixed(2)}`); console.log(`Discount Amount: $${discountOnly.toFixed(2)}`); const difference = costOnly - costWithDiscount; if (Math.abs(difference) > 0.01) { console.log(`\n💡 Discounts Applied: $${Math.abs(difference).toFixed(2)}`); const discountPercent = (Math.abs(difference) / costOnly * 100).toFixed(2); console.log(` Discount Rate: ${discountPercent}%`); } else { console.log('\n❌ No discounts detected'); } // Now get the full monthly breakdown with discounts included console.log('\n\n💰 FULL MONTHLY BREAKDOWN (JAN-AUG 2025) WITH DISCOUNTS:'); console.log('========================================================\n'); const fullResp = await this.sendRequest('tools/call', { name: 'api___invoices_caui', arguments: { startDate: '2025-01-01', endDate: '2025-08-31', costType: ['cost', 'discount'], // Include discounts groupBy: 'none', periodGranLevel: 'month', isUnblended: true, cloud_context: 'aws', customer_account_key: '16185' } }); const fullContent = fullResp.result?.content?.[0]?.text; if (fullContent) { // Extract the JSON data const jsonMatch = fullContent.match(/```json\n([\s\S]*?)\n```/); if (jsonMatch) { const data = JSON.parse(jsonMatch[1]); console.log('Month | Total Cost (with discounts)'); console.log('------------|---------------------------'); data.forEach(item => { const month = item.usage_date; const cost = item.total_cost.toFixed(2); console.log(`${month} | $${cost}`); }); const total = data.reduce((sum, item) => sum + item.total_cost, 0); console.log('------------|---------------------------'); console.log(`TOTAL | $${total.toFixed(2)}`); } } } catch (error) { console.error('❌ Error:', error.message); } } async cleanup() { if (this.server) { this.server.kill(); } } async run() { try { await this.start(); await this.getCostData(); } finally { await this.cleanup(); console.log('\n🏁 Bank Hapoalim Discount Analysis Complete'); } } } const costQuery = new BankHapoalimDiscounts(); costQuery.run();

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