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.
🌐 Website: gis-mcp.com
Current version is 0.8.0
Version 0.9.0 (Beta) is under active development. We welcome contributions and developers to join us in building this project.
- Features
- Prerequisites
- Installation
- Available Functions
- Client Development
- Planned Features
- Contributing
- License
- Related Projects
- Support
- Badges
GIS MCP Server empowers AI assistants with advanced geospatial intelligence. Key features include:
- 🔹 Comprehensive Geometry Operations – Perform intersection, union, buffer, difference, and other geometric transformations with ease.
- 🔹 Advanced Coordinate Transformations – Effortlessly reproject and transform geometries between coordinate reference systems.
- 🔹 Accurate Measurements – Compute distances, areas, lengths, and centroids precisely.
- 🔹 Spatial Analysis & Validation – Validate geometries, run proximity checks, and perform spatial overlays or joins.
- 🔹 Raster & Vector Support – Process raster layers, compute indices like NDVI, clip, resample, and merge with vector data.
- 🔹 Spatial Statistics & Modeling – Leverage PySAL for spatial autocorrelation, clustering, and neighborhood analysis.
- 🔹 Easy Integration – Connect seamlessly with MCP-compatible clients like Claude Desktop or Cursor IDE.
- 🔹 Flexible & Extensible – Supports Python-based GIS libraries and is ready for custom tools or workflow extensions.
🌟 Tip: With GIS MCP Server, your AI can now “think spatially,” unlocking new capabilities for environmental analysis, mapping, and location intelligence.
- Python 3.10 or higher
- MCP-compatible client (like Claude Desktop or Cursor)
- Internet connection for package installation
Choose the installation method that best suits your needs:
To install GIS MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @mahdin75/gis-mcp --client claude
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
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!
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
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!
This section provides a comprehensive list of all available functions organized by library.
Basic Geometric Operations:
-
buffer
- Create buffer around geometry -
intersection
- Find intersection of two geometries -
union
- Combine two geometries -
difference
- Find difference between geometries -
symmetric_difference
- Find symmetric difference
Geometric Properties:
-
convex_hull
- Calculate convex hull -
envelope
- Get bounding box -
minimum_rotated_rectangle
- Get minimum rotated rectangle -
get_centroid
- Get centroid point -
get_bounds
- Get geometry bounds -
get_coordinates
- Extract coordinate array -
get_geometry_type
- Get geometry type name
Transformations:
-
rotate_geometry
- Rotate geometry by angle -
scale_geometry
- Scale geometry by factors -
translate_geometry
- Move geometry by offset
Advanced Operations:
-
triangulate_geometry
- Create triangulation -
voronoi
- Create Voronoi diagram -
unary_union_geometries
- Union multiple geometries
Measurements:
-
get_length
- Calculate geometry length -
get_area
- Calculate geometry area
Validation & Utilities:
-
is_valid
- Check geometry validity -
make_valid
- Fix invalid geometry -
simplify
- Simplify geometry -
snap_geometry
- Snap to reference geometry -
nearest_point_on_geometry
- Find nearest point -
normalize_geometry
- Normalize orientation -
geometry_to_geojson
- Convert to GeoJSON -
geojson_to_geometry
- Convert from GeoJSON
Coordinate Transformations:
-
transform_coordinates
- Transform point coordinates -
project_geometry
- Project geometry between CRS
CRS Information:
-
get_crs_info
- Get detailed CRS information -
get_available_crs
- List available CRS systems -
get_utm_zone
- Get UTM zone for coordinates -
get_utm_crs
- Get UTM CRS for coordinates -
get_geocentric_crs
- Get geocentric CRS
Geodetic Calculations:
-
get_geod_info
- Get ellipsoid information -
calculate_geodetic_distance
- Calculate distance on ellipsoid -
calculate_geodetic_point
- Calculate point at distance/azimuth -
calculate_geodetic_area
- Calculate area on ellipsoid
I/O Operations:
-
read_file_gpd
- Read geospatial file with preview -
write_file_gpd
- Export GeoDataFrame to file
Join & Merge Operations:
-
append_gpd
- Concatenate GeoDataFrames vertically -
merge_gpd
- Database-style attribute joins -
overlay_gpd
- Spatial overlay operations -
dissolve_gpd
- Dissolve by attribute -
explode_gpd
- Split multi-part geometries
Spatial Operations:
-
clip_vector
- Clip geometries -
sjoin_gpd
- Spatial joins -
sjoin_nearest_gpd
- Nearest neighbor spatial joins -
point_in_polygon
- Point-in-polygon tests
Basic Raster Operations:
-
metadata_raster
- Get raster metadata -
get_raster_crs
- Get raster CRS -
extract_band
- Extract single band -
raster_band_statistics
- Calculate band statistics -
raster_histogram
- Compute pixel histograms
Raster Processing:
-
clip_raster_with_shapefile
- Clip raster with polygons -
resample_raster
- Resample by scale factor -
reproject_raster
- Reproject to new CRS -
tile_raster
- Split into tiles
Raster Analysis:
-
compute_ndvi
- Calculate vegetation index -
raster_algebra
- Mathematical operations on bands -
concat_bands
- Combine single-band rasters -
weighted_band_sum
- Weighted band combination
Advanced Analysis:
-
zonal_statistics
- Statistics within polygons -
reclassify_raster
- Reclassify pixel values -
focal_statistics
- Moving window statistics -
hillshade
- Generate hillshade from DEM -
write_raster
- Write array to raster file
Spatial Autocorrelation:
-
morans_i
- Global Moran's I statistic -
gearys_c
- Global Geary's C statistic -
gamma_statistic
- Gamma index -
getis_ord_g
- Global Getis-Ord G statistic
Local Statistics:
-
moran_local
- Local Moran's I -
getis_ord_g_local
- Local Getis-Ord G* -
join_counts_local
- Local join counts
Global Statistics:
-
join_counts
- Binary join counts test -
adbscan
- Adaptive density-based clustering
Spatial Weights:
-
weights_from_shapefile
- Create weights from shapefile -
distance_band_weights
- Distance-based weights -
knn_weights
- K-nearest neighbors weights -
build_transform_and_save_weights
- Build, transform, and save weights -
ols_with_spatial_diagnostics_safe
- OLS regression with spatial diagnostics -
build_and_transform_weights
- Build and transform weights
Boundary Download:
-
download_boundaries
- Download GADM administrative boundaries and save as GeoJSON
Climate Data Download:
-
download_climate_data
- Download climate data (ERA5 or other CDS datasets)
Ecology Data Download and Info:
-
get_species_info
– Retrieve taxonomic information for a given species name -
download_species_occurrences
– Download occurrence records for a given species and save as JSON
Movement Data Download and Routing (via OSMnx):
-
download_street_network
– Download a street network for a given place and save as GraphML -
calculate_shortest_path
– Calculate the shortest path between two points using a saved street network
Land Cover from Planetary Computer:
-
download_worldcover
– Download ESA WorldCover for AOI/year; optional crop and reprojection -
compute_s2_ndvi
– Compute NDVI from Sentinel-2 L2A; crop and reprojection supported
STAC-based Satellite Download:
-
download_satellite_imagery
– Download and stack bands from STAC items (e.g., Sentinel-2, Landsat), with optional crop and reprojection
Total Functions Available: 89
Example usage of the tools:
Tool: buffer
Parameters: {
"geometry": "POINT(0 0)",
"distance": 10,
"resolution": 16,
"join_style": 1,
"mitre_limit": 5.0,
"single_sided": false
}
Tool: transform_coordinates
Parameters: {
"coordinates": [0, 0],
"source_crs": "EPSG:4326",
"target_crs": "EPSG:3857"
}
Tool: calculate_geodetic_distance
Parameters: {
"point1": [0, 0],
"point2": [10, 10],
"ellps": "WGS84"
}
- Implement advanced spatial indexing
- Implement network analysis capabilities
- Add support for 3D geometries
- Implement performance optimizations
- Add support for more GIS libraries
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.
This project is licensed under the MIT License - see the LICENSE file for details.
Project Name | Category | Description |
---|---|---|
Model Context Protocol | MCP Related | The core MCP implementation |
Shapely | Geospatial Analysis | Python package for manipulation and analysis of geometric objects |
PyProj | Geospatial Analysis | Python interface to PROJ library |
GeoPandas | Geospatial Analysis | Python package for working with geospatial data |
Rasterio | Geospatial Analysis | Python package for reading and writing geospatial raster data |
PySAL | Geospatial Analysis | Python spatial analysis library for geospatial data science |
cdsapi | Geospatial Data Collecting | Python API to access the Copernicus Climate Data Store (CDS) |
pygadm | Geospatial Data Collecting | Easy access to administrative boundary defined by GADM from Python scripts |
pygbif | Geospatial Data Collecting | Python client for the GBIF API (ecology and biodiversity data) |
OSMnx | Geospatial Data Collecting | Python package for downloading, modeling, and analyzing street networks and urban features from OpenStreetMap |
pystac-client | Geospatial Data Collecting | Python client for STAC catalogs; search and access spatiotemporal assets |
Planetary Computer SDK for Python | Geospatial Data Collecting | Python SDK for Microsoft Planetary Computer; auth and helpers for STAC/COGs |
For support, please open an issue in the GitHub repository.
Join our Discord community for discussions, updates, and support:
Made with contrib.rocks.