The Black Caps struggled in the first session of the day as Ishant Sharma (2-62) took two wickets to help reduce the hosts to 54-3 at the lunch interval.
New Zealand hit back following a difficult morning as McCullum (143*) and Williamson (113) took advantage of the improving batting conditions to both pass three figures.
Visiting captain MS Dhoni struggled to control proceedings for long spells of the day as the Indian bowlers found it difficult to build pressure with the ball.
Williamson departed midway through the final session when Zaheer Khan (2-98) had the batsman caught down the leg-side by Dhoni.
However, Corey Anderson quickly found his feet at the crease to score an unbeaten 42 and he will resume his innings alongside McCullum on the second morning.