Élevé par ses grands-parents maternels avec sa sœur (la chanteuse Joy McAvoy) après le divorce de ses parents, James McAvoy monte sur les planches dès son adolescence, en jouant notamment "Roméo et Juliette ". En 1995, David Hayman fait appel à l'adolescent qu'il a rencontré quelques temps auparavant et lui offre son premier rôle au cinéma. A seize ans, il incarne ainsi un fils de proxénète dans The Near Room, un premier film qui va le pousser à intégrer la Royal Scottish Academy of Music and Drama dont il ressort en 2000.
Diplôme en poche, James McAvoy part vivre à Londres. Entre 1997 et 2001, il fait plusieurs apparitions peu remarquées dans des séries télévisées et des téléfilms, An Angel Passes By, The Bill, Lorna Doone et Murder in Mind. Pour la seconde fois, il obtient un petit rôle dans un long métrage, Renaissance (1997). Ses revenus étant insuffisants, il travaille dans une boulangerie et pense même un moment à s'engager dans la Royal Navy, renonçant à une carrière d'acteur.
Mais en 2001, il décroche le rôle de James Miller, soldat d'une troupe d'élite de l'armée américaine dans la série télévisée Frères d'armes, créée par Stephen Ambrose et Tom Hanks qui donne un réel coup d'accélérateur à sa carrière. Par la suite, James McAvoy multiplie les rôles récurrents dans des séries télévisées comme Meurtres à l'anglaise en 2002, Les Enfants de Dune et Early Doors. Deux rôles marquent particulièrement sa carrière, Dan Foster dans State of Play dirigé par David Yates et surtout, le voleur Steve dans Shameless. C'est sur le tournage de cette série qu'il rencontre sa femme Anne-Marie Duff.
Parallèlement à sa carrière télévisuelle, l'acteur s'essaye à différents genres de films, dans un rôle secondaire pour le thriller d'horreur Swimming pool: la piscine du danger puis dans des premiers rôles avec la romance Bollywood Queen et la comédie dramatique Bright Young Things. En 2004, James McAvoy est à l'affiche de trois films. Il prête sa voix à Hal pour le film d'animation Strings, joue au tennis dans La Plus belle victoire et vient en aide à un homme paralysé dans Inside I'm Dancing.
En dépit de ces nombreux projets, il reste peu connu du public. L'année suivante marque un véritable tournant dans sa carrière avec sa participation à l'aventure fantastique Le Monde de Narnia : chapitre 1 - le lion, la sorcière blanche et l'armoire magique, sous les traits du faune Mr.Tumnus, rôle pour lequel il reçoit le prix Orange du meilleur espoir aux BAFTA. Le réalisateur Kevin Macdonald lui confie alors le rôle du médecin personnel d'un dictateur ougandais, qu'il incarne avec brio aux côtés du brillant Forest Whitaker dans Le Dernier roi d'Ecosse (2006). Son interprétation remarquée lui permet de jouer les beaux jeunes premiers aux côtés de Anne Hathaway dans Jane.
En 2008, James McAvoy confirme l'éclectisme qui le caractérise en s'illustrant dans des genres différents : le drame avec Reviens-moi de Joe Wright, où il donne la réplique à Keira Knightley; la comédie fantastique avec Pénélope, où il fait face à une Christina Ricci affublée d'un groin de cochon; l'action avec Wanted, de Timur Bekmambetov, où il effectue des cascades insensées aux côtés d'Angelina Jolie.
Deux ans plus tard, l’acteur donne la réplique à son épouse, Anne-Marie Duff, dans le drame Tolstoï, le dernier automne, centré sur la dernière année du célèbre écrivain, dont McAvoy incarne un fervent admirateur. L’année suivante, le jeune comédien reprend le rôle du Professeur Charles Xavier pour le prequel X-Men Le commencement, qui est suivi de trois autres opus : X-Men: Days of Future Past (2014), X-Men: Apocalypse (2016) et X-Men : Dark Phoenix (2019).
Entre les épisodes cette franchise super-héroïque, l'acteur tourne pour Danny Boyle dans l'envoûtant Trance, se glisse dans la peau du scientifique aux méthodes radicales Victor Frankenstein et rejoint la trilogie de M. Night Shyamalan via Split puis Glass. James McAvoy joue aussi Bill dans Ça Chapitre 2, adapté du célèbre roman de Stephen King et qui se déroule 27 ans après le premier opus sorti en 2017 (et qui est devenu le film d'horreur le plus rentable de tous les temps).
En 2021, James se lance à la recherche de son fils kidnappé dans My Son, remake du thriller français Mon garçon porté par Guillaume Canet. En parallèle, le comédien œuvre en tant que doubleur, comme en témoignent sa prestation dans la série Sandman. En 2024, il est à l'affiche d'un autre remake, Speak No Evil, où il interprète un personnage particulièrement inquiétant s'en prenant à une famille américaine.