Skip to main content
Glama

get_layer_features

Retrieve features from vector layers in QGIS for analysis and visualization, with optional result limits to manage data output.

Instructions

Retrieve features from a vector layer with an optional limit.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
layer_idYes
limitNo

Implementation Reference

  • Core handler implementation that executes the logic to fetch layer features from QGIS project, including attributes and geometry.
    def get_layer_features(self, layer_id, limit=10, **kwargs):
        """Get features from a vector layer"""
        project = QgsProject.instance()
        
        if layer_id in project.mapLayers():
            layer = project.mapLayer(layer_id)
            
            if layer.type() != QgsMapLayer.VectorLayer:
                raise Exception(f"Layer is not a vector layer: {layer_id}")
            
            features = []
            for i, feature in enumerate(layer.getFeatures()):
                if i >= limit:
                    break
                    
                # Extract attributes
                attrs = {}
                for field in layer.fields():
                    attrs[field.name()] = feature.attribute(field.name())
                
                # Extract geometry if available
                geom = None
                if feature.hasGeometry():
                    geom = {
                        "type": feature.geometry().type(),
                        "wkt": feature.geometry().asWkt(precision=4)
                    }
                
                features.append({
                    "id": feature.id(),
                    "attributes": attrs,
                    "geometry": geom
                })
            
            return {
                "layer_id": layer_id,
                "feature_count": layer.featureCount(),
                "features": features,
                "fields": [field.name() for field in layer.fields()]
            }
        else:
            raise Exception(f"Layer not found: {layer_id}")
  • Registers the get_layer_features handler in the QGIS MCP server's command handlers dictionary.
    handlers = {
        "ping": self.ping,
        "get_qgis_info": self.get_qgis_info,
        "load_project": self.load_project,
        "get_project_info": self.get_project_info,
        "execute_code": self.execute_code,
        "add_vector_layer": self.add_vector_layer,
        "add_raster_layer": self.add_raster_layer,
        "get_layers": self.get_layers,
        "remove_layer": self.remove_layer,
        "zoom_to_layer": self.zoom_to_layer,
        "get_layer_features": self.get_layer_features,
        "execute_processing": self.execute_processing,
        "save_project": self.save_project,
        "render_map": self.render_map,
        "create_new_project": self.create_new_project,
    }
    
    handler = handlers.get(cmd_type)
    if handler:
  • MCP protocol tool handler that proxies get_layer_features calls to the QGIS plugin socket server.
    @mcp.tool()
    def get_layer_features(ctx: Context, layer_id: str, limit: int = 10) -> str:
        """Retrieve features from a vector layer with an optional limit."""
        qgis = get_qgis_connection()
        result = qgis.send_command("get_layer_features", {"layer_id": layer_id, "limit": limit})
        return json.dumps(result, indent=2)
  • Socket client proxy method for sending get_layer_features command to QGIS plugin.
    def get_layer_features(self, layer_id, limit=10):
        """Get features from a vector layer"""
        return self.send_command("get_layer_features", {"layer_id": layer_id, "limit": limit})

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/syauqi-uqi/qgis_mcp_modify1'

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