The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Gis MCP listing page.
GIS-MCP is an open-source Model Context Protocol (MCP) server that connects AI assistants and Large Language Models (LLMs) with GIS and geospatial operations.
It enables AI agents to perform geospatial analysis, spatial data processing, vector and raster operations, coordinate transformations, spatial statistics, mapping, and other GIS workflows through MCP-compatible clients.
🌐 Official Documentation: https://gis-mcp.com
📦 PyPI: https://pypi.org/project/gis-mcp/
💻 Source Code: https://github.com/mahdin75/gis-mcp
92+ GIS tools across Shapely, GeoPandas, PyProj, Rasterio, PySAL, visualization, satellite imagery, climate, ecology, movement, and land-cover data.
Install GIS-MCP and transform your AI's spatial capabilities!
Current version is 0.15.0 (Beta):
We welcome contributions and developers to join us in building this project.
GIS MCP Server empowers AI assistants with advanced geospatial intelligence. Key features include:
🌟 Tip: With GIS MCP Server, your AI can now “think spatially,” unlocking new capabilities for environmental analysis, mapping, and location intelligence.
GIS MCP Server supports two storage backends for file upload, download, and tool outputs:
| Backend | When to use | Configure with |
|---|---|---|
| Local filesystem | Default; files on disk (including Docker volumes) | --storage-path or GIS_MCP_STORAGE_PATH |
| Google Cloud Storage (GCP) | When you want files in a GCS bucket | --storage-config / GIS_MCP_STORAGE_CONFIG or GIS_MCP_STORAGE_PROVIDER=gcp |
Install GCP support with:
Full setup (paths, IAM, Docker, credentials): Storage Configuration.
If you’re building agents via vibe coding, give the model these generated maps of GIS MCP:
llms.txt: curated summary for smaller windows.llms-full.txt: full documentation map for larger windows.Copies also live in the repository root (llms.txt, llms-full.txt). They are regenerated from the docs during the MkDocs build.
Choose the installation method that best suits your needs:
GIS MCP Server can be run using Docker, which provides an isolated environment with all dependencies pre-installed.
Important: Both Dockerfile and Dockerfile.local have HTTP transport mode enabled by default. The server runs on port 9010 and is accessible at http://localhost:9010/mcp.
The main Dockerfile installs the package from PyPI:
The Dockerfile.local installs the package from local source files (useful for development or custom builds):
The server will be available at http://localhost:9010/mcp in HTTP transport mode.
For more details on Docker configuration and environment variables, see the Docker installation guide.
The pip installation is recommended for most users:
On Windows (PowerShell):
On Linux:
To install with visualization capabilities (Folium and PyDeck for interactive maps):
This will install additional dependencies:
folium>=0.15.0 - For creating interactive web mapspydeck>=0.9.0 - For advanced 3D visualizationsBy default, the server runs in STDIO transport mode, which is ideal for local development and integration with Claude Desktop or Cursor IDE.
You can also run the server in HTTP transport mode for network deployments:
When running in HTTP or SSE transport mode, the following endpoints are available:
http://host:port/mcp (HTTP) or http://host:port/sse (SSE)POST /storage/upload - Upload files to server storageGET /storage/download?path=<file> - Download files from server storageGET /storage/list?path=<dir> - List files in server storageFor more details on transport modes and complete endpoint documentation, see:
To use the pip installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
Linux/Mac:
Cursor IDE (create .cursor/mcp.json):
Windows:
Linux/Mac:
After configuration:
YourUsername with your actual username/path/to/gis-mcp with the actual path to your projectFor contributors and developers:
To use the development installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
Linux/Mac:
Cursor IDE (create .cursor/mcp.json):
Windows:
Linux/Mac:
After configuration:
YourUsername with your actual username/path/to/gis-mcp with the actual path to your projectCreate agents that call real GIS MCP tools (not invented spatial math).
Tutorial: Park buffer proximity agent
Sample: agents/Langchain/
Tutorial: Stateful site-coverage workflow
Sample: agents/LangGraph/
python agents/LangGraph/verify_graph.pyTutorial: Multi-agent setback workflow
python agents/LangGraph/verify_multi_agent.pyMinimal starters: templates/ (langchain-gis-agent, langgraph-gis-workflow, langgraph-multi-agent-gis)
Also available: OpenAI Agents SDK (Node.js)
📝 Medium article (LangChain intro) →
This section provides a comprehensive list of all available functions organized by library.
Basic Geometric Operations:
buffer - Create buffer around geometryintersection - Find intersection of two geometriesunion - Combine two geometriesdifference - Find difference between geometriessymmetric_difference - Find symmetric differenceGeometric Properties:
convex_hull - Calculate convex hullenvelope - Get bounding boxminimum_rotated_rectangle - Get minimum rotated rectangleget_centroid - Get centroid pointget_bounds - Get geometry boundsget_coordinates - Extract coordinate arrayget_geometry_type - Get geometry type nameTransformations:
rotate_geometry - Rotate geometry by anglescale_geometry - Scale geometry by factorstranslate_geometry - Move geometry by offsetAdvanced Operations:
triangulate_geometry - Create triangulationvoronoi - Create Voronoi diagramunary_union_geometries - Union multiple geometriesMeasurements:
get_length - Calculate geometry lengthget_area - Calculate geometry areaValidation & Utilities:
is_valid - Check geometry validitymake_valid - Fix invalid geometrysimplify - Simplify geometrysnap_geometry - Snap to reference geometrynearest_point_on_geometry - Find nearest pointnormalize_geometry - Normalize orientationgeometry_to_geojson - Convert to GeoJSONgeojson_to_geometry - Convert from GeoJSONCoordinate Transformations:
transform_coordinates - Transform point coordinatesproject_geometry - Project geometry between CRSCRS Information:
get_crs_info - Get detailed CRS informationget_available_crs - List available CRS systemsget_utm_zone - Get UTM zone for coordinatesget_utm_crs - Get UTM CRS for coordinatesget_geocentric_crs - Get geocentric CRSGeodetic Calculations:
get_geod_info - Get ellipsoid informationcalculate_geodetic_distance - Calculate distance on ellipsoidcalculate_geodetic_point - Calculate point at distance/azimuthcalculate_geodetic_area - Calculate area on ellipsoidI/O Operations:
read_file_gpd - Read geospatial file with previewwrite_file_gpd - Export GeoDataFrame to fileJoin & Merge Operations:
append_gpd - Concatenate GeoDataFrames verticallymerge_gpd - Database-style attribute joinsoverlay_gpd - Spatial overlay operationsdissolve_gpd - Dissolve by attributeexplode_gpd - Split multi-part geometriesSpatial Operations:
clip_vector - Clip geometriessjoin_gpd - Spatial joinssjoin_nearest_gpd - Nearest neighbor spatial joinspoint_in_polygon - Point-in-polygon testsBasic Raster Operations:
metadata_raster - Get raster metadataget_raster_crs - Get raster CRSextract_band - Extract single bandraster_band_statistics - Calculate band statisticsraster_histogram - Compute pixel histogramsRaster Processing:
clip_raster_with_shapefile - Clip raster with polygonsresample_raster - Resample by scale factorreproject_raster - Reproject to new CRStile_raster - Split into tilesRaster Analysis:
compute_ndvi - Calculate vegetation indexraster_algebra - Mathematical operations on bandsconcat_bands - Combine single-band rastersweighted_band_sum - Weighted band combinationAdvanced Analysis:
zonal_statistics - Statistics within polygonsreclassify_raster - Reclassify pixel valuesfocal_statistics - Moving window statisticshillshade - Generate hillshade from DEMwrite_raster - Write array to raster fileSpatial Autocorrelation:
morans_i - Global Moran's I statisticgearys_c - Global Geary's C statisticgamma_statistic - Gamma indexgetis_ord_g - Global Getis-Ord G statisticLocal Statistics:
moran_local - Local Moran's Igetis_ord_g_local - Local Getis-Ord G*join_counts_local - Local join countsGlobal Statistics:
join_counts - Binary join counts testadbscan - Adaptive density-based clusteringSpatial Weights:
weights_from_shapefile - Create weights from shapefiledistance_band_weights - Distance-based weightsknn_weights - K-nearest neighbors weightsbuild_transform_and_save_weights - Build, transform, and save weightsols_with_spatial_diagnostics_safe - OLS regression with spatial diagnosticsbuild_and_transform_weights - Build and transform weightsSpatial-Temporal Analysis:
spatial_markov - Spatial Markov analysis for panel datadynamic_lisa - Dynamic LISA (directional LISA) analysisSpatial Regression:
gm_lag - GM_Lag spatial 2SLS/GMM-IV spatial lag modelStatic Map Visualization (Matplotlib/GeoPandas):
create_map – Generate high-quality static maps (PNG, PDF, JPG) from multiple geospatial data sources including shapefiles, rasters, WKT geometries, and coordinate arrays. Supports multiple layers with individual styling options, legends, titles, and grid overlays.Interactive Web Map Visualization (Folium):
create_web_map – Generate interactive HTML maps using Folium with layer controls, legends, scale bars, dynamic titles, tooltips, and minimap. Supports multiple basemap options and responsive design for web browsers.Boundary Download:
download_boundaries - Download GADM administrative boundaries and save as GeoJSONClimate 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 namedownload_species_occurrences – Download occurrence records for a given species and save as JSONMovement Data Download and Routing (via OSMnx):
download_street_network – Download a street network for a given place and save as GraphMLcalculate_shortest_path – Calculate the shortest path between two points using a saved street networkLand Cover from Planetary Computer:
download_worldcover – Download ESA WorldCover for AOI/year; optional crop and reprojectioncompute_s2_ndvi – Compute NDVI from Sentinel-2 L2A; crop and reprojection supportedSTAC-based Satellite Download:
download_satellite_imagery – Download and stack bands from STAC items (e.g., Sentinel-2, Landsat), with optional crop and reprojectionTotal Functions Available: 92
Example usage of the tools:
We welcome contributions! Here's how you can help:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)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 Specification |
| FastMCP | MCP Related | The fast, Pythonic way to build MCP servers and clients |
| 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 |
| Fiona | Geospatial Analysis | Python interface to OGR library for reading and writing vector geospatial data formats |
| PySAL | Geospatial Analysis | Python spatial analysis library for geospatial data science |
| Folium | Visualization | Python library for creating interactive web maps using Leaflet.js |
| PyDeck | Visualization | Python library for creating advanced 3D visualizations and interactive maps |
| Matplotlib | Visualization | Python plotting library for creating static maps and visualizations |
| 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 |
| Server Name | Description |
|---|---|
| GeoServer MCP | A Model Context Protocol (MCP) server implementation that connects LLMs to the GeoServer REST API |
For support, please open an issue in the GitHub repository.
Join our Discord community for discussions, updates, and support:
Made with contrib.rocks.