Tri-series one-day international, Colombo: India 262-4 beat West Indies 255-7 by seven runs
India weathered a brave fight back by West Indies to win by seven runs and qualify for the tri-series final.
Singh celebrates his century
They set West Indies 263 to win after a blistering century by Yuvraj Singh and an unbeaten 83 from Mohammad Kaif.
Anil Kumble (3-38) reduced West Indies to 112-6 but Runako Morton hit 84 and keeper Denesh Ramdin an unbeaten 74.
However, with 12 runs required for a major upset, left-armer Ashish Nehra held his nerve to bowl a fine last over, conceding just four.
India now face Sri Lanka in the final on Tuesday in Colombo.
Yuvraj top-scored with 110 from 114 balls, rescuing India from 51-3 with a fourth-wicket stand of 165 with Kaif.
Sourav Ganguly retired hurt for two after being struck on the left arm, and Virender Sehwag, VVS Laxman and Rahul Dravid all departed for single figures.
India captain Dravid had won the toss and elected to bat in the last group match of the triangular one-day series.
Yuvraj was one of three changes for India with Anil Kumble and Zaheer Khan coming in for Harbhajan Singh, Laxmipathi Balaji and Suresh Raina.
He hit one six and 11 fours in his third one-day international hundred, counter-attacking vigorously before falling attempting a reverse-sweep in the closing overs.
India plundered 89 runs in the last 10 overs to set a stiff target, with Kaif played a superb supporting role and Mahendra Singh Dhoni smashing a 13-ball 28 with two sixes.
West Indies captain Shivnarine Chanderpaul was ruled out of the match with flu, Sylvester Joseph deputising.