There are two spur highways branching from SH-31, SH-31A and SH-31B.
SH-31 begins at SH-48 seven miles (11 km) south of Tupelo. Two miles (3.2 km) east of here, SH-31B branches off, connecting the main highway with the town of Olney. SH-31 then continues for 10 miles (16 km) to Coalgate, the seat of Coal County, where it intersects US-75/SH-3. Leaving Coalgate, SH-31 turns north at SH-131, traveling 22 miles (35 km) to its junction with SH-31A, which connects with US-270 at Stuart. At SH-31A, SH-31 turns to the east, following the northern edge of the McAlester Army Ammunition Plant, arriving in McAlester, seat of Pittsburg County, 22 miles (35 km) later.
In McAlester, SH-31 forms a five-mile (8 km) concurrency with US-270 and SH-1, splitting up just east of the US-69 interchange on the east side of the city. SH-31 then sets off to the northeast, passing through Krebs, and crossing the south arm of Lake Eufaula.
At Quinton, 27 miles (43 km) from McAlester, SH-31 serves as the southern terminus of SH-71, then heads east, forming a six-mile (10 km) concurrency with SH-2 to the town of Kinta. At Kinta, SH-2 turns north, and SH-31 continues east, with a short dogleg concurrency with SH-82 at Lequire. Continuing on to the east, SH-31 serves as the southern terminus for SH-26 at McCurtain, then passes though Bokoshe before terminating at US-59/US-271, two miles (3 km) north of Panama.