Connects Claude to the Cookwith.co API for AI-powered recipe generation and transformation. Exposes two main operations: generate_recipe takes natural language prompts plus optional dietary restrictions, allergies, calorie targets, and serving counts to create new recipes, while transform_recipe modifies existing recipes based on instructions like "make this vegan" or "reduce calories by 200". Each recipe comes back with full ingredient lists, step-by-step instructions, and nutritional breakdowns. Works without an API key but runs into a 20 requests per hour rate limit. Reach for this when you want Claude to handle cooking questions with actual structured recipe data instead of just generating markdown lists.
An MCP (Model Context Protocol) server that provides AI-powered recipe generation and transformation tools. Generate personalized recipes based on dietary preferences, transform existing recipes to meet nutritional goals, and more.
npm install -g @cookwith/recipe-mcp
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"recipe-mcp": {
"command": "npx",
"args": ["@cookwith/recipe-mcp"],
"env": {
"COOKWITH_API_URL": "https://cookwith.co"
}
}
}
}
# Clone the repository
git clone https://github.com/cookwith/recipe-mcp.git
cd recipe-mcp
# Install dependencies
npm install
# Run in development mode
npm run dev
// In Claude Desktop, you can say:
"Generate a healthy Mediterranean pasta dish with lots of vegetables"
// The tool will be called with:
{
"prompt": "A healthy Mediterranean pasta dish with lots of vegetables",
"dietaryRestrictions": ["vegetarian"],
"calories": "450",
"servings": 4
}
// After generating or providing a recipe:
"Make this recipe vegan and reduce the calories by 200"
// The tool will be called with:
{
"recipe": { /* existing recipe object */ },
"instructions": "Make this vegan and reduce calories by 200",
"calories": "350"
}
generate_recipeGenerate a new recipe based on natural language instructions.
Parameters:
prompt (string, required) - Natural language descriptiondietaryRestrictions (string[], optional) - e.g., ["vegetarian", "gluten-free"]allergies (string[], optional) - Ingredients to avoiddislikes (string[], optional) - Foods to excludecalories (string, optional) - Target calories per servingprotein (string, optional) - Target protein in gramsservings (number, optional) - Number of servings (1-20, default: 4)transform_recipeTransform an existing recipe based on instructions.
Parameters:
recipe (object, required) - The recipe to transforminstructions (string, required) - How to modify the recipecalories (string, optional) - New target caloriesprotein (string, optional) - New target proteinservings (number, optional) - New number of servingsThe public API has the following rate limits:
interface Recipe {
title: string;
description: string;
ingredients: string[]; // e.g., ["2 cups flour", "1 tsp salt"]
instructions: string[]; // Step-by-step instructions
servings: number;
prepTime?: number; // Minutes
cookTime?: number; // Minutes
totalTime?: number; // Minutes
cuisine?: string; // e.g., "Italian", "Mexican"
course?: string; // e.g., "main", "dessert"
difficulty?: string; // e.g., "easy", "medium", "hard"
calories?: number; // Per serving
protein?: number; // Grams per serving
carbs?: number; // Grams per serving
fat?: number; // Grams per serving
fiber?: number; // Grams per serving
sugar?: number; // Grams per serving
sodium?: number; // Milligrams per serving
}
COOKWITH_API_URL - API endpoint (default: https://cookwith.co)For development or self-hosted instances:
export COOKWITH_API_URL=http://localhost:3000
npx @cookwith/recipe-mcp
// Request
{
"prompt": "Quick and easy chicken stir-fry"
}
// Response
{
"title": "Quick Chicken Stir-Fry",
"description": "A delicious and speedy chicken stir-fry...",
"ingredients": [
"2 chicken breasts, sliced",
"2 cups mixed vegetables",
"3 tbsp soy sauce",
// ...
],
"instructions": [
"Heat oil in a large wok or skillet",
"Add chicken and cook until golden",
// ...
],
"servings": 4,
"prepTime": 10,
"cookTime": 15,
"calories": 320,
"protein": 28
}
// Request
{
"recipe": {
"title": "Classic Beef Lasagna",
"ingredients": ["1 lb ground beef", "ricotta cheese", ...],
// ... full recipe
},
"instructions": "Make this vegetarian and lower in calories"
}
// Response
{
"title": "Vegetarian Light Lasagna",
"description": "A healthier vegetarian version...",
"ingredients": [
"2 cups chopped mushrooms",
"1 cup low-fat ricotta",
// ... transformed ingredients
],
// ... rest of transformed recipe
}
If you receive a 429 error, you've exceeded the rate limit. Wait for the time specified in the retryAfter field before making another request.
Ensure your internet connection is stable and the API endpoint is accessible.
Check that your parameters match the expected format and constraints (e.g., servings between 1-20).
Contributions are welcome! Please see our Contributing Guide for details.
MIT License - see LICENSE file for details.