QGIS MCP Server
Enables direct interaction with QGIS for project manipulation, layer management, processing algorithm execution, and PyQGIS code execution. Allows creating/loading/saving projects, adding/removing vector and raster layers, retrieving layer features, zooming to layers, and rendering map views to images.
Click on "Install 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., "@QGIS MCP Serveradd the shapefile at /data/parcels.shp to the current project"
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
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.
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)
Claude 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:
git clone git@github.com:jjsantos01/qgis_mcp.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\plugins
and 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 can't find the "Developers tab" or the
claude_desktop_config.jsonlook at this documentation.
{
"mcpServers": {
"qgis": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/REPO/FOLDER/qgis_mcp/src/qgis_mcp",
"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:
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.Available Tools
15 toolsadd_raster_layerC
Add a raster layer to the project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| provider | No | gdal | |
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action ('Add a raster layer') but lacks critical details: whether this is a mutation (likely yes, but not confirmed), what permissions are needed, if it modifies the project state, error handling, or response format. The description is minimal and doesn't compensate for the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's action without fluff. It's appropriately sized for a simple tool and front-loaded with the core purpose. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with 3 parameters, no annotations, and no output schema), the description is incomplete. It doesn't explain what 'adding a raster layer' entails operationally, how parameters interact, what happens on success/failure, or return values. For a tool that likely alters project state, this leaves significant gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'raster layer' and 'project', hinting at the 'path' parameter for the raster file, but doesn't explain 'provider' (default 'gdal') or 'name' (default null). No additional meaning or usage context is provided beyond the schema's basic titles, leaving key parameters unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Add') and resource ('raster layer to the project'), making the purpose specific and understandable. It distinguishes from sibling tools like 'add_vector_layer' by specifying 'raster' instead of 'vector', though it doesn't explicitly contrast them. The purpose is not vague or tautological, but lacks explicit sibling differentiation for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an open project), exclusions, or comparisons to siblings like 'add_vector_layer' for vector data or 'load_project' for project setup. Usage is implied by the action, but no explicit context or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_vector_layerC
Add a vector layer to the project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| provider | No | ogr | |
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action but doesn't reveal whether this is a read-only or destructive operation, what permissions are needed, what happens on success/failure, or any side effects. This leaves critical behavioral aspects undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's appropriately front-loaded with the core action, making it easy to scan and understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters (0% schema coverage), no annotations, and no output schema, the description is inadequate. It doesn't explain what a vector layer is, what happens after addition, error conditions, or relationship to other layer/project operations. The context demands more comprehensive documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It provides no information about what 'path', 'provider', or 'name' mean, their formats, or how they affect the operation. This leaves all three parameters semantically unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and resource ('a vector layer to the project'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'add_raster_layer' or explain what a 'vector layer' is in this context, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'add_raster_layer' or 'load_project'. The description gives no context about prerequisites, such as whether a project must be open, or when this operation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_new_projectC
Create a new project a save it
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'create' and 'save', implying a write operation, but doesn't disclose behavioral traits such as permissions needed, whether it overwrites existing projects, error conditions, or what happens after creation. This leaves critical gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but not well-structured; 'a save it' is grammatically incorrect and adds confusion. It's front-loaded with the core action but wastes words on redundancy. A single clear sentence would be more effective, making it somewhat inefficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a creation tool with no annotations, no output schema, and 0% schema coverage, the description is incomplete. It doesn't explain the outcome, error handling, or how it interacts with sibling tools. For a mutation operation, more context is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no parameter details. The description adds no information about the 'path' parameter—it doesn't explain what the path represents, its format, or constraints. With one undocumented parameter, the description fails to compensate for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Create a new project a save it' which indicates the verb (create) and resource (project), but it's grammatically awkward with 'a save it' and doesn't clearly differentiate from sibling tools like 'save_project' or 'load_project'. It communicates a basic purpose but lacks specificity about what distinguishes this creation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'save_project' or 'load_project'. There's no mention of prerequisites, context, or exclusions. The agent must infer usage from the name alone, which is insufficient for clear decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_codeC
Execute arbitrary PyQGIS code provided as a string.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool executes code but doesn't disclose critical behavioral traits: whether it's safe/destructive, what permissions or environment it runs in, if there are time/rate limits, what happens on errors, or the output format. For a code execution tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing arbitrary code, lack of annotations, no output schema, and low parameter coverage, the description is incomplete. It doesn't address safety, error handling, return values, or execution context, which are crucial for an agent to use this tool effectively. The minimal description is inadequate for the tool's potential impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'code provided as a string' which aligns with the 'code' parameter, adding minimal semantics. However, it doesn't explain what constitutes valid PyQGIS code, expected syntax, imports, or constraints, leaving the parameter poorly defined beyond its type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute') and the resource ('arbitrary PyQGIS code provided as a string'), making the purpose understandable. It distinguishes from siblings like 'execute_processing' by specifying 'PyQGIS code' rather than processing algorithms. However, it doesn't explicitly differentiate from other code execution tools that might exist, keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'execute_processing' for specific algorithms and other tools for layer/project operations, there's no indication of appropriate contexts, prerequisites, or exclusions. This leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_processingC
Execute a processing algorithm with the given parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | Yes | ||
| parameters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It fails to describe any behavioral traits: it doesn't specify if this is a read-only or destructive operation, what permissions or authentication are required, whether it has side effects (e.g., modifying data or projects), rate limits, error handling, or output format. For a tool with 'execute' in its name and no annotations, this lack of transparency is critical and could lead to unsafe or incorrect usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's action without unnecessary words. It's front-loaded with the core purpose ('Execute a processing algorithm'), making it easy to scan. Every part of the sentence earns its place by conveying essential information, though it lacks depth due to its brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity implied by 'execute' and processing algorithms, along with no annotations, 0% schema description coverage, no output schema, and nested parameters, the description is incomplete. It doesn't address what the tool returns, how algorithms are defined, error conditions, or integration with sibling tools (e.g., whether it works on layers from 'get_layers'). For a potentially powerful execution tool, this leaves too many unknowns for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'parameters' but adds no meaning beyond what the input schema provides. With 0% schema description coverage, the schema only lists 'algorithm' (string) and 'parameters' (object) without explaining what algorithms are available, their formats, or what the parameters object should contain. The description doesn't compensate by clarifying these semantics, leaving both parameters undocumented and ambiguous in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool 'Execute[s] a processing algorithm with the given parameters,' which provides a basic verb+resource combination ('execute' + 'processing algorithm'). However, it's vague about what 'processing algorithm' means in this context (e.g., data transformation, analysis, etc.) and doesn't differentiate it from siblings like 'execute_code' or 'render_map,' which might involve similar processing concepts. It avoids tautology by not merely restating the name, but lacks specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a loaded project or specific layers), exclusions, or comparisons to siblings like 'execute_code' (which might handle code execution) or 'render_map' (which might involve visual processing). Without such context, users must infer usage from the tool name alone, leading to potential misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_layer_featuresC
Retrieve features from a vector layer with an optional limit.
| Name | Required | Description | Default |
|---|---|---|---|
| layer_id | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions an optional limit but doesn't describe what 'features' are, how they're returned, potential errors, or any constraints like permissions or rate limits. This leaves significant gaps for a tool that presumably reads data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It lacks details on what 'features' entail, return format, error handling, or how it fits with siblings, making it inadequate for a tool with parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions 'optional limit' without explaining what 'layer_id' is, what format features are in, or how the limit applies. This adds minimal value beyond the schema's basic structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and the resource 'features from a vector layer', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_layers' or 'zoom_to_layer' which might also retrieve layer-related information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites, when not to use it, or how it differs from sibling tools like 'get_layers' that might list layers rather than features.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_layersB
Retrieve all layers in the current project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Retrieve') but doesn't describe what 'Retrieve' entails—e.g., whether it returns a list of layer names, full layer objects, or metadata; if it's read-only (implied but not explicit); or any limitations like rate limits or authentication needs. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It is front-loaded with the core action and resource, making it easy to parse quickly. Every part of the sentence earns its place by conveying essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with no parameters) and lack of annotations or output schema, the description is incomplete. It doesn't specify what 'Retrieve' returns (e.g., a list, objects, or metadata), which is critical for an agent to use the tool effectively. Without annotations or output schema, the description should compensate by explaining return values, but it fails to do so.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter details, and it correctly implies no inputs are required by not mentioning any. A baseline of 4 is appropriate for zero-parameter tools, as there's no parameter semantics to explain beyond what's already clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('all layers in the current project'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_layer_features' (which might retrieve specific features within layers) or 'get_project_info' (which might include layers among other project metadata), so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't clarify if this is for listing layers versus getting detailed layer data (compared to 'get_layer_features') or if it's specific to the current project context (versus tools like 'load_project' that might change projects). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_infoC
Get current project information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get current project information' but doesn't specify what information is included, whether it's read-only (implied by 'get'), if there are permissions required, or how the data is formatted. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words, making it appropriately concise. However, it could be more front-loaded with additional context to improve clarity without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'project information' entails (e.g., metadata, settings, status), the return format, or how it differs from sibling tools. For a tool in a context with multiple get operations, more detail is needed to ensure proper use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, but that's acceptable here since there are no parameters to explain, aligning with the baseline for zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get current project information' clearly states the action (get) and resource (project information), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_layers' or 'get_qgis_info', leaving ambiguity about what specific project information is retrieved versus other get operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With siblings like 'get_layers' and 'get_qgis_info', the description doesn't clarify if this retrieves metadata, settings, or other project details, nor does it mention prerequisites or exclusions, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_qgis_infoC
Get QGIS information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get QGIS information' doesn't reveal any behavioral traits—it doesn't indicate whether this is a read-only operation, what permissions might be required, how the information is formatted or returned, or any potential side effects. This leaves the agent with insufficient context to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just three words, but this brevity comes at the cost of under-specification rather than efficient communication. While it's front-loaded (the entire description is the purpose), it fails to provide necessary context, making it less helpful than a slightly longer but more informative description would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete for a tool in this context. It doesn't explain what 'QGIS information' entails, how it's returned, or why an agent would choose this over similar sibling tools. For a tool with no parameters but potential complexity in output or usage, more detail is needed to guide effective tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). With no parameters to document, the description doesn't need to compensate for schema gaps. A baseline score of 4 is appropriate as the absence of parameters means there's no parameter semantics to explain beyond what the schema already indicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get QGIS information' is a tautology that essentially restates the tool name 'get_qgis_info' without adding meaningful specificity. It doesn't clarify what type of QGIS information is retrieved (e.g., version, installed plugins, system status) or distinguish this tool from sibling tools like 'get_project_info' or 'get_layers' that also retrieve information from QGIS.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_project_info' and 'get_layers' that also retrieve QGIS-related information, there's no indication of what makes this tool distinct or appropriate for specific contexts. No prerequisites, exclusions, or comparison to other tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_projectC
Load a QGIS project from the specified path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Load') but doesn't explain what happens after loading (e.g., whether it opens the project in QGIS, replaces current project, requires specific permissions, or has side effects like memory usage). This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool likely mutates state (loading a project), the lack of annotations, no output schema, and minimal behavioral details make the description incomplete. It doesn't cover what the tool returns, error conditions, or how it interacts with the QGIS environment, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal semantics beyond the input schema, mentioning 'from the specified path' which clarifies the 'path' parameter's role. However, with 0% schema description coverage and only one parameter, this is adequate but not detailed (e.g., no format hints like file paths or extensions).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Load') and resource ('a QGIS project'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'create_new_project' or 'save_project', which would require specifying this is for loading existing projects from storage rather than creating new ones or saving changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether a project must exist at the path), exclusions (e.g., not for creating projects), or comparisons to siblings like 'create_new_project' or 'get_project_info'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingB
Simple ping command to check server connectivity
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'simple ping command' which implies a read-only diagnostic operation, but doesn't specify what 'check server connectivity' entails - whether it tests network latency, returns status codes, has timeout behavior, or requires specific permissions. More behavioral context would be helpful for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just 7 words, front-loading the essential information ('Simple ping command to check server connectivity') with zero wasted words. Every element earns its place, making it easy for an agent to quickly understand the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple diagnostic tool with no parameters and no output schema, the description provides adequate basic information about what the tool does. However, without annotations or output schema, the description doesn't explain what the ping command returns (success/failure indicators, latency measurements, etc.), leaving gaps in understanding the tool's complete behavior and results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters since none exist. This meets the baseline expectation for a zero-parameter tool where the schema handles all parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a 'ping command to check server connectivity' with a specific verb ('check') and resource ('server connectivity'). It distinguishes from siblings by focusing on connectivity testing rather than data manipulation or project management. However, it doesn't explicitly differentiate from all possible network testing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or when other tools might be more suitable. The agent must infer usage from the purpose alone without explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_layerC
Remove a layer from the project by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| layer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a destructive mutation ('Remove'), but lacks details on permissions, reversibility, side effects (e.g., impact on other layers or the project), or error handling. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no wasted words. It front-loads the core action and resource efficiently, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, no output schema, and low schema coverage, the description is incomplete. It lacks critical context like what 'Remove' entails (e.g., permanent deletion or reversible change), how it affects the project state, or what happens on success/failure, leaving significant gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal semantics by specifying that 'layer_id' is used to identify the layer to remove, but with 0% schema description coverage and only one parameter, this is basic. It doesn't explain the ID format or source, so it partially compensates but leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and the resource ('a layer from the project'), making the purpose understandable. It specifies 'by its ID' which adds precision, but it doesn't explicitly differentiate from sibling tools like 'get_layers' or 'zoom_to_layer' beyond the obvious destructive nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a loaded project), exclusions, or related tools like 'save_project' for persisting changes, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_mapC
Render the current map view to an image file with the specified dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| width | No | ||
| height | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions rendering to an image file but lacks details on behavioral traits such as file format (e.g., PNG, JPEG), overwrite behavior, permissions needed, performance implications, or error handling. This leaves significant gaps for an agent to understand how the tool operates beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and key details (output to image file, specified dimensions). There is no wasted verbiage, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a rendering tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It lacks information on output format, error conditions, dependencies (e.g., requires a loaded project), and behavioral nuances, leaving the agent with insufficient context to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by specifying that parameters relate to 'dimensions' (width and height) and output 'path', but does not explain semantics like path format (absolute/relative), width/height units (pixels), or constraints (e.g., min/max values). This provides some context but falls short of fully documenting the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Render') and resource ('current map view to an image file'), specifying the output format and purpose. However, it does not explicitly differentiate from sibling tools like 'save_project' (which might save project files) or 'get_project_info' (which retrieves metadata), leaving some ambiguity about when to choose this tool over others for image-related tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing an open project or active map view), exclusions, or comparisons to siblings like 'save_project' for saving images or other rendering methods. Usage is implied but not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_projectB
Save the current project to the given path, or to the current project path if not specified.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but provides minimal behavioral insight. It implies a write operation and default behavior for missing path, but lacks details on permissions, file overwriting, format, error conditions, or what 'current project' entails. This is inadequate for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core action and clearly explains the parameter's role, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It misses critical details like what 'save' entails (e.g., file format, overwrite behavior), error handling, and the response structure. The context signals indicate low schema coverage, requiring more compensation than provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'path' parameter's purpose and default behavior ('to the current project path if not specified'), adding meaningful context beyond the bare schema. With only one parameter, this is sufficient for baseline understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('save') and resource ('current project'), specifying it writes to a path. It distinguishes from sibling 'load_project' by directionality, but doesn't explicitly differentiate from other write operations like 'create_new_project' beyond the 'current' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. It doesn't mention prerequisites (e.g., must have a project loaded), compare with 'create_new_project', or indicate when the path parameter is necessary versus optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zoom_to_layerC
Zoom to the extent of a specified layer.
| Name | Required | Description | Default |
|---|---|---|---|
| layer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe side effects (e.g., whether it changes the map view permanently, requires specific permissions, or has rate limits). For a view-modification tool, this lack of behavioral context is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core action and appropriately sized for a simple tool with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It explains the basic purpose but lacks crucial details about behavior, parameter usage, and expected outcomes. For a tool that modifies the map view, more context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no parameter documentation. The description mentions 'specified layer' which implies the 'layer_id' parameter, adding minimal semantic context. However, it doesn't explain what constitutes a valid layer ID or where to obtain it, leaving the parameter largely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('zoom to the extent') and target resource ('specified layer'), making the purpose immediately understandable. It doesn't distinguish from siblings like 'get_layers' or 'render_map', but the verb+resource combination is specific enough for basic understanding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether the layer must already be loaded), nor does it differentiate from similar operations like adjusting view through other means. The description is purely functional without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, such as add_raster_layer vs. add_vector_layer, but execute_code and execute_processing could be confused as both involve running code or algorithms. The descriptions help clarify, but there is some overlap in their broad functionality.
Tool names consistently follow a verb_noun pattern throughout, such as add_raster_layer, get_layer_features, and save_project. There are no deviations in naming conventions, making the set predictable and readable.
With 15 tools, the count is well-scoped for a QGIS server, covering core operations like project management, layer handling, and rendering. Each tool earns its place without feeling excessive or insufficient for the domain.
The tool surface provides good coverage for QGIS workflows, including project CRUD (create, load, save), layer operations (add, get, remove, zoom), and rendering. Minor gaps exist, such as no direct tool for editing layer attributes or styling, but agents can work around this with execute_code.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect Claude AI to UluP Spaces via MCP — create projects, nodes, and tasks with OAuth 2.0.
Connect AI agents to Replynodes over the Model Context Protocol.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseBqualityDmaintenanceConnects Sketchup to Claude AI through the Model Context Protocol, allowing Claude to directly interact with and control Sketchup for prompt-assisted 3D modeling and scene manipulation.10396MIT
- 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
- AlicenseBqualityDmaintenanceA Model Context Protocol server that connects Claude AI to QGIS, enabling direct interaction with the GIS software for project creation, layer manipulation, code execution, and processing algorithms through natural language prompts.1510Creative Commons Zero v1.0 Universal
- FlicenseBqualityDmaintenanceQGISMCP connects QGIS to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control QGIS for project creation, layer loading, code execution, and more.151
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/jjsantos01/qgis_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server