A first international double by Alexandre Lacazette put France on the verge of a deserved victory in a clash of two of the favourites for next year’s World Cup.
The Arsenal striker scored either side of a Timo Werner goal, before Stindl struck to maintain Germany’s unbeaten run dating back to their 2-0 defeat by France in the Euro 2016 semi-finals.
“We conceded the goal from nothing to make it 2-1, but we also showed the morale to come back from behind,” said stand-in Germany captain Sami Khedira.
Security was tight in Cologne almost two years to the day since the Paris terror attacks of November 13, 2015, when 130 people were killed and over 400 injured.
On that night, three suicide bombers set off devices at the Stade de France during a France v Germany friendly and the shocked visiting players had to spend the night at the stadium during a security crackdown.
Germany coach Joachim Loew made six changes from the team which were held to a goalless draw by England at Wembley on Friday, switching from a 4-3-3 line-up to their trusted 4-2-3-1 formation.
Paris Saint-Germain second-choice goalkeeper Kevin Trapp replaced Marc-Andre ter Stegen.
Emre Can, Niklas Suele, Marvin Plattenhardt, Toni Kroos, who missed the England game with a gastrointestinal infection, and Sami Khedira, who took over the captaincy, also came into the side.
French boss Didier Deschamps left star forward Antoine Griezmann on the bench and started with Kylian Mbappe, Anthony Martial and Lacazette in a 4-3-3 formation.
The trio were a constant menace and the French deservedly grabbed the opening goal on 34 minutes after Mbappe and Lacazette had early chances.
A diagonal long pass to Barcelona left-back Lucas Digne was squared to Manchester United’s Martial, who weaved past Suele, drew Trapp and squared to Lacazette who fired home.
It stayed 1-0 at the break and Loew reshuffled his defensive options by swapping Mats Hummels for Antonio Ruediger.
The burly Chelsea centre-back had a golden chance on 52 minutes, but he fired Julian Draxler’s cross wide.
The Germans equalised in the 56th minute when Mesut Ozil’s superb final pass released Werner, who slotted his shot past French goalkeeper Steve Mandanda.
Loew brought on World Cup winner Mario Goetze for the last half an hour — his first international appearance for a year after a metabolic disorder.
Kroos clattered the crossbar with a free-kick with 20 minutes left, but France retook the lead almost immediately.
The German defence left Mbappe in acres of space and his through ball put Lacazette into the box to again shoot past Trapp with 19 minutes to go.
Lacazette made way for Griezmann for the final quarter of an hour as the French national anthem – La Marseillaise – echoed around the Cologne stadium as Stindl came on.
But the Germans grabbed a draw right at the death when Ozil’s pass found Goetze, who set up Stindl and the Moenchengladbach forward drilled home the equaliser.
Loew said he was pleased with the draws against England and France in Germany’s final internationals of 2017.
“We played better in the second half after not everything worked so well in the first 45 minutes as we had hoped,” he said.
“That can always happen when you are behind at the break, but we had our chances when we put pressure on in the second half.”