Hansi Flick's side have started the season with a perfect record after five La Liga matches but struggled to find their best level against the Ligue 1 side.
After Garcia was sent off for pulling down Takumi Minamino as he ran through, Maghnes Akliouche fired Monaco ahead.
Starlet Lamine Yamal scored a fine equaliser for Barcelona but George Ilenikhena grabbed the winner for Monaco in the 71st minute.
Five-time winners Barcelona, last crowned European champions in 2015, have struggled in Europe in recent seasons, particularly away from home and were brought crashing down to earth in the French Riviera.
Monaco thrashed Barcelona in a pre-season friendly and had the Catalan giants' number for much of the clash at the Stade Louis II.
They were significantly aided by Garcia's dismissal after 11 minutes, for felling former Liverpool midfielder Minamino on the edge of the box.
A careless pass from Barcelona goalkeeper Marc-Andre ter Stegen put Garcia under immediate pressure and he tangled with the Japan international as he tried to stop him running in on goal.
Monaco soon took the lead after 17 minutes when Akliouche worked his way into the box and finished well under little pressure.
With Barcelona at a numerical disadvantage the hosts were on top and Raphinha squandered the visitors' best openings despite his impressive domestic form of late.
Monaco had kept Spain's Euro 2024 star Yamal quiet but he burst into life to level before the half-hour mark, cutting in from the right and drilling inside the near post.
The teenage made it look easy to score a goal out of nothing, becoming the second youngest scorer in Champions League history at 17 years and 68 days old.
The record-holder watched on from Barcelona's bench -- Ansu Fati, who netted in 2019 against Inter Milan at 17 years 40 days of age.
Alejandro Balde bundled off target for Barcelona but Monaco came closer, with Breel Embolo firing at Ter Stegen and Wilfried Singo having a goal disallowed for offside.
Monaco took the lead when the dangerous Vanderson played a long ball over the top which substitute Ilenikhena ran on to, with Inigo Martinez in his rearview mirror.
The 18-year-old Nigerian forward hit his shot hard and low and it flew into the net via a hand from Ter Stegen, who might have kept it out.
The German stopper achieved some redemption when he produced a superb save to keep out Folarin Balogun's ferocious effort.
Monaco were awarded a penalty late on when Balogun tumbled to ground under pressure from Martinez, but the referee changed his decision after a VAR review.
Flick threw on Fati for his first Barcelona appearance since August 2023 in search of an equaliser but it was not forthcoming.
(For more sports news and updates, follow Ahram Online Sports on Twitter at @AO_Sports and on Facebook at AhramOnlineSports.)
Short link: