West Indies batsman Marlon Samuels struck a four off the antepenultimate delivery of the match to seal victory, but not before the Windies lost four wickets for seven runs in the space of nine balls.
Brian Lara's side looked to be cruising to victory after restricting the host nation to 223 for 9 from their 50 overs, with Ramnaresh Sarwan (53 runs off 81 balls) and Runako Morton (45 off 64) looking settled after a good innings from opening batsman Shivnarine Chanderpaul (51 off 72).
Needing 12 runs off 14 deliveries to win, Morton was trapped leg before wicket by right-arm fast bowler Ajit Agarkar to give India a remote chance of victory.
Lara strode to the crease but after hitting a classic square drive for four, the West Indies captain played an awful shot off the next delivery, sending the ball crashing into his stumps off a bottom edge from the bowling of Irfan Pathan.
New batsman Marlon Samuels pushed a single before Sarwan skied a ball which fell just short of Indian captain Rahul Dravid, but a mix up between the two batsmen saw Sarwan set off for an ill-advised second run.
Dravid fired the ball in to Pathan who removed the bails at the bowler's end to find a retreating Sarwan well short of his ground, making the score 219-6 with the West Indies requiring five runs off the final over to win.
Dwayne Smith was the new batsman, but he was bowled for a golden duck by Agarkar with India now smelling blood with five off five needed, and seven wickets down.
Windies keeper Carlton Baugh came to the crease and got a single, with Samuels sending Agarkar's next delivery into the third man fence to win the match and send sighs of relief through the West Indies dressing room.
The nail-biting win puts the Windies on top of Group A with two wins from two matches, ahead of India and Australia who face each other in the last match of the round-robin series on October 29.
The West Indies play winless England in their final group match on October 28.
Dhoni does it for India
Earlier, India's Mahendra Dhoni scored an impressive 51 off 65 deliveries when under pressure to hold his side's innings together after the loss of early wickets.
India's Mahendra Dhoni gave his
side a semi-respectible total
It was the wicketkeeper/batsman's first half-century in 12 matches, and came when India were floundering at 131 for 5 after left-arm paceman Ian Bradshaw's three consecutive scalps of pinch hitter Pathan (0 from 6), opener Sachin Tendulkar (29 from 45), and middle-order batsman Yuvraj Singh (27 from 43).
Dhoni batted brilliantly to push India's total above 200, smashing two successive sixes off spinner Chris Gayle in the dying stages to help his side add 42 runs in the last five overs.
Bradshaw, a left-arm fast-medium bowler, finished with the tidy figures of 3-30 off his ten overs, while fellow paceman Jerome Taylor took 2-33 from ten overs, capturing the important wicket of dangerous opener Virender Sehwag LBW for 17.
India captain Dravid was looking like putting a big innings together when he was 49 off 67 deliveries including six fours, but he was needlessly run out by Smith with the score on 131.