jobnimbus-mcp-client
Version:
JobNimbus MCP Client - Connect Claude Desktop to remote JobNimbus MCP server
62 lines • 2.63 kB
JavaScript
/**
* 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