I'm assuming you have no trouble setting up a WMS service on MapServer. Test this is working with a GIS desktop client, or a simple OpenLayers web page.
To develop a WMS client I'd build on top of the GDAL library. This is also included in MapServer.
GDAL has the ability to read images
from a remote WMS server, and treat
them as it does any other data source:
which means that it can take the
images, and convert them to any other
format, from JPEG2000 to GeoTIFF.
http://crschmidt.net/blog/archives/285/producing-a-large-image-from-openaerialmap/
As an added bonus GDAL includes Python bindings which will help with scripting.
http://pypi.python.org/pypi/GDAL/
You will also need libcurl to access URLs. libcurl too has Python bindings - http://curl.haxx.se/libcurl/python/
libcurl is also included in MapServer, which itself can be both a WMS server and client. You can also check out the C++ source code for how the MapServer client works - https://trac.osgeo.org/mapserver/browser/branches/branch-5-6/mapserver/mapwmslayer.c
A WMS service returns an image (apart from a few extra meta services), so the custom development will be based around building the correct WMS requests based on user actions.
If you want to have fast performance then have a look at TileCache which will cache the WMS results on the server for quicker use (and also cache locally).