GIS MCP Server
✨ Want to perform accurate geospatial analysis in your chatbot? ✨
Install GIS-MCP and transform your AI's spatial capabilities!

A Model Context Protocol (MCP) server implementation that connects Large Language Models (LLMs) to GIS operations using GIS libraries, enabling AI assistants to perform geospatial operations and transformations.
> Alpha > > Version 0.3.0 (Alpha) is under active development. We welcome contributions and developers to join us in building this project.
🎥 Demo

Rasterio Demo
📋 Table of Contents
- Features
- Prerequisites
- Installation
- Available Tools
- Client Development
- Planned Features
- Contributing
- License
- Related Projects
- Support
- Badges
🚀 Features
- 🔍 Comprehensive geometric operations (intersection, union, buffer, etc.)
- 🌐 Advanced coordinate transformations and projections
- 📏 Precise distance and area calculations
- 🗺️ Spatial analysis and validation
- 🛠️ Easy integration with MCP-compatible clients
📋 Prerequisites
- Python 3.10 or higher
- MCP-compatible client (like Claude Desktop or Cursor)
- Internet connection for package installation
🛠️ Installation
Choose the installation method that best suits your needs:
Installing via Smithery
To install GIS MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @mahdin75/gis-mcp --client claude
📦 pip Installation
The pip installation is recommended for most users:
- Install uv package manager:
pip install uv
- Create the Virtual Environment (Python 3.10+):
uv venv --python=3.10
- Install the package:
uv pip install gis-mcp
- Start the server:
gis-mcp
pip Configuration
To use the pip installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
Cursor IDE (create .cursor/mcp.json
):
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
After configuration:
- Make sure to replace
YourUsername
with your actual username - For development installation, replace
/path/to/gis-mcp
with the actual path to your project - Restart your IDE to apply the changes
- You can now use all GIS operations through Claude or Cursor!
🛠️ Development Installation
For contributors and developers:
- Install uv package manager:
pip install uv
- Create the Virtual Environment:
uv venv --python=3.10
- Install the package in development mode:
uv pip install -e .
- Start the server:
python -m gis_mcp
Development Configuration
To use the development installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
Cursor IDE (create .cursor/mcp.json
):
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
After configuration:
- Make sure to replace
YourUsername
with your actual username - For development installation, replace
/path/to/gis-mcp
with the actual path to your project - Restart your IDE to apply the changes
- You can now use all GIS operations through Claude or Cursor!
🛠️ Available Tools
Shapely Operations
Basic Operations
Tool | Description |
---|---|
buffer | Create a buffer around geometries with customizable parameters |
intersection | Find intersection of two geometries |
union | Combine two geometries |
difference | Find difference between geometries |
symmetric_difference | Find symmetric difference between geometries |
Geometric Properties
Tool | Description |
---|---|
convex_hull | Calculate convex hull of a geometry |
envelope | Get bounding box of a geometry |
minimum_rotated_rectangle | Get minimum rotated rectangle of a geometry |
get_centroid | Get the centroid of a geometry |
get_bounds | Get the bounds of a geometry |
get_coordinates | Get the coordinates of a geometry |
get_geometry_type | Get the type of a geometry |
Transformations
Tool | Description |
---|---|
rotate_geometry | Rotate a geometry with specified angle and origin |
scale_geometry | Scale a geometry with x and y factors |
translate_geometry | Translate a geometry with x, y, and z offsets |
Advanced Operations
Tool | Description |
---|---|
triangulate_geometry | Create a triangulation of a geometry |
voronoi | Create a Voronoi diagram from points |
unary_union_geometries | Create a union of multiple geometries |
Measurements
Tool | Description |
---|---|
get_length | Get the length of a geometry |
get_area | Get the area of a geometry |
Validation and Simplification
Tool | Description |
---|---|
is_valid | Check if a geometry is valid |
make_valid | Make a geometry valid |
simplify | Simplify a geometry with specified tolerance |
PyProj Operations
Coordinate Transformations
Tool | Description |
---|---|
transform_coordinates | Transform coordinates between CRS |
project_geometry | Project a geometry between CRS |
CRS Information
Tool | Description |
---|---|
get_crs_info | Get detailed information about a CRS |
get_available_crs | Get list of all available CRS |
get_utm_zone | Get UTM zone for given coordinates |
get_utm_crs | Get UTM CRS for given coordinates |
get_geocentric_crs | Get geocentric CRS for given coordinates |
Geodetic Calculations
Tool | Description |
---|---|
get_geod_info | Get information about a geodetic calculation |
calculate_geodetic_distance | Calculate geodetic distance between points |
calculate_geodetic_point | Calculate point at given distance and azimuth |
calculate_geodetic_area | Calculate area of a polygon using geodetic calculations |
GeoPandas Operations
I/O Operations
Tool | Description |
---|---|
read_file_gpd | Read a geospatial file and return stats and data preview |
to_file_gpd | Write a GeoDataFrame to a file |
Join Operations
Tool | Description |
---|---|
append_gpd | Concatenate two GeoDataFrames vertically |
merge_gpd | Perform database-style joins between GeoDataFrames |
Rasterio Operations
Basic Raster Operations
Tool | Description |
---|---|
metadata_raster | Get metadata from a raster dataset |
get_raster_crs | Retrieve the CRS of a raster dataset |
extract_band | Extract a specific band from a multi-band raster |
raster_band_statistics | Calculate statistics (min, max, mean, std) for each band |
raster_histogram | Compute histogram of pixel values for each band |
Raster Processing
Tool | Description |
---|---|
clip_raster_with_shapefile | Clip a raster using polygons from a shapefile |
resample_raster | Resample a raster by a scale factor |
reproject_raster | Reproject a raster to a new CRS |
tile_raster | Split a raster into square tiles |
Raster Analysis
Tool | Description |
---|---|
compute_ndvi | Calculate Normalized Difference Vegetation Index |
raster_algebra | Perform algebraic operations on raster bands |
concat_bands | Combine multiple single-band rasters into one multi-band raster |
weighted_band_sum | Compute weighted sum of all bands in a raster |
🛠️ Client Development
Example usage of the tools:
Buffer Operation
Tool: buffer
Parameters: {
"geometry": "POINT(0 0)",
"distance": 10,
"resolution": 16,
"join_style": 1,
"mitre_limit": 5.0,
"single_sided": false
}
Coordinate Transformation
Tool: transform_coordinates
Parameters: {
"coordinates": [0, 0],
"source_crs": "EPSG:4326",
"target_crs": "EPSG:3857"
}
Geodetic Distance
Tool: calculate_geodetic_distance
Parameters: {
"point1": [0, 0],
"point2": [10, 10],
"ellps": "WGS84"
}
🔮 Planned Features
- Add support for more GIS libraries - GDAL/OGR
- Implement advanced spatial indexing
- Add support for raster operations
- Implement network analysis capabilities
- Add support for 3D geometries
- Implement performance optimizations
🤝 Contributing
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Please ensure your PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔗 Related Projects
- Model Context Protocol - The core MCP implementation
- Shapely - Python package for manipulation and analysis of geometric objects
- PyProj - Python interface to PROJ library
- GeoPandas - Python package for working with geospatial data
- Rasterio - Python package for reading and writing geospatial raster data
📞 Support
For support, please open an issue in the GitHub repository.
💬 Community
Join our Discord community for discussions, updates, and support:
👥 Contributors
Made with contrib.rocks.