With Nicky Little injured and Romanian Petru Tamba making his first start, Melrose took the lead with an Andrew Skeen penalty in six minutes.
The game saw Kieran Cooney back at Melrose in a Kelso jersey and the pack used the strong wind and rain to their advantage.
It was no surprise, after intense pressure, that Andy Tait nipped through a gap for the try, which Mark Chester converted,
Kelso lost Ian Wallace to the sinbin, but their strong defence and tackling was crucial.
It was a remarkably entertaining match in the conditions with Kelso using the kicking game to try to seize the initiative but Melrose held out to trail just 3-7 at the break.
Despite the wind advantage, Melrose struggled to match their opponents and it was with Graeme Dodds in the sinbin that Skeen chipped ahead for Jamie Murray to win the race for the touchdown. With one minute left, Tamba cashed in on a loose ball for the winning try, Skeen converting his second, but the final scoreline flattered Melrose.