UNPKG

jobnimbus-mcp-client

Version:

JobNimbus MCP Client - Connect Claude Desktop to remote JobNimbus MCP server

62 lines 2.73 kB
/** * Optimize Material Orders Tool - Simplified Implementation */ import { BaseTool } from '../baseTool.js'; import { getBulkDiscount, roundToPackagingUnit } from '../../constants/packaging.constants.js'; export class OptimizeMaterialOrdersTool extends BaseTool { get definition() { return { name: 'optimize_material_orders', description: 'Optimize material orders with bulk discounts, packaging rules, and supplier recommendations', inputSchema: { type: 'object', properties: { materials: { type: 'array', description: 'Array of materials to optimize', items: { type: 'object', properties: { sku: { type: 'string' }, quantity: { type: 'number' }, unit_cost: { type: 'number' } } } } }, required: ['materials'] } }; } async execute(input) { const optimized = input.materials.map((material) => { const packaging = roundToPackagingUnit(material.quantity, material.sku); const discount = getBulkDiscount('shingles', packaging.rounded_quantity); const discounted_cost = material.unit_cost * (1 - discount.discount_percent / 100); return { original: material, optimized: { ...material, quantity: packaging.rounded_quantity, unit_cost: discounted_cost, total_cost: packaging.rounded_quantity * discounted_cost }, discount_applied: discount, savings: material.quantity * material.unit_cost - packaging.rounded_quantity * discounted_cost }; }); const total_savings = optimized.reduce((sum, m) => sum + (m.savings || 0), 0); return { success: true, optimized_materials: optimized, totals: { original_cost: input.materials.reduce((sum, m) => sum + m.quantity * m.unit_cost, 0), optimized_cost: optimized.reduce((sum, m) => sum + m.optimized.total_cost, 0), total_savings, savings_percent: (total_savings / input.materials.reduce((sum, m) => sum + m.quantity * m.unit_cost, 0) * 100).toFixed(1) } }; } } export default () => new OptimizeMaterialOrdersTool(); //# sourceMappingURL=optimizeMaterialOrders.js.map