Skip to main content
Glama
mahdin75

GeoServer MCP Server

query_features

Extract vector layer data from GeoServer using CQL filters to specify query conditions, return properties, and limit results.

Instructions

Query features from a vector layer using CQL filter.

Args:
    workspace: The workspace containing the layer
    layer: The layer to query
    filter: Optional CQL filter expression
    properties: Optional list of properties to return
    max_features: Maximum number of features to return

Returns:
    GeoJSON FeatureCollection with query results

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filterNo
layerYes
max_featuresNo
propertiesNo
workspaceYes

Implementation Reference

  • Implementation of the 'query_features' tool handler. Queries features from a GeoServer vector layer via WFS GetFeature request with optional CQL filter, property selection, and max features limit. Returns a GeoJSON FeatureCollection. Registered via @mcp.tool() decorator.
    def query_features(
        workspace: str, 
        layer: str, 
        filter: Optional[str] = None,
        properties: Optional[List[str]] = None,
        max_features: Optional[int] = 10
    ) -> Dict[str, Any]:
        """Query features from a vector layer using CQL filter.
        
        Args:
            workspace: The workspace containing the layer
            layer: The layer to query
            filter: Optional CQL filter expression
            properties: Optional list of properties to return
            max_features: Maximum number of features to return
        
        Returns:
            GeoJSON FeatureCollection with query results
        """
        geo = get_geoserver()
        if geo is None:
            raise ValueError("Not connected to GeoServer")
        
        if not workspace or not layer:
            raise ValueError("Workspace and layer name are required")
        
        try:
            # Construct WFS GetFeature request URL
            url = f"{geo.service_url}/wfs"
            params = {
                "service": "WFS",
                "version": "1.0.0",
                "request": "GetFeature",
                "typeName": f"{workspace}:{layer}",
                "outputFormat": "application/json",
                "maxFeatures": max_features or 10
            }
            
            # Add CQL filter if provided
            if filter:
                params["CQL_FILTER"] = filter
                
            # Add property names if provided
            if properties:
                params["propertyName"] = ",".join(properties)
                
            # Make the request
            import requests
            response = requests.get(url, params=params, auth=(geo.username, geo.password))
            response.raise_for_status()
            
            # Parse the GeoJSON response
            features = response.json()
            
            return {
                "type": "FeatureCollection",
                "features": features.get("features", [])
            }
        except Exception as e:
            logger.error(f"Error querying features: {str(e)}")
            raise ValueError(f"Failed to query features: {str(e)}")
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mahdin75/geoserver-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server