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:| Flag | Default | What it controls |
|---|---|---|
include_render | true | The render envelope — framework-agnostic GeoJSON layer descriptors. All geometry lives here. |
include_hexes | true | The full hex grid (cells) on get_prediction. The top results stay regardless. |
include_elevation_samples | false | Per-sample elevation profile array on routing tools (~500 samples per route). Off even at rich defaults — niche even for renderers. |
compact | false | When true, sets all three above to false — no render envelope, no hex grid, no elevation samples. Equivalent to opting out of every rich-mode field at once. |
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
| Flag | Routing tools | Geocoding tools | get_prediction | get_isochrone |
|---|---|---|---|---|
include_render | ✓ | ✓ | ✓ | ✓ |
include_hexes | — | — | ✓ | — |
include_elevation_samples | ✓ | — | — | — |
compact | ✓ | ✓ | ✓ | ✓ |
get_matrix, parse_address, etc.) have no flags — their response is summary-only by definition.