McCullers (12-4) permitted one run on three hits with seven strikeouts.
"I was being aggressive," McCullers said. "Not trying to pick too much, especially early. ... I just wanted to get in the zone, wanted to give our team some length."
He won his third straight decision and has allowed two runs or fewer in three straight starts.
"He pitched ahead in the count most of the time, and he used his fastball probably more than he had early in the count to get strike one," Houston manager Dusty Baker said. "He threw some outstanding breaking balls for strike three, and he threw some very good changeups. He had a good tempo going. He wasn't in trouble very much."
After Juan Lagares tied it 1-1 in the fifth with a homer to left, Tucker hit a two-run homer to right-center off Jose Quijada (0-1) in the bottom of the inning.
Since coming off the injured list on Aug. 24, Tucker is 25 for 59 with 11 extra-base hits, including three home runs.
"I've been seeing the ball really well and trying to hit it on the barrel and not chase pitches," Tucker said. "I am just trying to do my job and get on base and score some runs."
Shohei Ohtani, the Angels' two-way superstar, went 1 for 3 with a walk on the day Toronto's Vladimir Guerrero Jr. tied him for the major league lead in homers at 44.
Los Angeles manager Joe Maddon lamented the Angels' missed opportunities in the first two innings. They had runners on first and second with no outs in each frame.
"The early innings, that was the game," Maddon said. "That's large against McCullers. He's one of those guys - like a lot of good pitchers - who will get better if you let him up, and then he did. You look at the entirety of the game, had we been able to cash in a little bit there, it would have made a huge difference."
Yuli Gurriel had four hits, including an RBI single in the first to give Houston a 1-0 lead.
"We got just enough to win," Baker said. "You want more, and we'll get more. You have to win low-scoring games just like you have to win high-scoring games. ... The main thing, it doesn't matter what the score is as long as you touch home plate one more time than the opposition."
In the seventh, right fielder Lagares slipped going for Gurriel's single but recovered to throw it to second baseman David Fletcher, whose relay throw got Alex Bregman at the plate.
Ryne Stanek pitched a perfect seventh, Kendall Graveman worked the eighth and Ryan Pressly closed it out for his 24th save.
LA's Jaime Barria yielded one run on four hits with four walks and six strikeouts in four innings.
"I thought he fought," Maddon said. "I really liked it. Just a high pitch number. A lot of full counts, big counts. ... He still had some velocity there at the end. I just like a lot the way he battled through it."
Angels: OF Jo Adell was out of the lineup after crashing into the outfield wall on Saturday. Adell was sore in the back hip and backside area where he hit the wall, Maddon said.
Astros: OF Michael Brantley is day-to-day after leaving Saturday night's game with right knee soreness, Baker said. ... C Jason Castro (right knee discomfort) and INF Taylor Jones (health and safety protocols) are set to start rehabilitation assignments with Triple-A Sugar Land, Baker said.
Carlos Correa dove to his right and laid out to catch a line drive by Fletcher in the fifth. After the play, McCullers tipped his cap to Correa to show his appreciation.
McCullers said it was one of the best plays he has seen from Correa.
Angels: LHP Packy Naughton (0-1, 2.57 ERA) will make his third start of the season Tuesday in the opener of a three-game series at the Chicago White Sox. Naughton pitched five scoreless innings in his last start Tuesday at San Diego.
Astros: RHP Jake Odorizzi (6-7, 4.28) will start Monday in the opener of a four-game series at the Texas Rangers. Odorizzi has allowed two runs or fewer in each of his last four outings.
Kyle Tucker lifts Astros past Angels with 2-run HR
Kyle Tucker's 25th homer of the season is a two-run dinger that puts the Astros ahead of the Angels for good.