Skip to content
MCPPlatform

Spatly for agents

Spatly ships an official MCP server and a public REST API. Your agent gets the same studio you do: it can describe layers, query features inside a bbox, save beats, write chapters and publish, through the same permission model and an agent-safe query budget. Read tools on every plan, write tools scoped by token.

endpoint https://spatly.io/mcpstdio npx -y @spatly/mcpagent index /llms.txt
06Built for agents

Your agent gets the same studio you do.

Spatly ships an official MCP server. Point Claude, Cursor, Copilot or ChatGPT at your workspace and they can describe layers, query features inside a bbox, save beats, write chapters and publish, all through the same REST API and the same permission model. Read tools on every plan; write tools scoped by token.

claude_desktop_config.json · Cursor · Claude Code
{
  "mcpServers": {
    "spatly": {
      "command": "npx",
      "args": ["-y", "@spatly/mcp"],
      "env": { "SPATLY_TOKEN": "spk_…" }
    }
  }
}
or remote
# Remote (streamable HTTP), no install
URL     https://spatly.io/mcp
Header  Authorization: Bearer spk_…
Tools
list_projectsget_projectcreate_projectlist_layersdescribe_layerquery_featuresspatial_filtersearch_featuresgeocodereverse_geocodelist_beatsset_map_viewcreate_story_chapterlist_kpisget_kpi_valuequery_timeseriescreate_insight_containerpublish_share_link

Agent-safe by construction: every list paginates, query_features is capped by the workspace budget (500 rows per call, 60 calls per minute by default) and can require a bbox. An agent cannot dump a dataset by accident.

Example sessionspatly · 18 tools · budget 500/60
  1. You

    Create a 6-chapter story from this GeoJSON. It's the Kahramanmaraş aftershock sequence. Lead with the two mainshocks, end on the 20 Feb Hatay event.

  2. create_project{ name: "Kahramanmaraş 2023", basemapId: "noir" } → prj_8f2
  3. describe_layer4,812 features · point · fields: mag, depth_km, time (datetime) · bbox 35.9,36.2 → 39.1,38.6
  4. query_featureswhere mag ≥ 6 order by time · limit 20 → 5 rows (M7.8 01:17, M7.5 10:24, M6.7, M6.4 Hatay …)
  5. Five events above M6. I'll open on the M7.8 at Pazarcık with the fault trace, cut to the M7.5 nine hours later, then step the time filter week by week and close on Hatay. Writing chapters.

  6. create_story_chapter × 6each with a beat: camera + layerStates.filter (time ≤ chapter end) + highlight (mag ≥ 6) + transition fly 1.6 s
  7. publish_share_linkvisibility: unlisted → https://spatly.io/s/kmr-2023-aft
  8. Done. Six chapters, unlisted link, 4,812 features stay live from the USGS feed. Chapter 4 could use a pull quote. Want me to draft one from the viewport stats?

ToolsWhat an agent can do

Six things your agent gets out of the box

Read your workspace

List projects, describe a layer's fields and stats, and query features inside a bounding box or by attribute, with every call paginated and budget-capped.

Drive the map

Geocode and reverse-geocode, set a map view, and save it as a beat that a story, slide or dashboard can reuse.

Author surfaces

Create a project, write story chapters bound to beats and filters, and assemble an Insight Container from the same data and map.

Read the numbers

List KPIs, get a KPI value, and query a time series, so an agent can report a figure or wire one into a widget.

Publish and share

Publish a share link at a chosen visibility, so an agent can hand back a URL the moment the surface is ready.

Feed Spatly from your MCP

Add your own internal MCP server as a source in Studio, so an inventory, CRM or IoT feed can drive a layer or a KPI.

Every list paginates and query_features is capped by the workspace budget, five hundred rows per call and sixty calls per minute by default, and can require a bbox. An agent cannot dump a dataset by accident. Read the MCP reference for auth, scopes and the full tool list.

Give your agent a map.

Create a workspace token, point your client at spatly.io/mcp, and let your agent build the first story.

41.0082°N 28.9784°E · z 11.3 · ⟂ 0°