The announcement came as Russia marked the 75th anniversary of the end of a World War II siege of Leningrad that claimed more than 800,000 lives.
The initiative was billed as a “voluntary humanitarian gesture towards the surviving victims of the blockade”.
Saint Petersburg, formerly known as Leningrad, is home to around 86,000 siege survivors.
“We, foreign ministers of Germany and Russia, welcome the decision of the German government to provide 12 million euros for the modernisation of a hospital for war veterans and the establishment of a German-Russian meeting centre,” German Foreign Minister Heiko Maas and his Russian counterpart Sergei Lavrov said.
“We are confident that this voluntary action will improve the quality of life of the surviving victims of the siege and serve in the historical reconciliation of the people of both countries as a basis for our bilateral relations in the future,” the ministers said.
In a separate statement, Moscow said that while the initiative was “important”, Germany should compensate all living survivors of the 1941-44 siege of Leningrad.
“The launch of this humanitarian initiative does not mean that the issue has been put to rest of the German government providing individual compensations to all living siege survivors irrespective of their nationality,” said foreign ministry spokeswoman Maria Zakharova.
She added that Germany had earlier paid siege survivors of Jewish origin compensation of 2,500 euros “within the framework of Germany's responsibility for the Holocaust”.
Encircled by the Nazi troops for 872 days, the city of around three million people endured unspeakable horrors. More than 800,000 people died from hunger or disease, or under shelling. Many historians say the true figures are higher.