Youth Born in
Brooklyn, New York, Duncan began his career in the
New York Red Bulls Academy. On August 6, 2014, Duncan played with the Red Bulls reserve team against
United Soccer League team
Harrisburg City Islanders, and he started all 13 games in the Red Bulls under-18s 2014 fall season.
Valenciennes In October 2015, Duncan signed a two-year contract with
Ligue 2 side
Valenciennes. During his first season at the club, he played for
Valenciennes II in
Championnat National 3, making his debut on May 14, 2016, starting at right back in a 2–1 loss to
Olympique Noisy-le-Sec. The Red Bulls announced on March 9, 2018, that they had signed Duncan to a
Major League Soccer contract due to his "attitude and work ethic during preseason." He started in the Red Bulls' MLS season opener against
Portland Timbers the next day; television commentator Jonathan Yardley described Duncan as "dominating" and that he "totally manhandled" his experienced direct opponent,
Sebastián Blanco, in the 4–0 win. On March 15, 2018, the New York Red Bulls entered into a
loan agreement with
New York Red Bulls II, and Duncan was listed on the Red Bulls II
2018 USL season roster. However, he started his second MLS game with New York Red Bulls two days later, against
Real Salt Lake. Duncan earned his first MLS
assist against
Minnesota United on March 24, 2018. His season was cut short due to an ACL injury suffered against
Orlando City SC on March 31, 2018. After not featuring regularly for the first team, Duncan was loaned to
New York Red Bulls II during the 2019 season. On August 21, 2019, he scored his first goal as a professional in 2–1 victory over
Nashville SC at
First Tennessee Park. After a few impressive performances with the second team he was recalled to the first team. On September 19, 2019, Duncan scored his first MLS goal in a 2–0 victory over
Portland Timbers at
Providence Park. Duncan began the 2020 campaign as a starter for New York. On March 1, he opened the season for New York scoring the first goal of the season and assisting on two others in a 3–2 victory over
FC Cincinnati. On August 20, 2020, Duncan scored the loan goal for Red Bulls in a 1–0 victory over rival
New York City FC in the
Hudson River Derby. On October 24, 2020, Duncan opened the scoring for New York in a 2–2 draw with
Chicago Fire FC at
Soldier Field. On December 21, 2020, Duncan was named New York Red Bulls Defensive Player of the Year for the 2020 season. On June 18, 2021, Duncan helped New York to a 2–0 victory over
Nashville SC, scoring his lone goal of the season. He ended the 2021 season as one of New Yorks' top performers, appearing in 33 matches scoring one goal and providing three assists.
Oostende On November 26, 2021, Duncan joined Belgian club
Oostende on a free transfer. On January 21, 2022, Duncan was in the starting 11 on his debut during a 2–1 loss against
Antwerp. Duncan played the entire match as a right wing-back. On February 19, 2022, Duncan played 73 minutes for Oostende in a 1-0 famous victory over
Standard Liège. Duncan ended his first season in Belgium appearing in seven matches, all as a starter.
Loan return to New York Red Bulls On August 5, 2022, it was announced that Duncan would be returning to
New York Red Bulls on loan until the end of the 2022 season. On January 15, 2023, Duncan was once again sent on loan to Red Bulls for the
2023 MLS season Back to New York Red Bulls At the end of the 2023 MLS season, the New York Red Bulls exercised the permanent transfer option on Duncan through the 2025 MLS season. On July 20, 2024, Duncan scored his first goal of the season in a 3–1 victory over
FC Cincinnati. On November 26, 2025, the team announced that they had declined his contract option.
Minnesota United On February 13, 2026,
Minnesota United FC announced the signing of Duncan on a
free transfer. The deal would be through the 2026 season with a club option through June 2027. Already Duncan has seemed to integrate well into the club, with his first goal coming against
San Diego in a 2-1 victory for the Loons. ==International career==