Nick DeLeon scored a 78th-minute winning goal for Toronto FC as they beat MLS Cup holders Atlanta United 2-1 to seal a place in the final.
Atlanta want ahead inside four minutes as Julian Gressel found the net and they could have doubled their lead not long after when they won a penalty.
Michael Bradley had fouled Gonzalo Martinez inside the area, but Toronto goalkeper Quentin Westberg got a hand on Josef Martinez's spot-kick, which kept Toronto in the game.
Atlanta's lead did not last long though as Nicolas Benezet equalised in the 14th minute, sweeping home from outside the area.
But DeLeon won it with a brilliant shot from 25 yards out. Surrounded by Atlanta defenders, he found just enough room to unleash a right-footed blast from 25 yards that beat goalkeeper Brad Guzan in the top left corner.
Toronto return to the title game just two seasons after winning the MLS Cup and on all three occasions that Toronto has advanced to the final, their opponent has been the Seattle Sounders (2016, 2017 and 2019).
The MLS Cup final will take place on November 10, live on Sky Sports, at Seattle's home ground of CenturyLink Field.
Analysis: Toronto take chances despite Atlanta dominance
Three talking points from NBC's Nicholas Mendola:
1. Bradley, Toronto caught sleeping early
Toronto FC's hopes of taking the Mercedes Benz Stadium crowd out of this one took a seismic shake when Michael Bradley somehow didn't realise Gonzalo Martinez was right behind him to blaze onto a terrific through ball from in-form Ezequiel Barco. He held onto the ball as long as possible before sending a pass to Gressel for as easy a finish as you'll see at this level.
Bradley then conceded a penalty, but French-American goalkeeper Westberg bailed him out with a fine save from Josef Martinez to keep the deficit at one. Buy him dinner, Michael. Maybe two dinners.
2. Toronto makes only attacking moments count
Benezet quickly got Toronto level with a terrific finish from the corner of the box. The ex-Guingamp midfielder ran onto a marvellous diagonal pass from centre back Laurent Ciman. Benezet cut in from the left and spun a curling effort toward the back post that ex-Aston Villa goalkeeper Brad Guzan could not rescue.
You could argue that there wasn't another threat from the Canadian side until DeLeon's winner, which was a smashing shot to cap a smash and grab. Two flash points, both finished by Toronto.
3. Westberg, Mavinga keep Reds in the match
The penalty save was an outstanding moment for Westberg, but he would be needed many times over the course of the match including two moments at the start of the second half, then standing tall for a point-blank block in stoppage time. Decisive off his line and composed on it, the 33-year-old continues to validate Greg Vanney's decision to put him in the lineup over MLS Cup winner Nick Bono.
As for Chris Mavinga, the physical Congolese defender was a force. A few days after a Man of the Match performance in New York, Mavinga rebounded from an injury to make two decisive interventions in the final five minutes.
How the teams reacted
Toronto coach Greg Vanney: "We probably didn't win very many categories except for one, which was 2-1 on the scoreboard. From a soccer perspective, they were the better team tonight."
Toronto match-winner Nick DeLeon: "That save, honestly, made the difference. If they score there, it's a different game. Q kept us in the game.
"When I turned, I had an intent to play it back out, but when nobody stepped, I said, 'OK, I'm going to have a shot.' Fortunate enough to go in.
"We're not intimidated [by Seattle] at all. It'll be just the same as here. Turf field in a football stadium with a massive crowd. So, it'll be the same. We're looking forward to it.
Atlanta United captain Michael Parkhurst: "It was frustrating, for sure, especially after the great start we had. We had a few guys around him [DeLeon for the winner]. I don't know what happens. Everybody probably thinks someone else is going to stay with the ball. For a half a second, we left him free and he takes a great shot."