The 26-year-old Dutchman, who makes the switch to south Wales from Middlesbrough after two successful loan spells with the Swans, completed a medical on Wednesday.
He spent a month on loan at the Liberty Stadium during the 2010-11 season before returning in January this year, after which he scored one goal in nine appearances.
He joined Boro in a £3.2m deal from Sparta Rotterdam in 2008 and made a total of 161 appearances for the Teessiders, scoring 31 goals.
A statement on the club's official website said: "Swansea City have completed the signing of Middlesbrough winger Marvin Emnes for an undisclosed fee.
"Following two previous loan spells at the Liberty, Emnes made his move permanent by signing a three-year deal after he completed his medical today."