The 33-year-old former Scotland Under-21 cap, who arrived from Yeovil Town in 2012, has signed until May 2017, with a further one-year option.
MacLean has scored 11 goals in 23 games for the Premiership outfit this season.
He started out with Ranges and also spells with Scunthorpe United, Sheffield Wednesday, Cardiff City, Plymouth Argyle, Aberdeen, Oxford United and Cheltenham Town.
Meanwhile, St Johnstone have sent two youth players on loan for the rest of the season, with  defender Neil Martyniuk joining Montrose in League Two and striker Greg Kerr spending time with Whitehill Welfare in the Lowland League.
St Johnstone have secured striker Steven MacLean on a contract extension.