# openstreetmap-mcp-server MCP server

Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-cyanheads-openstreetmap-mcp-server
- Repository: https://github.com/cyanheads/openstreetmap-mcp-server

## Install
- Command: `npx -y @cyanheads/openstreetmap-mcp-server`
- Endpoint: https://openstreetmap.caseyjhand.com/mcp
- Auth: Not captured

## Setup notes
- Package: Npm @cyanheads/openstreetmap-mcp-server v0.3.6
- Environment variable: OSM_NOMINATIM_BASE_URL (default https://nominatim.openstreetmap.org)
- Environment variable: OSM_USER_AGENT (default openstreetmap-mcp-server/0.3.6)
- Environment variable: OSM_OVERPASS_BASE_URL
- Environment variable: OSM_OVERPASS_ENDPOINTS (default https://overpass-api.de/api/interpreter)
- Environment variable: OSM_OVERPASS_MAX_CONCURRENCY (default 2)
- Environment variable: MCP_LOG_LEVEL (default info)
- Package: Npm @cyanheads/openstreetmap-mcp-server v0.3.6
- Environment variable: MCP_HTTP_HOST (default 127.0.0.1)
- Environment variable: MCP_HTTP_PORT (default 3010)
- Environment variable: MCP_HTTP_ENDPOINT_PATH (default /mcp)
- Environment variable: MCP_PUBLIC_URL
- Environment variable: MCP_AUTH_MODE (default none)
- Environment variable: OSM_NOMINATIM_BASE_URL (default https://nominatim.openstreetmap.org)
- Environment variable: OSM_USER_AGENT (default openstreetmap-mcp-server/0.3.6)
- Environment variable: OSM_OVERPASS_BASE_URL
- Environment variable: OSM_OVERPASS_ENDPOINTS (default https://overpass-api.de/api/interpreter)
- Environment variable: OSM_OVERPASS_MAX_CONCURRENCY (default 2)
- Environment variable: MCP_LOG_LEVEL (default info)
- Remote endpoint: https://openstreetmap.caseyjhand.com/mcp

## Tools
- openstreetmap_search_places (Geocode a place name or address) - Convert a place name or address to geographic coordinates and structured place data via Nominatim/OpenStreetMap. Accepts either a free-form query string (e.g., "Space Needle Seattle") or structured address fields (street, city, state, etc.) — the two modes are mutually exclusive. Returns results ordered by Nominatim relevance (importance score). Use countrycodes to restrict results to specific countries. For exhaustive POI lists in an area, use openstreetmap_query_nearby or openstreetmap_query_bbox instead — Nominatim search returns best matches, not all matching objects. Results are matched on name and address relevance, never on an OSM attribute tag: extratags decorates whichever object matched and cannot select one, so a named feature may resolve to a different OSM object than the one carrying the tags you want. To filter or enumerate by tag (surface, sac_scale, ele, access, amenity), use openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw. Endpoint: https://openstreetmap.caseyjhand.com/mcp
- openstreetmap_reverse_geocode (Reverse geocode coordinates to an address) - Convert latitude/longitude coordinates to the nearest address or place name via Nominatim/OpenStreetMap. Returns the closest matching OSM object at the given coordinates. Note: Nominatim finds the nearest indexed OSM object — in dense areas this may differ from the address at the exact coordinate. Use zoom=18 for building-level accuracy, lower zoom values for coarser resolution (e.g., zoom=10 for city-level). The match is made on proximity and layer, never on an OSM attribute tag: extratags decorates the matched object and cannot select one. To find the objects in an area that carry a given tag, use openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw. Endpoint: https://openstreetmap.caseyjhand.com/mcp
- openstreetmap_lookup_objects (Look up address details for OSM objects by ID) - Fetch address details for one or more known OSM objects by their IDs via Nominatim. Each ID must be prefixed with N (node), W (way), or R (relation), e.g., "N240109189", "W50637691", "R146656". Up to 50 IDs per call. Use when an OSM ID is already known from a prior openstreetmap_query_nearby or openstreetmap_query_bbox result — this is more efficient than a geocoding round trip to get the full Nominatim address record. The results are exactly the objects named in osm_ids: extratags decorates them and cannot select them, and there is no way to ask this tool for objects carrying a given tag. Discover such objects with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw, then pass their IDs here. Endpoint: https://openstreetmap.caseyjhand.com/mcp
- openstreetmap_query_nearby (Find OSM features near a point) - Find OSM features within a radius around a geographic point via the Overpass API. The primary tool for "what's near X?" spatial queries. Use amenity for common POI types (hospital, pharmacy, restaurant, cafe, school, atm, etc.) or tag_key + tag_value for other OSM categories (leisure=park, shop=supermarket, natural=peak). Exactly one of amenity or tag_key/tag_value must be provided. Results include all element types specified (nodes cover standalone POIs, ways cover buildings and areas), each with its full OSM tag set, sorted nearest-first by distance_meters from the center point. The extratags flag is not needed here — it applies only to the Nominatim-backed openstreetmap_search_places, openstreetmap_reverse_geocode, and openstreetmap_lookup_objects tools. Endpoint: https://openstreetmap.caseyjhand.com/mcp
- openstreetmap_query_bbox (Find OSM features within a bounding box) - Find OSM features within a rectangular geographic area (bounding box) via the Overpass API. Useful for area surveys where you want everything in a region, not proximity searches. Use amenity for common POI types (hospital, pharmacy, cafe, school, etc.) or tag_key + tag_value for other OSM categories (leisure=park, shop=supermarket, natural=peak). Exactly one of amenity or tag_key/tag_value must be provided. Every feature includes its full OSM tag set; the extratags flag (used by the Nominatim-backed openstreetmap_search_places, openstreetmap_reverse_geocode, and openstreetmap_lookup_objects tools) does not apply here. For proximity searches centered on a point, use openstreetmap_query_nearby instead. Endpoint: https://openstreetmap.caseyjhand.com/mcp
- openstreetmap_query_raw (Execute a raw Overpass QL query) - Execute a raw Overpass QL query for advanced spatial queries that the convenience tools do not cover. Use for multi-type queries, union queries, relation membership, historical queries, or any operation requiring full Overpass QL expressiveness. The query must include [out:json]. Example: "[out:json][timeout:15];node[\"natural\"=\"peak\"](47.5,-122.5,47.7,-122.2);out body;" Returns one page of the result set: use limit and offset to page through it, and read totalFound and truncated to see how much the query matched. Validate complex queries at overpass-turbo.eu before use. For simple "what's near X?" or "what's in this area?" queries, use openstreetmap_query_nearby or openstreetmap_query_bbox instead. Endpoint: https://openstreetmap.caseyjhand.com/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: io.github.cyanheads
- Version: 0.3.6
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Aug 2, 2026
- Source: https://registry.modelcontextprotocol.io
