Skip to main content

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

mapsmith-0.1.0.tar.gz (28.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mapsmith-0.1.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

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

Hashes for mapsmith-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ea979d8c588fd9349c93c52feb91ccc96ed40f37bf9fe6df649f2598780bc81d
MD5 7025e8642ae69a06ab2cb12c538eba4e
BLAKE2b-256 eda17667f6e76158a82016d80e445afb446b4e9833763b270d4e4e8229ceef36

See more details on using hashes here.

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

Hashes for mapsmith-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1672bcc679b76e787e9e03f6c8ea85879fbca8855eec77642f132ad3ad2ca3ba
MD5 4f28b102d9cb650bc84a7fbf3d86ed1c
BLAKE2b-256 be58df28352545a7333242b9c296f7e1470aa818ad13c83e42142e5a53d9ade7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page