Locked in a 2-1 hitter’s count with runners at first and second, McCann belted a low slider from Brandon Lyon (3-3) deep into the first level behind right field to snap a 2-2 tie.
Chipper Jones followed with a double and scored on Eric Hinske’s two-out RBI single off Fernando Rodriguez for a 6-2 lead.
The 10th-inning rally marked the first time either team had scored since Atlanta tied the game on Hinske’s solo homer in the fourth.
Scott Linebrink (2-1) stranded runners at first and second in the ninth inning to pick up the win. Craig Kimbrel gave up a one-out run in the 10th for the final margin.
The scuffling Astros scored their other runs in the first inning on RBI doubles from Hunter Pence and Carlos Lee. They fell to 1-7 in their last eight games, and to 1-4 on their 10-game homestand.
Pence pushed his personal-best hitting streak to 22 games with a 2-for-5 showing, also doubling and scoring on Lee’s double in the 10th inning.
It’s the longest current streak in the majors and eight shy of Andre Ethier’s season-high 30-game streak for the Dodgers.
“He continues to hit,” said Astros manager Brad Mills. “It was a big day swinging the bat.”
Lost in the final score were two good outings by a pair of young pitchers.
Mike Minor, the 23-year-old Atlanta starter, yielded two runs on four hits and two walks in six innings, striking out four.
Jordan Lyles, 20, made his first start at Minute Maid Park and also gave up two runs in 6 1/3 innings, allowing eight hits and two walks while fanning five.
The rookie righthander — currently the youngest player in the majors — was making just his third MLB start.
The Braves won the opener of this four-game series, 11-4, on Friday. But it was the Astros who jumped on top Saturday with a one-out rally in the first inning sparked by Michael Bourn’s triple. Pence and Lee followed with nearly identical back-to-back RBI doubles to left field to make it 2-0.
Lyles pitched out of trouble in the first and second innings, but the Braves got to him for a run in the third when Dan Uggla drew a one-out walk and scored on Jones’ two-out double to left-center field.
Hinske belted his eighth homer of the season with one down in the fourth, tying the game at 2-2 with a shot deep into the right field seats.
The Astros stranded runners at second and third in the seventh inning, the first time they moved a man past first base since their two-run rally in the first. They left runners at first and second in the bottom of the ninth when Jason Bourgeois lined out to left field.
The Braves stranded runners in scoring position in the fifth and seventh innings.