The League One high-fliers were stunned by Yeovil Town, who are now the lowest-ranked side left in the competition.
McCall’s men were off the pace and second-half goals from debutant Marcus Barnes and Jordan Brown dumped them out.
The manager admitted: “We deserved to be beaten and we can’t produce anymore lacklustre performances like that.
“We’re bitterly disappointed. We lost every battle on the pitch. We were so fortunate to still be in the tie as long as we were and full credit to them. They were hungry.
“If we’d have been going back with a replay then we would have been very lucky.”
The Bantams were firmly on the back foot in the first half as Yeovil started brightly. Barnes went close early on after Lukas Raeder parried Francois Zoko’s effort back into danger.
Raeder again kept out the potent Barnes with a top stop low at his near post and the Bantams were indebted to defender Matt Kilgallon for throwing himself in front of Tom James’s strike.
It was better for the visitors after the break as Alex Gilliead and Charlie Wyke forced good saves out of Artur Krysiak.
Just after the hour, Raeder was nutmegged by Barnes, who completed his dream debut with a goal.
Paul Taylor crashed an effort off the bar, with Shay McCartan’s rebound denied by Krysiak, but Green sent Bradford packing with a cool finish.
Yeovil: Krysiak, James, Mugabi, Smith, Dickson, Gray, Green, Bird (Wing 78), Khan (Santos 90), Zoko, Barnes (Whelan 85). Unused substitutes: Maddison, Golubickas.
Bradford City: Raeder, Hanson, Kilgallon (Thompson 45), Vincelot, Robinson, Gilliead, Law, Dieng (Devine 70), McCartan (Poleon 75), Wyke, Taylor. Unused substitutes: Sykes-Kenworthy, Gibson, Patrick.
Referee: J Brooks (Leics).