The 2021 MLS Cup final went to extra time and provided plenty of wild, chaotic and thrilling moments. In the end, it was New York City FC that won the championship for the first time in club history, a highlight for the City Football Group. NYCFC led for nearly the entire second half but conceded in the fourth minute of added time, and despite looking outmatched in extra time, they held on and won the penalty shootout, 4-2. Goalkeeper Sean Johnson was the star in the shootout, saving the first two shots he faced to pave the way.
Here’s how both teams performed:
New York City FC
(GK) Sean Johnson | 120 | Most of the shots he faced went wide. He was sharp when needed but can’t be faulted for conceding that late goal. His defense let him down there, but he went off in the penalty shootouts with two massive saves. | 8.5 |
(DEF) Gudmundur Thorarinsson | 90 | Was a bit timid from time to time. His passing was solid but he faded as the match went on. Just not his usual self. | 5 |
(DEF) Maxime Chanot | 120 | Could argue he was the best player on the pitch. Just a menace at the back, dealing well with nearly everything that came his way. | 8 |
(DEF) Alexander Callens | 120 | Put his body on the line often but really had issues in playing the ball sharply out of the back at times. Had some solid moments but Chanot outshined him in defense. Scored the winning penalty kick. | 5 |
(DEF) Tayvon Gray | 120 | Was not as attentive as he needed to be on the equalizer and got caught in a bit too much and was not positioned well. He wouldn’t have been able to sleep had they lost this one. | 4 |
(MID) Alfredo Morales | 120 | He did OK, but there were instances where he stabbed for the ball and missed terribly. He could have been a bit more assertive. Had his PK saved. | 4.5 |
(MID) James Sands | 120 | Meh. Didn’t see as much as the ball as he would have liked, and there was some disconnect in the middle at times, especially late. | 5 |
(MID) Santiago Rodriguez | 80 | Offered very little and was taken off before full time. Couldn’t get wide enough to cause much trouble. It was just a quiet, uneventful showing. | 4 |
(MID) Maxi Moralez | 120 | The maestro in the middle. Had a little knock in this one, and it clearly impacted him. But he came through with his assist and was a real leader. Converted his PK like a boss. | 7 |
(MID) Jesus Medina | 95 | Got hit by a beer can, wasted a chance one-on-one and was taken off in extra time. Not a typical display, but he really didn’t do enough in his movement to put himself into good spots. | 5 |
(FWD) Valentin Castellanos | 120 | Was tasked with scoring and did his part, even though his partners in attack didn’t. One of the bright spots of the season and a budding star in this league. Also converted his PK. | 8 |
Ismael Tajouri (80′) | Rodriguez | Portland dominated the ball in extra time, and he didn’t get a chance to leave his mark. | 5 |
Malte Amundsen (90′) | Thorarinsson | Came in to help the defense and was really needed as Portland were on the front foot. Bailed out a bit by his goalkeeper. | 5 |
Talles Magno (95′) | Medina | The hero from the Eastern Conference final, the young Brazilian only had one shot to make an impact, and he did it, making his penalty kick. | 6 |
Ronny Deila | 3 | Made the changes needed in regulation, but he probably should have used another to waste time as even Moralez was pleading for it. His team looked nervous in extra time but escaped with the trophy thanks to clinical penalties. | 7 |
Portland Timbers
(GK) Steve Clark | 120 | A sleepless night it coming for Clark, who could not grip the ball to make the save on the opening goal for NYCFC. Gifting a goal in a game this magnitude is obviously not ideal. | 4 |
(DEF) Josecarlos Van Rankin | 89 | Solid in defense and going forward, but like Bravo, Portland couldn’t make it count for anything. | 7 |
(DEF) Larrys Mabiala | 120 | A human vacuum in the middle, Mabiala had a tough assignment in Castellanos and was up for it, limiting him in the air from open play. | 8 |
(DEF) Dario Zuparic | 120 | Zuparic rarely put a foot wrong on the day and when you can’t point to a center-back making a ton of tackles, that’s a sign that they were in the right position to begin with keeping the keeper safe. | 7 |
(DEF) Claudio Bravo | 120 | Bravo created a few great chances but Portland’s forwards weren’t able to make them count. He also did a great job stopping NYCFC from being able to counter. | 8 |
(MID) George Fochive | 62 | Fochive likely would’ve performed worse if he wasn’t next to Chara but his performance was nothing to write home about. | 5 |
(MID) Diego Chara | 120 | Chara was magnificent. Snuffing out counters all over the pitch, he rarely put a foot wrong as NYCFC’s chances had to come from wider areas because they couldn’t pass Chara in the center of the pitch. | 9 |
(MID) Sebastian Blanco | 62 | Blanco didn’t seem like his hamstrings were good enough to start the match, had he not started this could’ve been a different result. | 4 |
(FWD) Yimmi Chara | 120 | While Chara would have wanted to contribute more offensively, he was excellent on the defensive end and was asked to move from being a winger to central midfield in extra time and still excelled. | 8 |
(FWD) Darion Asprilla | 84 | At times I forgot that Asprilla was on the pitch as he didn’t bring much in his return from suspension. | 5 |
(FWD) Felipe Mora | 120 | While Mora did net the equalizer, not making better use of his other five chances in the match knocks him down a few pegs. | 6 |
Santiago Moreno (62′) | Blanco | This may have been a different match if Moreno started as his directness caused issues for New York after Blanco didn’t seem healthy. | 7 |
Diego Valeri (89′) | Van Rankin | Not the Hollywood send-off he would have wanted if this was his last career game. Missed a golden chance in extra time and had his penalty saved by Johnson. | 5 |
Christhian Paredes (62′) | Fochive | Paredes coming on changed the match in Portland’s favor late as he was able to test the keeper while providing support to Chara. | 7 |
Jaroslaw Niezgoda (84′) | Asprilla | Asprilla was anonymous in the match but Niezgoda was somehow worse, barely touching the ball after coming on. | 4 |
Gio Savarese | 4 | Questions will need to be asked as Blanco didn’t seem healthy enough to start. He also waited too long to bring on attackers late to chase the equalizer. Had changes been made sooner, the Timbers could’ve lifted the title at home. | 4 |
require.config({"baseUrl":"https://sportsfly.cbsistatic.com/fly-0118/bundles/sportsmediajs/js-build","config":{"version":{"fly/components/accordion":"1.0","fly/components/alert":"1.0","fly/components/base":"1.0","fly/components/carousel":"1.0","fly/components/dropdown":"1.0","fly/components/fixate":"1.0","fly/components/form-validate":"1.0","fly/components/image-gallery":"1.0","fly/components/iframe-messenger":"1.0","fly/components/load-more":"1.0","fly/components/load-more-article":"1.0","fly/components/load-more-scroll":"1.0","fly/components/loading":"1.0","fly/components/modal":"1.0","fly/components/modal-iframe":"1.0","fly/components/network-bar":"1.0","fly/components/poll":"1.0","fly/components/search-player":"1.0","fly/components/social-button":"1.0","fly/components/social-counts":"1.0","fly/components/social-links":"1.0","fly/components/tabs":"1.0","fly/components/video":"1.0","fly/libs/easy-xdm":"2.4.17.1","fly/libs/jquery.cookie":"1.2","fly/libs/jquery.throttle-debounce":"1.1","fly/libs/jquery.widget":"1.9.2","fly/libs/omniture.s-code":"1.0","fly/utils/jquery-mobile-init":"1.0","fly/libs/jquery.mobile":"1.3.2","fly/libs/backbone":"1.0.0","fly/libs/underscore":"1.5.1","fly/libs/jquery.easing":"1.3","fly/managers/ad":"2.0","fly/managers/components":"1.0","fly/managers/cookie":"1.0","fly/managers/debug":"1.0","fly/managers/geo":"1.0","fly/managers/gpt":"4.3","fly/managers/history":"2.0","fly/managers/madison":"1.0","fly/managers/social-authentication":"1.0","fly/utils/data-prefix":"1.0","fly/utils/data-selector":"1.0","fly/utils/function-natives":"1.0","fly/utils/guid":"1.0","fly/utils/log":"1.0","fly/utils/object-helper":"1.0","fly/utils/string-helper":"1.0","fly/utils/string-vars":"1.0","fly/utils/url-helper":"1.0","libs/jshashtable":"2.1","libs/select2":"3.5.1","libs/jsonp":"2.4.0","libs/jquery/mobile":"1.4.5","libs/modernizr.custom":"2.6.2","libs/velocity":"1.2.2","libs/dataTables":"1.10.6","libs/dataTables.fixedColumns":"3.0.4","libs/dataTables.fixedHeader":"2.1.2","libs/dateformat":"1.0.3","libs/waypoints/infinite":"3.1.1","libs/waypoints/inview":"3.1.1","libs/waypoints/jquery.waypoints":"3.1.1","libs/waypoints/sticky":"3.1.1","libs/jquery/dotdotdot":"1.6.1","libs/jquery/flexslider":"2.1","libs/jquery/lazyload":"1.9.3","libs/jquery/maskedinput":"1.3.1","libs/jquery/marquee":"1.3.1","libs/jquery/numberformatter":"1.2.3","libs/jquery/placeholder":"0.2.4","libs/jquery/scrollbar":"0.1.6","libs/jquery/tablesorter":"2.0.5","libs/jquery/touchswipe":"1.6.18","libs/jquery/ui/jquery.ui.core":"1.11.4","libs/jquery/ui/jquery.ui.draggable":"1.11.4","libs/jquery/ui/jquery.ui.mouse":"1.11.4","libs/jquery/ui/jquery.ui.position":"1.11.4","libs/jquery/ui/jquery.ui.slider":"1.11.4","libs/jquery/ui/jquery.ui.sortable":"1.11.4","libs/jquery/ui/jquery.ui.touch-punch":"0.2.3","libs/jquery/ui/jquery.ui.autocomplete":"1.11.4","libs/jquery/ui/jquery.ui.accordion":"1.11.4","libs/jquery/ui/jquery.ui.tabs":"1.11.4","libs/jquery/ui/jquery.ui.menu":"1.11.4","libs/jquery/ui/jquery.ui.dialog":"1.11.4","libs/jquery/ui/jquery.ui.resizable":"1.11.4","libs/jquery/ui/jquery.ui.button":"1.11.4","libs/jquery/ui/jquery.ui.tooltip":"1.11.4","libs/jquery/ui/jquery.ui.effects":"1.11.4","libs/jquery/ui/jquery.ui.datepicker":"1.11.4"}},"shim":{"liveconnection/managers/connection":{"deps":["liveconnection/libs/sockjs-0.3.4"]},"liveconnection/libs/sockjs-0.3.4":{"exports":"SockJS"},"libs/setValueFromArray":{"exports":"set"},"libs/getValueFromArray":{"exports":"get"},"fly/libs/jquery.mobile-1.3.2":["version!fly/utils/jquery-mobile-init"],"libs/backbone.marionette":{"deps":["jquery","version!fly/libs/underscore","version!fly/libs/backbone"],"exports":"Marionette"},"fly/libs/underscore-1.5.1":{"exports":"_"},"fly/libs/backbone-1.0.0":{"deps":["version!fly/libs/underscore","jquery"],"exports":"Backbone"},"libs/jquery/ui/jquery.ui.tabs-1.11.4":["jquery","version!libs/jquery/ui/jquery.ui.core","version!fly/libs/jquery.widget"],"libs/jquery/flexslider-2.1":["jquery"],"libs/dataTables.fixedColumns-3.0.4":["jquery","version!libs/dataTables"],"libs/dataTables.fixedHeader-2.1.2":["jquery","version!libs/dataTables"],"https://sports.cbsimg.net/js/CBSi/app/VideoPlayer/AdobePass-min.js":["https://sports.cbsimg.net/js/CBSi/util/Utils-min.js"]},"map":{"*":{"adobe-pass":"https://sports.cbsimg.net/js/CBSi/app/VideoPlayer/AdobePass-min.js","facebook":"https://connect.facebook.net/en_US/sdk.js","facebook-debug":"https://connect.facebook.net/en_US/all/debug.js","google":"https://apis.google.com/js/plusone.js","google-platform":"https://apis.google.com/js/client:platform.js","google-csa":"https://www.google.com/adsense/search/async-ads.js","google-javascript-api":"https://www.google.com/jsapi","google-client-api":"https://apis.google.com/js/api:client.js","gpt":"https://securepubads.g.doubleclick.net/tag/js/gpt.js","newsroom":"https://c2.taboola.com/nr/cbsinteractive-cbssports/newsroom.js","recaptcha":"https://www.google.com/recaptcha/api.js?onload=loadRecaptcha&render=explicit","recaptcha_ajax":"https://www.google.com/recaptcha/api/js/recaptcha_ajax.js","supreme-golf":"https://sgapps-staging.supremegolf.com/search/assets/js/bundle.js","taboola":"https://cdn.taboola.com/libtrc/cbsinteractive-cbssports/loader.js","twitter":"https://platform.twitter.com/widgets.js","video-avia":"https://vidtech.cbsinteractive.com/avia-js/1.9.0/player/avia.min.js","video-avia-cvui":"https://vidtech.cbsinteractive.com/avia-js/1.9.0/legacy/cvui/cvui.min.js","video-cvp":"https://vidtech.cbsinteractive.com/cvp/1.2.2/cvp.min.js","video-cvui":"https://vidtech.cbsinteractive.com/cvp/1.2.2/cvui.min.js","video-ima3":"https://imasdk.googleapis.com/js/sdkloader/ima3.js","video-ima3-dai":"https://imasdk.googleapis.com/js/sdkloader/ima3_dai.js","video-utils":"https://sports.cbsimg.net/js/CBSi/util/Utils-min.js","video-vast-tracking":"https://vidtech.cbsinteractive.com/sb55/vast-js/vtg-vast-client.js"}},"waitSeconds":300});