The signing comes on the same day that 49ers running back Carlos Hyde agreed to a deal with the Cleveland Browns.
McKinnon, 25, hit free agency looking for a much bigger role than the one he shared as part of the Minnesota Vikings in 2017.
After Dalvin Cook went down with a torn ACL in Week 4, McKinnon became part of one of the best running back tandems in the league alongside Latavius Murray. From Week 5 on, McKinnon averaged 3.9 yards per rush, gaining 544 yards on 140 carries while catching 43 passes for 381 yards.
His role as a pass-catching running back helped usher in a new era for Minnesota's run game that went from last in 2016 to No. 7 last season. The dual-threat back played a prominent role in the screen game and helped the Vikings maintain a steady flow of explosive plays despite Cook's absence.
McKinnon thanked the Vikings' organization and his former teammates in a series of tweets Wednesday.
I want to thank the @Vikings organization and coaches for making my dreams come true of being drafted, and giving me the oppurtunity me to start my career in the great state of MN. I will forever be thankful for that and MN will always hold a special place in my heart. 🙏🏾— Jerick Mckinnon (@JetMckinnon1) March 14, 2018
Special thanks to my teammates my brothers that I've built close and forever lasting relationships with. I wouldn't be in this situation without y'all, love y'all boys going to miss that locker room. Y'all boys eat greedy— Jerick Mckinnon (@JetMckinnon1) March 14, 2018
McKinnon was a third-round selection out of Georgia Southern by the Vikings in the 2014 draft. He has averaged 4.0 yards per carry over his four NFL seasons.
ESPN's Courtney Cronin contributed to this report.