What Knowhere Answers
Knowhere makes OpenStreetMap queryable relative to other things: not
"where is this address" but "what is near it, how long does it take to get
there, and can I walk it." It indexes *.osm.pbf extracts into a read-only
SQLite database and serves them over the Model Context Protocol, so the client
asking the questions is a model, not a map GUI. The data underneath is public
OpenStreetMap, and the index is one seekable-compressed file read in place —
a query touches the frames it needs and nothing else, rather than a copy of
the whole thing.
Point an MCP client at /mcp and ask in plain language. The model picks the
tool and writes the query; the rest of these pages are what it draws on.
What you can ask
Every example is a real query against indexed data. Substitute your own area —
list_areas resolves a place name to the snake_case name a query needs.
| Ask | How it resolves |
|---|---|
| "Hot springs I could drive to" | nwr[natural=hot_spring][name](area=colorado) |
| "Ski areas" | nwr[landuse=winter_sports][name](area=colorado) |
| "Trailheads near town" | n[highway=trailhead][name](area=colorado) |
| "Somewhere with a patio for dinner" | nw[amenity=restaurant][outdoor_seating=yes](area=colorado) |
| "Rainy day with the kids" | nwr[leisure=trampoline_park,bowling_alley,amusement_arcade,escape_game](area=colorado) |
| "Where should we watch the sunset?" | nwr[tourism=viewpoint][name](area=colorado), ranked by drive_times |
Trailheads are the case for asking rather than guessing: they are a highway
value, not leisure or tourism. The category cheat-sheet maps the everyday
concepts to the key that actually holds them.
Some questions are joins rather than queries. "Dinner and a movie within
walking distance of each other" is the near tool; "a park I can walk to from
this address" is walk_reach, which follows real sidewalks and so correctly
excludes the park across an uncrossable freeway; "three breweries within
walking distance of each other" is a runtime recipe.
Where it lies to you
The data is volunteer-mapped, and the gaps are not random. These three failures account for most wrong answers, and each looks like a correct query returning an honest count.
A count is not an answer. nwr[leisure=swimming_pool](area=colorado)
matches thousands of pools. Fewer than one in twenty has a name and none carry
access=public — they are overwhelmingly backyards. "Public pool" is not a
tag. Filter to named results, or ask for leisure=water_park.
A missing tag means a missing mapper, not a missing thing.
nw[amenity=bar][live_music=yes](area=colorado) matches a single bar in the
whole state, and Colorado has rather more than one bar with live music. The
same trap sits under fee=no, wheelchair=yes, dog=yes, and every other
optional attribute. Filter on them to rank candidates, never to exclude.
Opening hours, prices, and closures are not in here. The database is a dated extract. It does not know the museum shut last spring. Treat it as a list of candidates to verify.