Edit: Just in case somebody comes looking for something like this here is the code I ended up using. I used it as an example in paper to illustrate the concept of tangent spaces.
Manipulate[
Show[ParametricPlot3D[F[u, t], {t, 0, 2 Pi}, {u, 0, 2 Pi},
AxesEdge -> {{-10, 10}, {-10, 10}, {-10, 10}}],
ContourPlot3D[
normal[px, py][[1]] (x - F[px, py][[1]]) +
normal[px, py][[2]] (y - F[px, py][[2]]) +
normal[px, py][[3]] (z - F[px, py][[3]]) == 0, {x, xmin,
xmax}, {y, ymin, ymax}, {z, zmin, zmax},
ContourStyle -> {Opacity[0.5], Blue}],
Graphics3D[{Arrow[{F[px, py], F[px, py] + dxF[px, py]}],
Arrow[{F[px, py], F[px, py] + dyF[px, py]}]}], Boxed -> False,
Axes -> False, PlotRange -> {{-5, 5}, {-5, 5}, {-5, 5}}], {px, 0,
Pi}, {{py, 0.5}, 0.2, Pi/2 - 0.1}, {{xmin, -5}, -10,
0}, {{ymin, -5}, -10, 0}, {{zmin, -5}, -10, 0}, {{zmax, 3}, 0,
10}, {{ymax, 3}, 0, 10}, {{xmax, 5}, 0, 10}]