Faits : A. Par ordonnance pénale du 12 juillet 2018, le Ministère public de la République et canton de Genève a reconnu X._ coupable de tentative de violence ou menace contre les autorités et les fonctionnaires (art. 22 al. 1 et 285 ch. 1 al. 1 CP). Il l'a condamné à une peine privative de liberté de 150 jours, sans sursis. B. Par ordonnance du 17 septembre 2018, le ministère public, invoquant l'art. 355 al. 2 CPP, a constaté le retrait de l'opposition formée par X._ contre l'ordonnance du 12 juillet 2018. C. Par arrêt du 8 janvier 2019, la Chambre pénale de recours de la Cour de justice de la République et canton de Genève a rejeté le recours formé contre l'ordonnance du 17 septembre 2019 par X._. D. Ce dernier forme un recours auprès du Tribunal fédéral contre cet arrêt. Il conclut, avec suite de frais et dépens, à la révocation des décisions qui précèdent et au classement de la procédure pénale. Il sollicite également le bénéfice de l'assistance judiciaire. Invités à se déterminer sur le recours, l'autorité précédente y a renoncé, le ministère public a conclu à son rejet. Le recourant a déposé des observations.