Deterministic geoprocessing for AI agents, with verifiable provenance on every output
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Professional-grade GIS geoprocessing for AI agents β with provenance you can verify.
mapsmith.dev β a real terrain analysis and the manifest that came with it. Both are build products: the figure is rendered from GeoTIFFs MapSmith writes, so the page cannot drift from what the software does.
MapSmith is an open-source MCP server that gives an AI agent real GIS analysis β buffers, overlays, reprojections, zonal statistics, terrain and hydrology β executed by GeoPandas, DuckDB Spatial, exactextract and Whitebox Workflows, never written by the model. Every dataset it produces lands on disk next to a lineage manifest: inputs with checksums, the exact parameters, the CRS decisions and why, engine versions, and the deterministic checks that ran on the result.
Ask for the result. The agent picks the tools. You can check the work afterwards.
The manifest is a specified format, not
MapSmith's private output: JSON Schema, a toolchain-free validator, a conformance suite, and a
hundred-line emitter that never imports MapSmith. Records carry spec_version, and CI validates
real MapSmith output against the spec's own validator. The specification is archived and citable
as 10.5281/zenodo.22205213. The names MapSmith puts
in a record beyond the ones the specification defines β every extension check name, and every
extension field in crs_decisions with the reason it is not a synonym of a key the specification
already has β are listed in docs/manifest-vocabulary.md,
generated from the source rather than maintained by hand.
Evidence before promises: an A/B on GABench whose headline is a null result β with the analysis that took our own positive number apart β a correctness suite in its own organisation, Argleton, whose published run grades MapSmith on thirty-one traps with answers computed on paper and has already sent six defects back here, notebooks on a real USGS DEM of Mount St. Helens, an in-chat map panel that shows the verification status of every layer it draws, and a measurement of our own tool discovery that retracted two numbers this page had already published β including the one in the bullet list below.
Add MapSmith to any MCP client over stdio (Claude Desktop, Claude Code, Cursor, VS Code):
Docker is the supported path, and confines the server to the directory you mount:
One-click installs:
or from a terminal: code --add-mcp '{"name":"mapsmith","command":"uvx","args":["mapsmith"]}'
To check it runs before wiring a client, uvx mapsmith starts the server on stdio
(Ctrl-C to quit) β it speaks MCP, not a CLI, so a silent prompt means it is working.
This page describes 0.4.0, which is what that command installs. When main runs ahead of
the published artifact this paragraph says so and names the difference β a reader should never
have to find out by calling a tool that is not there. main is ahead of 0.4.0 today, by
defects found in shipped code and by one change a reader of this page would notice: eight
crs_decisions keys are spelled differently on main, because 0.4.0 had invented names of
its own where the specification already fixes one, and left the keys that really are
MapSmith's own looking like the format's. No tool, operation or count has moved.
[Unreleased] in the changelog has the old-to-new table and the
rest of the list.
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."
The Docker image includes the [raster] and [whitebox] extras. With uvx, pick your
own: uvx --from "mapsmith[raster,whitebox]" mapsmith. 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, and issues about broken local
environments will be redirected here.
Two things about the image, because they change what happens on your machine: it sets
MAPSMITH_WORKSPACE=/data itself (the -e above is explicit, not required) and runs as
uid 1000, so pass --user $(id -u):$(id -g) if the directory you mount belongs to another
user; and it is built for amd64 only, so on Apple Silicon it runs under emulation.
Every dataset comes with the file below, written next to it as
<output>.provenance.json β enough to re-run the analysis without the model that asked
for it:
The checksum and the timestamps are made up; everything else β the CRS decision, the
transformation, every check name and detail β is copied from a record buffer_layer emits
for exactly this call. The real file also carries output, repairs, notes and a
critical flag on each check, left out here for length.
tests/test_showcase.py validates this block against
the specification's own validator and re-runs the operation to compare its crs_decisions
keys with the emitted ones, because a record typed by hand drifts silently while every
generated surface stays correct: it lacked spec_version for two releases, and on
2026-09-06 it was still recording a round trip without the
x-mapsmith:round_trip key that says the coordinates came
back. This is the record a third-party implementer copies.
Trimmed for the page, not for the file: the real record also carries the output's own path
and hash, any geometry MapSmith had to repair, and the notes it made about how the inputs
were handled β and every check says whether it was critical and, when it failed, what to do
about it. get_provenance returns it for any output.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mapsmith)<a href="https://allmcps.com/mcp/mapsmith"><img src="https://allmcps.com/api/badge/mapsmith?style=directory" alt="Mapsmith on AllMCPs" /></a>