Almora, 26, plays primarily center field and is likely to platoon with current Mets center fielder Brandon Nimmo.
Almora became a free agent when the Chicago Cubs failed to offer a contract by the Dec. 2 deadline.
He hit .167 with one RBI in 30 at-bats during the pandemic-shortened 2020 season, down from a .236 average, a career-best 12 homers and 32 RBIs in 2019.
News of Almora's agreement with the Mets was first reported by The Athletic.
The Associated Press contributed to this report.