Having been deemed surplus to requirements by Zinedine Zidane, James has been reunited with Carlo Ancelotti – who coached him at both Madrid and Bayern Munich – for a reported fee of £20million (€22.4m).
The 29-year-old Colombia attacking midfielder was restricted to just 14 appearances for the LaLiga champions last season, scoring one goal.
James arrives as Everton's second major signing of the transfer window, following the arrival of Allan from Napoli, which was confirmed on Saturday.
Ancelotti will hope the former Porto and Monaco playmaker rediscovers the form he showed in his first season at Madrid, as Everton aim for a drastic improvement on last season's 12th-placed finish.
"I am really, really happy to be at this great club, a club with so much history, and here with a manager who knows me really well," James told evertonfc.com.
"I'm looking forward to achieving great things here – and winning things, which is what everyone's aim is.
"I've come here to try to improve, to get better. I've also come here to help the team to win, to play good football – entertaining football.
"I'm convinced, with Carlo and his technical staff, we can achieve big things and one of the big reasons [I signed] was the presence of Carlo Ancelotti.
"I have enjoyed some great times with him previously at two different clubs. That was a massive reason to come here."
After a number of stellar performances for Colombia in the 2014 World Cup – in which he won the Golden Boot with six goals, including an extraordinary strike against Uruguay – James joined Madrid in deal reportedly worth €90million.
James, who had joined Monaco from Porto the previous year, signed a six-year deal at Santiago Bernabeu and was given the number 10 shirt.
He enjoyed an impressive debut season with Los Blancos, scoring 13 goals in 29 LaLiga appearances, though he fell out of favor when Zidane took charge and signed for Bayern – then coached by Ancelotti – on a two-year loan in 2017.
James scored seven goals in his first season in the Bundesliga and matched that tally in 2018-19, though Bayern did not take up the option to sign him.
Ancelotti attempted to bring James to Napoli in 2019, but a move ultimately failed to materialize before the Italian was sacked in December.