🌍
AI-Native API

Maps for AI Agents

The simplest way for LLMs to create and share maps. One API call. Instant shareable URL. No auth required.

Why GISTools for AI?

Dead Simple

One endpoint. POST your data, get a URL. Works with GeoJSON, coordinates, or WKT.

Instant Sharing

Every map gets a unique URL. Share with users immediately. Embed anywhere.

No Auth Required

Free tier with rate limiting. No API keys needed for basic use.

API Reference

POST/api/map

Create a map from any geographic data. Returns a shareable URL.

Request Body

{
  "data": <geojson | coordinates | wkt>,
  "title": "optional title",
  "description": "optional description",
  "style": "auto" | "light" | "dark" | "satellite",
  "markers": [{"lat": 37.77, "lng": -122.4, "label": "SF"}],
  "bounds": "auto" | [[sw_lng, sw_lat], [ne_lng, ne_lat]]
}

Data Formats Accepted

GeoJSON (any type)

{"type": "Point", "coordinates": [-122.4, 37.8]}

Coordinate Array

[[-122.4, 37.8], [-122.5, 37.9], ...]

Single Coordinate

[-122.4194, 37.7749]

WKT String

"POINT(-122.4 37.8)"

Response

{
  "success": true,
  "id": "abc123",
  "url": "https://gistools.io/m/abc123",
  "embed": "<iframe src='https://gistools.io/m/abc123?embed=1' ...></iframe>",
  "preview_url": "https://gistools.io/api/map/abc123/preview.png"
}

Rate Limits

Free tier: 60 maps/hour per IP. No authentication required. Need more? Request access for higher limits and priority support.

MCP Server for Claude

Use the Model Context Protocol to give Claude direct access to GISTools.

Installation (TypeScript/npm)

npm install -g @gistools/mcp-server

Claude Desktop Config

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "gistools": {
      "command": "npx",
      "args": ["-y", "@gistools/mcp-server"]
    }
  }
}

Installation (Python)

pip install gistools-mcp httpx

Claude Desktop Config

{
  "mcpServers": {
    "gistools": {
      "command": "python",
      "args": ["-m", "gistools_mcp"]
    }
  }
}

Available Tools

  • create_map — Create a map from data, get shareable URL
  • gis_convert — Convert between GIS formats (shapefile, geojson, kml...)
  • gis_analyze — Get metadata about a GIS file
  • gis_formats — List all supported formats

Code Examples

PyPython

import requests

# Create a map from coordinates
response = requests.post(
    "https://gistools-production.up.railway.app/api/map",
    json={
        "data": [-122.4194, 37.7749],  # San Francisco
        "title": "San Francisco",
        "markers": [{"lat": 37.7749, "lng": -122.4194, "label": "SF"}]
    }
)

result = response.json()
print(f"Map URL: {result['url']}")
# Output: Map URL: https://gistools.io/m/abc123

$cURL

curl -X POST https://gistools-production.up.railway.app/api/map \
  -H "Content-Type: application/json" \
  -d '{
    "data": {"type": "Point", "coordinates": [-122.4194, 37.7749]},
    "title": "San Francisco"
  }'

JSJavaScript

const response = await fetch('https://gistools-production.up.railway.app/api/map', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    data: [[-122.4, 37.8], [-122.5, 37.75], [-122.45, 37.85], [-122.4, 37.8]],
    title: 'SF Triangle'
  })
});

const { url, embed } = await response.json();
console.log('Share this:', url);

Example Prompts for Claude

With the MCP server installed, you can ask Claude things like:

"Create a map showing the 5 largest cities in California"

Claude will look up coordinates and create a map with markers for each city.

"Show me a map of the driving route from LA to San Francisco"

Claude can create a LineString showing the approximate route.

"Convert this shapefile to GeoJSON: [URL]"

Claude will use the convert tool to transform the file format.

"Analyze this GIS file and tell me what's in it"

Claude will return feature counts, geometry types, and attribute names.

"Create a map of the Golden Gate Park boundary"

Claude can create polygon maps from known geographic boundaries.

Start Building

GISTools is the easiest way for AI to make maps. Try it now.