Heat the oven to 400°F (205°C)
If using cherry or grape tomatoes, leave them whole. Core larger tomatoes and cut them into chunks roughly similar in size to the cherry tomatoes.
Add the tomatoes, onion and garlic to a large bowl. Drizzle with olive oil and sprinkle with salt, pepper, oregano and red pepper flakes, if using. Toss everything together until well coated.
Spread the tomatoes, onion and garlic over a large rimmed baking sheet. I like to use parchment paper for easy cleanup.
Roast for 40–50 minutes, stirring once after about 30 minutes. The tomatoes should be collapsed and juicy, with some caramelized edges, and the onion should be tender and beginning to brown.
Transfer the roasted tomatoes, onion, garlic and all those lovely pan juices to a saucepan. Add 1 cup of the chicken bone broth and bring to a gentle simmer for about 10 minutes.
Using an immersion blender, blend until smooth and creamy. Add additional broth, a little at a time, until the soup reaches the consistency you like.
Reduce the heat to very low—or remove the pan from the heat—and slowly stir in the milk. Don't allow the soup to boil once you've added the milk.
Stir in the Parmesan, fresh basil and butter, if using. Taste and season with additional salt and pepper as needed.
If your tomatoes are especially acidic, stir in up to ½ teaspoon honey. Taste first—you may find that roasting has made the tomatoes sweet enough without it.
Serve warm with extra Parmesan and fresh basil.