UNPKG

@spaik/mcp-server-roi

Version:

MCP server for AI ROI prediction and tracking with Monte Carlo simulations

83 lines 2.82 kB
import { z } from 'zod'; export const FinancialMetricsSchema = z.object({ monthly_cost_savings: z.number(), monthly_time_savings_hours: z.number(), quality_improvement_value: z.number(), revenue_uplift: z.number(), total_monthly_benefit: z.number() }); export const ROICalculationsSchema = z.object({ total_investment: z.number(), net_present_value: z.number(), internal_rate_of_return: z.number(), payback_period_months: z.number(), five_year_roi: z.number(), break_even_date: z.string().datetime() }); export const ProjectionSchema = z.object({ id: z.string().uuid().optional(), project_id: z.string().uuid(), scenario_name: z.string().default('Base Case'), metadata: z.object({ confidence_level: z.number().min(0).max(1).default(0.95), assumptions: z.array(z.object({ category: z.string(), description: z.string(), impact: z.enum(['low', 'medium', 'high']) })).default([]) }), implementation_costs: z.object({ software_licenses: z.number().min(0), development_hours: z.number().min(0), training_costs: z.number().min(0), infrastructure: z.number().min(0), ongoing_monthly: z.number().min(0) }), timeline_months: z.number().min(1), financial_metrics: z.object({ conservative: FinancialMetricsSchema, expected: FinancialMetricsSchema, optimistic: FinancialMetricsSchema }), calculations: ROICalculationsSchema, created_at: z.string().datetime().optional(), updated_at: z.string().datetime().optional() }); export const ProjectionCreateSchema = ProjectionSchema.omit({ id: true, created_at: true, updated_at: true }); // Monte Carlo simulation results export const MonteCarloResultsSchema = z.object({ projection_id: z.string().uuid(), simulation_count: z.number(), run_date: z.string().datetime(), roi_distribution: z.object({ percentiles: z.object({ p5: z.number(), p25: z.number(), p50: z.number(), p75: z.number(), p95: z.number() }), mean: z.number(), std_dev: z.number(), confidence_interval_95: z.tuple([z.number(), z.number()]) }), payback_distribution: z.object({ percentiles: z.record(z.string(), z.number()), probability_within_12_months: z.number(), probability_within_24_months: z.number() }), risk_analysis: z.object({ probability_of_loss: z.number(), value_at_risk_95: z.number(), key_risk_drivers: z.array(z.object({ factor: z.string(), impact_percentage: z.number(), correlation: z.number() })) }) }); //# sourceMappingURL=projection.js.map