The three-time major winner stunned Stefanos Tsitsipas in the previous round – his first win over a top-five opponent in six years – and followed that up with another fine victory.
Murray, who last contested a final on grass when winning Wimbledon for a second time, prevailed 7-6 (7-5) 6-2 against Kyrgios.
He moves up to 47th in the live ATP rankings – the first time he has been in the top 50 since May 2018 – and will face Matteo Berrettini in what will be his 70th career final.
Aiming to keep alive his hopes of a ninth career title on grass, Murray saved both break points faced in the first set and showed good resolve to edge Kyrgios in the tie-break.
The second set was not as tightly contested, with the 35-year-old showing few signs of fatigue as he twice broke Kyrgios' serve to reach Sunday's final in Germany.
Berrettini had earlier defeated Oscar Otte 7-6 (9-7) 7-6 (7-5) to reach his first tour-level final of an injury-hit season.
The world number 10 fired 18 aces en route to overcoming home favorite Otte in a time of one hour and 48 minutes.
"I am really happy," Berrettini said in his on-court interview. "Arriving at the tournament, that was the goal [to reach the final].
"From thinking about it and actually making it is a big difference. I am happy I am here and have another chance to play another final after months without playing.
"This means this is my level and I have proved once again I am comfortable at this level and on this surface. I really like it here at Stuttgart."