# io.github.mapsmith-ai/mapsmith (oci · ghcr.io/mapsmith-ai/mapsmith:0.2.2)

Deterministic GIS geoprocessing for AI agents, with verifiable provenance on every output

- Trust score: 38/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-22

## Components

- oci · `ghcr.io/mapsmith-ai/mapsmith:0.2.2`: 38/100 (this document), [markdown](https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2.md), [page](https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2)
- pypi · `mapsmith`: 37/100, [markdown](https://verifymcp.io/servers/mapsmith-ai-mapsmith/mapsmith.md), [page](https://verifymcp.io/servers/mapsmith-ai-mapsmith/mapsmith)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/mapsmith-ai/mapsmith:0.2.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-22.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (AGPL-3.0).
  - Actively maintained (last published 0 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 80/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1949 tokens (~114/item across 17 items; 16 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.mapsmith-ai/mapsmith MCP server?

io.github.mapsmith-ai/mapsmith runs locally as a container image, launched with docker run --rm -i ghcr.io/mapsmith-ai/mapsmith:0.2.2. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add mapsmith-ai-mapsmith -- docker run --rm -i ghcr.io/mapsmith-ai/mapsmith:0.2.2
```

### Cursor

```json
{
  "mcpServers": {
    "mapsmith-ai-mapsmith": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/mapsmith-ai/mapsmith:0.2.2"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "mapsmith-ai-mapsmith": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/mapsmith-ai/mapsmith:0.2.2"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add mapsmith-ai-mapsmith -- docker run --rm -i ghcr.io/mapsmith-ai/mapsmith:0.2.2
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mapsmith-ai-mapsmith": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/mapsmith-ai/mapsmith:0.2.2"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  mapsmith-ai-mapsmith:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/mapsmith-ai/mapsmith:0.2.2"]
```

### Netclaw

```json
{
  "McpServers": {
    "mapsmith-ai-mapsmith": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/mapsmith-ai/mapsmith:0.2.2"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "mapsmith-ai-mapsmith": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/mapsmith-ai/mapsmith:0.2.2"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-22 (score 38)

First indexed and scored.

## MCP tools (16)

### `describe_dataset` (~48 tokens)

Inspect a vector dataset: CRS, geometry types, schema, extent, feature count.

    Call this before any analysis on a dataset you have not inspected yet.

Input parameters:

- `path` (string, required)

### `buffer_layer` (~111 tokens)

Buffer all features by a distance in meters.

    Geographic-CRS inputs are reprojected to an estimated UTM zone for the metric
    operation and back; the decision is recorded in the provenance manifest.
    A `warnings` key in the result flags a suspicious-but-valid outcome with a
    hint — e.g. a negative distance that eroded every geometry away.

Input parameters:

- `distance_meters` (number, required)
- `input_path` (string, required)
- `output_path` (string, required)

### `clip_layer` (~100 tokens)

Clip a layer to the area of a mask layer. CRS are aligned automatically.

    A `warnings` key in the result means the analysis ran but something is worth
    your attention (typically an empty result, or inputs whose extents do not
    overlap); each entry carries a hint. Inputs without a CRS are refused.

Input parameters:

- `input_path` (string, required)
- `mask_path` (string, required)
- `output_path` (string, required)

### `reproject_layer` (~115 tokens)

Reproject a layer to a target CRS, e.g. 'EPSG:32632' or a WKT string.

    Inputs without a CRS are refused. Geometry passes through unchanged, so an
    invalid input yields an invalid output: mechanically broken geometry is
    repaired deterministically and reported in a `repairs` key — read it, the
    geometry type may have changed.

Input parameters:

- `input_path` (string, required)
- `output_path` (string, required)
- `target_crs` (string, required)

### `spatial_join` (~139 tokens)

Join by spatial predicate (intersects/within/contains).

    engine='auto' routes to the fastest available engine for the inputs:
    SedonaDB (heavy joins, 10-180x) > DuckDB (GeoParquet fast path) > GeoPandas.
    A `warnings` key in the result flags an empty join or inputs whose extents
    do not overlap, each with a hint. Inputs without a CRS are refused.

Input parameters:

- `engine` (string)
- `left_path` (string, required)
- `output_path` (string, required)
- `predicate` (string)
- `right_path` (string, required)

### `run_sql` (~79 tokens)

Run spatial SQL (DuckDB dialect, ST_* functions, read_parquet/ST_Read for files).

    Without output_path: returns up to 50 preview rows. With output_path (.parquet):
    materializes the full result as GeoParquet with a provenance manifest.

Input parameters:

- `output_path` (string)
- `query` (string, required)

### `zonal_statistics` (~153 tokens)

Statistics of a raster within each vector zone (exact fractional pixel coverage).

    stats: subset of count/sum/mean/median/min/max/stdev/variance/majority/minority/
    variety (default: count, mean, min, max). Zones are aligned to the raster CRS
    automatically; the decision is recorded in the provenance manifest.
    Zones without a CRS are refused; `warnings` and `repairs` keys in the result
    flag a suspicious outcome or geometry MapSmith had to repair.
    Requires the [raster] extra.

Input parameters:

- `output_path` (string, required)
- `raster_path` (string, required)
- `stats`
- `zones_path` (string, required)

### `hillshade` (~119 tokens)

Shaded relief from a DEM: GeoTIFF in, GeoTIFF out (values scaled 0-32767).

    azimuth = sun direction in degrees (default 315, NW); altitude = sun angle
    above the horizon (default 30). DEMs without a CRS are rejected.
    Requires the [whitebox] extra.

Input parameters:

- `altitude` (number)
- `azimuth` (number)
- `dem_path` (string, required)
- `output_path` (string, required)
- `z_factor` (number)

### `flow_accumulation` (~111 tokens)

D8 flow accumulation from a DEM (GeoTIFF in/out). Depressions are filled first.

    out_type: 'cells' (upslope cell count, includes the cell itself) or 'sca'
    (specific catchment area). log_transform=True for visualization-friendly
    values. Requires the [whitebox] extra.

Input parameters:

- `dem_path` (string, required)
- `log_transform` (boolean)
- `out_type` (string)
- `output_path` (string, required)

### `watershed` (~102 tokens)

Watershed of each pour point: DEM + points in, basin raster out (GeoTIFF).

    Basins get 1-based IDs following the pour-point feature order; cells not
    draining to any point stay nodata. Points are aligned to the DEM CRS
    automatically (decision recorded). Requires the [whitebox] extra.

Input parameters:

- `dem_path` (string, required)
- `output_path` (string, required)
- `pour_points_path` (string, required)

### `validate_plan` (~267 tokens)

Statically validate a multi-step geoprocessing plan BEFORE running anything.

    Write the plan as steps in execution order; each step has a unique id, an
    operation name from list_operations, and its arguments. Use "$step_id" as an
    argument value to consume the output dataset of an earlier step. Checks:
    operations exist and are installed, arguments complete and well-typed,
    references resolve backwards (mis-ordered steps are rejected), input files
    exist, outputs don't collide, and CRS flow is simulated end-to-end from the
    real input files. Returns machine-actionable errors/warnings/notes plus the
    simulated output CRS per step. Nothing is executed and nothing is written.

    Example plan: {"goal": "wells at risk", "steps": [
      {"id": "buf", "operation": "buffer_layer", "arguments":
        {"input_path": "wells.gpkg", "distance_meters": 300, "output_path": "buf.parquet"}},
      {"id": "cut", "operation": "clip_layer", "arguments":
        {"input_path": "$buf", "mask_path": "zone.gpkg", "output_path": "risk.parquet"}}]}

Input parameters:

- `plan` (required)

### `execute_plan` (~185 tokens)

Validate, then execute a geoprocessing plan step by step.

    The plan is re-validated first (an invalid plan runs nothing). Steps run in
    order; "$step_id" references resolve to the outputs of earlier steps. Every
    step writes its own provenance manifest, and a plan-level manifest
    (<last output>.plan.json, with the plan sha256 and per-step outcomes) ties
    them together. Execution stops at the first failing step; outputs already
    produced stay on disk with their manifests. Same plan format as
    validate_plan — validate first, then execute.

    A `step_warnings` key in the response means the plan ran but some step
    produced a suspicious result (an empty output, non-overlapping inputs):
    read it before treating a completed plan as a correct one.

Input parameters:

- `plan` (required)

### `get_provenance` (~30 tokens)

Return the full lineage manifest of a MapSmith output dataset.

Input parameters:

- `output_path` (string, required)

### `preview_map` (~129 tokens)

Show datasets on the interactive in-chat map panel (MCP Apps).

    Pass the paths of one or more MapSmith outputs or source datasets (vector
    or GeoTIFF). Layers are previewed in EPSG:4326 with simplified geometry and
    capped feature counts sized to fit client limits; each layer card shows its
    provenance summary and verification status. Read-only: the datasets of
    record stay on disk. On clients without MCP Apps support the same payload
    is returned as structured data.

Input parameters:

- `max_features` (integer)
- `paths` (array, required)

### `list_operations` (~124 tokens)

Search the catalog of available and planned operations (progressive discovery).

    Describe what you need in plain words (e.g. 'statistics of a raster inside
    polygons') and results come back ranked by relevance (BM25). Compact entries
    by default; detail=True adds parameters and worked example calls — use it on
    the exact operation name before calling an unfamiliar tool. Empty query
    lists the whole catalog including planned (not yet available) operations.

Input parameters:

- `detail` (boolean)
- `limit` (integer)
- `query` (string)

Output parameters:

- `result` (array)

### `server_info` (~18 tokens)

MapSmith version, licensing, and available engines.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2#diagnostics

## Score history

- 2026-08-22: 38

## Common questions

### What is the io.github.mapsmith-ai/mapsmith MCP server?

io.github.mapsmith-ai/mapsmith is an MCP server listed in the public MCP registry as io.github.mapsmith-ai/mapsmith. Deterministic GIS geoprocessing for AI agents, with verifiable provenance on every output. This page covers its container image (ghcr.io/mapsmith-ai/mapsmith:0.2.2).

### Is the io.github.mapsmith-ai/mapsmith MCP server safe to use?

io.github.mapsmith-ai/mapsmith scores 38 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.mapsmith-ai/mapsmith MCP server expose?

io.github.mapsmith-ai/mapsmith exposes 16 tools: describe_dataset, buffer_layer, clip_layer, reproject_layer, spatial_join, and 11 more. Their descriptions and schemas cost roughly 1,830 tokens of context every time the server is loaded.

### Is the io.github.mapsmith-ai/mapsmith MCP server still maintained?

io.github.mapsmith-ai/mapsmith is still listed as active in the MCP registry. We last reached this channel on 22 August 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.mapsmith-ai/mapsmith MCP server under?

io.github.mapsmith-ai/mapsmith declares the AGPL-3.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- Repository: https://github.com/mapsmith-ai/MapSmith
- Changelog RSS feed: https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2.xml
- Changelog JSON feed: https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2.json
- HTML version of this page: https://verifymcp.io/servers/mapsmith-ai-mapsmith/ghcr-io-mapsmith-ai-mapsmith-0-2-2
