Name | gis-mcp JSON |
Version |
0.8.0
JSON |
| download |
home_page | None |
Summary | A Model Context Protocol (MCP) server implementation for GIS operations using GIS libraries |
upload_time | 2025-09-03 13:36:32 |
maintainer | None |
docs_url | None |
author | Mahdi Nazari Ashani, Saba Kazemi, Shahab Esfandiar, Yasin Mohammadi, Homa Ganjali, GIS MCP Server Contributors |
requires_python | >=3.10 |
license | MIT License
Copyright (c) 2025 Mahdi Nazari Ashani
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
agentic ai
cdsapi
geopandas
geospatial
gis
llm
mcp
ogc
pygadm
pygbif
pyproj
pysal
rasterio
shapely
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# GIS MCP Server
<div align="center">
<h3>โจ Want to perform accurate geospatial analysis in your chatbot? โจ</h3>
<p><strong>Install GIS-MCP and transform your AI's spatial capabilities!</strong></p>
<br/>
<img src="docs/Logo.png" alt="GIS MCP Server Logo" width="300"/>
<br/>
<br/>
</div>
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](https://gis-mcp.com)
> Current version is 0.7.0
>
> Version 0.8.0 (Beta) is under active development. We welcome contributions and developers to join us in building this project.
## ๐ฅ Demo
<div align="center">
<img src="docs/demo.gif" alt="GIS MCP Server Demo" width="800"/>
</div>
### Rasterio Demo
<div align="center">
<a href="https://www.veed.io/view/95ff85f4-efbb-4154-9a04-d966c6ae1737?panel=share">
<br/>
<em>Click to watch the Rasterio demo video or go to docs folder</em>
</a>
</div>
## ๐ Table of Contents
- [Features](#-features)
- [Prerequisites](#-prerequisites)
- [Installation](#-installation)
- [Installing via Smithery](#-installing-via-smithery)
- [pip Installation](#-pip-installation)
- [Development Installation](#-development-installation)
- [Available Functions](#-available-functions)
- [Shapely Functions](#-shapely-functions-29-total)
- [PyProj Functions](#-pyproj-functions-13-total)
- [GeoPandas Functions](#-geopandas-functions-13-total)
- [Rasterio Functions](#-rasterio-functions-20-total)
- [PySAL Functions](#-pysal-functions-15-total)
- [Administrative Boundaries Functions](#-administrative-boundaries-functions-1-total)
- [Climate Data Functions](#-climate-data-functions-1-total)
- [Ecology Data Functions](#-ecology-data-functions-2-total)
- [Movement Data Functions](#-movement-data-functions-2-total)
- [Land Cover Data Functions](#-land-cover-data-functions-2-total)
- [Satellite Imagery Functions](#-satellite-imagery-functions-1-total)
- [Client Development](#-client-development)
- [Planned Features](#-planned-features)
- [Contributing](#-contributing)
- [License](#-license)
- [Related Projects](#-related-projects)
- [Support](#-support)
- [Badges](#-badges)
## ๐ Features
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.
---
## ๐ 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](https://smithery.ai/server/@mahdin75/gis-mcp):
```bash
npx -y @smithery/cli install @mahdin75/gis-mcp --client claude
```
### ๐ฆ pip Installation
The pip installation is recommended for most users:
1. Install uv package manager:
```bash
pip install uv
```
2. Create the Virtual Environment (Python 3.10+):
```bash
uv venv --python=3.10
```
3. Install the package:
```bash
uv pip install gis-mcp
```
4. Start the server:
```bash
gis-mcp
```
#### pip Configuration
To use the pip installation with Claude or Cursor, add the following configuration:
**Claude Desktop:**
**Windows:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
```
**Linux/Mac:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
```
**Cursor IDE** (create `.cursor/mcp.json`):
**Windows:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
```
**Linux/Mac:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
```
After configuration:
1. Make sure to replace `YourUsername` with your actual username
2. For development installation, replace `/path/to/gis-mcp` with the actual path to your project
3. Restart your IDE to apply the changes
4. You can now use all GIS operations through Claude or Cursor!
### ๐ Development Installation
For contributors and developers:
1. Install uv package manager:
```bash
pip install uv
```
2. Create the Virtual Environment:
```bash
uv venv --python=3.10
```
3. Install the package in development mode:
```bash
uv pip install -e .
```
4. Start the server:
```bash
python -m gis_mcp
```
#### Development Configuration
To use the development installation with Claude or Cursor, add the following configuration:
**Claude Desktop:**
**Windows:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
```
**Linux/Mac:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
```
**Cursor IDE** (create `.cursor/mcp.json`):
**Windows:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
```
**Linux/Mac:**
```json
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
```
After configuration:
1. Make sure to replace `YourUsername` with your actual username
2. For development installation, replace `/path/to/gis-mcp` with the actual path to your project
3. Restart your IDE to apply the changes
4. You can now use all GIS operations through Claude or Cursor!
## ๐ Available Functions
This section provides a comprehensive list of all available functions organized by library.
### ๐ท Shapely Functions (29 total)
**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
### ๐ท PyProj Functions (13 total)
**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
### ๐ท GeoPandas Functions (13 total)
**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
### ๐ท Rasterio Functions (20 total)
**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
### ๐ท PySAL Functions (15 total)
**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
### ๐ท Administrative Boundaries Functions (1 total)
**Boundary Download:**
- `download_boundaries` - Download GADM administrative boundaries and save as GeoJSON
### ๐ท Climate Data Functions (1 total)
**Climate Data Download:**
- `download_climate_data` - Download climate data (ERA5 or other CDS datasets)
### ๐ท Ecology Data Functions (2 total)
**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 Functions (2 total)
**Movement Data Download and Routing (via [OSMnx](https://osmnx.readthedocs.io/en/stable/)):**
- `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 Data Functions (2 total)
**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
### ๐ท Satellite Imagery Functions (1 total)
**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**
## ๐ Client Development
Example usage of the tools:
### Buffer Operation
```python
Tool: buffer
Parameters: {
"geometry": "POINT(0 0)",
"distance": 10,
"resolution": 16,
"join_style": 1,
"mitre_limit": 5.0,
"single_sided": false
}
```
### Coordinate Transformation
```python
Tool: transform_coordinates
Parameters: {
"coordinates": [0, 0],
"source_crs": "EPSG:4326",
"target_crs": "EPSG:3857"
}
```
### Geodetic Distance
```python
Tool: calculate_geodetic_distance
Parameters: {
"point1": [0, 0],
"point2": [10, 10],
"ellps": "WGS84"
}
```
## ๐ฎ Planned Features
- Implement advanced spatial indexing
- Implement network analysis capabilities
- Add support for 3D geometries
- Implement performance optimizations
- Add support for more GIS libraries
## ๐ค Contributing
We welcome contributions! Here's how you can help:
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. 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
| Project Name | Category | Description |
| --------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [Model Context Protocol](https://github.com/anthropics/model-context-protocol) | MCP Related | The core MCP implementation |
| [Shapely](https://github.com/shapely/shapely) | Geospatial Analysis | Python package for manipulation and analysis of geometric objects |
| [PyProj](https://github.com/pyproj4/pyproj) | Geospatial Analysis | Python interface to PROJ library |
| [GeoPandas](https://github.com/geopandas/geopandas) | Geospatial Analysis | Python package for working with geospatial data |
| [Rasterio](https://github.com/rasterio/rasterio) | Geospatial Analysis | Python package for reading and writing geospatial raster data |
| [PySAL](https://github.com/pysal/pysal) | Geospatial Analysis | Python spatial analysis library for geospatial data science |
| [cdsapi](https://github.com/ecmwf/cdsapi) | Geospatial Data Collecting | Python API to access the Copernicus Climate Data Store (CDS) |
| [pygadm](https://github.com/12rambau/pygadm) | Geospatial Data Collecting | Easy access to administrative boundary defined by GADM from Python scripts |
| [pygbif](https://github.com/gbif/pygbif) | Geospatial Data Collecting | Python client for the GBIF API (ecology and biodiversity data) |
| [OSMnx](https://osmnx.readthedocs.io/en/stable/) | Geospatial Data Collecting | Python package for downloading, modeling, and analyzing street networks and urban features from OpenStreetMap |
| [pystac-client](https://github.com/stac-utils/pystac-client) | Geospatial Data Collecting | Python client for STAC catalogs; search and access spatiotemporal assets |
| [Planetary Computer SDK for Python](https://github.com/microsoft/planetary-computer-sdk-for-python) | Geospatial Data Collecting | Python SDK for Microsoft Planetary Computer; auth and helpers for STAC/COGs |
## ๐ Support
For support, please open an issue in the GitHub repository.
## ๐ฌ Community
Join our Discord community for discussions, updates, and support:
[](https://discord.gg/dzkXZsZK)
## ๐ฅ Contributors
<a href="https://github.com/mahdin75/gis-mcp/graphs/contributors">
<img src="https://contrib.rocks/image?repo=mahdin75/gis-mcp" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
<br/>
## ๐ Badges
<div align="center">
[](https://archestra.ai/mcp-catalog/mahdin75__gis-mcp)
<br/></br>
<a href="https://glama.ai/mcp/servers/@mahdin75/gis-mcp">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@mahdin75/gis-mcp/badge" alt="GIS Server MCP server" />
</a>
<br/><br/><br/>
<a href="https://mcp.so/server/gis-mcp-server/mahdin75">
<img src="https://mcp.so/logo.png" alt="MCP.so Badge" width="150"/>
</a>
</div>
Raw data
{
"_id": null,
"home_page": null,
"name": "gis-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "agentic AI, cdsapi, geopandas, geospatial, gis, llm, mcp, ogc, pygadm, pygbif, pyproj, pysal, rasterio, shapely",
"author": "Mahdi Nazari Ashani, Saba Kazemi, Shahab Esfandiar, Yasin Mohammadi, Homa Ganjali, GIS MCP Server Contributors",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/5d/57/01ee83a4f003931b58f6c81ab46dff1ed318a7a09f0d376bd23f971d925a/gis_mcp-0.8.0.tar.gz",
"platform": null,
"description": "# GIS MCP Server\n\n<div align=\"center\">\n <h3>\u2728 Want to perform accurate geospatial analysis in your chatbot? \u2728</h3>\n <p><strong>Install GIS-MCP and transform your AI's spatial capabilities!</strong></p>\n <br/>\n <img src=\"docs/Logo.png\" alt=\"GIS MCP Server Logo\" width=\"300\"/>\n <br/>\n <br/>\n</div>\n\nA 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.\n\n\ud83c\udf10 **Website:** [gis-mcp.com](https://gis-mcp.com)\n\n> Current version is 0.7.0\n>\n> Version 0.8.0 (Beta) is under active development. We welcome contributions and developers to join us in building this project.\n\n## \ud83c\udfa5 Demo\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"GIS MCP Server Demo\" width=\"800\"/>\n</div>\n\n### Rasterio Demo\n\n<div align=\"center\">\n <a href=\"https://www.veed.io/view/95ff85f4-efbb-4154-9a04-d966c6ae1737?panel=share\">\n <br/>\n <em>Click to watch the Rasterio demo video or go to docs folder</em>\n </a>\n</div>\n\n## \ud83d\udccb Table of Contents\n\n- [Features](#-features)\n- [Prerequisites](#-prerequisites)\n- [Installation](#-installation)\n - [Installing via Smithery](#-installing-via-smithery)\n - [pip Installation](#-pip-installation)\n - [Development Installation](#-development-installation)\n- [Available Functions](#-available-functions)\n - [Shapely Functions](#-shapely-functions-29-total)\n - [PyProj Functions](#-pyproj-functions-13-total)\n - [GeoPandas Functions](#-geopandas-functions-13-total)\n - [Rasterio Functions](#-rasterio-functions-20-total)\n - [PySAL Functions](#-pysal-functions-15-total)\n - [Administrative Boundaries Functions](#-administrative-boundaries-functions-1-total)\n - [Climate Data Functions](#-climate-data-functions-1-total)\n - [Ecology Data Functions](#-ecology-data-functions-2-total)\n - [Movement Data Functions](#-movement-data-functions-2-total)\n - [Land Cover Data Functions](#-land-cover-data-functions-2-total)\n - [Satellite Imagery Functions](#-satellite-imagery-functions-1-total)\n- [Client Development](#-client-development)\n- [Planned Features](#-planned-features)\n- [Contributing](#-contributing)\n- [License](#-license)\n- [Related Projects](#-related-projects)\n- [Support](#-support)\n- [Badges](#-badges)\n\n## \ud83d\ude80 Features\n\nGIS MCP Server empowers AI assistants with advanced geospatial intelligence. Key features include:\n\n- \ud83d\udd39 **Comprehensive Geometry Operations** \u2013 Perform intersection, union, buffer, difference, and other geometric transformations with ease.\n- \ud83d\udd39 **Advanced Coordinate Transformations** \u2013 Effortlessly reproject and transform geometries between coordinate reference systems.\n- \ud83d\udd39 **Accurate Measurements** \u2013 Compute distances, areas, lengths, and centroids precisely.\n- \ud83d\udd39 **Spatial Analysis & Validation** \u2013 Validate geometries, run proximity checks, and perform spatial overlays or joins.\n- \ud83d\udd39 **Raster & Vector Support** \u2013 Process raster layers, compute indices like NDVI, clip, resample, and merge with vector data.\n- \ud83d\udd39 **Spatial Statistics & Modeling** \u2013 Leverage PySAL for spatial autocorrelation, clustering, and neighborhood analysis.\n- \ud83d\udd39 **Easy Integration** \u2013 Connect seamlessly with MCP-compatible clients like Claude Desktop or Cursor IDE.\n- \ud83d\udd39 **Flexible & Extensible** \u2013 Supports Python-based GIS libraries and is ready for custom tools or workflow extensions.\n\n> \ud83c\udf1f **Tip:** With GIS MCP Server, your AI can now \u201cthink spatially,\u201d unlocking new capabilities for environmental analysis, mapping, and location intelligence.\n\n---\n\n## \ud83d\udccb Prerequisites\n\n- Python 3.10 or higher\n- MCP-compatible client (like Claude Desktop or Cursor)\n- Internet connection for package installation\n\n## \ud83d\udee0 Installation\n\nChoose the installation method that best suits your needs:\n\n### \ud83d\udee0 Installing via Smithery\n\nTo install GIS MCP Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@mahdin75/gis-mcp):\n\n```bash\nnpx -y @smithery/cli install @mahdin75/gis-mcp --client claude\n```\n\n### \ud83d\udce6 pip Installation\n\nThe pip installation is recommended for most users:\n\n1. Install uv package manager:\n\n```bash\npip install uv\n```\n\n2. Create the Virtual Environment (Python 3.10+):\n\n```bash\nuv venv --python=3.10\n```\n\n3. Install the package:\n\n```bash\nuv pip install gis-mcp\n```\n\n4. Start the server:\n\n```bash\ngis-mcp\n```\n\n#### pip Configuration\n\nTo use the pip installation with Claude or Cursor, add the following configuration:\n\n**Claude Desktop:**\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"C:\\\\Users\\\\YourUsername\\\\.venv\\\\Scripts\\\\gis-mcp\",\n \"args\": []\n }\n }\n}\n```\n\n**Linux/Mac:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"/home/YourUsername/.venv/bin/gis-mcp\",\n \"args\": []\n }\n }\n}\n```\n\n**Cursor IDE** (create `.cursor/mcp.json`):\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"C:\\\\Users\\\\YourUsername\\\\.venv\\\\Scripts\\\\gis-mcp\",\n \"args\": []\n }\n }\n}\n```\n\n**Linux/Mac:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"/home/YourUsername/.venv/bin/gis-mcp\",\n \"args\": []\n }\n }\n}\n```\n\nAfter configuration:\n\n1. Make sure to replace `YourUsername` with your actual username\n2. For development installation, replace `/path/to/gis-mcp` with the actual path to your project\n3. Restart your IDE to apply the changes\n4. You can now use all GIS operations through Claude or Cursor!\n\n### \ud83d\udee0 Development Installation\n\nFor contributors and developers:\n\n1. Install uv package manager:\n\n```bash\npip install uv\n```\n\n2. Create the Virtual Environment:\n\n```bash\nuv venv --python=3.10\n```\n\n3. Install the package in development mode:\n\n```bash\nuv pip install -e .\n```\n\n4. Start the server:\n\n```bash\npython -m gis_mcp\n```\n\n#### Development Configuration\n\nTo use the development installation with Claude or Cursor, add the following configuration:\n\n**Claude Desktop:**\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"C:\\\\path\\\\to\\\\gis-mcp\\\\.venv\\\\Scripts\\\\python\",\n \"args\": [\"-m\", \"gis_mcp\"]\n }\n }\n}\n```\n\n**Linux/Mac:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"/path/to/gis-mcp/.venv/bin/python\",\n \"args\": [\"-m\", \"gis_mcp\"]\n }\n }\n}\n```\n\n**Cursor IDE** (create `.cursor/mcp.json`):\n\n**Windows:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"C:\\\\path\\\\to\\\\gis-mcp\\\\.venv\\\\Scripts\\\\python\",\n \"args\": [\"-m\", \"gis_mcp\"]\n }\n }\n}\n```\n\n**Linux/Mac:**\n\n```json\n{\n \"mcpServers\": {\n \"gis-mcp\": {\n \"command\": \"/path/to/gis-mcp/.venv/bin/python\",\n \"args\": [\"-m\", \"gis_mcp\"]\n }\n }\n}\n```\n\nAfter configuration:\n\n1. Make sure to replace `YourUsername` with your actual username\n2. For development installation, replace `/path/to/gis-mcp` with the actual path to your project\n3. Restart your IDE to apply the changes\n4. You can now use all GIS operations through Claude or Cursor!\n\n## \ud83d\udcda Available Functions\n\nThis section provides a comprehensive list of all available functions organized by library.\n\n### \ud83d\udd37 Shapely Functions (29 total)\n\n**Basic Geometric Operations:**\n\n- `buffer` - Create buffer around geometry\n- `intersection` - Find intersection of two geometries\n- `union` - Combine two geometries\n- `difference` - Find difference between geometries\n- `symmetric_difference` - Find symmetric difference\n\n**Geometric Properties:**\n\n- `convex_hull` - Calculate convex hull\n- `envelope` - Get bounding box\n- `minimum_rotated_rectangle` - Get minimum rotated rectangle\n- `get_centroid` - Get centroid point\n- `get_bounds` - Get geometry bounds\n- `get_coordinates` - Extract coordinate array\n- `get_geometry_type` - Get geometry type name\n\n**Transformations:**\n\n- `rotate_geometry` - Rotate geometry by angle\n- `scale_geometry` - Scale geometry by factors\n- `translate_geometry` - Move geometry by offset\n\n**Advanced Operations:**\n\n- `triangulate_geometry` - Create triangulation\n- `voronoi` - Create Voronoi diagram\n- `unary_union_geometries` - Union multiple geometries\n\n**Measurements:**\n\n- `get_length` - Calculate geometry length\n- `get_area` - Calculate geometry area\n\n**Validation & Utilities:**\n\n- `is_valid` - Check geometry validity\n- `make_valid` - Fix invalid geometry\n- `simplify` - Simplify geometry\n- `snap_geometry` - Snap to reference geometry\n- `nearest_point_on_geometry` - Find nearest point\n- `normalize_geometry` - Normalize orientation\n- `geometry_to_geojson` - Convert to GeoJSON\n- `geojson_to_geometry` - Convert from GeoJSON\n\n### \ud83d\udd37 PyProj Functions (13 total)\n\n**Coordinate Transformations:**\n\n- `transform_coordinates` - Transform point coordinates\n- `project_geometry` - Project geometry between CRS\n\n**CRS Information:**\n\n- `get_crs_info` - Get detailed CRS information\n- `get_available_crs` - List available CRS systems\n- `get_utm_zone` - Get UTM zone for coordinates\n- `get_utm_crs` - Get UTM CRS for coordinates\n- `get_geocentric_crs` - Get geocentric CRS\n\n**Geodetic Calculations:**\n\n- `get_geod_info` - Get ellipsoid information\n- `calculate_geodetic_distance` - Calculate distance on ellipsoid\n- `calculate_geodetic_point` - Calculate point at distance/azimuth\n- `calculate_geodetic_area` - Calculate area on ellipsoid\n\n### \ud83d\udd37 GeoPandas Functions (13 total)\n\n**I/O Operations:**\n\n- `read_file_gpd` - Read geospatial file with preview\n- `write_file_gpd` - Export GeoDataFrame to file\n\n**Join & Merge Operations:**\n\n- `append_gpd` - Concatenate GeoDataFrames vertically\n- `merge_gpd` - Database-style attribute joins\n- `overlay_gpd` - Spatial overlay operations\n- `dissolve_gpd` - Dissolve by attribute\n- `explode_gpd` - Split multi-part geometries\n\n**Spatial Operations:**\n\n- `clip_vector` - Clip geometries\n- `sjoin_gpd` - Spatial joins\n- `sjoin_nearest_gpd` - Nearest neighbor spatial joins\n- `point_in_polygon` - Point-in-polygon tests\n\n### \ud83d\udd37 Rasterio Functions (20 total)\n\n**Basic Raster Operations:**\n\n- `metadata_raster` - Get raster metadata\n- `get_raster_crs` - Get raster CRS\n- `extract_band` - Extract single band\n- `raster_band_statistics` - Calculate band statistics\n- `raster_histogram` - Compute pixel histograms\n\n**Raster Processing:**\n\n- `clip_raster_with_shapefile` - Clip raster with polygons\n- `resample_raster` - Resample by scale factor\n- `reproject_raster` - Reproject to new CRS\n- `tile_raster` - Split into tiles\n\n**Raster Analysis:**\n\n- `compute_ndvi` - Calculate vegetation index\n- `raster_algebra` - Mathematical operations on bands\n- `concat_bands` - Combine single-band rasters\n- `weighted_band_sum` - Weighted band combination\n\n**Advanced Analysis:**\n\n- `zonal_statistics` - Statistics within polygons\n- `reclassify_raster` - Reclassify pixel values\n- `focal_statistics` - Moving window statistics\n- `hillshade` - Generate hillshade from DEM\n- `write_raster` - Write array to raster file\n\n### \ud83d\udd37 PySAL Functions (15 total)\n\n**Spatial Autocorrelation:**\n\n- `morans_i` - Global Moran's I statistic\n- `gearys_c` - Global Geary's C statistic\n- `gamma_statistic` - Gamma index\n- `getis_ord_g` - Global Getis-Ord G statistic\n\n**Local Statistics:**\n\n- `moran_local` - Local Moran's I\n- `getis_ord_g_local` - Local Getis-Ord G\\*\n- `join_counts_local` - Local join counts\n\n**Global Statistics:**\n\n- `join_counts` - Binary join counts test\n- `adbscan` - Adaptive density-based clustering\n\n**Spatial Weights:**\n\n- `weights_from_shapefile` - Create weights from shapefile\n- `distance_band_weights` - Distance-based weights\n- `knn_weights` - K-nearest neighbors weights\n- `build_transform_and_save_weights` - Build, transform, and save weights\n- `ols_with_spatial_diagnostics_safe` - OLS regression with spatial diagnostics\n- `build_and_transform_weights` - Build and transform weights\n\n### \ud83d\udd37 Administrative Boundaries Functions (1 total)\n\n**Boundary Download:**\n\n- `download_boundaries` - Download GADM administrative boundaries and save as GeoJSON\n\n### \ud83d\udd37 Climate Data Functions (1 total)\n\n**Climate Data Download:**\n\n- `download_climate_data` - Download climate data (ERA5 or other CDS datasets)\n\n### \ud83d\udd37 Ecology Data Functions (2 total)\n\n**Ecology Data Download and Info:**\n\n- `get_species_info` \u2013 Retrieve taxonomic information for a given species name\n- `download_species_occurrences` \u2013 Download occurrence records for a given species and save as JSON\n\n### \ud83d\udd37 Movement Data Functions (2 total)\n\n**Movement Data Download and Routing (via [OSMnx](https://osmnx.readthedocs.io/en/stable/)):**\n\n- `download_street_network` \u2013 Download a street network for a given place and save as GraphML\n- `calculate_shortest_path` \u2013 Calculate the shortest path between two points using a saved street network\n\n### \ud83d\udd37 Land Cover Data Functions (2 total)\n\n**Land Cover from Planetary Computer:**\n\n- `download_worldcover` \u2013 Download ESA WorldCover for AOI/year; optional crop and reprojection\n- `compute_s2_ndvi` \u2013 Compute NDVI from Sentinel-2 L2A; crop and reprojection supported\n\n### \ud83d\udd37 Satellite Imagery Functions (1 total)\n\n**STAC-based Satellite Download:**\n\n- `download_satellite_imagery` \u2013 Download and stack bands from STAC items (e.g., Sentinel-2, Landsat), with optional crop and reprojection\n\n**Total Functions Available: 89**\n\n## \ud83d\udee0 Client Development\n\nExample usage of the tools:\n\n### Buffer Operation\n\n```python\nTool: buffer\nParameters: {\n \"geometry\": \"POINT(0 0)\",\n \"distance\": 10,\n \"resolution\": 16,\n \"join_style\": 1,\n \"mitre_limit\": 5.0,\n \"single_sided\": false\n}\n```\n\n### Coordinate Transformation\n\n```python\nTool: transform_coordinates\nParameters: {\n \"coordinates\": [0, 0],\n \"source_crs\": \"EPSG:4326\",\n \"target_crs\": \"EPSG:3857\"\n}\n```\n\n### Geodetic Distance\n\n```python\nTool: calculate_geodetic_distance\nParameters: {\n \"point1\": [0, 0],\n \"point2\": [10, 10],\n \"ellps\": \"WGS84\"\n}\n```\n\n## \ud83d\udd2e Planned Features\n\n- Implement advanced spatial indexing\n- Implement network analysis capabilities\n- Add support for 3D geometries\n- Implement performance optimizations\n- Add support for more GIS libraries\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Here's how you can help:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\nPlease ensure your PR description clearly describes the problem and solution. Include the relevant issue number if applicable.\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## \ud83d\udd17 Related Projects\n\n| Project Name | Category | Description |\n| --------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| [Model Context Protocol](https://github.com/anthropics/model-context-protocol) | MCP Related | The core MCP implementation |\n| [Shapely](https://github.com/shapely/shapely) | Geospatial Analysis | Python package for manipulation and analysis of geometric objects |\n| [PyProj](https://github.com/pyproj4/pyproj) | Geospatial Analysis | Python interface to PROJ library |\n| [GeoPandas](https://github.com/geopandas/geopandas) | Geospatial Analysis | Python package for working with geospatial data |\n| [Rasterio](https://github.com/rasterio/rasterio) | Geospatial Analysis | Python package for reading and writing geospatial raster data |\n| [PySAL](https://github.com/pysal/pysal) | Geospatial Analysis | Python spatial analysis library for geospatial data science |\n| [cdsapi](https://github.com/ecmwf/cdsapi) | Geospatial Data Collecting | Python API to access the Copernicus Climate Data Store (CDS) |\n| [pygadm](https://github.com/12rambau/pygadm) | Geospatial Data Collecting | Easy access to administrative boundary defined by GADM from Python scripts |\n| [pygbif](https://github.com/gbif/pygbif) | Geospatial Data Collecting | Python client for the GBIF API (ecology and biodiversity data) |\n| [OSMnx](https://osmnx.readthedocs.io/en/stable/) | Geospatial Data Collecting | Python package for downloading, modeling, and analyzing street networks and urban features from OpenStreetMap |\n| [pystac-client](https://github.com/stac-utils/pystac-client) | Geospatial Data Collecting | Python client for STAC catalogs; search and access spatiotemporal assets |\n| [Planetary Computer SDK for Python](https://github.com/microsoft/planetary-computer-sdk-for-python) | Geospatial Data Collecting | Python SDK for Microsoft Planetary Computer; auth and helpers for STAC/COGs |\n\n## \ud83d\udcde Support\n\nFor support, please open an issue in the GitHub repository.\n\n## \ud83d\udcac Community\n\nJoin our Discord community for discussions, updates, and support:\n\n[](https://discord.gg/dzkXZsZK)\n\n## \ud83d\udc65 Contributors\n\n<a href=\"https://github.com/mahdin75/gis-mcp/graphs/contributors\">\n <img src=\"https://contrib.rocks/image?repo=mahdin75/gis-mcp\" />\n</a>\n\nMade with [contrib.rocks](https://contrib.rocks).\n\n<br/>\n\n## \ud83c\udfc6 Badges\n\n<div align=\"center\">\n\n[](https://archestra.ai/mcp-catalog/mahdin75__gis-mcp)\n<br/></br>\n\n <a href=\"https://glama.ai/mcp/servers/@mahdin75/gis-mcp\">\n <img width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/@mahdin75/gis-mcp/badge\" alt=\"GIS Server MCP server\" />\n </a>\n <br/><br/><br/>\n \n <a href=\"https://mcp.so/server/gis-mcp-server/mahdin75\">\n <img src=\"https://mcp.so/logo.png\" alt=\"MCP.so Badge\" width=\"150\"/>\n </a>\n</div>\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 Mahdi Nazari Ashani\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "A Model Context Protocol (MCP) server implementation for GIS operations using GIS libraries",
"version": "0.8.0",
"project_urls": null,
"split_keywords": [
"agentic ai",
" cdsapi",
" geopandas",
" geospatial",
" gis",
" llm",
" mcp",
" ogc",
" pygadm",
" pygbif",
" pyproj",
" pysal",
" rasterio",
" shapely"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d97396a780cd779c35e2f1f9da0679c0851de795994e694b73fb3d199be2a53b",
"md5": "cd0f161d0f83fbd068f743f49a2176ea",
"sha256": "3cf696b239f0d83f0955202b06c23d90d22b375b022ef419c6113a0bd0e3d5cb"
},
"downloads": -1,
"filename": "gis_mcp-0.8.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cd0f161d0f83fbd068f743f49a2176ea",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 45533,
"upload_time": "2025-09-03T13:36:21",
"upload_time_iso_8601": "2025-09-03T13:36:21.144182Z",
"url": "https://files.pythonhosted.org/packages/d9/73/96a780cd779c35e2f1f9da0679c0851de795994e694b73fb3d199be2a53b/gis_mcp-0.8.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5d5701ee83a4f003931b58f6c81ab46dff1ed318a7a09f0d376bd23f971d925a",
"md5": "f2ee0a37f3049b2465b775e55fd2d90f",
"sha256": "9c32be0586cd53beba35da4875d94a85a9742cd26ba5a0024a81d5dfe9409076"
},
"downloads": -1,
"filename": "gis_mcp-0.8.0.tar.gz",
"has_sig": false,
"md5_digest": "f2ee0a37f3049b2465b775e55fd2d90f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 8737981,
"upload_time": "2025-09-03T13:36:32",
"upload_time_iso_8601": "2025-09-03T13:36:32.654219Z",
"url": "https://files.pythonhosted.org/packages/5d/57/01ee83a4f003931b58f6c81ab46dff1ed318a7a09f0d376bd23f971d925a/gis_mcp-0.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 13:36:32",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "gis-mcp"
}