I used MeshInstance.createtrimeshcollision(), jsut today, and it worked well:
var meshInst = MeshInstance.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
.
.#adding vertices, uvs and stuff to SurfaceTool
.
meshInst.mesh = st.commit()
meshInst.create_trimesh_collision()
In this code the MeshInstance itself was created in code too, but you can use an existing MeshInstancetoo, of course