Rich-by-default
Every renderer-aware tool returns:- Summary fields — distances, durations, narratives, terrain summaries, turn-by-turn steps (always present)
renderenvelope — framework-agnostic GeoJSON layer descriptors a map client can drop directly into deck.gl, MapLibre, Leaflet, Mapbox, Cesium, etc. (controlled byinclude_render)- Full hex grid for predictions (controlled by
include_hexes)
render envelope as GeoJSON. There is no separate polyline encoding to decode — clients consume render[].data directly.
The default is rich because:
- Renderer-aware agents (Claude Artifacts, ChatGPT Canvas, custom mapping apps, Footstep-built clients) get a complete answer they can drop into a map without per-tool extraction logic.
- Token-conscious LLM agents that only want summaries pass
compact: trueonce and pay nothing for geometry. - The historical “lean defaults” caused renderer-aware agents to silently truncate work — the model would build a 4-point straight line from
boundscorners because no flag was set. We’ve inverted that failure mode: by default the answer looks complete; opting out is explicit.
Flag matrix
Every renderer-aware tool accepts these flags:Notes on individual flags
include_elevation_samples defaults false even at rich defaults. Summary fields (total ascent, max elevation, average grade) are the answer for elevation; the per-sample array is an opt-in for clients building dedicated elevation charts.
compact: true is sugar for setting all three false. Token-conscious LLM agents that don’t render maps should pass compact: true once on every call.
There is no include_geometry flag. All geometry in MCP responses lives in the render envelope as GeoJSON. There is no separate raw-polyline form. (The REST API still has its own format: footstep | geojson switch — that’s an independent contract.)
Examples
Rich response (default)
render envelope with a GeoJSON linestring layer ready to drop into a map.
Compact response
Elevation-chart client
Per-tool flag availability
Tools without any geometry component (
get_matrix, parse_address, etc.) have no flags — their response is summary-only by definition.