In a large pot or Dutch oven, heat 1 tablespoon of olive oil over medium heat. Add the diced onion, carrot, and celery, and sauté for about 5-7 minutes until softened.
Stir in the minced garlic, fresh thyme, and sage. Cook for another 1-2 minutes until fragrant.
Add the diced zucchini and cook for about 3-4 minutes until it starts to soften.
Pour in the rinsed cannellini beans, low-sodium broth, and canned tomatoes (with their juice). Stir and bring to a gentle simmer.
Add salt and pepper to taste, reduce heat to low, and let simmer for 20-25 minutes.
In the last 5 minutes, stir in the baby spinach leaves until wilted.
Ladle the soup into bowls, top with freshly grated Parmesan cheese, and serve warm with crusty bread.