UNPKG

jobnimbus-mcp-client

Version:

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

62 lines 2.63 kB
/** * Compare Material Alternatives Tool - Simplified Implementation */ import { BaseTool } from '../baseTool.js'; import { ROOFING_MATERIAL_SPECS } from '../../constants/roofing.constants.js'; export class CompareMaterialAlternativesTool extends BaseTool { get definition() { return { name: 'compare_material_alternatives', description: 'Compare material alternatives with similarity scoring, cost comparison, quality ratings, pros/cons analysis', inputSchema: { type: 'object', properties: { base_material: { type: 'string', description: 'Base material SKU or name' }, compare_to: { type: 'array', description: 'Array of SKUs or names to compare', items: { type: 'string' } } }, required: ['base_material'] } }; } async execute(input) { const allMaterials = Object.values(ROOFING_MATERIAL_SPECS); const baseMaterial = allMaterials.find((m) => m.sku === input.base_material || m.name.includes(input.base_material)); if (!baseMaterial) { return { success: false, error: 'Base material not found' }; } const alternatives = allMaterials .filter((m) => m.sku !== baseMaterial.sku) .slice(0, 3) .map((alt) => { const cost_diff = (alt.typical_unit_cost || 0) - (baseMaterial.typical_unit_cost || 0); const cost_diff_percent = ((cost_diff / baseMaterial.typical_unit_cost) * 100).toFixed(1); return { specification: alt, similarity_score: 0.85, cost_comparison: { cost_difference: cost_diff, cost_difference_percent: parseFloat(cost_diff_percent), is_cheaper: cost_diff < 0 }, quality_rating: 8, pros: ['Good coverage', 'Reliable performance'], cons: ['Higher initial cost'], recommendation: 'recommended' }; }); return { success: true, base_material: baseMaterial, alternatives, best_value: alternatives[0] || null, best_quality: alternatives[0] || null, summary: `Found ${alternatives.length} alternative materials` }; } } export default () => new CompareMaterialAlternativesTool(); //# sourceMappingURL=compareMaterialAlternatives.js.map