On what should have been a step in the right direction, McKinnon returned to practice Tuesday afternoon but the session apparently didn't go that well for him and his surgically repaired right knee, according to general manager John Lynch.
"Yesterday we brought him out and it's a real bummer because he keeps getting to the final step," Lynch told KNBR radio in San Francisco on Wednesday morning. "And the final step is actually playing NFL football, particularly at his position where you have got to make hard cuts. You've got to put your foot in the ground. And we did it a month ago. And we got to that step and he kind of regressed and I would say yesterday we had a similar situation. So we're trying to get to 'OK, what's really the root cause of the problems that he's having?'
"Yesterday was not encouraging from that standpoint for Jet. What that means, we're not sure yet. We're working hard to find that out."
Tuesday's setback was the latest in a series of stops and starts for McKinnon, who suffered the injury on Sept. 1, 2018.
After a lengthy rehabilitation process, McKinnon and the 49ers hoped he would be ready at the start of training camp but McKinnon had what Lynch described as a "flare-up" about a week-and-a-half before camp, which led to him starting on the physically unable to perform list.
The Niners activated McKinnon from the PUP list on Aug. 6 and he twice participated in practice on a limited basis before knee soreness shut him down again. At that time, McKinnon had a platelet rich plasma injection, which put him on the sideline for the past three weeks before he returned on Tuesday.
At Tuesday's practice, McKinnon wore a brace on his right knee, something he had previously preferred not to do. Coach Kyle Shanahan said McKinnon got a few reps in team drills Tuesday, but indicated he wasn't at full speed.
"It seemed all right," Shanahan said Tuesday. "I haven't gotten a chance to talk to him. I'll watch it when I'm done with you guys and talk to him and see how it was, but we took it very easy, so it'll be more talking to him and see how he felt."
Despite that, Shanahan expressed hope that McKinnon would be available for the season opener on Sept. 8 against the Tampa Bay Buccaneers.
"We obviously would love him to be," Shanahan said Tuesday. "We've just got to make sure that he's healthy and ready to go and when he'll be. Today was the first process, really, of getting him out there and giving us a chance to decide that and giving himself a chance to decide it. He's done as much as he can in rehab and now we'll see how it goes over these few days."
That was before Lynch revealed McKinnon hadn't come through the practice without issue. Now, the 49ers are going to have to make a decision on what to do with McKinnon in the coming days.
One option that would make sense is having him on the 53-man roster after cuts are made on Saturday and then placing him on injured reserve. While that would mean there's a possibility of losing another player they want to keep, it would leave the door open for the Niners to make McKinnon one of their two players who can be brought back from injured reserve after eight weeks.
The Niners could also place McKinnon on injured reserve in the next few days, though if they go that route he would not be eligible to return this season and it would mean two years in a row in which he didn't play.
McKinnon signed a four-year, $30 million deal with San Francisco on March 14, 2018, but he has yet to play a snap for the team. His $3.7 million base salary for 2019 became fully guaranteed on April 1 and he's due to count $5.75 million against the cap for this season.
With McKinnon missing for most of camp, the Niners have leaned on a group that includes Tevin Coleman, Matt Breida and Raheem Mostert to handle the running back spot. All three are expected to make the initial roster. The 49ers also have Jeff Wilson Jr., who scored two touchdowns in last Saturday's preseason win against Kansas City and who averaged 4 yards per carry on 66 attempts down the stretch for the Niners last season.