In 2004, Morris signed a one-year contract after he won 15 games on a Cardinals team that made the World Series. In 2004, he lost 10 games for the first time in his career and had a 4.72 ERA, also a career high.
Morris underwent surgery during the 2004/2005 off-season and started the season 8-0 with a 3.16 ERA, and was 10-2 with a 3.10 ERA at the time of the All-Star break. In fact, he was considered by many to be snubbed for the All-Star game. Morris went 4-7 with a 5.55 ERA after the All-Star break. He was the number three starter for the Cardinals in the playoffs, behind ace Chris Carpenter, and Mark Mulder. In the thin free-agent market of the 2005/2006 off-season, Morris was touted as one of the best available pitchers.
On December 12, 2005, Morris signed a 3-year contract with the San Francisco Giants worth $27 million. He had an injury-filled year with the Giants in 2006, going 10-15 with a 4.98 ERA.
Prior to the 2007 season, Morris changed his uniform number from 35, which he had worn for his entire career, to wear number 22 as a tribute to retired former teammate Mike Matheny. Rich Aurilia took the number 35 jersey.
Morris started off the 2008 season with a 0-4 record and a 9.67 ERA in 5 starts. On April 27, 2008, Morris was released by the Pirates. He retired three days later. Morris married the former Heather Reader on December 7, 2002 and together they have three children, Harper, Sidney and Lola.