happy with this version

This commit is contained in:
Isaac Johnson 2026-01-29 20:54:00 -06:00
parent 76464368a7
commit a6e14ce374
20 changed files with 279 additions and 10 deletions

View File

@ -1,7 +1,7 @@
{ {
"extensionId": "recipemaker", "extensionId": "recipemaker",
"name": "RecipeMaker", "name": "RecipeMaker",
"version": "1.0.1", "version": "1.0.5",
"description": "An MCP server for creating recipes with images, running in a Docker container.", "description": "An MCP server for creating recipes with images, running in a Docker container.",
"mcpServers": { "mcpServers": {
"recipe-maker": { "recipe-maker": {
@ -12,7 +12,9 @@
"run", "run",
"-i", "-i",
"--rm", "--rm",
"idjohnson/recipemakermcp:latest" "-v",
"/tmp:/tmp",
"idjohnson/recipemakermcp:0.5"
] ]
} }
} }

View File

@ -0,0 +1,54 @@
# Atkins Creamy Chicken and Mushroom Stew
**Servings:** 4 servings
## Description
A rich, velvety stew featuring tender chicken thighs and earthy mushrooms in a garlic-herb cream sauce. Low carb and deeply satisfying. This Atkins-friendly dish skips the flour thickeners and potatoes, relying on heavy cream and reduction for a luxurious texture.
### Shopping List
- [ ] 1.5 lbs Boneless, skinless chicken thighs
- [ ] 1 lb Cremini or button mushrooms
- [ ] 1 block Butter (Salted or Unsalted)
- [ ] 1 medium Onion
- [ ] 1 head Garlic
- [ ] 1 carton (32 oz) Chicken broth
- [ ] 1 pint Heavy cream
- [ ] Dried Thyme
- [ ] Dried Rosemary
- [ ] Fresh Spinach (Bagged)
- [ ] Salt and Black Pepper
- [ ] Fresh Parsley
![Hero Image of Atkins Creamy Chicken and Mushroom Stew](images/atkins_creamy_chicken_and_mushroom_stew_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Atkins Creamy Chicken and Mushroom Stew, A rich, velvety stew featuring tender chicken thighs and earthy mushrooms in a garlic-herb cream sauce. Low carb and deeply satisfying. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 1.5 lbs Boneless, skinless chicken thighs
- 1 lb Cremini or button mushrooms
- 3 tbsp Butter
- 1 medium Onion
- 3 cloves Garlic
- 1 cup Chicken broth
- 1 cup Heavy cream
- 1 tsp Dried Thyme
- 1/2 tsp Dried Rosemary
- 2 cups Fresh spinach (optional)
- Salt and Black Pepper
- Parsley for garnish
## Steps
1. **Prep the Chicken and Veggies:** Start by cutting the 1.5 lbs of chicken thighs into bite-sized pieces, about 1 inch each. Season them generously with salt and black pepper. Clean the mushrooms with a damp cloth (do not soak them) and slice them thickly. Dice the medium onion finely and mince the 3 cloves of garlic.
2. **Sear the Chicken:** Place a large Dutch oven or deep skillet over medium-high heat and melt 1 tablespoon of the butter. Once the butter foams, add the chicken pieces in a single layer. Do this in two batches if necessary to ensure they brown rather than steam. Cook for about 4-5 minutes per side until golden brown. They don't need to be cooked through yet. Remove the chicken to a plate.
3. **Sauté Mushrooms and Aromatics:** In the same pot, add the remaining 2 tablespoons of butter. Add the sliced mushrooms and cook undisturbed for 3-4 minutes to let them brown. Stir and cook for another 2-3 minutes until they release their moisture and start to caramelize. Add the diced onion and cook for 5 minutes until soft and translucent. Finally, stir in the minced garlic, dried thyme, and rosemary, cooking for just 1 minute until fragrant.
4. **Deglaze and Simmer:** Pour in the 1 cup of chicken broth. Use a wooden spoon to scrape the bottom of the pot, releasing the flavorful browned bits (fond). Bring the liquid to a simmer. Return the browned chicken and any rested juices back into the pot.
5. **Cream and Reduce:** Reduce the heat to medium-low. Stir in the 1 cup of heavy cream. Let the stew simmer gently, uncovered, for 10-15 minutes. The sauce will reduce and thicken naturally as the water evaporates and the cream concentrates. Stir occasionally to prevent sticking.
6. **Finish and Serve:** If using spinach, stir it in during the last 2 minutes of cooking until just wilted. Taste the stew and adjust seasoning with more salt and pepper if needed. Garnish with fresh chopped parsley before serving hot.
![Ingredients and Prep for Atkins Creamy Chicken and Mushroom Stew](images/atkins_creamy_chicken_and_mushroom_stew_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Atkins Creamy Chicken and Mushroom Stew, including chicken thighs, mushrooms, butter, onion, garlic, cream, broth. Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->

View File

@ -0,0 +1,55 @@
# Atkins-Friendly Hearty Beef and Radish Stew
**Servings:** 6 servings
## Description
A comforting, low-carb alternative to traditional beef stew. This recipe replaces starchy potatoes with radishes, which soften and take on a mild flavor similar to potatoes when simmered. It's rich, savory, and perfectly keto-friendly.
### Shopping List
- [ ] 2 lbs Beef chuck roast
- [ ] 1 bag (16 oz) Fresh radishes
- [ ] 1 medium Onion
- [ ] 2 stalks Celery
- [ ] 1 head Garlic
- [ ] 1 small can Tomato paste
- [ ] 1 carton (32 oz) Beef bone broth
- [ ] Fresh Thyme
- [ ] Fresh Rosemary
- [ ] Bay leaves
- [ ] Olive oil
![Hero Image of Atkins-Friendly Hearty Beef and Radish Stew](images/atkins_friendly_beef_stew_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Atkins-Friendly Hearty Beef and Radish Stew, A steaming bowl of hearty beef and radish stew with chunks of tender beef and softened radishes in a rich, dark broth, garnished with fresh thyme. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 2 lbs beef chuck roast, cut into 1-inch cubes
- 2 tablespoons olive oil
- 1 medium onion, chopped
- 2 stalks celery, sliced
- 1 lb radishes, trimmed and halved (or quartered if large)
- 3 cloves garlic, minced
- 2 tablespoons tomato paste
- 4 cups beef bone broth
- 1 teaspoon dried thyme (or 3 sprigs fresh)
- 1 sprig fresh rosemary
- 2 bay leaves
- Salt and freshly ground black pepper to taste
## Steps
1. **Prepare the Beef:** Begin by cutting the beef chuck roast into uniform 1-inch cubes. Use paper towels to pat each piece thoroughly dry; this is crucial for achieving a deep, flavorful sear. Generously season the beef cubes on all sides with salt and freshly ground black pepper.
2. **Sear the Meat:** Heat 2 tablespoons of olive oil in a large, heavy-bottomed pot or Dutch oven over medium-high heat. Once the oil is shimmering and hot, add the beef in batches to avoid overcrowding the pan. Sear the cubes until they are deeply browned and crusty on all sides, about 3-4 minutes per side. Remove the browned beef to a plate and set aside.
3. **Sauté Aromatics:** Reduce the heat to medium. In the same pot (don't wash it, those browned bits are flavor gold!), add the chopped onion and sliced celery. Sauté for about 5-7 minutes, stirring occasionally, until the onions are translucent and the celery has begun to soften.
4. **Build the Flavor Base:** Add the minced garlic and 2 tablespoons of tomato paste to the pot. Stir constantly for 1-2 minutes. You want the tomato paste to darken slightly and the garlic to become fragrant, but be careful not to let it burn.
5. **Deglaze the Pot:** Pour in about half a cup of the beef broth. Use a wooden spoon to scrape up all the browned bits (fond) stuck to the bottom of the pot. This step incorporates all that concentrated beef flavor into the liquid.
6. **Combine and Simmer:** Return the seared beef and any accumulated juices to the pot. Add the remaining beef broth, the halved radishes, thyme, rosemary sprig, and bay leaves. The liquid should just cover the meat and vegetables.
7. **The Long Simmer:** Bring the stew to a gentle boil, then immediately reduce the heat to low. Cover the pot with a tight-fitting lid and let it simmer very gently. Check it periodically to ensure it's not boiling too hard. Cook for 1.5 to 2 hours, or until the beef is fork-tender and the radishes have softened to a potato-like consistency.
8. **Final Adjustments:** Once the beef is tender, remove the lid. If you prefer a slightly thicker sauce, you can let it simmer uncovered for an additional 10-15 minutes. Remove the bay leaves and the rosemary sprig. Taste the broth and add more salt or pepper if necessary. Serve hot in deep bowls.
![Ingredients and Prep for Atkins-Friendly Hearty Beef and Radish Stew](images/atkins_friendly_beef_stew_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Atkins-Friendly Hearty Beef and Radish Stew, including Beef chuck roast cubes, Radishes, Onion, Celery, Garlic, Tomato paste, Beef broth, Fresh herbs. Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->

View File

@ -0,0 +1,45 @@
# Atkins Spicy Pulled Pork Carnitas Bowl
**Servings:** 6 Servings
## Description
A rich and spicy Mexican-inspired pulled pork dish, perfect for a low-carb Atkins diet. Tender pork shoulder is slow-cooked with a blend of chilies and spices until it falls apart, then crisped up for texture.
![Atkins Spicy Pulled Pork Carnitas Bowl](images/atkins_spicy_pulled_pork_carnitas_bowl_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Atkins Spicy Pulled Pork Carnitas Bowl, A rich and spicy Mexican-inspired pulled pork dish, perfect for a low-carb Atkins diet. Tender pork shoulder is slow-cooked with a blend of chilies and spices until it falls apart, then crisped up for texture.. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 3 lbs Pork shoulder (Boston butt), cut into large chunks
- 2 tbsp Olive oil
- 1 large Onion, chopped
- 4 cloves Garlic, minced
- 2 Jalapeño peppers, seeded and diced
- 1 tbsp Chili powder
- 1 tbsp Ground cumin
- 1 tsp Dried oregano (Mexican oregano if available)
- 1 tsp Smoked paprika
- 1/2 tsp Cayenne pepper (adjust for heat)
- Salt and black pepper to taste
- 1/2 cup Beef broth or water
- 1/4 cup Fresh lime juice
- Fresh cilantro for garnish
## Steps
1. **Preparation:** Trim excess fat from the pork shoulder but leave enough for flavor. Cut the pork into 3-4 inch chunks. Pat dry with paper towels. Season generously with salt and black pepper on all sides.
2. **Sear the Meat:** Heat the olive oil in a large pot or Dutch oven over medium-high heat. Working in batches, sear the pork chunks until browned on all sides, about 3-4 minutes per batch. Remove the browned pork and set aside on a plate.
3. **Sauté Aromatics:** In the same pot, add the chopped onion and diced jalapeños. Sauté for about 5 minutes until softened. Add the minced garlic and cook for another minute until fragrant.
4. **Spice Bloom:** Stir in the chili powder, cumin, oregano, smoked paprika, and cayenne pepper. Toast the spices for 30 seconds to release their oils.
5. **Simmer:** Pour in the beef broth and lime juice, scraping up any browned bits from the bottom of the pot (deglazing). Return the pork and any accumulated juices to the pot.
6. **Slow Cook:** Cover the pot and reduce heat to low. Simmer gently for 2.5 to 3 hours, or until the pork is very tender and shreds easily with a fork. Check occasionally to ensure there is still some liquid; add a splash more broth if needed.
7. **Shred:** Remove the pork from the pot. Use two forks to shred the meat into bite-sized pieces. Discard any large remaining pieces of fat.
8. **Crisp (Optional but Recommended):** For traditional carnitas texture, spread the shredded pork on a baking sheet. Broil on high for 3-5 minutes until the edges are crispy and caramelized. Watch closely to prevent burning.
9. **Serve:** Toss the meat with a little of the remaining cooking juices from the pot for moisture. Serve hot, garnished with fresh cilantro.
![Ingredients for Atkins Spicy Pulled Pork Carnitas Bowl](images/atkins_spicy_pulled_pork_carnitas_bowl_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Atkins Spicy Pulled Pork Carnitas Bowl, including 3 lbs Pork shoulder (Boston butt), cut into large chunks, 2 tbsp Olive oil, 1 large Onion, chopped, 4 cloves Garlic, minced, 2 Jalapeño peppers, seeded and diced. Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->

View File

@ -0,0 +1,38 @@
# Chicken Marinara Pasta
**Servings:** 4 servings
## Description
A savory pasta dish with tender chicken breast pieces simmered in a rich tomato marinara sauce with Italian herbs.
![Hero Image of Chicken Marinara Pasta](images/chicken_marinara_pasta_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Chicken Marinara Pasta, A savory pasta dish with tender chicken breast pieces simmered in a rich tomato marinara sauce with Italian herbs.. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 1 lb Penne pasta
- 2 Chicken breasts, cubed
- 2 cups Marinara sauce
- 1 tbsp Olive oil
- 1 tsp Dried oregano
- 1 tsp Dried basil
- 1/2 cup Parmesan cheese
- Salt and pepper to taste
![Ingredients and Prep for Chicken Marinara Pasta](images/chicken_marinara_pasta_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Chicken Marinara Pasta, including 1 lb Penne pasta, 2 Chicken breasts, cubed, 2 cups Marinara sauce, 1 tbsp Olive oil, 1 tsp Dried oregano. Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->
## Steps
1. Cook the pasta in boiling salted water according to package directions. Drain.
2. While pasta cooks, heat olive oil in a large skillet over medium heat.
3. Add cubed chicken to the skillet, season with salt, pepper, oregano, and basil. Cook until browned and cooked through.
4. Pour marinara sauce over the chicken and simmer for 5 minutes.
5. Toss the cooked pasta with the chicken and sauce.
6. Serve hot, garnished with Parmesan cheese.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

View File

@ -0,0 +1,37 @@
# Spicy Atkins-Friendly Chorizo Skillet
**Servings:** 2
## Description
A low-carb, high-protein breakfast skillet featuring spicy chorizo, fresh jalapeños, and eggs. Perfect for kickstarting your metabolism while staying Atkins-compliant.
![Hero Image of Spicy Atkins-Friendly Chorizo Skillet](images/spicy_atkinsfriendly_chorizo_skillet_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Spicy Atkins-Friendly Chorizo Skillet, A low-carb, high-protein breakfast skillet featuring spicy chorizo, fresh jalapeños, and eggs. Perfect for kickstarting your metabolism while staying Atkins-compliant.. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 2 tbsp olive oil
- 4 oz Mexican chorizo, casing removed
- 1/4 cup onion, diced
- 1/4 cup green bell pepper, diced
- 1 jalapeno, minced
- 4 large eggs
- 1/4 cup shredded cheddar cheese
- 1/2 avocado, sliced
- Salt and pepper
## Steps
1. Heat olive oil in a skillet over medium heat.
2. Add chorizo, cook until browned (5-6 min).
3. Add onion, bell pepper, and jalapeño; sauté until soft.
4. Crack eggs into the skillet and cook to desired firmness.
5. Top with cheese, let melt.
6. Serve with avocado slices.
![Ingredients and Prep for Spicy Atkins-Friendly Chorizo Skillet](images/spicy_atkinsfriendly_chorizo_skillet_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Spicy Atkins-Friendly Chorizo Skillet, including 2 tbsp olive oil, 4 oz Mexican chorizo, casing removed, 1/4 cup onion, diced, 1/4 cup green bell pepper, diced, 1 jalapeno, minced. Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->

View File

@ -0,0 +1,37 @@
# Spicy Garlic Butter Steak Bites with Zucchini
**Servings:** 2
## Description
Tender steak bites seared to perfection and tossed in a spicy garlic butter sauce, served alongside fresh zucchini noodles. A quick, low-carb dinner that packs a punch.
![Hero Image of Spicy Garlic Butter Steak Bites with Zucchini](images/spicy_garlic_butter_steak_bites_with_zucchini_hero.png)
<!--
NANOBANANA HERO PROMPT:
Photorealistic hero shot of Spicy Garlic Butter Steak Bites with Zucchini, Tender steak bites seared to perfection and tossed in a spicy garlic butter sauce, served alongside fresh zucchini noodles. A quick, low-carb dinner that packs a punch.. Professional food photography, high detailed, appetizing, 4k resolution, soft natural lighting.
-->
## Ingredients
- 1 lb sirloin steak, cut into 1-inch cubes
- 2 tbsp olive oil
- 3 tbsp butter
- 4 cloves garlic, minced
- 1 tsp red pepper flakes (adjust for heat)
- 1 tsp paprika
- 2 medium zucchinis, spiralized
- Salt and black pepper to taste
- Fresh parsley, chopped (garnish)
## Steps
1. Season steak bites with salt, pepper, and paprika.
2. Heat olive oil in a large skillet over high heat. Sear steak bites for 2-3 minutes until browned. Remove and set aside.
3. Reduce heat to medium. Add butter, garlic, and red pepper flakes to the same skillet. Sauté until fragrant (1 min).
4. Add zucchini noodles to the skillet and toss in the spicy butter for 2-3 minutes until just tender.
5. Return steak bites to the pan, toss everything together to coat.
6. Garnish with fresh parsley and serve immediately.
![Ingredients and Prep for Spicy Garlic Butter Steak Bites with Zucchini](images/spicy_garlic_butter_steak_bites_with_zucchini_prep.png)
<!--
NANOBANANA PREP PROMPT:
Photorealistic overhead shot of ingredients for Spicy Garlic Butter Steak Bites with Zucchini, including 1 lb sirloin steak, cut into 1-inch cubes, 2 tbsp olive oil, 3 tbsp butter, 4 cloves garlic, minced, 1 tsp red pepper flakes (adjust for heat). Kitchen workspace with bowls, mixers, and utensils. Clean, organized, bright lighting.
-->

View File

@ -7,8 +7,8 @@ import textwrap
mcp = FastMCP("recipe-maker") mcp = FastMCP("recipe-maker")
# Constants # Constants
RECIPE_DIR = "recipes" RECIPE_DIR = "/tmp/staging/recipes"
IMAGE_DIR = "recipes/images" IMAGE_DIR = "/tmp/staging/recipes/images"
# Ensure directories exist # Ensure directories exist
os.makedirs(RECIPE_DIR, exist_ok=True) os.makedirs(RECIPE_DIR, exist_ok=True)
@ -60,7 +60,7 @@ def create_recipe(title: str, description: str, ingredients: list[str], steps: l
title: The title of the recipe. title: The title of the recipe.
description: A brief description. description: A brief description.
ingredients: List of ingredient strings (e.g. "1 cup flour"). ingredients: List of ingredient strings (e.g. "1 cup flour").
steps: List of cooking steps. steps: List of cooking steps with details.
servings: Serving size information. servings: Serving size information.
""" """
safe_title = "".join(c for c in title if c.isalnum() or c in (' ', '_')).replace(' ', '_').lower() safe_title = "".join(c for c in title if c.isalnum() or c in (' ', '_')).replace(' ', '_').lower()
@ -98,18 +98,19 @@ NANOBANANA HERO PROMPT:
""" """
for ing in ingredients: for ing in ingredients:
md_content += f"- {ing}\n" md_content += f"- {ing}\n"
md_content += "\n## Steps\n"
for i, step in enumerate(steps, 1):
md_content += f"{i}. {step}\n"
md_content += f""" md_content += f"""
![Ingredients and Prep for {title}](images/{prep_img_name}) ![Ingredients and Prep for {title}](images/{prep_img_name})
<!-- <!--
NANOBANANA PREP PROMPT: NANOBANANA PREP PROMPT:
{prep_prompt} {prep_prompt}
--> -->
""" """
md_content += "\n## Steps\n"
for i, step in enumerate(steps, 1):
md_content += f"{i}. {step}\n"
# Return the markdown content directly so the client can write the file # Return the markdown content directly so the client can write the file
return md_content return md_content