McKay was raised in Barrhead and began his career as a youth player for Kilmarnock, where he spent seven years. He was released by Kilmarnock due to a hip problem which their medical staff feared would cause him long-term problems. McKay was then signed by Rangersin the summer of 2011. He played regularly in their under-19 side at the age of 16 and ended the season as top goalscorer.
Club career
Rangers
McKay made his first-team debut for Rangers on 13 May 2012, in a 4–0 win against St Johnstone. On 11 August 2012, he scored Rangers first goal in the club's inaugural game in the Third Division, a 2–2 draw against Peterhead. On 11 September 2012, McKay pledged his future to Rangers for another five-years. After a great start to the season, his form dropped and as a result he was dropped to the bench with Fraser Aird taking his place. After a few matches on the sidelines, he reclaimed his place in the starting eleven with a stunning performance from the bench against Alloa Athletic, in which he scored two goals in a 7–0 win. From that point on, McKay established himself as a key player in the team, putting in several excellent performances, including in a 3–0 win against Elgin City and a 4–2 win against Montrose, racking up a number of assists in the process. On 27 December 2013, he joined Greenock Morton on a one-month loan deal. As there were no U20 League fixtures until January 2014, this was to give him some much needed game time, with McKay expected to be available for five fixtures in his time at Cappielow. On 28 January 2014, his loan was extended until the end of the season. McKay signed for Scottish Championship club Raith Rovers on 1 September 2014, agreeing a loan move until 1 January 2015. On 31 December 2014, it was announced by Raith Rovers that McKay's loan deal had been extended until the end of 2014–15 season. The arrival of new Rangers manager Mark Warburton in June 2015 saw McKay appear more frequently in the first team. On 19 August 2015, he scored his first goal for Rangers since November 2012, in a 2–0 win over Ayr United in the Scottish Challenge Cup. On 15 February 2016, McKay extended his Rangers contract until May 2018. On 17 April 2016, he scored a long-range goal to put Rangers 2–1 up against Celtic in the Scottish Cup semi-final. After the match finished 2–2, Rangers went on to win on penalties and progress to the final, with McKay scoring in the penalty shootout. He was named in the PFA Scotland Team of the Year from the Scottish Championship for his performances in the 2015–16 season.
McKay signed a four-year contract with Nottingham Forest on 5 July 2017 for a reported fee of £500,000, linking up with Warburton once again. He was assigned squad number 10. On his début on 4 August 2017, he scored the only goal of the game against Millwall.
Swansea City
On 31 July 2018, McKay signed a three-year contract with Swansea City, having moved from Nottingham Forest for an undisclosed fee.