8000 GitHub - mahdin75/gis-mcp: 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.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

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.

License

Notifications You must be signed in to change notification settings

mahdin75/gis-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

50 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

GIS MCP Server

โœจ Want to perform accurate geospatial analysis in your chatbot? โœจ

Install GIS-MCP and transform your AI's spatial capabilities!


GIS MCP Server Logo

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.3.0 (Alpha) is under active development. We welcome contributions and developers to join us in building this project.

๐ŸŽฅ Demo

GIS MCP Server Demo

Rasterio Demo

๐Ÿ“‹ Table of Contents

๐Ÿš€ 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:

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:
pip install uv
  1. Create the Virtual Environment (Python 3.10+):
uv venv --python=3.10
  1. Install the package:
uv pip install gis-mcp
  1. Start the server:
gis-mcp

pip Configuration

To use the pip installation with Claude or Cursor, add the following configuration:

Claude Desktop:

Windows:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
      "args": []
    }
  }
}

Linux/Mac:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "/home/YourUsername/.venv/bin/gis-mcp",
      "args": []
    }
  }
}

Cursor IDE (create .cursor/mcp.json):

Windows:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
      "args": []
    }
  }
}

Linux/Mac:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "/home/YourUsername/.venv/bin/gis-mcp",
      "args": []
    }
  }
}

After configuration:

  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:
pip install uv
  1. Create the Virtual Environment:
uv venv --python=3.10
  1. Install the package in development mode:
uv pip install -e .
  1. Start the server:
python -m gis_mcp

Development Configuration

To use the development installation with Claude or Cursor, add the following configuration:

Claude Desktop:

Windows:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

Linux/Mac:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "/path/to/gis-mcp/.venv/bin/python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

Cursor IDE (create .cursor/mcp.json):

Windows:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

Linux/Mac:

{
  "mcpServers": {
    "gis-mcp": {
      "command": "/path/to/gis-mcp/.venv/bin/python",
      "args": ["-m", "gis_mcp"]
    }
  }
}

After configuration:

  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

๐Ÿ› ๏ธ Client Development

Example usage of the tools:

Buffer Operation

Tool: buffer
Parameters: {
    "geometry": "POINT(0 0)",
    "distance": 10,
    "resolution": 16,
    "join_style": 1,
    "mitre_limit": 5.0,
    "single_sided": false
}

Coordinate Transformation

Tool: transform_coordinates
Parameters: {
    "coordinates": [0, 0],
    "source_crs": "EPSG:4326",
    "target_crs": "EPSG:3857"
}

Geodetic Distance

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 - The core MCP implementation
  • Shapely - Python package for manipulation and analysis of geometric objects
  • PyProj - Python interface to PROJ library
  • GeoPandas - Python package for working with geospatial data
  • 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

๐Ÿ‘ฅ Contributors

Made with contrib.rocks.


๐Ÿ† Badges

About

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.

Resources

License

Stars

Watchers

Forks

0