Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data via MCP. STDIO or Streamable HTTP.
Strong tool definitions with comprehensive schemas, detailed descriptions, and clear parameter documentation. All 5 tools have explicit input schemas with type definitions, descriptions, and constraints. Tool names follow verb_noun pattern (query_*, lookup_*, reverse_geocode). Descriptions are detailed (150-400 chars) and explain WHEN to use each tool vs alternatives. Parameters include ranges, enums, and dependency hints. Output schemas are documented in descriptions. Minor gaps: no explicit error recovery guidance in descriptions, and no tool annotations visible in source (toolAnnotations=true claimed but not verified in code).
Fetch the Nominatim address record for up to 50 known OSM objects by ID, each prefixed N (node), W (way), or R (relation), e.g. "N240109189". Use it for IDs already in hand from openstreetmap_query_nearby or openstreetmap_query_bbox; it returns only objects named in osm_ids, listing any that resolve to nothing under not_found, and cannot select by tag, so discover objects with those tools or openstreetmap_query_raw first.
Find OSM features inside an area via the Overpass API, for surveys of everything in a region (openstreetmap_query_nearby covers proximity to a point). Scope with the four corner fields south, west, north, east, or with within and a single OSM boundary ref such as a city relation or a park way, which searches the boundary polygon itself instead of an overcovering box; never both. Filter with amenity, or with tag_key plus an optional tag_value, ANDing up to five more filters; every feature returns with its full OSM tag set (no extratags flag here).
Find OSM features within a radius of a point via the Overpass API, the tool for "what is near X?" questions. Filter with amenity, or with tag_key plus an optional tag_value, ANDing up to five more filters; every feature returns with its full OSM tag set (no extratags flag here), sorted nearest-first by distance_meters, with nodes covering standalone POIs and ways covering buildings and areas.
Run an arbitrary Overpass QL query for anything the convenience tools cannot express: multi-type or union queries, relation membership, historical queries, regex tag matching. The query must include [out:json], e.g. "[out:json][timeout:15];node[\"natural\"=\"peak\"](47.5,-122.5,47.7,-122.2);out body;"; scope to an OSM boundary with rel(<id>);map_to_area->.a; or way(<id>);map_to_area->.a; then (area.a) on each statement (the 2400000000 way-area offset is gone since Overpass 0.7.57; openstreetmap_query_bbox takes the same scope as within, without QL). The response is one page: page with limit and offset, read totalFound and truncated for the whole match, and an element over max_element_bytes arrives with its members, nodes or geometry array withheld whole and withheldNotice saying how to fetch it back. For plain "near X" or "in this area" questions use openstreetmap_query_nearby or openstreetmap_query_bbox.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) claimed in feature flags but not visible in source code schemas. Cannot verify toolAnnotations=true.
Error handling descriptions lack recovery guidance. Descriptions state what tools do but do not explain what to do if a query fails (e.g., 'If Overpass times out, retry with a smaller radius or longer timeout_seconds').
openstreetmap_query_raw description includes example query with escaped quotes, which may confuse LLMs. Example values in descriptions risk literal reuse.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Convert a latitude/longitude pair to the nearest address or named place via Nominatim. The result is the closest indexed OSM object at the requested zoom (18 building, 10 city), which in dense areas can be a neighbouring feature rather than the one containing the coordinate; proximity and layer pick it, never an OSM attribute tag, so find features by tag with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw.
No batch variants offered. Agents querying multiple nearby locations must call openstreetmap_query_nearby repeatedly instead of a single batch call, wasting tokens and latency.
Parameter 'filters' in query tools uses generic object schema without explicit validation of key/value uniqueness or metacharacter rejection at schema level. Relies on description text only.