Prep the mushrooms: Wipe them clean with a damp towel and slice. If using shiitake, remove tough stems.
Keep a small handful aside to sear at the end for garnish.
Brown in batches: Heat a large pot or Dutch oven over medium-high. Add oil and 1 tablespoon of butter. Add half the mushrooms with a pinch of salt.
Cook undisturbed for 2–3 minutes to get color, then stir and cook until browned and their moisture cooks off, 6–8 minutes total. Remove to a plate and repeat with remaining mushrooms and another tablespoon of butter.
Soften aromatics: Reduce heat to medium. Add the remaining 1 tablespoon butter, then the diced onion.
Cook until translucent, 3–4 minutes. Stir in garlic and thyme; cook 30–60 seconds until fragrant.
Deglaze: Pour in the white wine (if using). Scrape up any browned bits.
Let it reduce by about half, 1–2 minutes.
Simmer: Return all mushrooms to the pot. Add broth, a pinch of salt, and pepper. Bring to a gentle boil, then simmer 10–12 minutes to meld flavors.
Thicken the keto way: Stir in the cream cheese cubes until fully melted and smooth.
Add heavy cream and simmer on low 5 more minutes to slightly reduce. Do not boil hard after adding dairy.
Blend to your texture: Use an immersion blender for a partially smooth soup with some mushroom pieces. For a silky finish, blend in batches in a countertop blender, then return to the pot.
Adjust thickness with a splash more broth or cream as needed.
Season and enrich: Stir in Parmesan (if using) until melted. Taste and add more salt, pepper, and a pinch of nutmeg. Add red pepper flakes if you like a little heat.
Finish with garnish: Quickly sear the reserved sliced mushrooms in a small skillet with a touch of butter and salt until golden.
Ladle soup into bowls and top with the seared mushrooms and chopped parsley or chives.