There's no benefit here to using MaybeT in this little example: you could write the three lines using MaybeT as:
Data.Foldable.traverse_ putStrLn $ M.lookup "a" a
There's no automatic conversion of Maybe to MaybeT (though there might be if Maybe was actually defined as MaybeT Identity), so you have to apply a function to the result of M.lookup like:
(MaybeT . return) :: Maybe a -> MaybeT m a