A route between two points is available everywhere; 'everywhere within 15 minutes on a bicycle' is the question that usually means writing code. Here it is one call returning a polygon. Two practical notes: routing quality is entirely a property of the Valhalla instance and the OSM data behind it, and the demo URL is the one with the `1` in it — the obvious hostname returns a web interface.
A client for Valhalla, the OpenStreetMap routing engine. It asks Valhalla for a route between two points or for an isochrone — the area reachable within a given number of minutes — and returns GeoJSON with the geometry and summary statistics attached.
- The `route` tool takes an `origin` and `destination` as lat/lon, a `mode`, `alternatives` and `units`, and returns a GeoJSON LineString with `distance_km`, `duration_seconds` and `duration_minutes`
- The `isochrone` tool takes an `origin`, `minutes` and `mode`, and returns the polygon of everywhere reachable in that time
- Five transport modes — `auto`, `bicycle`, `pedestrian`, `taxi`, `bus`
- A `health` resource reporting the routing server's status and version
- A `tile` resource serving vector tiles for client-side rendering
Node.js 18+ and a Valhalla server to talk to — this server does not do the routing itself. `VALHALLA_BASE_URL` points at it and defaults to `http://localhost:8002`; the public demo instance is `https://valhalla1.openstreetmap.de` (note the `1` — the plain hostname serves a web page, not the API). For a local engine, `./start-mcp.sh` builds the server and brings up Valhalla with Monaco OSM data through Docker Compose. Published as valhalla-mcp-server version 0.1.0; register it as node against `dist/index.js` with `cwd` set to the checkout. `DEBUG`, `LOG_LEVEL`, `MCP_SERVER_NAME` and `MCP_SERVER_VERSION` are the other environment variables.
Build from source — clone the repository and build it, then point your client at the binary
