The Cardinals have reached a contract agreement with free-agent infielder Felipe Lopez, according to a source. The deal is for one-year and $2 million. Lopez batted .310, with a .383 on-base percentage, last season for the Diamondbacks and Brewers.