Preheat the oven to 450°F (230ºC). Coat a large sheet pan with cooking spray.
Toss together the broccoli and 1 tablespoon oil on the pan. Roast until tender and browned, 18–20 minutes, stirring after 10 minutes.
Meanwhile, heat a large saucepan over medium-high heat. Add remaining 1 tablespoon oil to the pan and swirl to coat. Add the onion and saute for 5 minutes.
In a medium bowl, whisk together the broth and flour. Add the broth mixture, milk, salt and cayenne pepper to the pan; bring to a boil, stirring frequently.
Remove from heat; gradually add cheese, stirring until the cheese melts.
Coarsely chop the cooked broccoli and stir into the soup.
