MapSmith ๐จ๐บ๏ธ
Professional-grade geoprocessing for AI agents โ with provenance you can verify.
MapSmith is an open-source MCP server that gives any AI agent (Claude, ChatGPT, Copilot, Cursor, or your own) real GIS analysis capabilities: not just "make me a map", but buffers, overlays, reprojections, zonal statistics, terrain and network analysis โ executed by deterministic engines, never hallucinated by the model.
Ask for the result. The agent picks the tools. Every output carries its full lineage.
Why MapSmith
- Real geoprocessing, not map CRUD. Built on the proven open geospatial stack (GDAL, GeoPandas, Shapely, and more to come: WhiteboxTools, PDAL, DuckDB Spatial, QGIS Processing via sidecar).
- Provenance by design. Every layer MapSmith produces ships with a machine-readable lineage manifest: source datasets (with checksums), every tool executed, exact parameters, CRS decisions, software versions, timestamps. Re-run it bit-identical, without the LLM. No AI slop.
- The LLM orchestrates, tools compute. Geometry and numbers only ever come from deterministic tool executions โ never from model output.
- Semantic tools, not a tool dump. A curated set of goal-level tools plus a searchable operation catalog (progressive discovery), because agent accuracy collapses when you expose hundreds of raw tools.
Quickstart
# Docker (the supported path)
docker run -i --rm -v $(pwd)/data:/data ghcr.io/mapsmith-ai/mapsmith
# or from PyPI
uvx mapsmith
Add to Claude Desktop / any MCP client (stdio):
{
"mcpServers": {
"mapsmith": {
"command": "uvx",
"args": ["mapsmith"]
}
}
}
Then ask your agent things like:
"Take parcels.gpkg, keep only the parcels within 300 m of the river in rivers.gpkg, and give me the result with the analysis lineage."
Tools (v0.1)
| Tool | What it does |
|---|---|
describe_dataset |
CRS, geometry types, schema, extent, feature count of any vector dataset |
buffer_layer |
Metric buffer with automatic UTM estimation for geographic CRS |
clip_layer |
Clip a layer with a mask layer |
reproject_layer |
Reproject to any CRS (EPSG code or WKT) |
spatial_join |
Join attributes by spatial predicate (intersects/within/contains) |
get_provenance |
Return the full lineage manifest of any MapSmith output |
list_operations |
Searchable catalog of available operations (progressive discovery) |
Every tool that writes an output also writes <output>.provenance.json next to it.
Provenance example
{
"mapsmith_version": "0.1.0",
"operation": "buffer_layer",
"parameters": {"distance_meters": 300.0},
"inputs": [{"path": "rivers.gpkg", "sha256": "9f2cโฆ", "crs": "EPSG:4326"}],
"crs_decisions": {"analysis_crs": "EPSG:32632", "reason": "estimated UTM zone for metric buffering"},
"engine": {"name": "geopandas", "version": "1.0.1"},
"started_at": "2026-08-18T10:15:03Z",
"finished_at": "2026-08-18T10:15:04Z"
}
Architecture
AI agent (Claude / ChatGPT / Copilot / your app)
โ MCP (stdio local ยท Streamable HTTP remote)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MapSmith server โ
โ ยท semantic tools + operation catalog โ
โ ยท parameter validation, CRS discipline โ
โ ยท provenance recorder (lineage manifests) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Engines โ
โ ยท vector: GeoPandas/Shapely (built-in) โ
โ ยท raster: Rasterio (roadmap) โ
โ ยท terrain/hydro: WhiteboxTools (roadmap) โ
โ ยท qgis_process / GRASS sidecar (roadmap, โ
โ GPL-isolated via subprocess) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Roadmap
- Raster engine (Rasterio): zonal stats, clip, hillshade, algebra
- WhiteboxTools adapter: terrain & hydrology (500+ permissive tools)
- QGIS Processing sidecar (subprocess-isolated): ~900 algorithms
- Sandboxed code-execution tool for the long tail
- Remote server (Streamable HTTP + OAuth), long-job progress via MCP Tasks
- Map rendering: shareable MapLibre viewer URLs, MCP Apps
Install support policy
Docker (or uvx on a machine with working wheels) is the only supported installation path. Geospatial native dependencies across three OSes are a support black hole; issues about broken local environments will be redirected here.
License
- MapSmith server and engines: AGPL-3.0-or-later (see
LICENSE) - Client SDK and tool-schema definitions (future
sdk/): Apache-2.0
You can self-host MapSmith freely, forever. If you modify it and offer it as a service, the AGPL asks you to share your changes โ or talk to us about a commercial license.
"MapSmith" is a trademark of the MapSmith project โ see TRADEMARKS.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mapsmith-0.1.0.tar.gz.
File metadata
- Download URL: mapsmith-0.1.0.tar.gz
- Upload date:
- Size: 28.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea979d8c588fd9349c93c52feb91ccc96ed40f37bf9fe6df649f2598780bc81d
|
|
| MD5 |
7025e8642ae69a06ab2cb12c538eba4e
|
|
| BLAKE2b-256 |
eda17667f6e76158a82016d80e445afb446b4e9833763b270d4e4e8229ceef36
|
File details
Details for the file mapsmith-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mapsmith-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1672bcc679b76e787e9e03f6c8ea85879fbca8855eec77642f132ad3ad2ca3ba
|
|
| MD5 |
4f28b102d9cb650bc84a7fbf3d86ed1c
|
|
| BLAKE2b-256 |
be58df28352545a7333242b9c296f7e1470aa818ad13c83e42142e5a53d9ade7
|