GIS MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Server capabilities have not been inspected yet.
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| read_file_gpdB | Reads a geospatial file and returns stats and a data preview. |
| append_gpdC | Reads two shapefiles directly, concatenates them vertically. |
| merge_gpdC | Merges two shapefiles based on common attribute columns, This function performs a database-style join, not a spatial join. Args: left_shapefile_path: Path to the left shapefile. The geometry from this file is preserved. right_shapefile_path: Path to the right shapefile to merge. output_path: Path to save the merged output shapefile. how: Type of merge. One of 'left', 'right', 'outer', 'inner'. Defaults to 'inner'. on: Column name to join on. Must be found in both shapefiles. left_on: Column name to join on in the left shapefile. right_on: Column name to join on in the right shapefile. suffixes: Suffix to apply to overlapping column names. |
| overlay_gpdB | Overlay two GeoDataFrames using geopandas.overlay. Args: gdf1_path: Path to the first geospatial file. gdf2_path: Path to the second geospatial file. how: Overlay method ('intersection', 'union', 'identity', 'symmetric_difference', 'difference'). output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| dissolve_gpdC | Dissolve geometries by attribute using geopandas.dissolve. Args: gdf_path: Path to the geospatial file. by: Column to dissolve by (optional). output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| explode_gpdC | Split multi-part geometries into single parts using geopandas.explode. Args: gdf_path: Path to the geospatial file. output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| clip_vectorB | Clip vector geometries using geopandas.clip. Args: gdf_path: Path to the input geospatial file. clip_path: Path to the clipping geometry file. output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| sjoin_gpdB | Spatial join between two GeoDataFrames using geopandas.sjoin. Args: left_path: Path to the left geospatial file. right_path: Path to the right geospatial file. how: Type of join ('left', 'right', 'inner'). predicate: Spatial predicate ('intersects', 'within', 'contains', etc.). output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| sjoin_nearest_gpdB | Nearest neighbor spatial join using geopandas.sjoin_nearest. Args: left_path: Path to the left geospatial file. right_path: Path to the right geospatial file. how: Type of join ('left', 'right'). max_distance: Optional maximum search distance. output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| point_in_polygonB | Check if points are inside polygons using spatial join (predicate='within'). Args: points_path: Path to the point geospatial file. polygons_path: Path to the polygon geospatial file. output_path: Optional path to save the result. Returns: Dictionary with status, message, and output info. |
| write_file_gpdA | Export a GeoDataFrame to a file (Shapefile, GeoJSON, GPKG, etc.). Args: gdf_path: Path to the input geospatial file. output_path: Path to save the exported file. driver: Optional OGR driver name (e.g., 'ESRI Shapefile', 'GeoJSON', 'GPKG'). Returns: Dictionary with status and message. |
| bufferC | Create a buffer around a geometry. |
| intersectionC | Find intersection of two geometries. |
| unionC | Combine two geometries. |
| differenceD | Find difference between geometries. |
| symmetric_differenceC | Find symmetric difference between geometries. |
| convex_hullC | Calculate convex hull of a geometry. |
| envelopeB | Get bounding box of a geometry. |
| minimum_rotated_rectangleC | Get minimum rotated rectangle of a geometry. |
| get_centroidC | Get the centroid of a geometry. |
| get_boundsC | Get the bounds of a geometry. |
| get_coordinatesC | Get the coordinates of a geometry. |
| get_geometry_typeC | Get the type of a geometry. |
| rotate_geometryD | Rotate a geometry. |
| scale_geometryD | Scale a geometry. |
| translate_geometryD | Translate a geometry. |
| triangulate_geometryC | Create a triangulation of a geometry. |
| voronoiC | Create a Voronoi diagram from points. |
| unary_union_geometriesC | Create a union of multiple geometries. |
| get_lengthC | Get the length of a geometry. |
| get_areaC | Get the area of a geometry. |
| is_validC | Check if a geometry is valid. |
| make_validC | Make a geometry valid. |
| simplifyC | Simplify a geometry. |
| snap_geometryB | Snap one geometry to another using shapely.ops.snap. Args: geometry1: WKT string of the geometry to be snapped. geometry2: WKT string of the reference geometry. tolerance: Distance tolerance for snapping. Returns: Dictionary with status, message, and snapped geometry as WKT. |
| nearest_point_on_geometryC | Find the nearest point on geometry2 to geometry1 using shapely.ops.nearest_points. Args: geometry1: WKT string of the first geometry (e.g., a point). geometry2: WKT string of the second geometry. Returns: Dictionary with status, message, and the nearest point as WKT. |
| normalize_geometryB | Normalize the orientation/order of a geometry using shapely.normalize. Args: geometry: WKT string of the geometry. Returns: Dictionary with status, message, and normalized geometry as WKT. |
| geometry_to_geojsonA | Convert a Shapely geometry (WKT) to GeoJSON using shapely.geometry.mapping. Args: geometry: WKT string of the geometry. Returns: Dictionary with status, message, and GeoJSON representation. |
| geojson_to_geometryA | Convert GeoJSON to a Shapely geometry using shapely.geometry.shape. Args: geojson: GeoJSON dictionary. Returns: Dictionary with status, message, and geometry as WKT. |
| zonal_statisticsB | Calculate statistics of raster values within polygons (zonal statistics). Args: raster_path: Path to the raster file. vector_path: Path to the vector file (polygons). stats: List of statistics to compute (e.g., ["mean", "min", "max", "std"]). Returns: Dictionary with status, message, and statistics per polygon. |
| reclassify_rasterA | Reclassify raster values using a mapping dictionary. Args: raster_path: Path to the input raster. reclass_map: Dictionary mapping old values to new values (e.g., {1: 10, 2: 20}). output_path: Path to save the reclassified raster. Returns: Dictionary with status and message. |
| focal_statisticsA | Compute focal (moving window) statistics on a raster. Args: raster_path: Path to the input raster. statistic: Statistic to compute ('mean', 'min', 'max', 'std'). size: Window size (odd integer). output_path: Optional path to save the result. Returns: Dictionary with status, message, and output path if saved. |
| hillshadeB | Generate hillshade from a DEM raster. Args: raster_path: Path to the DEM raster. azimuth: Sun azimuth angle in degrees. angle_altitude: Sun altitude angle in degrees. output_path: Optional path to save the hillshade raster. Returns: Dictionary with status, message, and output path if saved. |
| write_rasterB | Write a numpy array to a raster file using metadata from a reference raster. Args: array: 2D or 3D list (or numpy array) of raster values. reference_raster: Path to a raster whose metadata will be copied. output_path: Path to save the new raster. dtype: Optional data type (e.g., 'float32', 'uint8'). Returns: Dictionary with status and message. |
| metadata_rasterA | Open a raster dataset in read-only mode and return metadata. This tool supports two modes based on the provided string:
The input must be a single string that is either a valid file path on the local machine or a valid HTTPS URL pointing to a raster. |
| get_raster_crsA | Retrieve the Coordinate Reference System (CRS) of a raster dataset. Opens the raster (local path or HTTPS URL), reads its DatasetReader.crs attribute as a PROJ.4-style dict, and also returns the WKT representation. |
| clip_raster_with_shapefileA | Clip a raster dataset using polygons from a shapefile and write the result. Converts the shapefile's CRS to match the raster's CRS if they are different. Parameters:
|
| resample_rasterA | Resample a raster dataset by a scale factor and save the result. Parameters:
|
| reproject_rasterB | Reproject a raster dataset to a new CRS and save the result. Parameters:
|
| extract_bandA | Extract a specific band from a multi-band raster and save it as a single-band GeoTIFF. Parameters:
|
| raster_band_statisticsB | Calculate min, max, mean, and std for each band of a raster. Parameters:
|
| tile_rasterB | Split a raster into square tiles of a given size and save them individually. Parameters:
|
| raster_histogramB | Compute histogram of pixel values for each band. Parameters:
|
| compute_ndviA | Compute NDVI (Normalized Difference Vegetation Index) and save to GeoTIFF. Parameters:
|
| raster_algebraA | Perform algebraic operations (addition or subtraction) on two raster bands, handling alignment issues automatically. Parameters:
The function aligns rasters if needed, applies the selected operation, and saves the result. |
| concat_bandsA | Concatenate multiple single-band raster files into one multi-band raster, handling alignment issues automatically. Parameters:
Notes:
|
| weighted_band_sumA | Compute a weighted sum of all bands in a raster using specified weights. Parameters:
|
| transform_coordinatesC | Transform coordinates between CRS. |
| project_geometryC | Project a geometry between CRS. |
| get_crs_infoC | Get information about a CRS. |
| get_available_crsB | Get list of available CRS. |
| get_geod_infoC | Get information about a geodetic calculation. |
| calculate_geodetic_distanceC | Calculate geodetic distance between points. |
| calculate_geodetic_pointC | Calculate point at given distance and azimuth. |
| calculate_geodetic_areaC | Calculate area of a polygon using geodetic calculations. |
| get_utm_zoneC | Get UTM zone for given coordinates. |
| get_utm_crsC | Get UTM CRS for given coordinates. |
| get_geocentric_crsC | Get geocentric CRS for given coordinates. |
| getis_ord_gC | Compute Getis-Ord G for global hot spot analysis. |
| morans_iC | Compute Moran's I Global Autocorrelation Statistic. |
| gearys_cC | Compute Global Geary's C Autocorrelation Statistic. |
| gamma_statisticC | Compute Gamma Statistic for spatial autocorrelation. |
| moran_localD | Local Moran's I. |
| getis_ord_g_localD | Local Getis-Ord G. |
| join_countsD | Global Binary Join Counts. |
| join_counts_localD | Local Join Counts. |
| adbscanB | Adaptive DBSCAN clustering (requires coordinates, no dependent_var). |
| weights_from_shapefileB | Create a spatial weights (W) from a shapefile using contiguity.
|
| distance_band_weightsB | Create a distance-based spatial weights (W) object from point data.
|
| knn_weightsB | Create a k-nearest neighbors spatial weights (W) object from point data.
|
| build_transform_and_save_weightsA | Pipeline: Read shapefile, build spatial weights, optionally transform, and save to file. Parameters:
|
| ols_with_spatial_diagnostics_safeB | Safe MCP pipeline: Read shapefile, build/load W, convert numeric, check NaNs, run OLS. Parameters:
|
| build_and_transform_weightsB | Build and transform spatial weights in one step. Parameters:
|
| spatial_markovC | Run giddy Spatial Markov on a panel (n regions x t periods) from a shapefile. |
| dynamic_lisaC | Run dynamic LISA (directional LISA) with giddy.directional.Rose. Returns sector counts, angles, vector lengths, and (optionally) permutation p-values. |
| gm_lagB | Run spreg.GM_Lag (spatial 2SLS / GMM-IV spatial lag model) on a cross-section. Returns coefficients with SE/z/p, fit metrics, (optional) AK test, and a small data preview. |
| save_resultsA | MCP Tool: Save any GIS-MCP result dict to files, only when the user requests. Args: data: The dictionary returned by any GIS-MCP tool. filename: Base filename without extension. formats: List of formats to save (default = all). folder: Target folder (relative to configured storage directory, or absolute path). Returns: Dict with 'saved_files' mapping format -> path. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_geopandas_io | List available GeoPandas I/O operations. |
| get_geopandas_joins | List available GeoPandas join operations. |
| get_basic_operations | List available basic geometric operations. |
| get_geometric_properties | List available geometric property operations. |
| get_transformations | List available geometric transformations. |
| get_advanced_operations | List available advanced operations. |
| get_measurements | List available measurement operations. |
| get_validation_operations | List available validation operations. |
| get_shapely_util_operations | List available Shapely utility/advanced operations. |
| get_rasterio_operations | List available rasterio operations. |
| get_crs_transformations | List available CRS transformation operations. |
| get_crs_info_operations | List available CRS information operations. |
| get_geodetic_operations | List available geodetic operations. |
| get_spatial_operations | List available spatial analysis operations. This is for esda library. They are using pysal library. |
Latest Blog Posts
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/mahdin75/gis-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server