In a large pot, melt the butter over medium heat. Add diced onion and minced garlic, sautéing until soft and fragrant (about 3-4 minutes).
Stir in the flour to create a roux, cooking for 1 minute.
Gradually whisk in the chicken broth, ensuring no lumps remain.
Add shredded chicken, diced ham, and Dijon mustard to the pot. Simmer for 10 minutes.
Stir in the heavy cream and milk, cooking for another 5 minutes until the soup is creamy.
Slowly add the Swiss cheese in batches, stirring until melted.
Season with black pepper and salt to taste. Garnish with fresh parsley and serve hot.