Skip to main content
Glama

openstreetmap-mcp-server

Find OSM features inside a bounding box or an OSM boundary

openstreetmap_query_bbox
Read-onlyIdempotent

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

Input Schema

NameRequiredDescriptionDefault
eastNoEastern boundary longitude (maximum longitude). A value below west describes an antimeridian crossing rather than an inverted box.
westNoWestern 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.
limitNoMaximum results to return, up to 500 per call; a larger value is served as 500 and limitNotice says so. Applied after the Overpass query — if the area has more features, they are truncated.
northNoNorthern boundary latitude (maximum latitude).
southNoSouthern boundary latitude (minimum latitude). One of four corner fields: supply all four, or use within instead.
offsetNoNumber 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 is deterministic and costs no extra upstream request. Pass the nextOffset value from a prior truncated response.
withinNoOSM 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 openstreetmap_search_places, openstreetmap_reverse_geocode, or openstreetmap_lookup_objects. The alternative to the four corner fields, never both. A node ref is rejected: a node is never an area. A ref that maps to no Overpass area returns an empty page whose notice names the cause.
amenityNoOSM amenity tag value shortcut (e.g. "cafe", "bench", "hospital"). Exactly one primary mode is required: this or tag_key, never both. Many categories live under other keys — tourism (museums, hotels, viewpoints), leisure (parks, pitches, playgrounds), shop (supermarkets), historic (castles, memorials), natural (beaches, peaks); query those with tag_key and tag_value.
filtersNoUp to five additional filters, ANDed with the required primary amenity or tag_key filter in input order. Omitted or [] adds no conditions. Exact values miss semicolon-list values; set match "list_item" on the entry. Keys must be unique after trimming; keys and values must not contain Overpass QL metacharacters (" \ [ ] ; ( )).
tag_keyNoPrimary 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 filters are ANDed with this tag.
tag_valueNoLiteral value paired with tag_key for exact equality (e.g., "park", "supermarket"); omit for key existence. Exact equality misses semicolon-list values (cuisine=pizza;italian); tag_value_match "list_item" catches them. Explicit empty or whitespace-only values are invalid. Keys and values are trimmed; blank unused fields are ignored in amenity mode.
element_typesNoOSM element types to search, at least one. Nodes cover most standalone POIs, ways most buildings and areas, relations large parks, lakes, campuses, and boundaries. Omit the field to search all three; pass ["node", "way"] to leave relations out. An empty array is rejected because it can only match nothing.
tag_value_matchNoHow tag_value matches: "exact" (default) compares the whole value; "list_item" matches one item of a semicolon list, so "pizza" finds cuisine=pizza;italian. Needs tag_value; not available with amenity.
timeout_secondsNoOverpass query timeout in seconds. Increase for large bounding boxes or dense areas.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoWhy 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). On any page, also names the key to retry with when amenity names a value OpenStreetMap tags under another key (tourism=museum, not amenity=museum). Absent otherwise.
elementsNoMatching OSM features inside the requested scope — the bounding box, or the within boundary — up to the limit.
truncatedNoTrue if results were cut at the limit. Reduce bbox area, add more specific tags, or page with offset to retrieve the rest.
nextOffsetNoOffset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.
totalFoundNoTotal features returned by Overpass before limit truncation.
attributionNoRequired data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
limitNoticeNoPresent when limit exceeded this tool's maximum: the value requested and the one applied.
effectiveTagNoThe full ordered AND filter chain: key=value for equality, key∋value for a list-item match, key alone for existence (e.g. "amenity=restaurant, cuisine∋pizza, name").
effectiveAreaNoThe boundary scope as resolved: the within ref, the boundary it reached (its name, boundary, and admin_level tags, those it carries), and the Overpass area it mapped to. A mistyped ref resolves too, so check the name. Absent when the call used the four corner fields.
areasTimestampNoFreshness 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 endpoint reported it.
data_timestampNoOSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
servingEndpointNoOverpass endpoint that answered, named by origin alone (scheme, host, port), with "(entry N)" added when two configured endpoints share an origin. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, or stale.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / element_types / default
      Previous value: -[
      -  "node",
      -  "way"
      -]New value: +[
      +  "node",
      +  "way",
      +  "relation"
      +]
    • changedInput schema / properties / element_types / description
      Previous value: -"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 empty array is rejected because it can only match nothing."New value: +"OSM element types to search, at least one. Nodes cover most standalone POIs, ways most buildings and areas, relations large parks, lakes, campuses, and boundaries. Omit the field to search all three; pass [\"node\", \"way\"] to leave relations out. An empty array is rejected because it can only match nothing."
    • changedOutput schema / properties / effectiveArea / description
      Previous value: -"The boundary scope as resolved: the within ref and the Overpass area it mapped to. Absent when the call used the four corner fields."New value: +"The boundary scope as resolved: the within ref, the boundary it reached (its name, boundary, and admin_level tags, those it carries), and the Overpass area it mapped to. A mistyped ref resolves too, so check the name. Absent when the call used the four corner fields."
  2. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, a list_item match has no value, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query, or its response passed the server's 64 MiB read ceiling. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 with no busy-dispatcher remark — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, a 425, or a 504 or 408 whose remark says its dispatcher is too busy or turned off — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, a list_item match has no value, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query, or its response passed the server's 64 MiB read ceiling. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 with no busy-dispatcher remark — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, a 425, or a 504 or 408 whose remark says its dispatcher is too busy or turned off — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint completed within its attempt window, or the total budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler."
  3. Changed15 schema fields changed
    • changedInput schema / properties / amenity / description
      Previous value: -"OSM amenity tag value shortcut (e.g. \"cafe\", \"bench\", \"hospital\"). Exactly one primary mode is required: this or tag_key, never both."New value: +"OSM amenity tag value shortcut (e.g. \"cafe\", \"bench\", \"hospital\"). Exactly one primary mode is required: this or tag_key, never both. Many categories live under other keys — tourism (museums, hotels, viewpoints), leisure (parks, pitches, playgrounds), shop (supermarkets), historic (castles, memorials), natural (beaches, peaks); query those with tag_key and tag_value."
    • changedInput schema / properties / filters / description
      Previous value: -"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 contain Overpass QL metacharacters (\" \\ [ ] ; ( ))."New value: +"Up to five additional filters, ANDed with the required primary amenity or tag_key filter in input order. Omitted or [] adds no conditions. Exact values miss semicolon-list values; set match \"list_item\" on the entry. Keys must be unique after trimming; keys and values must not contain Overpass QL metacharacters (\" \\ [ ] ; ( ))."
    • changedInput schema / properties / filters / items / description
      Previous value: -"One additional literal equality or key-existence filter."New value: +"One additional equality, list-item, or key-existence filter."
    • addedInput schema / properties / filters / items / properties / match
      Added value: +{
      +  "description": "How value matches: \"exact\" (default) or \"list_item\", one item of a semicolon list. Needs value.",
      +  "enum": [
      +    "exact",
      +    "list_item"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / filters / items / properties / value / description
      Previous value: -"Literal exact-match value. Omit for key existence; an explicitly blank value is invalid. Trimmed before matching."New value: +"Literal value to match. Omit for key existence; an explicitly blank value is invalid. Trimmed before matching."
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum results to return. Applied after the Overpass query — if the area has more features, they are truncated."New value: +"Maximum results to return, up to 500 per call; a larger value is served as 500 and limitNotice says so. Applied after the Overpass query — if the area has more features, they are truncated."
    • changedInput schema / properties / limit / maximum
      Previous value: -500New value: +10000
    • changedInput schema / properties / tag_value / description
      Previous value: -"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 unused fields are ignored in amenity mode."New value: +"Literal value paired with tag_key for exact equality (e.g., \"park\", \"supermarket\"); omit for key existence. Exact equality misses semicolon-list values (cuisine=pizza;italian); tag_value_match \"list_item\" catches them. Explicit empty or whitespace-only values are invalid. Keys and values are trimmed; blank unused fields are ignored in amenity mode."
    • addedInput schema / properties / tag_value_match
      Added value: +{
      +  "description": "How tag_value matches: \"exact\" (default) compares the whole value; \"list_item\" matches one item of a semicolon list, so \"pizza\" finds cuisine=pizza;italian. Needs tag_value; not available with amenity.",
      +  "enum": [
      +    "exact",
      +    "list_item"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / effectiveTag / description
      Previous value: -"The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. \"amenity=restaurant, cuisine=italian, name\")."New value: +"The full ordered AND filter chain: key=value for equality, key∋value for a list-item match, key alone for existence (e.g. \"amenity=restaurant, cuisine∋pizza, name\")."
    • changedOutput schema / properties / elements / items / properties / lat / description
      Previous value: -"Latitude (present for nodes and ways/relations with computed center)."New value: +"Latitude: a node's own, or a way's or relation's bounding-box center."
    • changedOutput schema / properties / elements / items / properties / lon / description
      Previous value: -"Longitude (present for nodes and ways/relations with computed center)."New value: +"Longitude: a node's own, or a way's or relation's bounding-box center."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, or a 425 — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, a list_item match has no value, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query, or its response passed the server's 64 MiB read ceiling. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 with no busy-dispatcher remark — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, a 425, or a 504 or 408 whose remark says its dispatcher is too busy or turned off — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / limitNotice
      Added value: +{
      +  "description": "Present when limit exceeded this tool's maximum: the value requested and the one applied.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"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 returned."New value: +"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). On any page, also names the key to retry with when amenity names a value OpenStreetMap tags under another key (tourism=museum, not amenity=museum). Absent otherwise."
  4. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, or a 425 — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_scope",
      -  "invalid_bbox",
      -  "invalid_tag",
      -  "query_timeout",
      -  "result_too_large",
      -  "rate_limited",
      -  "upstream_error",
      -  "overpass_gateway_timeout",
      -  "overpass_unavailable",
      -  "endpoints_exhausted",
      -  "endpoints_unavailable"
      -]New value: +[
      +  "invalid_scope",
      +  "invalid_bbox",
      +  "invalid_tag",
      +  "query_timeout",
      +  "result_too_large",
      +  "rate_limited",
      +  "upstream_error",
      +  "overpass_gateway_timeout",
      +  "overpass_unavailable",
      +  "endpoints_exhausted",
      +  "endpoints_unavailable",
      +  "endpoints_rejected",
      +  "pacer_shed"
      +]
    • changedOutput schema / properties / servingEndpoint / description
      Previous value: -"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, or stale."New value: +"Overpass endpoint that answered, named by origin alone (scheme, host, port), with \"(entry N)\" added when two configured endpoints share an origin. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, or stale."
  5. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."
  6. Changed10 schema fields changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "required": [
      -      "amenity"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "required": [
      -      "tag_key"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "south",
      +      "west",
      +      "north",
      +      "east",
      +      "amenity"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "south",
      +      "west",
      +      "north",
      +      "east",
      +      "tag_key"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "within",
      +      "amenity"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "within",
      +      "tag_key"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / south / description
      Previous value: -"Southern boundary latitude (minimum latitude)."New value: +"Southern boundary latitude (minimum latitude). One of four corner fields: supply all four, or use within instead."
    • addedInput schema / properties / within
      Added value: +{
      +  "description": "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 openstreetmap_search_places, openstreetmap_reverse_geocode, or openstreetmap_lookup_objects. The alternative to the four corner fields, never both. A node ref is rejected: a node is never an area. A ref that maps to no Overpass area returns an empty page whose notice names the cause.",
      +  "pattern": "^[RWrw]\\d+$",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "south",
      -  "west",
      -  "north",
      -  "east"
      -]
    • addedOutput schema / properties / areasTimestamp
      Added value: +{
      +  "description": "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 endpoint reported it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / effectiveArea
      Added value: +{
      +  "description": "The boundary scope as resolved: the within ref and the Overpass area it mapped to. Absent when the call used the four corner fields.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / elements / description
      Previous value: -"Matching OSM features within the bounding box, up to the limit."New value: +"Matching OSM features inside the requested scope — the bounding box, or the within boundary — up to the limit."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_bbox",
      -  "invalid_tag",
      -  "query_timeout",
      -  "result_too_large",
      -  "rate_limited",
      -  "upstream_error",
      -  "overpass_gateway_timeout",
      -  "overpass_unavailable",
      -  "endpoints_exhausted",
      -  "endpoints_unavailable"
      -]New value: +[
      +  "invalid_scope",
      +  "invalid_bbox",
      +  "invalid_tag",
      +  "query_timeout",
      +  "result_too_large",
      +  "rate_limited",
      +  "upstream_error",
      +  "overpass_gateway_timeout",
      +  "overpass_unavailable",
      +  "endpoints_exhausted",
      +  "endpoints_unavailable"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Why this page is empty and what to try: nothing matched (change the bounding box or tag), or offset ran past the end (retry lower). Absent when results were returned."New value: +"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 returned."
  7. Changed5 schema fields changed
    • changedInput schema / properties / amenity / description
      Previous value: -"OSM amenity tag value shortcut (e.g., \"cafe\", \"bench\", \"hospital\"). Cannot be combined with tag_key/tag_value."New value: +"OSM amenity tag value shortcut (e.g. \"cafe\", \"bench\", \"hospital\"). Exactly one primary mode is required: this or tag_key, never both."
    • changedInput schema / properties / tag_key / description
      Previous value: -"Primary OSM tag key (e.g., \"leisure\", \"shop\", \"natural\"); omit tag_value for key existence, or supply it for exact equality. Cannot be combined with amenity. Additional filters are ANDed with this tag."New value: +"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 filters are ANDed with this tag."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Primary tag modes conflict or are missing, a tag key or supplied value is blank, keys repeat after trimming, or any filter contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered — each accepted the query and held the connection past its attempt window instead of failing outright, or the call ran out of its total time budget before another endpoint could be tried. The message names each endpoint and the window it was given. `endpoints_unavailable`: No configured Overpass endpoint could serve the call — the hosts refused the connection, could not be resolved, were throttled, or reported their own instance fault, in some mix. The message names each endpoint and what it did. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 504 — the endpoint is down, restarting, or shedding load. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, throttling, or instance faults, in some mix. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when the page came back empty. Distinguishes a query that matched nothing (try a different bounding box or tag) from an offset past the end of a non-empty result set (retry at a lower offset). Absent when results were returned."New value: +"Why this page is empty and what to try: nothing matched (change the bounding box or tag), or offset ran past the end (retry lower). Absent when results were returned."
    • changedOutput schema / properties / servingEndpoint / description
      Previous value: -"Overpass endpoint that produced this response, as origin and path. Differs from the first configured endpoint when a mirror answered after the primary failed, and names the endpoint that served a cached response rather than the one this call would have tried. Pair it with data_timestamp when a result looks unexpectedly slow, sparse, or stale."New value: +"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, or stale."
  8. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Primary tag modes conflict or are missing, a tag key or supplied value is blank, keys repeat after trimming, or any filter contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Primary tag modes conflict or are missing, a tag key or supplied value is blank, keys repeat after trimming, or any filter contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered — each accepted the query and held the connection past its attempt window instead of failing outright, or the call ran out of its total time budget before another endpoint could be tried. The message names each endpoint and the window it was given. `endpoints_unavailable`: No configured Overpass endpoint could serve the call — the hosts refused the connection, could not be resolved, were throttled, or reported their own instance fault, in some mix. The message names each endpoint and what it did. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_bbox",
      -  "invalid_tag",
      -  "query_timeout",
      -  "result_too_large",
      -  "rate_limited",
      -  "upstream_error",
      -  "overpass_gateway_timeout",
      -  "overpass_unavailable",
      -  "endpoints_exhausted"
      -]New value: +[
      +  "invalid_bbox",
      +  "invalid_tag",
      +  "query_timeout",
      +  "result_too_large",
      +  "rate_limited",
      +  "upstream_error",
      +  "overpass_gateway_timeout",
      +  "overpass_unavailable",
      +  "endpoints_exhausted",
      +  "endpoints_unavailable"
      +]
  9. Changed6 schema fields changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "required": [
      -      "amenity"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "required": [
      -      "tag_key",
      -      "tag_value"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "amenity"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "tag_key"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / filters
      Added value: +{
      +  "description": "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 contain Overpass QL metacharacters (\" \\ [ ] ; ( )).",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One additional literal equality or key-existence filter.",
      +    "properties": {
      +      "key": {
      +        "description": "Literal OSM tag key. Trimmed and nonblank; must be unique across the primary tag and all filters.",
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "Literal exact-match value. Omit for key existence; an explicitly blank value is invalid. Trimmed before matching.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "key"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
    • changedInput schema / properties / tag_key / description
      Previous value: -"OSM tag key for non-amenity queries (e.g., \"leisure\", \"shop\", \"natural\"). Use with tag_value. Cannot be combined with amenity."New value: +"Primary OSM tag key (e.g., \"leisure\", \"shop\", \"natural\"); omit tag_value for key existence, or supply it for exact equality. Cannot be combined with amenity. Additional filters are ANDed with this tag."
    • changedInput schema / properties / tag_value / description
      Previous value: -"OSM tag value paired with tag_key (e.g., \"park\", \"supermarket\", \"peak\")."New value: +"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 unused fields are ignored in amenity mode."
    • changedOutput schema / properties / effectiveTag / description
      Previous value: -"The OSM tag filter applied (key=value, e.g. \"amenity=cafe\" or \"leisure=park\")."New value: +"The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. \"amenity=restaurant, cuisine=italian, name\")."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Both amenity and tag_key/tag_value are provided, neither is provided, or a tag key/value contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Primary tag modes conflict or are missing, a tag key or supplied value is blank, keys repeat after trimming, or any filter contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler."
  10. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Both amenity and tag_key/tag_value are provided, neither is provided, or a tag key/value contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. The thrown code tracks the status: 500 and 501 surface as InternalError, every other 5xx as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Both amenity and tag_key/tag_value are provided, neither is provided, or a tag key/value contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. Every one of them surfaces as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler."
  11. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "elements",
      +      "attribution",
      +      "effectiveTag",
      +      "totalFound",
      +      "truncated"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_bbox`: The bounding box is inverted on the latitude axis — south is greater than north. `invalid_tag`: Both amenity and tag_key/tag_value are provided, neither is provided, or a tag key/value contains Overpass QL metacharacters. `query_timeout`: The Overpass query exceeded the timeout. `result_too_large`: Overpass ran out of memory — the result set exceeds the server memory limit. `rate_limited`: Overpass refused the query as throttled — HTTP 429, or a throttle document instead of JSON — on every configured endpoint. With a list in OSM_OVERPASS_ENDPOINTS the call advances to the next entry first, so this surfaces only once all of them have refused it. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion — the message carries the remark verbatim. `overpass_gateway_timeout`: Overpass answered HTTP 504 — it accepted the query but its dispatcher gave up before producing a result, so the query exceeded the time budget the endpoint enforces rather than timeout_seconds. `overpass_unavailable`: Overpass answered with an HTTP 5xx other than 504 (500, 501, 502, 503) — the endpoint is down, restarting, or shedding load. The thrown code tracks the status: 500 and 501 surface as InternalError, every other 5xx as ServiceUnavailable. `endpoints_exhausted`: Every Overpass endpoint tried was still unanswered when the call ran out of its total time budget — each accepted the query and held the connection instead of failing outright. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_bbox",
      +            "invalid_tag",
      +            "query_timeout",
      +            "result_too_large",
      +            "rate_limited",
      +            "upstream_error",
      +            "overpass_gateway_timeout",
      +            "overpass_unavailable",
      +            "endpoints_exhausted"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "elements",
      -  "attribution",
      -  "effectiveTag",
      -  "totalFound",
      -  "truncated"
      -]
  12. Changed2 schema fields changed
    • changedInput schema / properties / element_types / description
      Previous value: -"OSM element types to search. Ways cover most buildings and areas; nodes cover most standalone POIs. Add \"relation\" for complex structures."New value: +"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 empty array is rejected because it can only match nothing."
    • addedInput schema / properties / element_types / minItems
      Added value: +1
  13. Changed1 schema field changed
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "amenity"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "tag_key",
      +      "tag_value"
      +    ],
      +    "type": "object"
      +  }
      +]
  14. Changed1 schema field changed
    • addedOutput schema / properties / servingEndpoint
      Added value: +{
      +  "description": "Overpass endpoint that produced this response, as origin and path. Differs from the first configured endpoint when a mirror answered after the primary failed, and names the endpoint that served a cached response rather than the one this call would have tried. Pair it with data_timestamp when a result looks unexpectedly slow, sparse, or stale.",
      +  "type": "string"
      +}
  15. Changed4 schema fields changed
    • changedInput schema / properties / east / description
      Previous value: -"Eastern boundary longitude (maximum longitude)."New value: +"Eastern boundary longitude (maximum longitude). A value below west describes an antimeridian crossing rather than an inverted box."
    • changedInput schema / properties / west / description
      Previous value: -"Western boundary longitude (minimum longitude)."New value: +"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."
    • changedOutput schema / properties / data_timestamp / description
      Previous value: -"OSM data freshness timestamp from the Overpass response."New value: +"OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata."
    • changedOutput schema / required
      Previous value: -[
      -  "elements",
      -  "data_timestamp",
      -  "attribution",
      -  "effectiveTag",
      -  "totalFound",
      -  "truncated"
      -]New value: +[
      +  "elements",
      +  "attribution",
      +  "effectiveTag",
      +  "totalFound",
      +  "truncated"
      +]
  16. Changed1 schema field changed
    • changedOutput schema / properties / elements / items / properties / osm_id / description
      Previous value: -"OSM element ID. Use with osm_type for openstreetmap_lookup."New value: +"OSM element ID. Use with osm_type for openstreetmap_lookup_objects."
  17. Changed1 schema field changed
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no features were found — e.g., try a different bounding box or tag. Absent when results were returned."New value: +"Guidance when the page came back empty. Distinguishes a query that matched nothing (try a different bounding box or tag) from an offset past the end of a non-empty result set (retry at a lower offset). Absent when results were returned."
  18. Changed3 schema fields changed
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "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 is deterministic and costs no extra upstream request. Pass the nextOffset value from a prior truncated response.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / nextOffset
      Added value: +{
      +  "description": "Offset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / truncated / description
      Previous value: -"True if results were cut at the limit. Reduce bbox area or add more specific tags to narrow the result set."New value: +"True if results were cut at the limit. Reduce bbox area, add more specific tags, or page with offset to retrieve the rest."
  19. Changed5 schema fields changed
    • addedOutput schema / properties / effectiveTag
      Added value: +{
      +  "description": "The OSM tag filter applied (key=value, e.g. \"amenity=cafe\" or \"leisure=park\").",
      +  "type": "string"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when no features were found — e.g., try a different bounding box or tag. Absent when results were returned.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / totalFound
      Added value: +{
      +  "description": "Total features returned by Overpass before limit truncation.",
      +  "type": "number"
      +}
    • removedOutput schema / properties / total_found
      Removed value: -{
      -  "description": "Total features returned by Overpass before limit truncation.",
      -  "type": "number"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "elements",
      -  "total_found",
      -  "truncated",
      -  "data_timestamp",
      -  "attribution"
      -]New value: +[
      +  "elements",
      +  "data_timestamp",
      +  "attribution",
      +  "effectiveTag",
      +  "totalFound",
      +  "truncated"
      +]
  20. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, openWorld), and the description adds substantive behavior on top: every feature returns with its full OSM tag set, there is no extratags flag, truncation and empty-page notices are surfaced, and the upstream query is cached ~10 minutes so re-paging by offset is deterministic. These are operational facts an agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling contrast, then scope, then filtering, then return shape — a sensible order. The prose is dense and clause-chained rather than bulleted, but nearly every clause carries decision-relevant information; only the repeated "never both" restatement is slightly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with an output schema and full annotation coverage, the description supplies what structured fields cannot: mode selection, sibling routing, ref provenance, truncation and caching behavior. Nothing an agent needs in order to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine selection guidance: amenity is a shortcut for exactly one key, and categories living under tourism, leisure, shop, historic or natural must go through tag_key plus tag_value. It also restates the mutual exclusion of amenity and tag_key and the ANDing of up to five extra filters, which clarifies how the anyOf branches are meant to be used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Find OSM features inside an area via the Overpass API") and immediately distinguishes itself from the sibling openstreetmap_query_nearby by contrasting region survey with point proximity. An agent can route between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the two scoping modes (four corner fields vs. within with a single boundary ref), states they must never be combined, and explains why within is preferable (searches the boundary polygon instead of an overcovering box). It also names openstreetmap_search_places, openstreetmap_reverse_geocode and openstreetmap_lookup_objects as sources for the within ref, and openstreetmap_query_nearby as the alternative for point proximity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.