Season the chicken with a pinch of salt and pepper. Set the Instant Pot to sauté and melt the butter, then brown the chicken in batches until lightly golden. Remove and set aside.
In the same pot, add the onion and sauté until translucent and fragrant, about 3–4 minutes. Stir in garlic and ginger and cook for another minute.
Add garam masala, cumin, turmeric, cayenne (if using), and paprika. Stir to toast the spices for about 30 seconds, until fragrant.
Pour in tomato puree, scraping up any browned bits from the bottom of the pot. Return the chicken to the pot.
Pour in the cream or coconut milk and add enough water or broth to create a thick, saucy consistency. Stir well.
Close the lid, set the valve to sealing, and cook on high pressure for 6 minutes. Allow a natural release for 5 minutes, then quick release the remaining pressure.
Open the lid and stir gently. Adjust salt and pepper to taste. If the sauce is too thick, whisk in a splash more cream or broth to reach your desired consistency.
Garnish with chopped cilantro and a squeeze of lime juice, if you like. Serve hot with steamed basmati rice or warm naan.