
Security News
Re-Enabled GitHub Actions Expose Thousands of Repositories to Mini Shai-Hulud
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.
geoedge-mcp
Advanced tools
A Model Context Protocol (MCP) server implementation for GIS operations using GIS libraries
Install GeoEDGE-MCP and transform your AI's spatial capabilities!
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.
๐ Product: mcp.geoedge.com.au ยท ๐ Documentation: mcp.geoedge.com.au/geo-mcp ยท โ๏ธ Support: support@geoedge.com.au
GeoEDGE-MCP is commercial, subscription-licensed software. GIS tools require a valid licence key โ see mcp.geoedge.com.au. Use is governed by the Terms of Service and EULA.
Attribution. GeoEDGE-MCP is derived from, and still incorporates substantial portions of, the open-source
gis-mcpproject (MIT, ยฉ 2025 Mahdi Nazari Ashani and contributors). Those portions remain licensed under the MIT License; seeTHIRD_PARTY_LICENCES.mdand theLICENSEfile. With thanks to thegis-mcpproject and its contributors.
GeoEDGE-MCP empowers AI assistants with advanced geospatial intelligence. Key features include:
๐ Tip: With GeoEDGE-MCP, your AI can now โthink spatially,โ unlocking new capabilities for environmental analysis, mapping, and location intelligence.
Ask Claude to "open the map editor" and GeoEDGE opens an interactive map in your browser where you can see your data, draw and edit features, edit attributes, and filter by attribute or location. Anything you save comes back as a named layer, so you can then just say the name in chat โ "buffer survey_sites by 100 m" โ with no file paths.
Free, no licence required. Viewing and editing your own data costs nothing; the licence covers the analysis tools.
To put an editable map in your browser, GeoEDGE runs a small web server on your own computer. That is a real thing to be aware of, so here is exactly what it does:
| When does it run? | Only after you ask. It starts the first time you ask to see something (visualize_data) and stops when you close the editor, after 30 minutes idle, or when Claude Desktop exits. It never starts on its own. |
| Who can reach it? | Only your computer. It binds to 127.0.0.1 (localhost) on a random port โ never to a network address, and there is no setting to change that. Nothing on your network or the internet can connect to it. |
| Is it protected? | Yes. Every session mints a new random session token, and every request must present it. There is no "no token" mode. Requests are also pinned to this machine's own origin, which blocks the DNS-rebinding trick a malicious web page would otherwise use. |
| Does any data leave? | No data leaves your machine. Your spatial data is read from and written to your own storage folder and goes nowhere else. The page cannot send it anywhere โ its content-security policy forbids it. |
| What about background maps? | The editor offers OpenStreetMap, aerial and satellite imagery, and you can add your own XYZ or WMS service. Your browser fetches map tiles from whichever one is selected, so that provider sees the map area you are looking at โ nothing else is sent, and no tiles are fetched for a background you have not selected. |
| How does it read files? | By path. There is no upload endpoint. You tell Claude which file to import and it is read from disk, with the same path restrictions the rest of GeoEDGE uses. |
| Hosted deployments | The editor is disabled entirely when GeoEDGE runs as a hosted HTTP service. It only exists on your local desktop install. |
If youโre building agents via vibe coding, use these context files in your editor so the LLM understands the GeoEDGE-MCP server:
llms.txt: summarized context for smaller windows.llms-full.txt: full context when your model has a larger window.Choose the installation method that best suits your needs:
GeoEDGE-MCP can be run using Docker, which provides an isolated environment with all dependencies pre-installed.
Important: Both Dockerfile and Dockerfile.local have HTTP transport mode enabled by default. The server runs on port 9010 and is accessible at http://localhost:9010/mcp.
The main Dockerfile installs the package from PyPI:
docker build -t geoedge-mcp .
docker run -p 9010:9010 geoedge-mcp
The Dockerfile.local installs the package from local source files (useful for development or custom builds):
docker build -f Dockerfile.local -t geoedge-mcp:local .
docker run -p 9010:9010 geoedge-mcp:local
The server will be available at http://localhost:9010/mcp in HTTP transport mode.
For more details on Docker configuration and environment variables, see the Docker installation guide.
The pip installation is recommended for most users:
pip install uv
uv venv --python=3.10
On Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
On Linux:
source .venv/bin/activate
uv pip install geoedge-mcp
To install with visualization capabilities (Folium and PyDeck for interactive maps):
uv pip install geoedge-mcp[visualize]
This will install additional dependencies:
folium>=0.15.0 - For creating interactive web mapspydeck>=0.9.0 - For advanced 3D visualizationsgeoedge-mcp
By default, the server runs in STDIO transport mode, which is ideal for local development and integration with Claude Desktop or Cursor IDE.
You can also run the server in HTTP transport mode for network deployments:
export GEOEDGE_MCP_TRANSPORT=http
export GEOEDGE_MCP_PORT=8080
geoedge-mcp
When running in HTTP or SSE transport mode, the following endpoints are available:
http://host:port/mcp (HTTP) or http://host:port/sse (SSE)POST /storage/upload - Upload files to server storageGET /storage/download?path=<file> - Download files from server storageGET /storage/list?path=<dir> - List files in server storageFor more details on transport modes and complete endpoint documentation, see:
Spatial-analysis tools that write a result file (vector ops, raster ops,
MCDA, topology checks) default to a zipped GeoPackage (vector) or
zipped GeoTIFF (raster) whenever the caller omits output_path/
destination or gives one without a recognized extension. The zip bundles
the data file plus a small metadata.json/metadata.txt (CRS, feature/band
count, source tool, timestamp) โ a single portable artifact instead of
scattered Shapefile sidecars.
Passing an explicit, recognized extension (.shp, .geojson, .gpkg,
.tif, ...) is always honored as-is with no zip wrapping. Set
GIS_MCP_DISABLE_AUTO_ZIP=1 to disable the smart default server-wide and
fall back to legacy raw-file behavior.
To use the pip installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
{
"mcpServers": {
"geoedge-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\geoedge-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"geoedge-mcp": {
"command": "/home/YourUsername/.venv/bin/geoedge-mcp",
"args": []
}
}
}
Cursor IDE (create .cursor/mcp.json):
Windows:
{
"mcpServers": {
"geoedge-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\geoedge-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"geoedge-mcp": {
"command": "/home/YourUsername/.venv/bin/geoedge-mcp",
"args": []
}
}
}
After configuration:
YourUsername with your actual username/path/to/geoedge-mcp with the actual path to your projectFor contributors and developers:
pip install uv
uv venv --python=3.10
uv pip install -e .
python -m geoedge_mcp
To use the development installation with Claude or Cursor, add the following configuration:
Claude Desktop:
Windows:
{
"mcpServers": {
"geoedge-mcp": {
"command": "C:\\path\\to\\geoedge-mcp\\.venv\\Scripts\\python",
"args": ["-m", "geoedge_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"geoedge-mcp": {
"command": "/path/to/geoedge-mcp/.venv/bin/python",
"args": ["-m", "geoedge_mcp"]
}
}
}
Cursor IDE (create .cursor/mcp.json):
Windows:
{
"mcpServers": {
"geoedge-mcp": {
"command": "C:\\path\\to\\geoedge-mcp\\.venv\\Scripts\\python",
"args": ["-m", "geoedge_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"geoedge-mcp": {
"command": "/path/to/geoedge-mcp/.venv/bin/python",
"args": ["-m", "geoedge_mcp"]
}
}
}
After configuration:
YourUsername with your actual username/path/to/geoedge-mcp with the actual path to your projectReady to create your own AI agent that can perform geospatial operations? Our comprehensive tutorial will guide you from zero to hero!
๐ See the HTTP transport and Usage sections above to run GeoEDGE-MCP in HTTP mode and point a LangChain or OpenAI agent at it.
The tutorial is beginner-friendly and requires no prior AI or GIS experience. You'll build a working agent that can:
Perfect for: Developers, data scientists, GIS professionals, and anyone interested in building AI-powered geospatial applications.
This section provides a comprehensive list of all available functions organized by library.
Basic Geometric Operations:
buffer - Create buffer around geometryintersection - Find intersection of two geometriesunion - Combine two geometriesdifference - Find difference between geometriessymmetric_difference - Find symmetric differenceGeometric Properties:
convex_hull - Calculate convex hullenvelope - Get bounding boxminimum_rotated_rectangle - Get minimum rotated rectangleget_centroid - Get centroid pointget_bounds - Get geometry boundsget_coordinates - Extract coordinate arrayget_geometry_type - Get geometry type nameTransformations:
rotate_geometry - Rotate geometry by anglescale_geometry - Scale geometry by factorstranslate_geometry - Move geometry by offsetAdvanced Operations:
triangulate_geometry - Create triangulationvoronoi - Create Voronoi diagramunary_union_geometries - Union multiple geometriesMeasurements:
get_length - Calculate geometry lengthget_area - Calculate geometry areaValidation & Utilities:
is_valid - Check geometry validitymake_valid - Fix invalid geometrysimplify - Simplify geometrysnap_geometry - Snap to reference geometrynearest_point_on_geometry - Find nearest pointnormalize_geometry - Normalize orientationgeometry_to_geojson - Convert to GeoJSONgeojson_to_geometry - Convert from GeoJSONCoordinate Transformations:
transform_coordinates - Transform point coordinatesproject_geometry - Project geometry between CRSCRS Information:
get_crs_info - Get detailed CRS informationget_available_crs - List available CRS systemsget_utm_zone - Get UTM zone for coordinatesget_utm_crs - Get UTM CRS for coordinatesget_geocentric_crs - Get geocentric CRSGeodetic Calculations:
get_geod_info - Get ellipsoid informationcalculate_geodetic_distance - Calculate distance on ellipsoidcalculate_geodetic_point - Calculate point at distance/azimuthcalculate_geodetic_area - Calculate area on ellipsoidI/O Operations:
read_file_gpd - Read geospatial file with previewwrite_file_gpd - Export GeoDataFrame to fileJoin & Merge Operations:
append_gpd - Concatenate GeoDataFrames verticallymerge_gpd - Database-style attribute joinsoverlay_gpd - Spatial overlay operationsdissolve_gpd - Dissolve by attributeexplode_gpd - Split multi-part geometriesSpatial Operations:
clip_vector - Clip geometriessjoin_gpd - Spatial joinssjoin_nearest_gpd - Nearest neighbor spatial joinspoint_in_polygon - Point-in-polygon testsBasic Raster Operations:
metadata_raster - Get raster metadataget_raster_crs - Get raster CRSextract_band - Extract single bandraster_band_statistics - Calculate band statisticsraster_histogram - Compute pixel histogramsRaster Processing:
clip_raster_with_shapefile - Clip raster with polygonsresample_raster - Resample by scale factorreproject_raster - Reproject to new CRStile_raster - Split into tilesRaster Analysis:
compute_ndvi - Calculate vegetation indexraster_algebra - Mathematical operations on bandsconcat_bands - Combine single-band rastersweighted_band_sum - Weighted band combinationAdvanced Analysis:
zonal_statistics - Statistics within polygonsreclassify_raster - Reclassify pixel valueswrite_raster - Write array to raster fileClustering:
adbscan - Adaptive density-based clusteringSpatial Weights:
weights_from_shapefile - Create weights from shapefiledistance_band_weights - Distance-based weightsSpatial-Temporal Analysis:
spatial_markov - Spatial Markov analysis for panel datadynamic_lisa - Dynamic LISA (directional LISA) analysisSpatial Regression:
gm_lag - GM_Lag spatial 2SLS/GMM-IV spatial lag modelStatic Map Visualization (Matplotlib/GeoPandas):
create_map โ Generate high-quality static maps (PNG, PDF, JPG) from multiple geospatial data sources including shapefiles, rasters, WKT geometries, and coordinate arrays. Supports multiple layers with individual styling options, legends, titles, and grid overlays.Interactive Web Map Visualization (Folium):
create_web_map โ Generate interactive HTML maps using Folium with layer controls, legends, scale bars, dynamic titles, tooltips, and minimap. Supports vector layers (shapefile/GeoJSON/WKT/GeoDataFrame) and raster layers (GeoTIFF, auto-reprojected to WGS84, single-band+colormap by default or explicit RGB via style={"bands": [r, g, b]}), plus a registered layer name (see register_layer) in place of a raw path. Multiple basemap options and responsive design for web browsers.After a spatial-analysis tool finishes, its response includes a visualize_hint field suggesting you ask whether the user wants to see the result on a map, then call create_web_map with the output path or layer_name from that same response โ e.g.:
{"status": "success", "output_path": "...", "layer_name": "compute_ndvi_20260705_...", "visualize_hint": "Ask the user if they'd like to see this result on an interactive map..."}
create_web_map(layers=[{"data": "compute_ndvi_20260705_...", "style": {"cmap": "RdYlGn", "vmin": -1, "vmax": 1}}])
Boundary Download:
download_boundaries - Download GADM administrative boundaries and save as GeoJSONClimate Data Download:
download_climate_data - Download climate data (ERA5 or other CDS datasets)Ecology Data Download and Info:
Movement Data Download and Routing (via OSMnx):
download_street_network โ Download a street network for a given place and save as GraphMLcalculate_shortest_path โ Calculate the shortest path between two points using a saved street networkLand Cover from Planetary Computer:
download_worldcover โ Download ESA WorldCover for AOI/year; optional crop and reprojectioncompute_s2_ndvi โ Compute NDVI from Sentinel-2 L2A; crop and reprojection supportedSTAC-based Satellite Download:
download_satellite_imagery โ Download and stack bands from STAC items (e.g., Sentinel-2, Landsat), with optional crop and reprojectionTotal tools advertised over MCP: 123. The lists above are a curated selection
(80 entries) and have never been exhaustive โ tools/list is the authoritative
inventory.
These are not currently advertised over MCP. They were withdrawn on 2026-08-06
after a full-surface verification sweep (scripts/connector_sweep/) drove every
tool over a real stdio transport and found them either crashing on ordinary input,
returning a confidently wrong answer, or hanging.
We would rather ship a smaller surface that is entirely trustworthy than a larger one with holes in it. The code has not been deleted โ each will return once its defect is fixed and re-verified by the same sweep.
| Tools | Why |
|---|---|
hillshade | Fails on any DEM that declares a nodata value โ which is almost all of them |
get_species_info, download_species_occurrences | Broken by an upstream GBIF client parameter rename |
build_and_transform_weights, build_transform_and_save_weights, ols_with_spatial_diagnostics_safe | Reject polygon layers, so contiguity-based weights are unreachable |
knn_weights | Computes neighbours in degrees on geographic data โ a wrong answer that reports success |
join_counts, join_counts_local, gamma_statistic | Report success while the headline statistic is empty |
morans_i, gearys_c, getis_ord_g, moran_local, getis_ord_g_local | Can hang instead of returning; cause still under investigation |
focal_statistics | Can hang instead of returning; a separate issue from the row above |
Spatial autocorrelation and hot-spot statistics are withdrawn as a group. All
eight reach esda through one shared code path, and the hang follows that path
rather than any individual tool โ withdrawing only the tools first observed hanging
simply relocated it to the others. They will return together, once the cause is
found and the sweep proves it.
Still available and verified working: spatial weights construction
(weights_from_shapefile, distance_band_weights), spatial regression (gm_lag),
clustering (adbscan), and spatio-temporal analysis (spatial_markov,
dynamic_lisa).
Example usage of the tools:
Tool: buffer
Parameters: {
"geometry": "POINT(0 0)",
"distance": 10,
"resolution": 16,
"join_style": 1,
"mitre_limit": 5.0,
"single_sided": false
}
Tool: transform_coordinates
Parameters: {
"coordinates": [0, 0],
"source_crs": "EPSG:4326",
"target_crs": "EPSG:3857"
}
Tool: calculate_geodetic_distance
Parameters: {
"point1": [0, 0],
"point2": [10, 10],
"ellps": "WGS84"
}
Tool: create_map
Parameters: {
"layers": [
{
"data": "buildings.shp",
"style": {"label": "Buildings", "color": "red", "alpha": 0.7}
},
{
"data": "roads.shp",
"style": {"label": "Roads", "color": "black", "linewidth": 1}
}
],
"filename": "city_analysis",
"filetype": "png",
"title": "City Infrastructure Analysis",
"show_grid": true,
"add_legend": true
}
Tool: create_web_map
Parameters: {
"layers": [
{
"data": "buildings.shp",
"style": {"label": "Buildings", "color": "red"}
},
{
"data": "parks.geojson",
"style": {"label": "Parks", "color": "green"}
}
],
"filename": "city_interactive.html",
"title": "City Infrastructure Map",
"basemap": "CartoDB positron",
"show_grid": true,
"add_legend": true,
"add_minimap": true
}
GeoEDGE-MCP is proprietary software and does not accept external pull requests.
If you are looking to contribute to open-source GIS MCP tooling, the upstream
gis-mcp project (MIT) welcomes contributions.
GeoEDGE-MCP collects only what is needed to validate your subscription โ a random device identifier and your licence key's activation history โ never your GIS data, your files, or your conversation content. Your tool-call history is written to your own storage folder and is never transmitted to us. When a tool fetches data on your behalf, that request goes directly from your machine to the service you pointed it at.
Full policy: https://mcp.geoedge.com.au/privacy
GeoEDGE MCP is proprietary, subscription-licensed software. It is NOT open source. See LICENSE for the full terms.
Roughly 18% of this package's source originates in the MIT-licensed upstream
gis-mcp project, whose notice travels with every copy as
MIT requires โ see THIRD_PARTY_LICENCES.md. That MIT notice covers those
components only; it does not license this package.
| Project Name | Category | Description |
|---|---|---|
| Model Context Protocol | MCP Related | The core MCP Specification |
| FastMCP | MCP Related | The fast, Pythonic way to build MCP servers and clients |
| Shapely | Geospatial Analysis | Python package for manipulation and analysis of geometric objects |
| PyProj | Geospatial Analysis | Python interface to PROJ library |
| GeoPandas | Geospatial Analysis | Python package for working with geospatial data |
| Rasterio | Geospatial Analysis | Python package for reading and writing geospatial raster data |
| Fiona | Geospatial Analysis | Python interface to OGR library for reading and writing vector geospatial data formats |
| PySAL | Geospatial Analysis | Python spatial analysis library for geospatial data science |
| Folium | Visualization | Python library for creating interactive web maps using Leaflet.js |
| PyDeck | Visualization | Python library for creating advanced 3D visualizations and interactive maps |
| Matplotlib | Visualization | Python plotting library for creating static maps and visualizations |
| cdsapi | Geospatial Data Collecting | Python API to access the Copernicus Climate Data Store (CDS) |
| pygadm | Geospatial Data Collecting | Easy access to administrative boundary defined by GADM from Python scripts |
| pygbif | Geospatial Data Collecting | Python client for the GBIF API (ecology and biodiversity data) |
| OSMnx | Geospatial Data Collecting | Python package for downloading, modeling, and analyzing street networks and urban features from OpenStreetMap |
| pystac-client | Geospatial Data Collecting | Python client for STAC catalogs; search and access spatiotemporal assets |
| Planetary Computer SDK for Python | Geospatial Data Collecting | Python SDK for Microsoft Planetary Computer; auth and helpers for STAC/COGs |
| Server Name | Description |
|---|---|
| GeoServer MCP | A Model Context Protocol (MCP) server implementation that connects LLMs to the GeoServer REST API |
Email support@geoedge.com.au โ that is the support channel, and it is the one named in the extension manifest. Documentation lives at https://mcp.geoedge.com.au/docs.
Please don't open a GitHub issue: this project's source repository is private, so an
issue you file there is one nobody can read. The public
releases repository carries the
built .mcpb bundles and their release notes only.
FAQs
A Model Context Protocol (MCP) server implementation for GIS operations using GIS libraries
The pypi package geoedge-mcp receives a total of 90 weekly downloads. As such, geoedge-mcp popularity was classified as not popular.
We found that geoedge-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.

Research
/Security News
The compromise affects MemTensor's MemOS, an open source memory framework for large language models (LLMs) and AI agents. Both npm package @memtensor/memos-cloud-openclaw-plugin and the PyPI package MemoryOS are compromised. They drop cross-platform Go binaries that exfiltrate developer secrets.