Hard boil the eggs - Place eggs in a saucepan large enough to hold them in a single layer. Add cold water to cover eggs by 1 inch. Heat over high heat just to boiling. Remove from the burner. Cover pan. Let eggs stand in hot water about 9 minutes for medium eggs, 12 minutes for large eggs and 15 minutes for extra large ones.
Drain immediately and cool completely under cold running water. De-shell the eggs and cut into half. Slit the eggs.
Prepare masala - Thinly slice onion. Crush or grind ginger and garlic into a paste form.
Heat the oil in a heavy-based pan over a medium heat. Splutter mustard seeds.
Add onion, green chili, curry leaves and some salt into the pan. Salt absorbs moisture from onion and helps onion to get cooked fast. Saute it well until onion turns light brown.
Add ginger and garlic paste and saute it well.
Add turmeric powder, chilli powder, pepper powder, coriander powder, garam masala and fennel powder. Add oil as required. Saute it well for 3 - 4 minutes.
Slice tomato. Add it to the masala and saute well.
Once tomatoes are cooked, add medium thick coconut milk. Add salt as needed. Mix it well. Refer notes on how to make coconut milk from scratch.
Add the prepared boiled eggs into the gravy. Let it simmer for another 10 minutes for the masala to coat in the egg. If you like more egg flavor in the gravy, mash one of the egg yolks into the gravy.
Add thick coconut milk and gently swirl the pan without breaking the eggs. Once it boils, and the gravy has desired consistency, switch off the flame.
Serve it with Appam or Noolappam or Puttu or Roti :)