James joined Bristol City from Portsmouth last summer and featured in all but two of the club’s games last season.
“Despite all the adversities last season, I think on a number of occasions we showed our capabilities,” James told the club’s official website.
“Yes, there were some inconsistencies that let us down. Too often we allowed teams to beat us, but when we got it right we could win games against whoever we faced.
“I’m confident we can do good things this season, as I’ve been assuring City fans whenever I bump into them around the world.”