If approved, the deal could bring Germany 10bn euros (£825m, $13.1bn) next year, its finance ministry estimates.
The agreement is the latest in a long-running dispute about German nationals who hide taxable income in banks in neighbouring Switzerland.
It was toughened after opposition MPs objected, but may still be voted down.
It is not clear how much money Germans have banked in Switzerland.
The initial agreement was held up when the German parliament's upper house asked for stricter conditions to be imposed on tax evaders.
But although some changes have been made, the leader of the centre-left Social Democrats (SPD), Sigmar Gabriel, predicted: "It will fail a second time because the SPD-led states will not go along with it."
He said it left tax evaders too much time to move their assets to another tax haven. "The core problem remains unsolved - that tax cheaters will get away without punishment."
Under the deal, Germans who have undeclared assets in Switzerland would not face penalties.
But they must make a one-off payment of between 21% and 41% of their value. That is higher than the 19-34% range initially planned.
Switzerland's secretive banks have faced growing pressure internationally as governments try to recover taxes in the wake of the financial crisis.
The plan would mean that in future, Swiss authorities would calculate and transfer tax payments due to Germany.
Switzerland has guaranteed a minimum payment of 2bn euros, but German officials say they expect 10bn euros or even more next year.
German authorities would also gain wider scope to seek information on German nationals' accounts in Switzerland.