The deal was completed Wednesday after the 34-year-old Furcal passed a physical. He gets salaries of $6 million next year and $7 million in 2013, along with a $1 million signing bonus.
Furcal batted .255 with St. Louis, solidifying the defense along with the leadoff slot. He turned 36 double plays, most among National League shortstops, in the final two months.
The Cardinals moved to retain Furcal after star slugger Albert Pujols signed with the Los Angeles Angels, freeing up payroll. They had been considering giving prospect Tyler Greene a shot at regular duty.