I've recently been tasked with making a custom written WMS server be usable with newer clients and apps such as QGis.
The original server was written years ago by a consultancy firm in C++ and who are now no longer in business.
My client, the owners of said custom server at the time it was written never got the source code for the product, and it's quite a specialist application (It connects to custom knowledge base systems throughout their systems) so a simple re-write is out the question.
The biggest issue is that at the time it was built to use a very, very early version of OpenLayers (or similar) and deliver the map imagery into a fairly simple browser based user interface.
Beacuse of the custom nature of everything, all the creators ever implemented was the "GetMap" service call, and not the "GetCapabilities" call.
Beacuse of this, apps like QGis and Esri refuse to talk to the server, and many of the tool kits I'm familiar with such as SharpMap and MapWindow won't allow me to use it as a WMS source either.
I've been looking at using MapProxy to potentially act as a go between that will provide a caps document, but get it's tiles via normal WMS calls to the custom server, but I've no experience with MapProxy so I don't know if that would solve my problem.
Right now, I'm going to have a play with "MapServer" and see if I might be able to construct a custom map file to use for pass through, failing that I'm thinking I might have to build a stand alone server that looks like a regular WMS service to the client apps, but behind the scenes provides essentially a made up on the spot caps doc and uses direct HTTP requests to get tiles to pass through.
Can MapProxy be set up to use WMS as a source, but get by without a capabilities document?
I've been reading the MapProxy docs, and there's nothing in the WMS section that addresses this question.
Update
All great answers so far, I tried the MapProxy approach, and while it worked, it was a bit heavy going on the VM it was running out of.
The proxy is being implemented as a virtual instance sat between the real server and the newer clients.
Installing Java apps on the real server as I've found out is a no/no, so anything Java has to be in a VM, which leaves me with a standard Apache2 and already installed MapServer binary on the real server, so my current approach is to actually leverage MapServer-cgi to talk to the custom service on the same box.
I did actually wonder if I could just get mapserver to deliver the imagery that the custom server was delivering, but no such look as the original developers have encoded the graphics in some weird way.
The old server was definitely a case of, if you want anything doing to this in future, your gonna have to call us to do it type of implementation :-(
I'm still testing different approaches however, so there may still be a few more updates to come.
Final Update
So I actually ended up having to go the custom MapFIle with MapServer route, it's a bit slow, but it works and it works well, at least for the time being, until we can build a completley new server to replace it.
Given that I initially asked this question
"Can MapProxy be set up to use WMS as a source, but get by without a capabilities document?"
I'm going to mark @jgrocha's answer as the answer to the question, as he answered the Q directly, and as I've tested it since, and it would have worked for me had I been allowed to use Java, then I would have most likley gone with that reply.