masterclass-mcp
Version:
Un serveur MCP pour le calcul nutritionnel et la génération de plans alimentaires
64 lines (63 loc) • 2.44 kB
JavaScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { calculMetabolism, calculNutrition, calculRepartition } from "./tools/calculate.js";
import { Profile } from "./type.js";
import { generateCourseList, generateDailyMeals } from "./prompts/pompts.js";
// Create an MCP server
const server = new McpServer({
name: "FitMCP",
version: "1.0.4",
description: `Un serveur MCP pour le calcul nutritionnel et la génération de plans alimentaires,
Comment l'utiliser ?
1. Calculer les besoins nutritionnels :
- calculNutrition
2. Calculer le métabolisme :
- calculMetabolism
3. Calculer la répartition des macronutriments :
- calculRepartition
4. Générer un plan alimentaire :
- generateDailyMeals
5. Générer une liste de courses :
- generateCourseList`,
});
server.tool("calculNutrition", { profile: Profile }, async ({ profile }) => ({
content: [{ type: "text", text: JSON.stringify(calculNutrition(profile)) }]
}));
server.tool("calculMetabolism", { profile: Profile }, async ({ profile }) => ({
content: [{ type: "text", text: JSON.stringify(calculMetabolism(profile.gender, profile.age, profile.weight, profile.height)) }]
}));
server.tool("calculRepartition", { profile: Profile }, async ({ profile }) => {
// Conversion de activityLevel en nombre si c'est une chaîne
const activityMultiplier = typeof profile.activityLevel === 'string' ?
{
'sedentary': 1.2,
'light': 1.375,
'moderate': 1.55,
'high': 1.725,
'extreme': 1.9
}[profile.activityLevel] || 1.2 : profile.activityLevel;
return {
content: [{ type: "text", text: JSON.stringify(calculRepartition(profile.objective, activityMultiplier)) }]
};
});
server.prompt("generateDailyMeals", () => ({
messages: [
{
role: "user",
content: { type: "text", text: generateDailyMeals() }
}
]
}));
server.prompt("generateCourseList", () => ({
messages: [
{
role: "user",
content: { type: "text", text: generateCourseList() }
}
]
}));
server.sendToolListChanged();
server.sendPromptListChanged();
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
await server.connect(transport);