Chop the broccoli into small florets. If you prefer a smoother soup, you can chop the broccoli smaller or even pulse it a few times in a food processor.
Dice the onion and mince the garlic.
Start the Soup in the Crock Pot:
Place the broccoli florets, onion, and garlic into the Crock Pot.
Pour in the chicken broth (or vegetable broth) and stir to combine.
Make a Roux (for creaminess):
In a small saucepan, melt the butter over medium heat. Add the flour and whisk it together with the butter to form a smooth paste (this is your roux).
Gradually whisk in the half-and-half (or heavy cream), stirring constantly until the mixture is smooth and thickens slightly, about 2-3 minutes. You want it to be creamy but not overly thick at this point.
Add Cream to the Crock Pot:
Pour the cream mixture into the Crock Pot with the broccoli and broth. Stir everything together to combine. This will help create that creamy texture for your soup.
Season with salt, pepper, garlic powder, and onion powder (if using).
Cook the Soup:
Cover the Crock Pot and cook on low for 4-6 hours or high for 2-3 hours. The broccoli will become tender, and the flavors will meld together.
Add the Cheese:
Once the soup is done cooking and the broccoli is tender, stir in the shredded cheddar (and mozzarella, if using). Stir until the cheese is melted and the soup is smooth and creamy.
Blend (optional):
If you like a smoother soup, you can use an immersion blender to puree part of the soup right in the Crock Pot. Alternatively, you can transfer about half of the soup to a regular blender, blend until smooth, and return it to the Crock Pot. This step is optional, depending on whether you prefer a chunky or smooth texture.
Serve:
Ladle the soup into bowls and garnish with extra shredded cheddar cheese and a sprinkle of black pepper if desired.