Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/openstreetmap-mcp-server

REMOTE · OPENSTREETMAP.CASEYJHAND.COM · 2 COMPONENTS · SCANNED SEP 28

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

+7 this week 86 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3651 tokens (~608/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 6 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 7 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.cyanheads/openstreetmap-mcp-server server?

io.github.cyanheads/openstreetmap-mcp-server is a hosted endpoint at https://openstreetmap.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · openstreetmap.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-openstreetmap-mcp-server 'https://openstreetmap.caseyjhand.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "cyanheads-openstreetmap-mcp-server": {
      "url": "https://openstreetmap.caseyjhand.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "cyanheads-openstreetmap-mcp-server": {
      "type": "http",
      "url": "https://openstreetmap.caseyjhand.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.cyanheads-openstreetmap-mcp-server]
url = "https://openstreetmap.caseyjhand.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-openstreetmap-mcp-server": {
      "type": "remote",
      "url": "https://openstreetmap.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-openstreetmap-mcp-server --url 'https://openstreetmap.caseyjhand.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-openstreetmap-mcp-server:
    url: "https://openstreetmap.caseyjhand.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "cyanheads-openstreetmap-mcp-server": {
      "Transport": "http",
      "Url": "https://openstreetmap.caseyjhand.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add cyanheads-openstreetmap-mcp-server -t streamable-http -u 'https://openstreetmap.caseyjhand.com/mcp'
// mcp.json
{
  "mcpServers": {
    "cyanheads-openstreetmap-mcp-server": {
      "type": "http",
      "url": "https://openstreetmap.caseyjhand.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 28 Sept 26 +7
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 22 Sept 26 0
    • Server version: 0.5.1 → 0.5.2 functional
  • 17 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “openstreetmap_query_raw” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_search_places” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_reverse_geocode” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_nearby” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_bbox” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_lookup_objects” rewrote its description, which is the text the model reads security
    • Schema quality: 695 → 608 ▲ functional
    • Server version: 0.5.0 → 0.5.1 functional
  • 16 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “openstreetmap_query_raw” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_nearby” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_bbox” rewrote its description, which is the text the model reads security
    • Server version: 0.4.8 → 0.5.0 functional
    • Server version: 0.4.7 → 0.4.8 functional
    • “openstreetmap_query_bbox” added an optional parameter “within” cosmetic
    • “openstreetmap_query_bbox” reworded the description of “south” cosmetic
    • “openstreetmap_query_bbox” reworded the description of “tag_key” cosmetic
    • “openstreetmap_search_places” reworded the description of “viewbox” cosmetic
    • “openstreetmap_search_places” reworded the description of “query” cosmetic
    • “openstreetmap_search_places” reworded the description of “layer” cosmetic
    • “openstreetmap_search_places” reworded the description of “extratags” cosmetic
    • “openstreetmap_search_places” reworded the description of “exclude_place_ids” cosmetic
    • “openstreetmap_search_places” reworded the description of “countrycodes” cosmetic
    • “openstreetmap_reverse_geocode” reworded the description of “layer” cosmetic
    • “openstreetmap_reverse_geocode” reworded the description of “extratags” cosmetic
    • “openstreetmap_query_raw” reworded the description of “timeout_seconds” cosmetic
    • “openstreetmap_query_raw” reworded the description of “offset” cosmetic
    • “openstreetmap_query_raw” reworded the description of “max_element_bytes” cosmetic
    • “openstreetmap_query_nearby” reworded the description of “tag_key” cosmetic
    • “openstreetmap_query_nearby” reworded the description of “amenity” cosmetic
    • “openstreetmap_lookup_objects” reworded the description of “extratags” cosmetic
    • “openstreetmap_query_bbox” reworded the description of “amenity” cosmetic
    • “openstreetmap_query_bbox” made “west” optional cosmetic
    • “openstreetmap_query_bbox” made “south” optional cosmetic
    • “openstreetmap_query_bbox” made “north” optional cosmetic
    • “openstreetmap_query_bbox” made “east” optional cosmetic
    • Tool “openstreetmap_query_bbox” changed its title: Find OSM features within a bounding box → Find OSM features inside a bounding box or an OSM boundary cosmetic
  • 11 Sept 26 0
    • Server version: 0.4.6 → 0.4.7 functional
    • “openstreetmap_search_places” reworded the description of “countrycodes” cosmetic
  • 10 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “openstreetmap_query_nearby” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_bbox” rewrote its description, which is the text the model reads security
    • Tool “openstreetmap_query_raw” rewrote its description, which is the text the model reads security
    • Schema quality: 556 → 685 ▼ functional
    • Schema quality: 556 → 632 ▼ functional
    • Server version: 0.4.5 → 0.4.6 functional
    • Server version: 0.4.4 → 0.4.5 functional
    • Server version: 0.4.3 → 0.4.4 functional
    • “openstreetmap_query_bbox” added an optional parameter “filters” cosmetic
    • “openstreetmap_query_nearby” added an optional parameter “filters” cosmetic
    • “openstreetmap_search_places” added an optional parameter “bounded” cosmetic
    • “openstreetmap_search_places” added an optional parameter “viewbox” cosmetic
    • “openstreetmap_query_raw” added an optional parameter “max_element_bytes” cosmetic
    • “openstreetmap_query_bbox” reworded the description of “tag_key” cosmetic
    • “openstreetmap_query_bbox” reworded the description of “tag_value” cosmetic
    • “openstreetmap_query_nearby” reworded the description of “tag_value” cosmetic
    • “openstreetmap_query_nearby” reworded the description of “tag_key” cosmetic
    • “openstreetmap_search_places” reworded the description of “layer” cosmetic
    • “openstreetmap_search_places” reworded the description of “exclude_place_ids” cosmetic
    • “openstreetmap_reverse_geocode” reworded the description of “layer” cosmetic
  • 9 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 28 Sept 2026 · Probed https://openstreetmap.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 4 Sept 2026 3 Dec 2026 ECDSA 256 ECDSA-SHA256 a6985204ed51ae050e7738aa6be668e9
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of openstreetmap.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
openstreetmap.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://openstreetmap.caseyjhand.com/mcp Verified 200
http (plaintext) http://openstreetmap.caseyjhand.com/mcp HTTPS enforced 301 https://openstreetmap.caseyjhand.com/mcp
MCP tools · 6 exposed · ~3,507 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
openstreetmap_lookup_objects ~259

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.

NameTypeReqDescription
extratagsboolean–Include each looked-up object's extra OSM tags — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). An absent tag des…
languagestring–Preferred language for names (BCP 47 code).
osm_idsarrayyesOSM IDs to look up, each prefixed with N (node), W (way), or R (relation). Always an array, including for a single ID: ["N240109189"], ["W50637691", "R146656"]. Up to 50 IDs per call.
NameTypeReqDescription
attributionstring–Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
errorobject–Present when the call failed. Absent on success.
not_foundarray–OSM IDs from the request that returned no result.
resultsarray–Address details for the requested OSM IDs that were found.
tagSelectionCaveatstring–Standing caveat: tag-based selection lives on the Overpass tools (openstreetmap_query_nearby, openstreetmap_query_bbox, openstreetmap_query_raw), never here. extratags decorates the returned objects…
totalnumber–Number of results returned.

No examples provided.

openstreetmap_query_bbox ~787

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).

NameTypeReqDescription
amenitystring–OSM amenity tag value shortcut (e.g. "cafe", "bench", "hospital"). Exactly one primary mode is required: this or tag_key, never both.
eastnumber–Eastern boundary longitude (maximum longitude). A value below west describes an antimeridian crossing rather than an inverted box.
element_typesarray–OSM element types to search, at least one. Ways cover most buildings and areas; nodes cover most standalone POIs. Add "relation" for complex structures. Omit the field to search nodes and ways; an em…
filtersarray–Up to five additional filters, ANDed with the required primary amenity or tag_key filter in input order. Omitted or [] adds no conditions. Keys must be unique after trimming; keys and values must not…
limitinteger–Maximum results to return. Applied after the Overpass query — if the area has more features, they are truncated.
northnumber–Northern boundary latitude (maximum latitude).
offsetinteger–Number of matching features to skip before applying limit, for paging through a large result set. The full match set is fetched and cached ~10 minutes keyed by the query, so re-paging at a new offset…
southnumber–Southern boundary latitude (minimum latitude). One of four corner fields: supply all four, or use within instead.
tag_keystring–Primary OSM tag key (e.g. "leisure", "shop", "natural"); omit tag_value to match any feature carrying the key, or supply it for exact equality. The alternative to amenity, never both. Additional filt…
tag_valuestring–Literal value paired with tag_key for exact equality (e.g., "park", "supermarket"); omit for key existence. Explicit empty or whitespace-only values are invalid. Keys and values are trimmed; blank un…
timeout_secondsinteger–Overpass query timeout in seconds. Increase for large bounding boxes or dense areas.
westnumber–Western boundary longitude (minimum longitude). A west greater than east is valid, not an error: Overpass reads it as an antimeridian-crossing box and returns the union of west..180 and -180..east.
withinstring–OSM boundary to search inside, as one ref: R plus a relation id ("R237385", Seattle) or W plus a closed-way id ("W13800188", a park), case-insensitive. Take it from osm_type plus osm_id on openstreet…
NameTypeReqDescription
areasTimestampstring–Freshness of the Overpass area database, rebuilt on its own schedule and so lagging data_timestamp — a boundary edited since is scoped against its older polygon. Present only on a within call whose e…
attributionstring–Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
data_timestampstring–OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
effectiveAreastring–The boundary scope as resolved: the within ref and the Overpass area it mapped to. Absent when the call used the four corner fields.
effectiveTagstring–The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. "amenity=restaurant, cuisine=italian, name").
elementsarray–Matching OSM features inside the requested scope — the bounding box, or the within boundary — up to the limit.
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.
noticestring–Why this page is empty and what to try: the within ref resolved to no Overpass area, nothing matched (change the scope or tag), or offset ran past the end (retry lower). Absent when results were retu…
servingEndpointstring–Overpass endpoint that answered, as origin and path. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, o…
totalFoundnumber–Total features returned by Overpass before limit truncation.
truncatedboolean–True if results were cut at the limit. Reduce bbox area, add more specific tags, or page with offset to retrieve the rest.

No examples provided.

openstreetmap_query_nearby ~595

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.

NameTypeReqDescription
amenitystring–OSM amenity tag value (e.g. "hospital", "pharmacy", "restaurant", "atm"), shortcut for tag_key="amenity". Exactly one primary mode is required: this or tag_key, never both.
element_typesarray–OSM element types to search, at least one. Ways cover most buildings and areas; nodes cover most standalone POIs. Add "relation" for complex structures like large campuses. Omit the field to search n…
filtersarray–Up to five additional filters, ANDed with the required primary amenity or tag_key filter in input order. Omitted or [] adds no conditions. Keys must be unique after trimming; keys and values must not…
latnumberyesCenter latitude in WGS84 decimal degrees.
limitinteger–Maximum results to return. Applied after the Overpass query — if the area has more features, they are truncated.
lonnumberyesCenter longitude in WGS84 decimal degrees.
offsetinteger–Number of matching features to skip before applying limit, for paging through a large result set. Features are distance-sorted before paging, so higher offsets return progressively farther matches; t…
radius_metersnumber–Search radius in meters. Max 50,000m (50km). Keep under 5,000m for dense urban POI queries to avoid slow responses.
tag_keystring–Primary OSM tag key (e.g. "leisure", "shop", "highway"); omit tag_value to match any feature carrying the key, or supply it for exact equality. The alternative to amenity, never both. Additional filt…
tag_valuestring–Literal value paired with tag_key for exact equality (e.g., "park", "supermarket"); omit for key existence. Explicit empty or whitespace-only values are invalid. Keys and values are trimmed; blank un…
timeout_secondsinteger–Overpass query timeout in seconds. Increase for large radius or dense areas.
NameTypeReqDescription
attributionstring–Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
data_timestampstring–OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
effectiveTagstring–The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. "amenity=restaurant, cuisine=italian, name").
elementsarray–Matching OSM features, up to the limit.
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.
noticestring–Why this page is empty and what to try: nothing matched (widen the radius or change the tag), or offset ran past the end (retry lower). Absent when results were returned.
servingEndpointstring–Overpass endpoint that answered, as origin and path. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, o…
totalFoundnumber–Total features returned by Overpass before limit truncation.
truncatedboolean–True if results were cut at the limit. Reduce radius, add more specific tags, or page with offset to retrieve the rest.

No examples provided.

openstreetmap_query_raw ~631

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.

NameTypeReqDescription
limitinteger–Maximum elements to return. Applied after the Overpass query — if the query matched more, they are truncated.
max_element_bytesinteger–Serialized-byte budget for one element, in UTF-8 bytes, applied per element after limit and offset — the dimension limit cannot bound, a single relation or geometry-heavy way. An over-budget element…
offsetinteger–Elements to skip before applying limit, for paging a large result set. The full match set is cached ~10 minutes keyed by the query, so re-paging at a new offset is deterministic and costs no extra re…
querystringyesOverpass QL query string. Must include [out:json]. The server sets the endpoint and User-Agent; do not include those. Example: "[out:json][timeout:15];node[\"natural\"=\"peak\"](47.5,-122.5,47.7,-122…
timeout_secondsinteger–How long Overpass may spend on the query. A [timeout:N] directive in the query string wins over this. The client waits the full value rather than cutting a long query off early, but the endpoint enfo…
NameTypeReqDescription
attributionstring–Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
data_timestampstring–OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
effectiveQuerystring–The Overpass QL string as sent to the API (after any timeout injection).
elementsarray–Raw Overpass elements for this page, up to the limit. Shape varies by type: nodes carry lat/lon, ways nodes[], relations members[]. An element over max_element_bytes swaps those heavy arrays for with…
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass on the next call to retrieve the following page of elements. Present only when more elements remain beyond this page.
noticestring–Why this page is empty and what to try: nothing matched (check the query syntax or broaden the filter), or offset ran past the end (retry lower). Absent when results were returned.
servingEndpointstring–Overpass endpoint that answered, as origin and path. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, o…
totalFoundnumber–Total elements returned by Overpass before limit truncation.
total_elementsnumber–Number of elements returned on this page. See totalFound for the full match count.
truncatedboolean–True if elements were cut at the limit. Narrow the query, or page with offset to retrieve the rest.
withheldElementsarray–Elements on this page that exceeded max_element_bytes, each with the arguments that fetch it back whole. Absent when every element fit.
withheldNoticestring–How to retrieve the withheld arrays, one element per call. Absent when every element fit.

No examples provided.

openstreetmap_reverse_geocode ~337

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.

NameTypeReqDescription
extratagsboolean–Include the matched object's extra OSM tags — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). An absent tag descri…
languagestring–Preferred language for the result (BCP 47 code or Accept-Language string).
latnumberyesLatitude in WGS84 decimal degrees.
layer––Restrict which OSM layer is matched: one of address, poi, railway, natural, manmade, or a comma-separated list of them, in any casing. Any other name is rejected here, not upstream; an empty value co…
lonnumberyesLongitude in WGS84 decimal degrees.
zoominteger–Address detail level, roughly corresponding to map zoom. 18=building, 16=street, 14=neighbourhood, 12=town, 10=city, 8=county, 5=state, 3=country.
NameTypeReqDescription
attributionstring–Required data attribution.
errorobject–Present when the call failed. Absent on success.
resultobject–The closest matching OSM object at the given coordinates.
tagSelectionCaveatstring–Standing caveat: tag-based selection lives on the Overpass tools (openstreetmap_query_nearby, openstreetmap_query_bbox, openstreetmap_query_raw), never here. extratags decorates the returned objects…

No examples provided.

openstreetmap_search_places ~898

Geocode a place name or address to coordinates and structured place data via Nominatim. Send either a free-form query or the structured address fields (street, city, county, state, country, postalcode), never both; results are the best-ranked matches, not every matching object, and matching never uses an OSM attribute tag, so filter or enumerate by tag with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw.

NameTypeReqDescription
boundedboolean–Restrict results to the viewbox instead of merely biasing toward it. Requires viewbox — setting it alone is rejected rather than ignored. With it, a match outside the box is dropped even when it scor…
citystring–City name (structured query).
countrystring–Country name or ISO 3166-1 alpha-2 code (structured query).
countrycodes––Restrict results to one or more countries: comma-separated ISO 3166-1 alpha-2 codes (e.g. "us,ca"), any casing, optional spaces around the commas. Any other form — alpha-3, a semicolon list, a countr…
countystring–County or district (structured query).
exclude_place_idsarray–OSM refs (N/W/R + id) or Nominatim place_ids to drop from results; any other token form is rejected here rather than by Nominatim. Entries are trimmed, lowercase ref prefixes uppercased, a blank entr…
extratagsboolean–Include the matched object's extra OSM tags — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). An absent tag descri…
featureTypestring–Restrict results to a geographic feature type. Automatically implies the address layer.
languagestring–Preferred language for result names (BCP 47 code or Accept-Language string, e.g., "en", "de", "fr,en"). Defaults to local OSM language.
layer––Filter by data layer: one of address, poi, railway, natural, manmade, or a comma-separated list of them, in any casing. Any other name is rejected here, not upstream; an empty value counts as omitted…
limitinteger–Maximum results to return. Nominatim may return fewer when additional results do not sufficiently match. Max 40.
postalcodestring–Postal or ZIP code (structured query).
querystring–Free-form search string, e.g. "Space Needle Seattle" or "1600 Pennsylvania Ave NW, Washington DC". Not combinable with the structured address fields. Nominatim reads commas as an address hierarchy, s…
statestring–State or province (structured query).
streetstring–House number and street name (structured query). Use with city/state/country fields. Cannot be combined with query.
viewboxobject–Rectangular area to bias results toward, disambiguating a name that repeats worldwide (a creek in one watershed, a street in one municipality). Narrower than countrycodes. Bias only by default: a bet…
NameTypeReqDescription
attributionstring–Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
boundedAppliedboolean–True when the viewbox was a hard restriction (bounded=1 was sent), false when it biased ranking only and a match outside it could still be returned. Absent when no viewbox was supplied.
capnumber–The limit applied to this request.
effectiveQuerystring–The effective query sent to Nominatim — the free-form query string, or a reconstructed string from the provided structured address fields.
effectiveViewboxobject–The viewbox forwarded to Nominatim on this call, echoed so an ambiguous result can be read against the area that scoped it. Absent when no viewbox was supplied.
errorobject–Present when the call failed. Absent on success.
nextExcludeIdsarray–Accumulated exclude tokens (prior excludes plus this page) to pass as exclude_place_ids on the next call. Each is a stable OSM ref (N/W/R + osm_id) when the result carries one, the Nominatim place_id…
noticestring–Paging guidance, in two cases: results were capped at limit with a probe confirming a further match at the query's relevance cutoff (truncated true — keep paging with nextExcludeIds), or an exclude_p…
resultsarray–Geocoding results, ordered by Nominatim relevance (importance score descending).
shownnumber–Number of results returned.
tagSelectionCaveatstring–Standing caveat: tag-based selection lives on the Overpass tools (openstreetmap_query_nearby, openstreetmap_query_bbox, openstreetmap_query_raw), never here. extratags decorates the returned objects…
totalnumber–Number of results returned.
truncatedboolean–True when the page filled the requested limit and a same-call probe confirmed another match at this query's relevance cutoff; absent otherwise. Absence is not exhaustion — excluding a full page's ids…

No examples provided.

Common questions

What is the io.github.cyanheads/openstreetmap-mcp-server server?

io.github.cyanheads/openstreetmap-mcp-server is listed in the public MCP registry as io.github.cyanheads/openstreetmap-mcp-server. Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data. This page covers its hosted endpoint (https://openstreetmap.caseyjhand.com/mcp).

Is the io.github.cyanheads/openstreetmap-mcp-server server safe to use?

io.github.cyanheads/openstreetmap-mcp-server scores 86 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/openstreetmap-mcp-server server expose?

io.github.cyanheads/openstreetmap-mcp-server exposes 6 tools: openstreetmap_search_places, openstreetmap_reverse_geocode, openstreetmap_lookup_objects, openstreetmap_query_nearby, openstreetmap_query_bbox, openstreetmap_query_raw. Their descriptions and schemas cost roughly 3,507 tokens of context every time the server is loaded.

Does the io.github.cyanheads/openstreetmap-mcp-server server require authentication?

No. We connected to io.github.cyanheads/openstreetmap-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/openstreetmap-mcp-server server still maintained?

io.github.cyanheads/openstreetmap-mcp-server is still listed as active in the MCP registry. We last reached this channel on 28 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.