QGISMCP
Allows Claude to directly interact with and control QGIS through two-way communication, enabling project creation, loading and saving, layer manipulation (adding/removing vector and raster layers), execution of processing algorithms, running Python code in QGIS, and map rendering.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@QGISMCP add a vector layer from this shapefile path and zoom to it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
QGISMCP - QGIS Model Context Protocol Integration (updated version from https://github.com/jjsantos01/qgis_mcp)
QGISMCP connects QGIS to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control QGIS. This integration enables prompt assisted project creation, layer loading, code execution and more.
The main project based on the (https://github.com/jjsantos01/qgis_mcp). I am just updating some error that i found
This project is strongly based on the BlenderMCP project by Siddharth Ahuja
Features
Two-way communication: Connect Claude AI to QGIS through a socket-based server.
Project manipulation: Create, load and save projects in QGIS.
Layer manipulation: Add and remove vector or raster layers to a project.
Execute processing: Execute processing algorithms (Processing Toolbox).
Code execution: Run arbitrary Python code in QGIS from Claude. Very powerful, but also be very cautious using this tool.
Related MCP server: QGISMCP
Components
The system consists of two main components:
QGIS plugin: A QGIS plugin that creates a socket server within QGIS to receive and execute commands.
MCP Server: A Python server that implements the Model Context Protocol and connects to the QGIS plugin.
Installation
Prerequisites
QGIS 3.X (only tested on 3.22 and 3.34)
Cloud desktop
Python 3.10 or newer
uv package manager:
If you're on Mac, please install uv as
brew install uvOn Windows Powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Otherwise installation instructions are on their website: Install uv
⚠️ Do not proceed before installing UV
Download code
Download this repo to your computer. You can clone it with:
https://github.com/syauqi-uqi/qgis_mcp_modify1.gitQGIS plugin
You need to copy the folder qgis_mcp_plugin and its content on your QGIS profile plugins folder.
You can get your profile folder in QGIS going to menu Settings -> User profiles -> Open active profile folder Then, go to Python/plugins and paste the folder qgis_mcp_plugin.
On a Windows machine the plugins folder is usually located at:
C:\Users\USER\AppData\Roaming\QGIS\QGIS3\profiles\default\python\pluginsand on MacOS:~/Library/Application\ Support/QGIS/QGIS3/profiles/default/python/plugins
Then close QGIS and open it again. Go to the menu option Plugins -> Installing and Managing Plugins, select the All tab and search for "QGIS MCP", then mark the QGIS MCP checkbox.
Claude for Desktop Integration
Go to Claude > Settings > Developer > Edit Config > claude_desktop_config.json to include the following:
If you cann't find the "Developers tab" or the
claude_desktop_config.jsonlook at this documentation.
{
"mcpServers": {
"qgis": {
"command": "uv",
"args": [
"--directory",
"#change this line to your directory#",
"run",
"qgis_mcp_server.py"
]
}
}
}Usage
Starting the Connection
In QGIS, go to
plugins->QGIS MCP->QGIS MCP
Click "Start Server"

Using with Claude
Once the config file has been set on Claude, and the server is running on QGIS, you will see a hammer icon with tools for the QGIS MCP.

Tools
ping- Simple ping command to check server connectivityget_qgis_info- Get QGIS information about the current installationload_project- Load a QGIS project from the specified pathcreate_new_project- Create a new project and save itget_project_info- Get current project informationadd_vector_layer- Add a vector layer to the projectadd_raster_layer- Add a raster layer to the projectget_layers- Retrieve all layers in the current projectremove_layer- Remove a layer from the project by its IDzoom_to_layer- Zoom to the extent of a specified layerget_layer_features- Retrieve features from a vector layer with an optional limitexecute_processing- Execute a processing algorithm with the given parameterssave_project- Save the current project to the given pathrender_map- Render the current map view to an image fileexecute_code- Execute arbitrary PyQGIS code provided as a string
Example Commands
This is the example I used for the demo: Or, for this updated version, see (https://www.linkedin.com/posts/syauqi-arka-yudisti-73b236288_qgis-ai-vibemapping-activity-7316248625045483524-hQdB?utm_source=share&utm_medium=member_android&rcm=ACoAAEXNN58BLMyjf4iZIy1KZZJBUFyiNlLtNSg)
You have access to the tools to work with QGIS. You will do the following:
1. Ping to check the connection. If it works, continue with the following steps.
2. Create a new project and save it at: "C:/Users/USER/GitHub/qgis_mcp/data/cdmx.qgz"
3. Load the vector layer: ""C:/Users/USER/GitHub/qgis_mcp/data/cdmx/mgpc_2019.shp" and name it "Colonias".
4. Load the raster layer: "C:/Users/USER/GitHub/qgis_mcp/data/09014.tif" and name it "BJ"
5. Zoom to the "BJ" layer.
6. Execute the centroid algorithm on the "Colonias" layer. Skip the geometry check. Save the output to "colonias_centroids.geojson".
7. Execute code to create a choropleth map using the "POB2010" field in the "Colonias" layer. Use the quantile classification method with 5 classes and the Spectral color ramp.
8. Render the map to "C:/Users/USER/GitHub/qgis_mcp/data/cdmx.png"
9. Save the project.Another Example Commands In my version
You have access to the tools to work with QGIS. You will do the following:
1. **Ping to check the connection**. If successful, proceed.
2. **Create a new QGIS project** and save it to:
**"D:/PROJECT/MCP/claudemap.qgz"** (gunakan slash `/` untuk kompatibilitas).
3. **Load vector layers**:
a. Load **"D:/PROJECT/MCP/map (2).osm"** (OSM layers akan terbagi menjadi `points`, `lines`, `multilinestrings`, `multipolygons`).
b. Load **"D:/PROJECT/MCP/Bahan_Mundupesisir/aoi.shp"** and name it **"aoi"**.
4. **Zoom to the "aoi" layer** to set the initial extent.
5. **Remove/hide unnecessary layers**:
a. Remove layer **"map (2) — points"** (klik kanan > Remove Layer).
b. Hide layer **"aoi"** (untuk mempertahankan extent tetapi tidak menampilkannya di peta).
6. **Style layers**:
a. **"map (2) — lines"**:
- Line color: **#ff6201** (orange)
- Stroke width: **0.5 mm**
b. **"map (2) — multilinestrings"**:
- Line color: **#8bff07** (hijau neon)
- Stroke width: **0.8 mm**
c. **"map (2) — multipolygons"**:
- Fill color: **#fff65f** (kuning pucat)
- Stroke color: **#fff65f** (sama dengan fill)
- Stroke width: **0.3 mm**
- Transparency: **80%**
7. **Create Print Layout (A4 Portrait)**:
a. Tambahkan **Map Item** dengan ukuran A4 (210x297 mm).
b. Set **scale to 1:10,000** and enable **"Lock layers for map item"**.
c. Tambahkan **Title**:
- Text: **"PETA MUNDUPESISIR BY CLAUDE.AI"**
- Font: **Bold, 24pt**
- Posisi: Atas tengah.
d. Tambahkan **Scale Bar** dan **Legend** (opsional).
8. **Export to PNG**:
- Path: **"D:/PROJECT/MCP/claudemap.png"**
- Resolution: **600 DPI** (pastikan ukuran file tidak terlalu besar).
9. **Save the QGIS project**.Available Tools
15 toolsadd_raster_layerC
Add a raster layer to the project.
Inputs: path (required), provider, name.
add_vector_layerC
Add a vector layer to the project.
Inputs: path (required), provider, name.
create_new_projectC
Create a new project a save it
Inputs: path (required).
execute_codeC
Execute arbitrary PyQGIS code provided as a string.
Inputs: code (required).
execute_processingC
Execute a processing algorithm with the given parameters.
Inputs: algorithm (required), parameters (required).
get_layer_featuresB
Retrieve features from a vector layer with an optional limit.
Inputs: layer_id (required), limit.
get_layersA
Retrieve all layers in the current project.
Inputs: no named parameters.
get_project_infoC
Get current project information
Inputs: no named parameters.
get_qgis_infoC
Get QGIS information
Inputs: no named parameters.
load_projectB
Load a QGIS project from the specified path.
Inputs: path (required).
pingA
Simple ping command to check server connectivity
Inputs: no named parameters.
remove_layerB
Remove a layer from the project by its ID.
Inputs: layer_id (required).
render_mapC
Render the current map view to an image file with the specified dimensions.
Inputs: path (required), width, height.
save_projectA
Save the current project to the given path, or to the current project path if not specified.
Inputs: path.
zoom_to_layerC
Zoom to the extent of a specified layer.
Inputs: layer_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Most tools have distinct purposes, such as add_raster_layer vs add_vector_layer, but some overlap exists: get_layers retrieves all layers, while get_layer_features retrieves features from a specific vector layer, which could cause confusion if an agent needs general layer info. However, descriptions clarify their differences, preventing major misselection.
All tool names follow a consistent verb_noun pattern using snake_case, such as add_raster_layer, execute_code, and get_project_info. There are no deviations in naming conventions, making the set predictable and easy to parse for agents.
With 15 tools, this server is well-scoped for QGIS operations, covering project management, layer handling, rendering, and code execution. Each tool serves a clear purpose without redundancy, fitting the typical range of 3-15 tools for a focused domain.
The tool set provides comprehensive coverage for core QGIS workflows, including project CRUD (create, load, save), layer management (add, remove, zoom), and information retrieval. A minor gap is the lack of tools for editing layer attributes or geometries, but agents can work around this using execute_code or execute_processing for advanced operations.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Related MCP Servers
- FlicenseBqualityDmaintenanceConnects Claude AI to QGIS through the Model Context Protocol, allowing Claude to directly interact with and control QGIS for tasks like project creation, layer manipulation, and code execution.151,150-
- FlicenseNot gradedqualityDmaintenanceConnects QGIS to Claude AI through the Model Context Protocol, enabling AI-assisted project creation, layer manipulation, processing algorithm execution, and Python code running within QGIS.7-
- AlicenseAqualityDmaintenanceA Model Context Protocol server that connects Large Language Models to the GeoServer REST API, enabling AI assistants to query and manipulate geospatial data through natural language.997MIT
- AlicenseBqualityAmaintenanceAn MCP server that enables AI assistants to directly control QGIS for tasks like layer management, feature editing, and map rendering. It provides a suite of 50 tools to execute processing algorithms and manage GIS projects through natural language commands.125429GPL 2.0