Manchester City twice trailed before a late goal from Gabriel Jesus earned them a point that keeps them in the top four and just ahead of Manchester United.
Middlesbrough remain in the bottom three, but caretaker-manager Steve Agnew will be given massive encouragement by this performance.
They led through an Alvaro Negredo goal before Sergio Aguero scored a controversial penalty, but Middlesbrough showed the spirit that may yet keep them up when Calum Chambers put them back in front.
They almost held on, but Jesus, one of several surprise choices by City boss Pep Guardiola rescued City.
Agnew had predicted before the match that Negredo would be the player feared by City, where he scored 23 as they won the league title three years ago.
In fact, Negredo squandered his first chance of the match, dragging a 13th minute shot across the face of the goal and perhaps making City think that, at 31, some of his instincts had deserted him.
If so, the Spaniard proved them wrong in the 38th minute with a goal that came at the end of an excellent move that made a mockery of Boro’s current Premier League plight and their dreadful scoring record.
George Friend was heavily involved as he collected the ball on the edge of his own area and broke quickly before linking with Marten de Roon.
The midfielder who scored against Sunderland in midweek, released Stewart Downing down the left and Friend, who had continued his run, got a touch before it reached Negredo. The striker still had work to do, but turned well to fire inside the post.
City could have no complaints. They had started well when Sergio Aguero fired across the face of the Boro goal after only 45 seconds, but that was the closest they came to a goal in the opening half.
It was a performance that put a question mark against Guardiola’s tinkering with his team at a ground where he has pulled another selection surprise by naming a side that was close to full strength for an FA Cup tie.
Guardiola started without Raheem Sterling and Leroy Sane while giving a league debut to Aleix Garcia and playing Jesus alongside Aguero for the first time. But the manager accepted he had got it wrong by sending on Sterling and Sane after only five minutes of the second-half.
City immediately quickened their pace and started to starve Middlesbrough of the ball, with Sane settling quickly and helping to set up two chances for Kevin de Bruyne, one that was too close to keeper Brad Guzan and another that was sliced wide.
The real drama was confined to the final quarter of the game, though, starting from Aguero’s 69th minute penalty after referee Kevin decided that de Roon brought down Sane – a decision that looked harsh and was hotly disputed.
Middlesbrough were back in front Chamber scored from close range after Caballero failed to hold Downing’s free kick in the 78th minute, but once again they couldn’t hold on and Jesus earned City a point with his 85th minute header.