The latest versions of MapServer (6.0+) support server-side clustering - http://mapserver.org/mapfile/cluster.html
Since version 6.0, MapServer has the ability to combine multiple
features from a point layer into single (aggregated) features based on
their relative positions. Only POINT layers are supported. This
feature was added through MS RFC 69: Support for clustering of
features in point layers.
The proposal for this functionality is detailed further at: http://mapserver.org/development/rfc/ms-rfc-69.html
A sample configuration below:
LAYER
NAME "my-cluster"
TYPE POINT
...
CLUSTER
MAXDISTANCE 20 # in pixels
REGION "ellipse" # can be rectangle or ellipse
GROUP (expression) # an expression to create separate groups for each value
FILTER (expression) # a logical expression to specify the grouping condition
END
This layer can then be served out like any other as a WMS (MapServer also supports tiling).
I have not tried this, and the docs are unclear but it may also support a clustered WFS service.
An alternative is to do clustering at the database level rather than at the web server level, then you are free to use any WMS Server see - Spatial clustering with PostGIS.