Four-time winners Toulouse reached their first Champions Cup final since 2010 with a hard-fought victory against Bordeaux-Begles.
Matthieu Jalibert's penalty was a bright start for Bordeaux, before Matthis Lebel crossed for the hosts.
Roman Ntamack's three penalties made up for six more points scored by fellow France fly-half Jalibert, but Antoine Dupont's try sealed Toulouse's victory.
Irish side Leinster face La Rochelle on Sunday for the other final place.
The Champions Cup winners will be decided at Twickenham in front of a crowd of up to 10,000 on 22 May.
Toulouse hit back after Bordeaux's strong start
Bordeaux seemed unlikely winners from the outset given a coronavirus outbreak in mid-April left them with eight players unavailable and they had never won away to Toulouse.
The pressure to reach a first Champions Cup final lay on the shoulders of fly-half Jalibert, named as captain for the first time in an exciting head-to-head with Ntamack.
The 22-year-old delivered with an early penalty and attempts to ignite the visitors' attack with clever kicks as the rain fell at the Stade Ernest Wallon.
France half-backs Dupont and Ntamack soon combined to give Toulouse a narrow lead as quick hands created enough room for Lebel to score in the left corner.
Jalibert took his side ahead again with three more points and, though Bordeaux survived 10 minutes with 14 men after Cameron Woki's yellow card, Ntamack snatched the lead back before half-time.
After the break, Bordeaux's ill discipline was their undoing and allowed the Toulouse fly-half to extend his team's advantage to a slightly more comfortable eight points.
Jalibert reduced that lead to five with 10 minutes remaining, but Dupont ran a superb support line to confirm Toulouse's place in their seventh Champions Cup final.
'We can make history again' - what they said
Toulouse wing Cheslin Kolbe said on BT Sport: "Definitely it was not the most fluent game we have played. We knew we were coming up against a good team that have been in unbelievable form.
"We adapted really well. All the supporters and people at the club talk about the history of the competition.
"For us as a group we make sure we focus on what we need to do. Hopefully we can make history again."
Line-ups
Toulouse: Medard; Kolbe, Holmes, Ahki, Lebel; Ntamack, Dupont; Baille, Marchand, Faumuina, Rory Arnold, Richie Arnold, Placines, Cros, Kaino.
Replacements: Mauvaka, Castets, Aldegheri, Tekori, Elstadt, Miquel, Germain, Mallia.
Bordeaux-Begles: Ducuing; Buros, Uberti, Moefana, Lam; Jalibert, Lucu; Paiva, Lamothe, Cobilas, Douglas, Marais, Woki, Petti, Roumat.
Replacements: Dweba, Poirot, Tameifuna, Cazeaux, Higginbotham, Lesgourgues, Seuteni, Jolmes.