We address the problem of fingertip design by leveraging on the fact that most grasp contacts share a few classes of local geometries. In order to maximize the contact areas for achieving more robust grasps, we first define the concept of Contact Primitive, which represents a set of contacts of similar local geometries. Thereafter, we propose a uniform cost algorithm, which is formulated as a decision-making process in a tree structure, to cluster a set of example grasp contacts into a finite set of Contact Primitives. We design fingertips by optimization to match the local geometry of each contact primitive, and then 3D print them using soft materials to compensate for optimization residuals. For novel objects, we provide an efficient algorithm to generate grasp contacts that match the fingertip geometries while together forming stable grasps. Comparing to a baseline of flat fingertip design, the experiment results show that our design significantly improves grasp stability and it is more robust against various uncertainties.