The Black Caps captain reached the milestone on the fifth day of the second Test against India at the Basin Reserve.
Resuming at 281, he reached 302 when he late cut Zaheer Khan for four in the 11th over of the day.
He was dismissed two balls later by Khan for the same score, caught behind by wicketkeeper MS Dhoni.
The previous record innings of 299 for a New Zealand batsman was scored by Martin Crowe at the same venue, against Sri Lanka in 1991.
McCullum was at the crease for 774 minutes and faced 559 balls. He hit 32 fours and four sixes.
He left the ground to a standing ovation from a packed crowd at the Basin Reserve who had come to watch the 32-year-old chase the milestone.
New Zealand were 7-625, having resumed on 571-6.
They hold a 379-run lead in the second innings, with James Neesham on 100 at the other end, having scored a maiden first-class century in his Test debut.