Heat olive oil in a large pot or Dutch oven over medium heat. Add onion and cook until softened, about 5-7 minutes.
Add garlic, cinnamon, nutmeg, ginger, and cloves. Cook for 1 minute more until fragrant.
Add the cubed butternut squash and vegetable broth to the pot. Bring to a boil, then reduce heat and simmer, covered, until the squash is very tender, about 20-25 minutes.
Carefully transfer the soup to a blender in batches, or use an immersion blender, and puree until smooth and creamy.
Return the pureed soup to the pot. Stir in the half-and-half or heavy cream. Heat gently, but do not boil.
Season with salt and pepper to taste.
Serve hot, garnished with toasted pumpkin seeds, croutons, or fresh parsley if desired.
Notes
For a richer flavor, you can roast the butternut squash before adding it to the soup. Toss cubed squash with a little olive oil, salt, and pepper, and roast at 400°F (200°C) for 20-25 minutes until tender.
Adjust the spices to your preference. Add more or less of any spice to create your desired flavor profile.
If you don’t have half-and-half or heavy cream, you can use evaporated milk or full-fat coconut milk for a creamy texture.