GIS Integration
Most of the MCP tools return data in formats GIS tools already speak — QGIS connection URIs, MapLibre style JSON, and GeoJSON — so you can load results directly without a conversion step.
QGIS integration
Two MCP servers working together
The workflow that unlocks the most value uses two MCP servers in the same conversation:
- maps.guru MCP — provides the map data (tiles, styles, datasets)
- QGIS MCP — controls QGIS itself (add layers, set styles, export)
Your AI assistant calls both and coordinates the handoff.
Adding Tile Layers
You: "Add my city-streets map from maps.guru to QGIS"
AI Assistant:
1. Calls maps_guru.get_tile_url({ style_slug: "city-streets" })
→ Returns QGIS-ready URI
2. Calls qgis.add_raster_layer({
path: "type=xyz&url=https://tiles.maps.guru/v1/...&zmax=14",
provider: "wms"
})
→ QGIS loads the tile layer
Loading GeoJSON Datasets
You: "Load my earthquake dataset from maps.guru into QGIS"
AI Assistant:
1. Calls maps_guru.list_datasets({ style_id: "..." })
→ Finds earthquake dataset
2. Calls maps_guru.get_dataset_geojson({ dataset_id: "abc123" })
→ Returns GeoJSON URL
3. Calls qgis.add_vector_layer({
path: "https://maps.guru/api/v1/datasets/abc123/geojson?key=mapx_xxx",
provider: "ogr"
})
→ QGIS loads the vector layer with all features
Manual QGIS setup (without a QGIS MCP)
If you don't have the QGIS MCP connected, you can still wire up tiles manually — the assistant just has to hand you the connection URI:
- Ask: "Get the tile URL for my city-streets style"
- Copy the
qgis_urivalue from the response - In QGIS: Layer → Add Layer → Add XYZ Tiles
- Paste the URI string and click Add
The qgis_uri format looks like:
type=xyz&url=https://tiles.maps.guru/v1/planet-vector/{z}/{x}/{y}.pbf?key=mapx_xxx&zmax=14&zmin=0
MapLibre integration
Style JSON
get_style_json returns a complete MapLibre GL style spec, with all tile, sprite, and glyph URLs already signed with your API key:
You: "Export my maps.guru style for use in MapLibre"
AI Assistant calls maps_guru.get_style_json({ style_id: "..." })
→ Returns full style.json
You get the full style — sources (with ?key= appended), sprites, glyphs, layers, and paint properties — ready to drop into MapLibre GL JS:
const map = new maplibregl.Map({
container: 'map',
style: styleJson, // from the MCP response
center: [2.3522, 48.8566],
zoom: 12
});
Static map images
get_static_map generates PNGs you can embed in reports, briefs, or chat messages without standing up a map client:
You: "Generate a 1200x800 map of downtown San Francisco at zoom 14"
AI Assistant calls maps_guru.get_static_map({
style_slug: "city-streets",
lat: 37.7749,
lng: -122.4194,
zoom: 14,
width: 1200,
height: 800
})
→ Returns image URL + inline base64
The response carries both a public URL (for links) and inline base64 (so the image renders directly in the chat).
ArcGIS integration
XYZ tiles
Both ArcGIS Pro and ArcGIS Online can consume XYZ tile layers:
- Ask the assistant for the tile URL via
get_tile_url - In ArcGIS Pro: Insert → New Map → Add Data → Data From Path
- Paste:
https://tiles.maps.guru/v1/planet-vector/{z}/{x}/{y}.pbf?key=mapx_xxx
GeoJSON
ArcGIS loads GeoJSON directly:
- Export via
get_dataset_geojson - Save the response to a file
- In ArcGIS: Add Data → Browse and pick the file
Workflow examples
Urban planning analysis
1. "Create a light map style called 'Urban Analysis'"
2. "Get the QGIS tile URL for 'urban-analysis'"
3. "Load my zoning-districts dataset into QGIS"
4. "Generate a static overview map at zoom 11"
Field data collection
1. "What datasets do I have on my field-survey style?"
2. "Export the sampling-points dataset as GeoJSON"
3. "Reverse geocode 34.0522, -118.2437"
Report generation
1. "Generate static maps for Paris, London, and Tokyo"
2. "What's my remaining quota for this month?"