The common objective of network traffic engineering is to minimize the maximal link utilization in a network in order to accommodate more traffic and reduce the chance of congestion. Traditionally this is done by either optimizing OSPF link weights or using MPLS tunnels to direct traffic. However, they both have problems: OSPF weight optimization triggers network-wide convergence and significant traffic shift, while pure MPLS approach requires a full mesh of tunnels to be configured throughout the network. This paper formulates the traffic engineering problem as a Multi-Commodity Flow problem with hybrid MPLS/OSPF routing (MCFTE). As a result, the majority of traffic is routed by regular OSPF, while only a small number of MPLS tunnels are needed to fine-tune the traffic distribution. It keeps OSPF link weights unchanged to avoid triggering network convergence, and needs far fewer MPLS tunnels than the full-mesh to adjust traffic. Compared with existing hybrid routing approaches, MCFTE achieves the optimal link utilization, runs about two orders of magnitude faster, and is more robust against measurement inaccuracy in traffic demand.