get_layers
Retrieve all layers from the current QGIS project to access and manage spatial data for analysis and visualization.
Instructions
Retrieve all layers in the current project.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/qgis_mcp/qgis_mcp_server.py:201-206 (handler)MCP tool handler for 'get_layers' that connects to QGIS socket server and forwards the command, returning JSON response.
@mcp.tool() def get_layers(ctx: Context) -> str: """Retrieve all layers in the current project.""" qgis = get_qgis_connection() result = qgis.send_command("get_layers") return json.dumps(result, indent=2) - Core QGIS plugin handler that implements get_layers by iterating over project layers and collecting detailed information.
def get_layers(self, **kwargs): """Get all layers in the project""" project = QgsProject.instance() layers = [] for layer_id, layer in project.mapLayers().items(): layer_info = { "id": layer_id, "name": layer.name(), "type": self._get_layer_type(layer), "visible": project.layerTreeRoot().findLayer(layer_id).isVisible() } # Add type-specific information if layer.type() == QgsMapLayer.VectorLayer: layer_info.update({ "feature_count": layer.featureCount(), "geometry_type": layer.geometryType() }) elif layer.type() == QgsMapLayer.RasterLayer: layer_info.update({ "width": layer.width(), "height": layer.height() }) layers.append(layer_info) return layers - qgis_mcp_plugin/qgis_mcp_plugin.py:133-149 (registration)Registration of command handlers in QGIS plugin server, including 'get_layers' mapped to self.get_layers method.
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, } - Helper function to manage persistent socket connection to the QGIS MCP plugin server.
def get_qgis_connection(): """Get or create a persistent Qgis connection""" global _qgis_connection # If we have an existing connection, check if it's still valid if _qgis_connection is not None: # Test if the connection is still alive with a simple ping try: # Just try to send a small message to check if the socket is still connected _qgis_connection.sock.sendall(b'') return _qgis_connection except Exception as e: # Connection is dead, close it and create a new one logger.warning(f"Existing connection is no longer valid: {str(e)}") try: _qgis_connection.disconnect() except Exception: pass _qgis_connection = None # Create a new connection if needed if _qgis_connection is None: _qgis_connection = QgisMCPServer(host="localhost", port=9876) if not _qgis_connection.connect(): logger.error("Failed to connect to Qgis") _qgis_connection = None raise Exception("Could not connect to Qgis. Make sure the Qgis plugin is running.") logger.info("Created new persistent connection to Qgis") return _qgis_connection