Sauté the aromatics: In a large pot or Dutch oven, heat butter and olive oil over medium heat.
Add onion, celery, and carrot. Cook 5–7 minutes, stirring often, until softened and fragrant.
Add garlic and spices: Stir in garlic, thyme, and nutmeg. Cook 30–60 seconds until the garlic smells aromatic.
Build the roux: Sprinkle flour over the vegetables.
Stir for 1–2 minutes to cook off the raw flour taste. It should look slightly pasty.
Add broth gradually: Slowly pour in the chicken broth while stirring to prevent lumps. Bring to a gentle simmer.
The soup will start to thicken slightly.
Add chicken: Stir in the cooked chicken. Simmer 5 minutes to let the flavors meld.
Stir in the cream: Lower the heat and add the half-and-half. Do not boil after adding dairy; keep it at a low simmer.
Cook the gnocchi: Add the gnocchi directly to the pot.
Simmer 3–4 minutes, or until they float and are tender.
Finish with spinach: Stir in the spinach until wilted, about 1–2 minutes. Taste and season with salt and pepper. Add a pinch of red pepper flakes if you like gentle heat.
Serve: Ladle into bowls and top with grated Parmesan.
The soup should be creamy but spoonable, with plenty of gnocchi in each bite.