masterclass-mcp
Version:
Un serveur MCP pour le calcul nutritionnel et la génération de plans alimentaires
43 lines (42 loc) • 1.98 kB
JavaScript
import { z } from "zod";
export const Gender = z.enum(["male", "female"]);
export const Objective = z.enum(["muscleGain", "weightLoss", "maintenance"]);
export const MacronutrientRatios = z.object({
calories: z.number(),
protein: z.number(),
fat: z.number(),
carbohydrates: z.number()
});
export const DietType = z.enum(["vegetarian", "vegan", "noPork", "none"]);
// Nouvelles options configurables
export const BMRFormula = z.enum(["mifflin", "allometric", "katchMcArdle"]);
export const ActivityLevel = z.enum(["sedentary", "light", "moderate", "high", "extreme"]);
export const MacroStrategy = z.enum(["standard", "proteinFirst", "keto", "lowFat"]);
// Mapping des niveaux d'activité vers leurs multiplicateurs
export const activityMultipliers = {
sedentary: 1.2, // Peu ou pas d'exercice
light: 1.375, // Exercice léger 1-3 fois/semaine
moderate: 1.55, // Exercice modéré 3-5 fois/semaine
high: 1.725, // Exercice intense 6-7 fois/semaine
extreme: 1.9 // Exercice très intense, travail physique
};
// Options de calcul nutritionnel
export const NutritionOptions = z.object({
bmrFormula: BMRFormula.optional().default("mifflin"),
macroStrategy: MacroStrategy.optional().default("standard"),
bodyFatPercentage: z.number().optional(), // Pour Katch-McArdle
customProteinRatio: z.number().optional(), // Pour les stratégies personnalisées
customFatRatio: z.number().optional(), // Pour les stratégies personnalisées
customCarbRatio: z.number().optional() // Pour les stratégies personnalisées
});
export const Profile = z.object({
gender: Gender,
age: z.number(),
weight: z.number(),
height: z.number(),
activityLevel: z.union([z.number(), ActivityLevel]), // Accepte soit un nombre direct soit une enum
objective: Objective,
dietType: DietType,
intolerances: z.string(),
nutritionOptions: NutritionOptions.optional().default({}) // Options de calcul nutritionnel
});