Silva, who becomes Pep Guardiola's first summer signing, will wear the number 20 shirt and join City officially on July 1.
City are expected to spend big this summer after clearing out a number of players who were out of contract.
Silva has impressed for Monaco this season helping them win Ligue 1 and reach the Champions League semi-final, beating City on the way.
And he admits the lure of working with Pep Guardiola convinced him to join.
“It feels great. To be honest I’m now at one of the best teams in the world. To be part of this club and to have this opportunity is great,” he said.
"I’m very happy to be part of Manchester City’s team and I look forward to trying to do my best to help the team reach their goals.
Pep Guardiola has secured his first signing of the summer with Bernardo Silva
Bernardo Silva will join Manchester City on July 1 Bernardo Silva arrives in Manchester – but where is he going? Fri, May 26, 2017
Bernardo Silva has arrived in Manchester – but will he sign for United or City?
Play slideshow Twitter 1 of 9
“If not the best coach in the world, he is one of the best.
"Of course when you have the opportunity of being trained by Guardiola, you don’t say no.
"As we all know, what he did in Barcelona and Bayern Munich was amazing and we expect also here that he will win titles. It’s great to be working with him and to have this opportunity.”
Get Quotes on Home Insurance
Silva was also wanted by Manchester United but City stole a march on their rivals by agreeing a deal with Monaco this week.
The confirmation comes just a day after a number of players were released from their contracts including Jesus Navas, Willy Caballero, Pablo Zabaleta and Gael Clichy.
The creative midfielder, 22, made 51 appearances last season, scoring 10 goals and making a further 10 assists.
Silva has 12 Portugal caps and joined Monaco from Benfica in 2015.