Set a heavy bottomed/non-stick pan on medium high and add the oil.
Once the oil is hot and shiny, add the whole spices (green cardamom, cloves and cinnamon.
Add minced garlic and chopped onion. Add a pinch of salt. The salt helps to pull out the moisture from the onions and they cook faster. Mix.
Cook until the moisture evaporates and add ginger. Cook the masala till it all comes together and the onions turn golden brown. If at some point, the masala starts sticking to the pan, sprinkle some water to loosen the bits and continue cooking.
Add in turmeric powder, cumin powder, coriander powder, and cayenne. Mix well. Add the pureed tomatoes and cook (stirring in between) until oil separates from the mixture, about 10 minutes.
Slowly add the cream, stirring or whisking continuously. The idea is to gently bring the cream to high temperature so that it does not curdle or separate out.
Once the cream is completely mixed in, add the milk, again stirring continuously. Add water to adjust the consistency. The sauce will thicken as it sits so factor that in.
Now add salt, honey, ketchup, raisins and frozen meatless meatballs. Bring the sauce to a boil at high heat. Once it boils, lower the heat to medium low, cover the pan and cook for 15 -20 minutes or until the meatballs are heated through and softened.
Finish the sauce with garam masala and kasoori methi. Let sit a few minutes before serving warm with naan, roti, or rice.