Daniil Tarasov and Bracken Kearns also scored for the Sharks (22-18-6).
Ed Pasquale made 30 saves for the IceCaps (21-24-3).
St. John's dropped back-to-back games to the Sharks after coming up with back-to-back wins at home for the first time this season against the Binghamton Senators last weekend.
The game, which featured a total of 89 penalty minutes, got off to a rough start with a fight four seconds into the game and another at the 1:16 mark.
Pasquale had a great first period, including a few clutch saves to keep the game level midway through the period in which the Sharks outshot the IceCaps 14-6.
The Sharks kept pressing in the second and finally scored at 10:28 when Tarasov put a nice feed from Kennedy past Pasquale.
The IceCaps took back-to-back penalties with just over two minutes left in the second, giving the Sharks a lengthy five-on-three power play.
The penalties would prove to be costly, as the Sharks would hammer home two goals in less than a minute.
Kearns scored at 19:03 off a point shot through traffic that found its way through everybody.
McCarthy added to the IceCaps' misery when he banged home a rebound over Pasquale at 19:34. He then had his second goal of the game when he tipped a shot into the IceCaps' goal at 10:46 of the third period.
Worcester was 2 for 4 on the power play and St. John's was 0 for 5.