gis-mcp


Namegis-mcp JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA Model Context Protocol (MCP) server implementation for GIS operations using GIS libraries
upload_time2025-08-08 22:34:16
maintainerNone
docs_urlNone
authorMahdi Nazari Ashani, Shahab Esfandiar, Homa Ganjali, Yasin Mohammadi, GIS MCP Server Contributors
requires_python>=3.10
licenseMIT 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 geopandas geospatial gis llm mcp ogc pyproj 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/gis-mcp.png" alt="GIS MCP Server Logo" width="300"/>
</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.

> Alpha
>
> Version 0.4.0 (Alpha) 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)
  - [pip Installation](#-pip-installation)
  - [Development Installation](#-development-installation)
- [Available Tools](#-available-tools)
  - [Shapely Operations](#shapely-operations)
    - [Basic Operations](#basic-operations)
    - [Geometric Properties](#geometric-properties)
    - [Transformations](#transformations)
    - [Advanced Operations](#advanced-operations)
    - [Measurements](#measurements)
    - [Validation and Simplification](#validation-and-simplification)
  - [PyProj Operations](#pyproj-operations)
    - [Coordinate Transformations](#coordinate-transformations)
    - [CRS Information](#crs-information)
    - [Geodetic Calculations](#geodetic-calculations)
  - [Geopandas Operations](#geopandas-operations)
    - [I/O Operations](#i/o-operations)
    - [Join Operations](#join-operations)
  - [Rasterio Operations](#rasterio-operations)
    - [Basic Raster Operations](#basic-raster-operations)
    - [Raster Processing](#raster-processing)
    - [Raster Analysis](#raster-analysis)
  - [Pysal Operations](#pysal-operations)
- [Client Development](#-client-development)
- [Planned Features](#-planned-features)
- [Contributing](#-contributing)
- [License](#-license)
- [Related Projects](#-related-projects)
- [Support](#-support)
- [Badges](#-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](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 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                   |

### Pysal Operations

#### ESDA

Currently, the following functions from esda package are supported.
| Tool | Description |
| ----------------- | ----------- |
| `getis_ord_g` | Computes the Global Getis-Ord G statistic to detect spatial clustering of high or low values. |
| `morans_i` | Computes the Global Moranโ€™s I statistic to measure overall spatial autocorrelation. |
| `gearys_c` | Calculates Global Gearyโ€™s C for spatial autocorrelation and local dissimilarity. |
| `gamma_statistic` | Computes the Gamma index for spatial autocorrelation patterns. |
| `moran_local` | Calculates Local Moranโ€™s I for identifying local spatial clusters and outliers. |
| `getis_ord_g_local` | Computes Local Getis-Ord G\* for detecting local hotspots and coldspots. |
| `join_counts` | Performs Binary Join Counts test for spatial autocorrelation in categorical (binary) data. |
| `join_counts_local` | Calculates Local Join Counts to detect clusters in binary spatial data. |
| `adbscan` | Runs Adaptive Density-Based Spatial Clustering (A-DBSCAN) for spatial clustering based on coordinates. |

## ๐Ÿ› ๏ธ 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

- 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:

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

- [Model Context Protocol](https://github.com/anthropics/model-context-protocol) - The core MCP implementation
- [Shapely](https://github.com/shapely/shapely) - Python package for manipulation and analysis of geometric objects
- [PyProj](https://github.com/pyproj4/pyproj) - Python interface to PROJ library
- [GeoPandas](https://github.com/geopandas/geopandas) - Python package for working with geospatial data
- [Rasterio](https://github.com/rasterio/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:

[![Join our Discord](https://img.shields.io/badge/Discord-Join%20our%20community-7289DA?style=for-the-badge&logo=discord&logoColor=white)](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">
  <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, geopandas, geospatial, gis, llm, mcp, ogc, pyproj, rasterio, shapely",
    "author": "Mahdi Nazari Ashani, Shahab Esfandiar, Homa Ganjali, Yasin Mohammadi, GIS MCP Server Contributors",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/9e/85/cc228f053d7c96f4afa00c11e83999ec8b48ba0851a3a4a88a70b065f6b5/gis_mcp-0.3.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/gis-mcp.png\" alt=\"GIS MCP Server Logo\" width=\"300\"/>\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> Alpha\n>\n> Version 0.4.0 (Alpha) 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  - [pip Installation](#-pip-installation)\n  - [Development Installation](#-development-installation)\n- [Available Tools](#-available-tools)\n  - [Shapely Operations](#shapely-operations)\n    - [Basic Operations](#basic-operations)\n    - [Geometric Properties](#geometric-properties)\n    - [Transformations](#transformations)\n    - [Advanced Operations](#advanced-operations)\n    - [Measurements](#measurements)\n    - [Validation and Simplification](#validation-and-simplification)\n  - [PyProj Operations](#pyproj-operations)\n    - [Coordinate Transformations](#coordinate-transformations)\n    - [CRS Information](#crs-information)\n    - [Geodetic Calculations](#geodetic-calculations)\n  - [Geopandas Operations](#geopandas-operations)\n    - [I/O Operations](#i/o-operations)\n    - [Join Operations](#join-operations)\n  - [Rasterio Operations](#rasterio-operations)\n    - [Basic Raster Operations](#basic-raster-operations)\n    - [Raster Processing](#raster-processing)\n    - [Raster Analysis](#raster-analysis)\n  - [Pysal Operations](#pysal-operations)\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\n- \ud83d\udd0d Comprehensive geometric operations (intersection, union, buffer, etc.)\n- \ud83c\udf10 Advanced coordinate transformations and projections\n- \ud83d\udccf Precise distance and area calculations\n- \ud83d\uddfa\ufe0f Spatial analysis and validation\n- \ud83d\udee0\ufe0f Easy integration with MCP-compatible clients\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\ufe0f Installation\n\nChoose the installation method that best suits your needs:\n\n### 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\ufe0f 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\udee0\ufe0f Available Tools\n\n### Shapely Operations\n\n#### Basic Operations\n\n| Tool                   | Description                                                    |\n| ---------------------- | -------------------------------------------------------------- |\n| `buffer`               | Create a buffer around geometries with customizable parameters |\n| `intersection`         | Find intersection of two geometries                            |\n| `union`                | Combine two geometries                                         |\n| `difference`           | Find difference between geometries                             |\n| `symmetric_difference` | Find symmetric difference between geometries                   |\n\n#### Geometric Properties\n\n| Tool                        | Description                                 |\n| --------------------------- | ------------------------------------------- |\n| `convex_hull`               | Calculate convex hull of a geometry         |\n| `envelope`                  | Get bounding box of a geometry              |\n| `minimum_rotated_rectangle` | Get minimum rotated rectangle of a geometry |\n| `get_centroid`              | Get the centroid of a geometry              |\n| `get_bounds`                | Get the bounds of a geometry                |\n| `get_coordinates`           | Get the coordinates of a geometry           |\n| `get_geometry_type`         | Get the type of a geometry                  |\n\n#### Transformations\n\n| Tool                 | Description                                       |\n| -------------------- | ------------------------------------------------- |\n| `rotate_geometry`    | Rotate a geometry with specified angle and origin |\n| `scale_geometry`     | Scale a geometry with x and y factors             |\n| `translate_geometry` | Translate a geometry with x, y, and z offsets     |\n\n#### Advanced Operations\n\n| Tool                     | Description                           |\n| ------------------------ | ------------------------------------- |\n| `triangulate_geometry`   | Create a triangulation of a geometry  |\n| `voronoi`                | Create a Voronoi diagram from points  |\n| `unary_union_geometries` | Create a union of multiple geometries |\n\n#### Measurements\n\n| Tool         | Description                  |\n| ------------ | ---------------------------- |\n| `get_length` | Get the length of a geometry |\n| `get_area`   | Get the area of a geometry   |\n\n#### Validation and Simplification\n\n| Tool         | Description                                  |\n| ------------ | -------------------------------------------- |\n| `is_valid`   | Check if a geometry is valid                 |\n| `make_valid` | Make a geometry valid                        |\n| `simplify`   | Simplify a geometry with specified tolerance |\n\n### PyProj Operations\n\n#### Coordinate Transformations\n\n| Tool                    | Description                       |\n| ----------------------- | --------------------------------- |\n| `transform_coordinates` | Transform coordinates between CRS |\n| `project_geometry`      | Project a geometry between CRS    |\n\n#### CRS Information\n\n| Tool                 | Description                              |\n| -------------------- | ---------------------------------------- |\n| `get_crs_info`       | Get detailed information about a CRS     |\n| `get_available_crs`  | Get list of all available CRS            |\n| `get_utm_zone`       | Get UTM zone for given coordinates       |\n| `get_utm_crs`        | Get UTM CRS for given coordinates        |\n| `get_geocentric_crs` | Get geocentric CRS for given coordinates |\n\n#### Geodetic Calculations\n\n| Tool                          | Description                                             |\n| ----------------------------- | ------------------------------------------------------- |\n| `get_geod_info`               | Get information about a geodetic calculation            |\n| `calculate_geodetic_distance` | Calculate geodetic distance between points              |\n| `calculate_geodetic_point`    | Calculate point at given distance and azimuth           |\n| `calculate_geodetic_area`     | Calculate area of a polygon using geodetic calculations |\n\n### GeoPandas Operations\n\n#### I/O Operations\n\n| Tool            | Description                                              |\n| --------------- | -------------------------------------------------------- |\n| `read_file_gpd` | Read a geospatial file and return stats and data preview |\n| `to_file_gpd`   | Write a GeoDataFrame to a file                           |\n\n#### Join Operations\n\n| Tool         | Description                                        |\n| ------------ | -------------------------------------------------- |\n| `append_gpd` | Concatenate two GeoDataFrames vertically           |\n| `merge_gpd`  | Perform database-style joins between GeoDataFrames |\n\n### Rasterio Operations\n\n#### Basic Raster Operations\n\n| Tool                     | Description                                              |\n| ------------------------ | -------------------------------------------------------- |\n| `metadata_raster`        | Get metadata from a raster dataset                       |\n| `get_raster_crs`         | Retrieve the CRS of a raster dataset                     |\n| `extract_band`           | Extract a specific band from a multi-band raster         |\n| `raster_band_statistics` | Calculate statistics (min, max, mean, std) for each band |\n| `raster_histogram`       | Compute histogram of pixel values for each band          |\n\n#### Raster Processing\n\n| Tool                         | Description                                   |\n| ---------------------------- | --------------------------------------------- |\n| `clip_raster_with_shapefile` | Clip a raster using polygons from a shapefile |\n| `resample_raster`            | Resample a raster by a scale factor           |\n| `reproject_raster`           | Reproject a raster to a new CRS               |\n| `tile_raster`                | Split a raster into square tiles              |\n\n#### Raster Analysis\n\n| Tool                | Description                                                     |\n| ------------------- | --------------------------------------------------------------- |\n| `compute_ndvi`      | Calculate Normalized Difference Vegetation Index                |\n| `raster_algebra`    | Perform algebraic operations on raster bands                    |\n| `concat_bands`      | Combine multiple single-band rasters into one multi-band raster |\n| `weighted_band_sum` | Compute weighted sum of all bands in a raster                   |\n\n### Pysal Operations\n\n#### ESDA\n\nCurrently, the following functions from esda package are supported.\n| Tool | Description |\n| ----------------- | ----------- |\n| `getis_ord_g` | Computes the Global Getis-Ord G statistic to detect spatial clustering of high or low values. |\n| `morans_i` | Computes the Global Moran\u2019s I statistic to measure overall spatial autocorrelation. |\n| `gearys_c` | Calculates Global Geary\u2019s C for spatial autocorrelation and local dissimilarity. |\n| `gamma_statistic` | Computes the Gamma index for spatial autocorrelation patterns. |\n| `moran_local` | Calculates Local Moran\u2019s I for identifying local spatial clusters and outliers. |\n| `getis_ord_g_local` | Computes Local Getis-Ord G\\* for detecting local hotspots and coldspots. |\n| `join_counts` | Performs Binary Join Counts test for spatial autocorrelation in categorical (binary) data. |\n| `join_counts_local` | Calculates Local Join Counts to detect clusters in binary spatial data. |\n| `adbscan` | Runs Adaptive Density-Based Spatial Clustering (A-DBSCAN) for spatial clustering based on coordinates. |\n\n## \ud83d\udee0\ufe0f 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- Add support for more GIS libraries - GDAL/OGR\n- Implement advanced spatial indexing\n- Add support for raster operations\n- Implement network analysis capabilities\n- Add support for 3D geometries\n- Implement performance optimizations\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- [Model Context Protocol](https://github.com/anthropics/model-context-protocol) - The core MCP implementation\n- [Shapely](https://github.com/shapely/shapely) - Python package for manipulation and analysis of geometric objects\n- [PyProj](https://github.com/pyproj4/pyproj) - Python interface to PROJ library\n- [GeoPandas](https://github.com/geopandas/geopandas) - Python package for working with geospatial data\n- [Rasterio](https://github.com/rasterio/rasterio) - Python package for reading and writing geospatial raster data\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[![Join our Discord](https://img.shields.io/badge/Discord-Join%20our%20community-7289DA?style=for-the-badge&logo=discord&logoColor=white)](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  <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  <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.3.0",
    "project_urls": null,
    "split_keywords": [
        "agentic ai",
        " geopandas",
        " geospatial",
        " gis",
        " llm",
        " mcp",
        " ogc",
        " pyproj",
        " rasterio",
        " shapely"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "36f4d96eb691677bace2ec2c34aa15d8c9edb7e0f9376ce1ab7c87f3da855bf1",
                "md5": "dbc4c7b32338661da04bb044300d92f6",
                "sha256": "807e731added0ed5034b81c2a89d86da85fdbce14d9031cb96cd879922021beb"
            },
            "downloads": -1,
            "filename": "gis_mcp-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dbc4c7b32338661da04bb044300d92f6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 21515,
            "upload_time": "2025-08-08T22:34:11",
            "upload_time_iso_8601": "2025-08-08T22:34:11.941987Z",
            "url": "https://files.pythonhosted.org/packages/36/f4/d96eb691677bace2ec2c34aa15d8c9edb7e0f9376ce1ab7c87f3da855bf1/gis_mcp-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9e85cc228f053d7c96f4afa00c11e83999ec8b48ba0851a3a4a88a70b065f6b5",
                "md5": "11cc7756be55f73db4f51175d77a145c",
                "sha256": "2691945c6b2d7ca051e76254c932a6fd22469842f32776c754b7a2dbbcbdbf59"
            },
            "downloads": -1,
            "filename": "gis_mcp-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "11cc7756be55f73db4f51175d77a145c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 5890771,
            "upload_time": "2025-08-08T22:34:16",
            "upload_time_iso_8601": "2025-08-08T22:34:16.619229Z",
            "url": "https://files.pythonhosted.org/packages/9e/85/cc228f053d7c96f4afa00c11e83999ec8b48ba0851a3a4a88a70b065f6b5/gis_mcp-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-08 22:34:16",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "gis-mcp"
}
        
Elapsed time: 2.18507s