Spatial tools built for agents, scripts, and humans

Discover tools
RandomPointsTool
BufferTool
ExportTool
GET /api/run -> 6 tools discovered
result-1 · 5 features · 2 ms
result-2 · input result-1 · 14 ms
GeoJSON ready · 5 features · 1 ms
artifact: headless-demo.geojson

Clear division of labor

Agent plans. Engine executes. Tools do the work.

Spatial Workbench is not another agent or a hidden workflow planner. It is the dependable spatial runtime that a caller can use one explicit step at a time.

Agent or caller

Chooses the next move

Understands the goal, discovers available tools, selects a tool, supplies parameters and state, then interprets the result and decides what happens next.

Plans · selects · reasons

Spatial Workbench

Runs one declared operation reliably

Validates the request, enforces limits, executes the selected tool, and returns structured outputs, artifacts, warnings, and an execution receipt.

Validates · executes · records

Spatial tool

Provides a narrow capability

Buffers a layer, generates points, exports GeoJSON, or performs another specific spatial operation with clear inputs and outputs.

Transforms · returns

The browser workbench, HTTP API, CLI, and MCP server are different ways to call the same runtime. They do not each invent their own planning model or hidden workflow state.

Why this exists

Spatial analysis should be callable, composable, and inspectable

Traditional GIS tools

  • Tied to desktop interfaces
  • Difficult for agents to discover
  • State hidden inside applications
  • Awkward to automate
  • Outputs often coupled to the UI

Spatial Workbench

  • Structured tool definitions
  • Serializable GeoJSON state
  • API and script execution
  • Inspectable receipts
  • Browser visualization when useful

Live proof

See a spatial workflow execute live

Open the headless demo

How it works

Discover, execute, chain

Discover

Agents and clients retrieve tool definitions, parameters, descriptions, and supported state modes.

Execute

Each tool receives explicit parameters plus serialized spatial state.

Chain

The returned state and receipts become the input to the next operation.

const result = await runTool({
  tool: "BufferTool",
  params: {
    "Input Layer": "result-1",
    Distance: 0.5,
    Units: "kilometers"
  },
  state
});

Why it feels different

Built for callable spatial workflows

Agent-first

Tools expose clear schemas and machine-readable results.

GeoJSON-native

Inputs, intermediate state, and outputs remain portable.

Inspectable

Every execution returns status, timing, feature counts, and layer receipts.

Composable

One tool’s returned state can feed directly into the next tool.

Human-visible

The same operations can be visualized and inspected in the browser.

Use cases

Useful before it becomes huge

Agent-driven analysis

An assistant discovers available spatial tools and executes the right operation instead of guessing.

Automated spatial pipelines

Scripts chain spatial transformations and export reusable data.

Lightweight GIS applications

Developers assemble narrow-purpose mapping tools without building a full GIS platform.

Interactive validation

Humans inspect the geometry, parameters, provenance, and outputs produced by automation.

Trust and transparency

No invisible GIS magic

Every operation has explicit parameters. Every input is serializable. Every result includes an execution receipt. Every geometry output can be inspected as GeoJSON.

{
  "tool": "BufferTool",
  "status": {
    "code": 0,
    "message": "Buffered layer added."
  },
  "execution": {
    "durationMs": 14,
    "inputLayerIds": ["result-1"],
    "outputLayerIds": ["result-2"],
    "featureCounts": {
      "input": 5,
      "output": 5
    }
  }
}