Duffy is a product of the Derry City youth team and made his first appearance for the senior team at Richmond Park on 3 September 2012 as a second-half substitute in a 3–0 defeat to St Patrick's Athletic. Duffy scored his first league goal in the 1–0 win away to Shelbourne on 8 June 2013. As a 19-year-old Duffy scored against Aberystwyth Town and Shakhtyor Soligorsk in the Europa League and netted a hat-trick in July on his 20th birthday in a league match against UCD. In October 2014 it was reported that he had signed a two-year contract extension with Derry.
In February 2015 he was transferred to Scottish club Celtic. Duffy has not played in the first team for Celtic but impressed in the Development squad. In July 2015, he was loaned to Alloa Athletic on a six-month deal. At the start of 2016, Duffy was reported to be extending his stay at Alloa until the end of the 2015–16 season. On 27 February 2016, Duffy scored his first goal for Alloa in a 3–1 home loss to Livingston. Duffy went on to score the only goal in a 1–0 win against Hibs and was also on target in a 1–1 draw with Rangers. Duffy was named as Alloa Advertiser Player of the Year. On 30 June 2016, Duffy moved on loan to Dundee.
Dundalk
Duffy signed for Irish champions Dundalk in January 2017. He was part of the team that won the EA Sports Cupin September, but he missed the crucial penalty in their shoot-out defeat to Cork City in the FAI Cup Final in November. The following season Duffy was a near ever-present in the side that won the 2018 League and FAI Cup Double and Duffy was subsequently honoured by his fellow professionals by being awarded the PFAI Players' Player of the Year award.
International career
On the 26 August 2018 it was reported that he intended to make the switch from playing for Northern Ireland to the Republic of Ireland. Michael Duffy was called up to the Home-Based Republic of Ireland under-18 by Paul Doolin on 1 February 2012 for a friendly game against Wales. On 15 February, he played the entire game in a 2–1 defeat at Ferrycarrig Park, Wexford. Duffy has since represented Northern Ireland at under-19 and under-21 level. He made his debut for the under-21 team on 9 September 2014 in a 4–1 defeat against Serbia at Shamrock Park, Portadown. On 24 August 2016 Duffy received his first call up to the senior Northern Ireland squad by manager Michael O'Neill. In August 2018 Duffy stated his intention of playing for the Republic of Ireland.