Skip to main content
Glama

openstreetmap-mcp-server

Server Details

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

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/openstreetmap-mcp-server
GitHub Stars
5
Server Listing
@cyanheads/openstreetmap-mcp-server

TDQS

A4.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool serves a clearly distinct purpose: known-ID lookup, bounding box query, radius query, raw Overpass, reverse geocoding, and place search. The two spatial query tools are differentiated by geometry type, and the raw tool is explicitly for advanced cases. No two tools appear interchangeable.

Naming Consistency5/5

All tools follow a uniform 'openstreetmap_' prefix with a verb_noun structure (lookup_objects, query_bbox, query_nearby, query_raw, reverse_geocode, search_places). The naming is fully predictable and consistent across the set.

Tool Count5/5

Six tools is an ideal size for an OpenStreetMap server: it covers geocoding, reverse geocoding, spatial queries, raw querying, and ID lookup without redundancy. Each tool earns its place and the set is neither thin nor bloated.

Completeness5/5

The tool surface covers all common read-only OSM operations: finding places by name, converting coordinates to addresses, querying by area or proximity, fetching known objects, and running arbitrary queries for edge cases. There are no obvious dead ends or missing essential operations for the stated domain.

Available Tools

6 tools
openstreetmap_lookup_objectsLook up address details for OSM objects by IDA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
osm_idsYesOSM 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.
languageNoPreferred language for names (BCP 47 code).
extratagsNoInclude 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 describes that object, not OpenStreetMap.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
totalNoNumber of results returned.
resultsNoAddress details for the requested OSM IDs that were found.
not_foundNoOSM IDs from the request that returned no result.
attributionNoRequired data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
tagSelectionCaveatNoStanding 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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present when extratags was requested.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and open-world behavior. Beyond that, the description discloses that it 'returns only objects named in osm_ids,' lists unresolved IDs 'under not_found,' and cannot select by tag. This adds meaningful behavioral context not present in the annotations.

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

Conciseness5/5

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

Two dense but purposeful sentences. The first front-loads the core action and resource, and the second packs usage context, output behavior, and alternatives without filler. Every clause earns its place.

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 lookup tool with max 50 IDs, a 100%-covered schema, and an output schema, the description covers the essential context: when to use it, how IDs are prefixed, what it cannot do, and how not_found results are surfaced. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter is already well documented in the schema, including the prefix format, array requirement, and extratag contents. The description repeats the N/W/R prefix example but does not add meaning beyond the schema, so the baseline of 3 is appropriate.

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?

The description uses a specific verb and resource: 'Fetch the Nominatim address record for up to 50 known OSM objects by ID.' It clearly distinguishes the tool from discovery siblings by stating it 'cannot select by tag' and by referencing openstreetmap_query_nearby, openstreetmap_query_bbox, and openstreetmap_query_raw.

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?

It explicitly says to use this tool for 'IDs already in hand from openstreetmap_query_nearby or openstreetmap_query_bbox' and directs discovery to 'those tools or openstreetmap_query_raw first.' This gives both when-to-use and when-not-to-use guidance with named alternatives.

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

openstreetmap_query_bboxFind OSM features inside a bounding box or an OSM boundaryA
Read-onlyIdempotent
Inspect

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

ParametersJSON 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. 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.
filtersNoUp 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 (" \ [ ] ; ( )).
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. 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. 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.
timeout_secondsNoOverpass query timeout in seconds. Increase for large bounding boxes or dense areas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
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). Absent when results were returned.
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.
effectiveTagNoThe full ordered AND filter chain: key=value for equality, key alone for existence (e.g. "amenity=restaurant, cuisine=italian, name").
effectiveAreaNoThe boundary scope as resolved: the within ref and the Overpass area it mapped to. 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, 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.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already convey read-only, idempotent, and open-world hints ya, so the description doesn't need to restate safety. It adds meaningful behavioral context beyond annotations: the boundary polygon is searched instead of an overcovering box, filters are ANDed, and every feature returns with its full OSM tag set. It doesn't discuss rate limits or error specifics, but these are not core to invocation.

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

Conciseness5/5

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

Three dense sentences carry a surprising amount of information: purpose, sibling differentiation, scope modes, filter modes, and output behavior. The most important distinction (purpose) is front-loaded, and every clause earns its place. No filler or repetition.

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

Completeness4/5

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

For a tool with 13 parameters and conditional requirements, the description gives the essential mental model: two orthogonal scope modes, two filter modes, and the ANDed filter chain. It also notes the full-tag-set return behavior. Pagination and timeout are covered in the schema, and an output schema exists, so those omissions are acceptable. The description is complete enough for correct selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter having a detailed explanation. The tool description focuses on high-level mode relationships (bbox vs within, amenity vs tag_key) rather than repeating parameter semantics, so it adds little beyond the schema. Baseline 3 is appropriate when the schema already does the heavy lifting.

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?

The description begins with a specific verb and resource: 'Find OSM features inside an area via the Overpass API'. It clearly delimits the tool's scope and immediately names the sibling it is not ('openstreetmap_query_nearby covers proximity to a point'), so an agent can distinguish it from related tools without opening schemas.

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?

The description explicitly states when to use this tool ('for surveys of everything in a region') and gives an explicit exclusion for the alternative ('openstreetmap_query_nearby covers proximity to a point'). It also provides hard usage constraints: 'never both' for bbox vs with-in, and 'never both' for amenity vs tag_key, giving an agent clear decision rules.

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

openstreetmap_query_nearbyFind OSM features near a pointA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesCenter latitude in WGS84 decimal degrees.
lonYesCenter longitude in WGS84 decimal degrees.
limitNoMaximum results to return. Applied after the Overpass query — if the area has more features, they are truncated.
offsetNoNumber 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; the full set is cached ~10 minutes so re-paging costs no extra upstream request. Pass the nextOffset value from a prior truncated response.
amenityNoOSM 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.
filtersNoUp 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 (" \ [ ] ; ( )).
tag_keyNoPrimary 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 filters are ANDed with this tag.
tag_valueNoLiteral 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.
element_typesNoOSM 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 nodes and ways; an empty array is rejected because it can only match nothing.
radius_metersNoSearch radius in meters. Max 50,000m (50km). Keep under 5,000m for dense urban POI queries to avoid slow responses.
timeout_secondsNoOverpass query timeout in seconds. Increase for large radius or dense areas.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoWhy 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.
elementsNoMatching OSM features, up to the limit.
truncatedNoTrue if results were cut at the limit. Reduce radius, 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.
effectiveTagNoThe full ordered AND filter chain: key=value for equality, key alone for existence (e.g. "amenity=restaurant, cuisine=italian, name").
data_timestampNoOSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
servingEndpointNoOverpass 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.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safe/read-only nature is covered. The description adds valuable behavioral details: every feature returns with its full OSM tag set (no extratags flag), results are sorted nearest-first by distance_meters, and nodes cover standalone POIs while ways cover buildings/areas. This goes beyond the annotations and schema, providing concrete expectations about output ordering and content.

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

Conciseness5/5

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

The description is compact—two sentences—and front-loads the core purpose before adding filtering and result details. Every sentence contributes actionable information: the query type, filter combination, output completeness, sorting, and element-type coverage. No redundancy or filler.

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

Completeness4/5

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

Given the tool's complexity (11 parameters, output schema present, and 100% schema coverage), the description adequately covers the high-level behavior: the primary filter modes, optional filters, result ordering, and element-type semantics. It does not cover pagination or timeout details, but those are already in the schema. The description is sufficient for an agent to understand the tool's role and invoke it correctly.

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

Parameters3/5

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

The input schema has 100% description coverage for all parameters, so the baseline is 3. The description supplements this by explaining the primary filtering modes (amenity vs. tag_key), the ANDing of up to five additional filters, and the node/way coverage distinction. While helpful, it does not introduce critical meaning absent from the schema—the schema already documents each parameter thoroughly.

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?

The description clearly states the verb 'Find' and the resource 'OSM features within a radius of a point', and distinguishes itself as 'the tool for "what is near X?" questions'. This specificity separates it from sibling tools like query_bbox or search_places, making its purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly frames the use case as proximity queries, saying 'the tool for "what is near X?" questions'. However, it does not name sibling tools or explicitly state when NOT to use it (e.g., for bounding-box queries), leaving some inference to the agent. The context is clear but alternatives are not directly mentioned.

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

openstreetmap_query_rawExecute a raw Overpass QL queryA
Read-onlyIdempotent
Inspect

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";out body;"; scope to an OSM boundary with rel();map_to_area->.a; or way();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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum elements to return. Applied after the Overpass query — if the query matched more, they are truncated.
queryYesOverpass 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.2);out body;"
offsetNoElements 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 request; a result over 100000 elements is served uncached, so paging that far re-queries and depends on the endpoint returning the same order. Pass the nextOffset from a prior truncated response.
timeout_secondsNoHow 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 enforces its own budget and may answer HTTP 504 first.
max_element_bytesNoSerialized-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 keeps every scalar and its tags but has its members, nodes and geometry arrays withheld whole, never truncated to a prefix, and lists each under withheld_keys with its item count and byte size; withheldElements and withheldNotice then give the offset and raised budget that fetch it back whole in one more call. That disclosure is not counted against the budget, so a bounded element runs ~60 bytes per withheld key above it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoWhy 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.
elementsNoRaw 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 withheld_keys, each naming the key, its item count, and its byte size.
truncatedNoTrue if elements were cut at the limit. Narrow the query, or page with offset to retrieve the rest.
nextOffsetNoOffset to pass on the next call to retrieve the following page of elements. Present only when more elements remain beyond this page.
totalFoundNoTotal elements returned by Overpass before limit truncation.
attributionNoRequired data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
data_timestampNoOSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.
effectiveQueryNoThe Overpass QL string as sent to the API (after any timeout injection).
total_elementsNoNumber of elements returned on this page. See totalFound for the full match count.
withheldNoticeNoHow to retrieve the withheld arrays, one element per call. Absent when every element fit.
servingEndpointNoOverpass 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.
withheldElementsNoElements on this page that exceeded max_element_bytes, each with the arguments that fetch it back whole. Absent when every element fit.

TDQS

A5/5.0
Behavior5/5

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

Despite annotations already declaring readOnlyHint, openWorldHint, and idempotentHint, the description adds extensive behavioral detail: pagination via limit/offset with a ~10-minute cache, uncached results over 100k, truncation semantics, max_element_bytes withholding arrays and how to recover them, and timeout behavior where a [timeout:N] directive wins and the client waits the full value. This goes far beyond the annotations and never contradicts them.

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

Conciseness5/5

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

The description is long but tightly packed; it front-loads the purpose, gives a concrete example, covers scoping, then response details, and ends with alternatives. Every sentence contributes essential information with no filler, making it appropriately sized for the tool's complexity.

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?

Given the tool's complexity (arbitrary Overpass queries), the description covers all necessary aspects: query syntax requirements, scoping techniques, response pagination, truncation, and the specialized element-size handling. Combined with the existing output schema, it leaves little ambiguity for an agent to call it correctly.

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

Parameters5/5

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

The schema already documents all five parameters with full descriptions (100% coverage), and the description enriches them further: it explains the required [out:json] format, shows a full example query, and details the max_element_bytes behavior with withheld arrays and recovery. This adds meaning beyond the schema, raising the baseline.

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?

The description clearly states it runs arbitrary Overpass QL queries for anything the convenience tools cannot express, and gives concrete examples (multi-type, union, relation membership, historical, regex). It also explicitly differentiates from siblings by naming openstreetmap_query_nearby and openstreetmap_query_bbox for simple near/area questions.

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?

It explicitly says when to use this tool ('for anything the convenience tools cannot express') and when not ('for plain near X or in this area questions'), naming the alternatives. It also provides scoping guidance with map_to_area and notes the removed 2400000000 offset, giving concrete usage rules.

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

openstreetmap_reverse_geocodeReverse geocode coordinates to an addressA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in WGS84 decimal degrees.
lonYesLongitude in WGS84 decimal degrees.
zoomNoAddress detail level, roughly corresponding to map zoom. 18=building, 16=street, 14=neighbourhood, 12=town, 10=city, 8=county, 5=state, 3=country.
layerNoRestrict 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 counts as omitted. Default: address,poi.
languageNoPreferred language for the result (BCP 47 code or Accept-Language string).
extratagsNoInclude 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 describes that object, not OpenStreetMap.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
resultNoThe closest matching OSM object at the given coordinates.
attributionNoRequired data attribution.
tagSelectionCaveatNoStanding 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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present when extratags was requested.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the result is the closest indexed OSM object at the requested zoom, proximity and layer pick it (never an OSM attribute tag), and in dense areas it can be a neighbouring feature. It also discloses that invalid layer names are rejected locally. This is meaningful behavioral disclosure that goes beyond what annotations provide.

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?

The description is a single, information-dense sentence that front-loads the core purpose and then adds the key behavioral caveat and sibling routing. Every clause earns its place. It is slightly long but not bloated; the density is justified by the complexity of the tool's behavior. A 4 rather than 5 because the sentence is quite long and packs many concepts, but it remains well-structured.

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

Completeness4/5

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

Given the tool's complexity (6 params, output schema present, annotations covering safety), the description is largely complete. It explains the core behavior, the zoom semantics, the layer restriction, and routes to siblings for tag-based queries. The only minor gap is that it doesn't describe the output format, but an output schema exists, so that burden is lifted. It also doesn't mention the language parameter's effect, but the schema covers it. This is a strong, complete description for a tool of this complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description adds some context beyond the schema: it explains the zoom levels with examples (18 building, 10 city), clarifies that layer restricts which OSM layer is matched, and notes that an empty layer value counts as omitted. However, most parameter meaning is already in the schema, so the description's added value is moderate. Baseline 3 is appropriate.

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?

The description states a specific verb ('Convert'), resource ('latitude/longitude pair'), and outcome ('nearest address or named place via Nominatim'). It also distinguishes itself from sibling query tools by explicitly naming them and the condition that selects them ('find features by tag with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw'). This is a clear, specific purpose that an agent can act on.

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?

The description explicitly says when to use this tool (reverse geocoding a coordinate to an address/place) and when not to (finding features by tag, which should use the named sibling query tools). It also provides a concrete behavioral caveat: in dense areas the result may be a neighbouring feature rather than the one containing the coordinate. This is explicit routing guidance with alternatives named.

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

openstreetmap_search_placesGeocode a place name or addressA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name (structured query).
layerNoFilter 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. Default: no restriction.
limitNoMaximum results to return. Nominatim may return fewer when additional results do not sufficiently match. Max 40.
queryNoFree-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, so give the name plus its city or region and nothing in between: "Beinecke Library, New Haven" matches where "Beinecke Library, Yale University, New Haven" returns nothing.
stateNoState or province (structured query).
countyNoCounty or district (structured query).
streetNoHouse number and street name (structured query). Use with city/state/country fields. Cannot be combined with query.
boundedNoRestrict 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 scores higher.
countryNoCountry name or ISO 3166-1 alpha-2 code (structured query).
viewboxNoRectangular 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 better match outside the box is still returned. Set bounded for a hard restriction. Unlike openstreetmap_query_bbox this box may not cross the antimeridian — west must be less than east and south less than north, or the call is rejected.
languageNoPreferred language for result names (BCP 47 code or Accept-Language string, e.g., "en", "de", "fr,en"). Defaults to local OSM language.
extratagsNoInclude 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 describes that object, not OpenStreetMap. Increases response size.
postalcodeNoPostal or ZIP code (structured query).
featureTypeNoRestrict results to a geographic feature type. Automatically implies the address layer.
countrycodesNoRestrict 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 country name — is rejected rather than silently dropped upstream. A well-formed code for a country that does not exist matches nothing. An empty value counts as omitted. Prefer this over the structured country field for filtering.
exclude_place_idsNoOSM 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 entry treated as absent. Page toward further matches by passing back a prior full page's nextExcludeIds, which prefers stable OSM refs over volatile place_ids; the walk ends when a page returns zero results with an exhaustion notice — a success, not an error. Best-effort, not a cursor: Nominatim ranking can reorder between calls, so already-seen results may shift.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit applied to this request.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of results returned.
totalNoNumber of results returned.
noticeNoPaging 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_place_ids walk was exhausted and the page came back empty (the query matched; the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field's presence. Absent when a page returns below the limit, and when it fills the limit with nothing past the cutoff — read nextExcludeIds for whether paging can continue.
resultsNoGeocoding results, ordered by Nominatim relevance (importance score descending).
truncatedNoTrue 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 can still surface less accurate matches past that cutoff, which is why nextExcludeIds is offered on any full page. Nominatim reports no total, so this is a confirmed observation, not an inference from page size.
attributionNoRequired data attribution: Data © OpenStreetMap contributors, ODbL 1.0.
boundedAppliedNoTrue 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.
effectiveQueryNoThe effective query sent to Nominatim — the free-form query string, or a reconstructed string from the provided structured address fields.
nextExcludeIdsNoAccumulated 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 otherwise. Present whenever the page filled the requested limit, whether or not truncated is set: excluding a full page can surface less accurate matches past the probe's cutoff. Best-effort, not a cursor — ranking can reorder between calls, so a walk can end sooner than the page count suggests.
effectiveViewboxNoThe 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.
tagSelectionCaveatNoStanding 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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present on every successful response.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent annotations, the description discloses that results are best-ranked matches rather than every matching object, that structured and free-form inputs must not be combined, and that matching never uses OSM attribute tags. This gives an agent accurate expectations about completeness and selection behavior.

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

Conciseness5/5

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

Two sentences carry the purpose, the key usage constraint, the non-exhaustive result behavior, and the routing to alternative tools. Every clause earns its place, and the core purpose is front-loaded.

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 16-parameter tool with an output schema, the description plus schema is complete: the description clarifies the query modes, result ranking, and sibling alternatives, while the schema and annotations cover parameters, defaults, validation, and read-only behavior. An agent has what it needs to invoke the tool correctly.

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?

The schema already documents every parameter in detail (100% coverage), so the baseline is 3. The description adds meaningful top-level semantics by grouping the structured address fields and explicitly stating the mutual exclusivity between them and the free-form query, a constraint not fully enforced by the schema's anyOf structure.

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?

The description states a specific verb and resource: geocode a place name or address into coordinates and structured place data. It also distinguishes this tool from the sibling query tools by noting that matching never uses an OSM attribute tag, so an agent can tell it apart.

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?

The description explicitly says when to use the tool (geocoding a place name or address), how to choose between free-form and structured query modes, and when not to use it: when tag-based filtering or enumeration is needed, use openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedopenstreetmap_query_bbox1 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."
    • Changedopenstreetmap_query_nearby1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `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_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."
    • Changedopenstreetmap_query_raw1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `query_error`: Overpass returned HTTP 400 — malformed query syntax. `query_timeout`: The query exceeded its timeout. `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 the [timeout:N] directive. `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: `query_error`: Overpass returned HTTP 400 — malformed query syntax. `query_timeout`: The query exceeded its timeout. `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 the [timeout:N] directive. `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."
  2. 4 tool updates
    • Changedopenstreetmap_lookup_objects7 fields changed
      • changedOutput schema / properties / results / items / properties / boundingbox / description
        Previous value: -"Bounding box as [south, north, west, east] strings."New value: +"Bounding box as [south, north, west, east] in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / boundingbox / prefixItems
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / lat / description
        Previous value: -"Latitude (WGS84, as string from API)."New value: +"Latitude in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / lat / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / results / items / properties / lon / description
        Previous value: -"Longitude (WGS84, as string from API)."New value: +"Longitude in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / lon / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / results / items / properties / osm_id / description
        Previous value: -"OSM object ID."New value: +"OSM object ID. Pass \"R\"/\"W\" + this id as within on openstreetmap_query_bbox to search inside this boundary. The same scope in openstreetmap_query_raw is rel(<osm_id>);map_to_area->.a; or way(<osm_id>);map_to_area->.a; then (area.a) on each statement."
    • Changedopenstreetmap_query_bbox10 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."
    • Changedopenstreetmap_reverse_geocode7 fields changed
      • changedOutput schema / properties / result / properties / boundingbox / description
        Previous value: -"Bounding box as [south, north, west, east] strings."New value: +"Bounding box as [south, north, west, east] in WGS84 decimal degrees."
      • changedOutput schema / properties / result / properties / boundingbox / prefixItems
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedOutput schema / properties / result / properties / lat / description
        Previous value: -"Latitude of the matched OSM object."New value: +"Latitude in WGS84 decimal degrees."
      • changedOutput schema / properties / result / properties / lat / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / result / properties / lon / description
        Previous value: -"Longitude of the matched OSM object."New value: +"Longitude in WGS84 decimal degrees."
      • changedOutput schema / properties / result / properties / lon / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / result / properties / osm_id / description
        Previous value: -"OSM object ID. Combine with osm_type for openstreetmap_lookup_objects."New value: +"OSM object ID. Combine with osm_type for openstreetmap_lookup_objects, or pass \"R\"/\"W\" + this id as within on openstreetmap_query_bbox to search inside this boundary. The same scope in openstreetmap_query_raw is rel(<osm_id>);map_to_area->.a; or way(<osm_id>);map_to_area->.a; then (area.a) on each statement."
    • Changedopenstreetmap_search_places7 fields changed
      • changedOutput schema / properties / results / items / properties / boundingbox / description
        Previous value: -"Bounding box as [south, north, west, east] strings."New value: +"Bounding box as [south, north, west, east] in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / boundingbox / prefixItems
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedOutput schema / properties / results / items / properties / lat / description
        Previous value: -"Latitude (WGS84, as string from API)."New value: +"Latitude in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / lat / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / results / items / properties / lon / description
        Previous value: -"Longitude (WGS84, as string from API)."New value: +"Longitude in WGS84 decimal degrees."
      • changedOutput schema / properties / results / items / properties / lon / type
        Previous value: -"string"New value: +"number"
      • changedOutput schema / properties / results / items / properties / osm_id / description
        Previous value: -"OSM object ID. Combine with osm_type for openstreetmap_lookup_objects."New value: +"OSM object ID. Combine with osm_type for openstreetmap_lookup_objects, or pass \"R\"/\"W\" + this id as within on openstreetmap_query_bbox to search inside this boundary. The same scope in openstreetmap_query_raw is rel(<osm_id>);map_to_area->.a; or way(<osm_id>);map_to_area->.a; then (area.a) on each statement."
  3. 6 tool updates
    • Changedopenstreetmap_lookup_objects2 fields changed
      • changedInput schema / properties / extratags / description
        Previous value: -"Include the extra OSM tags each looked-up object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Reports whatever the object happens to carry, so an absent tag describes that object rather than OpenStreetMap."New value: +"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 describes that object, not OpenStreetMap."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_id_format`: An array element is not a single N/W/R-prefixed OSM ID. `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id_format`: An array element is not a single N/W/R-prefixed OSM ID. `invalid_parameters`: Nominatim returned HTTP 400, refusing one of the forwarded parameters; its own message names which one. `rate_limited`: Nominatim returned HTTP 429, or HTTP 200 with a throttle document in place of JSON — the one request per second policy was exceeded. `upstream_error`: Nominatim returned a non-2xx status other than 429, or HTTP 200 with a non-JSON body carrying no throttle signature. Other values are possible when a failure originates below the handler."
    • Changedopenstreetmap_query_bbox5 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."
    • Changedopenstreetmap_query_nearby5 fields changed
      • changedInput schema / properties / amenity / description
        Previous value: -"OSM amenity tag value (e.g., \"hospital\", \"pharmacy\", \"restaurant\", \"school\", \"atm\"). Shortcut for tag_key=\"amenity\". Cannot be combined with tag_key/tag_value."New value: +"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."
      • changedInput schema / properties / tag_key / description
        Previous value: -"Primary OSM tag key (e.g., \"leisure\", \"shop\", \"highway\", \"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\", \"highway\"); 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_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_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 larger radius or different 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 (widen the radius or change the 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."
    • Changedopenstreetmap_query_raw7 fields changed
      • changedInput schema / properties / max_element_bytes / description
        Previous value: -"Serialized-byte budget for one element, measured in UTF-8 bytes and applied to each element of the page independently after limit and offset. It bounds what limit cannot: a single relation or geometry-heavy way. An element over budget keeps every scalar and its tags but has its members, nodes and geometry arrays withheld whole — never truncated to a prefix — and lists each one under withheld_keys with its item count and byte size; withheldElements and withheldNotice then carry the offset and raised budget that fetch that element back whole in one more call. The withheld_keys disclosure the element gains is not counted back against the budget, so a bounded element runs a fixed ~60 bytes per withheld key above it."New value: +"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 keeps every scalar and its tags but has its members, nodes and geometry arrays withheld whole, never truncated to a prefix, and lists each under withheld_keys with its item count and byte size; withheldElements and withheldNotice then give the offset and raised budget that fetch it back whole in one more call. That disclosure is not counted against the budget, so a bounded element runs ~60 bytes per withheld key above it."
      • changedInput schema / properties / offset / description
        Previous value: -"Number of matching elements 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; a result over 100000 elements is served but not cached, so paging that far re-queries and depends on the endpoint returning the same order. Pass the nextOffset value from a prior truncated response."New value: +"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 request; a result over 100000 elements is served uncached, so paging that far re-queries and depends on the endpoint returning the same order. Pass the nextOffset from a prior truncated response."
      • changedInput schema / properties / timeout_seconds / description
        Previous value: -"Query timeout in seconds, bounding how long Overpass itself spends on the query. The [timeout:N] directive in the query string takes precedence if present. The client waits for what is requested here, up to 180s, so a long-running query is not cut off early — but the endpoint enforces its own budget and may answer HTTP 504 first."New value: +"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 enforces its own budget and may answer HTTP 504 first."
      • changedOutput schema / properties / elements / description
        Previous value: -"Raw Overpass API response elements for this page, up to the limit. Structure varies by query type — nodes have lat/lon, ways have nodes[], relations have members[]. An element over max_element_bytes carries a withheld_keys array instead of the heavy arrays it names, each entry giving the key, its item count, and its serialized byte size."New value: +"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 withheld_keys, each naming the key, its item count, and its byte size."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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: `query_error`: Overpass returned HTTP 400 — malformed query syntax. `query_timeout`: The query exceeded its timeout. `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 the [timeout:N] directive. `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 (check syntax or broaden the filter) 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 (check the query syntax or broaden the filter), 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."
    • Changedopenstreetmap_reverse_geocode6 fields changed
      • changedInput schema / properties / extratags / description
        Previous value: -"Include the extra OSM tags the matched object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Opportunistic, not selective: it reports whatever the matched object happens to carry, so an absent tag describes that object rather than OpenStreetMap, and no value here can steer which object is matched."New value: +"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 describes that object, not OpenStreetMap."
      • changedInput schema / properties / layer / description
        Previous value: -"Restrict which OSM layer is matched. One value or a comma-separated list drawn from: address, poi, railway, natural, manmade, in any casing. An undocumented layer name is rejected here rather than by Nominatim; an empty value is accepted and treated as omitted. Default: address,poi."New value: +"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 counts as omitted. Default: address,poi."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_coverage`: Nominatim returns an error indicating no OSM data at the given coordinates (e.g., open ocean or unmapped territory). `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_coverage`: Nominatim reported no OSM data at the coordinates — open ocean or unmapped territory. `invalid_parameters`: Nominatim returned HTTP 400, refusing one of the forwarded parameters; its own message names which one. `rate_limited`: Nominatim returned HTTP 429, or HTTP 200 with a throttle document in place of JSON — the one request per second policy was exceeded. `upstream_error`: Nominatim returned a non-2xx status other than 429, or HTTP 200 with a non-JSON body carrying no throttle signature. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / result / properties / address / description
        Previous value: -"Structured address. Keys vary by feature type. Common: house_number, road, suburb, city, state, postcode, country, country_code."New value: +"Structured address, keys varying by feature type: house_number, road, suburb, city, state, postcode, country, country_code."
      • changedOutput schema / properties / result / properties / category / description
        Previous value: -"OSM feature category (e.g., \"amenity\", \"building\")."New value: +"OSM feature category (e.g. \"amenity\", \"building\")."
      • changedOutput schema / properties / result / properties / name / description
        Previous value: -"Feature name if the result is a named place."New value: +"Feature name when the object is named."
    • Changedopenstreetmap_search_places15 fields changed
      • changedInput schema / properties / countrycodes / description
        Previous value: -"Restrict results to one or more countries. Comma-separated ISO 3166-1 alpha-2 codes (e.g., \"us,ca\"), in any casing and with optional spaces around the commas. Anything else — an alpha-3 code, a semicolon list, a country name — is rejected here rather than by Nominatim, which would discard it and silently return unfiltered results. A well-formed code for a country that does not exist is forwarded and matches nothing. An empty value is accepted and treated as omitted. Preferred over the structured country field when filtering."New value: +"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 country name — is rejected rather than silently dropped upstream. A well-formed code for a country that does not exist matches nothing. An empty value counts as omitted. Prefer this over the structured country field for filtering."
      • changedInput schema / properties / exclude_place_ids / description
        Previous value: -"OSM refs (N/W/R + id) or Nominatim place_ids to drop from results, forwarded as the exclude_place_ids parameter. Each entry must be one of those two token forms — anything else is rejected here rather than by Nominatim. Entries are trimmed and lowercase ref prefixes uppercased before forwarding, and a blank entry is treated as absent. Pass the nextExcludeIds value from a prior full page to page toward further matches — it emits stable OSM refs when available, which page more reliably than volatile place_ids. When the walk runs out, the call succeeds with zero results and an exhaustion notice rather than failing — treat that as the loop-termination signal. Best-effort progressive retrieval, not a stable cursor — Nominatim ranking can reorder slightly between calls, so already-seen results may shift."New value: +"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 entry treated as absent. Page toward further matches by passing back a prior full page's nextExcludeIds, which prefers stable OSM refs over volatile place_ids; the walk ends when a page returns zero results with an exhaustion notice — a success, not an error. Best-effort, not a cursor: Nominatim ranking can reorder between calls, so already-seen results may shift."
      • changedInput schema / properties / extratags / description
        Previous value: -"Include the extra OSM tags the matched object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Opportunistic, not selective: it reports whatever the matched object happens to carry, so an absent tag describes that object rather than OpenStreetMap, and no value here can steer which object is matched. Increases response size."New value: +"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 describes that object, not OpenStreetMap. Increases response size."
      • changedInput schema / properties / layer / description
        Previous value: -"Filter by data layer. One value or a comma-separated list drawn from: address, poi, railway, natural, manmade, in any casing. An undocumented layer name is rejected here rather than by Nominatim; an empty value is accepted and treated as omitted. Default: no restriction."New value: +"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. Default: no restriction."
      • changedInput schema / properties / query / description
        Previous value: -"Free-form search string (e.g., \"Space Needle Seattle\" or \"1600 Pennsylvania Ave NW, Washington DC\"). Cannot be combined with structured address fields. Keep the query to a POI name plus its city or region. Do not insert a parent institution, campus, or building name between the name and the locality: Nominatim reads commas as an address hierarchy and returns nothing when an intermediate token is not a matching containment level. For example, use \"Beinecke Library, New Haven\", not \"Beinecke Library, Yale University, New Haven\"."New value: +"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, so give the name plus its city or region and nothing in between: \"Beinecke Library, New Haven\" matches where \"Beinecke Library, Yale University, New Haven\" returns nothing."
      • changedInput schema / properties / viewbox / description
        Previous value: -"Rectangular area to bias results toward, for disambiguating a name that repeats worldwide — a creek inside one watershed, a street inside one municipal boundary. Finer-grained than countrycodes and more precise than adding locality words to the query. Bias only by default: a better match outside the box is still returned. Set bounded to make it a hard restriction. Unlike openstreetmap_query_bbox, this box may not cross the antimeridian: west must be less than east and south less than north, or the call is rejected."New value: +"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 better match outside the box is still returned. Set bounded for a hard restriction. Unlike openstreetmap_query_bbox this box may not cross the antimeridian — west must be less than east and south less than north, or the call is rejected."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_results`: No places matched the query on a first page — no exclude_place_ids were supplied. An exhausted paging walk returns success with zero results instead. `conflicting_query_mode`: The free-form query and at least one structured address field are both provided — the two modes are mutually exclusive. `missing_query_mode`: Neither the free-form query nor any structured address field is provided. `bounded_without_viewbox`: bounded was set to true but no viewbox was supplied — there is no area for it to restrict results to. `invalid_viewbox`: The viewbox is inverted or degenerate on either axis — west at or beyond east, or south at or beyond north. `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_results`: No places matched, and no exclude_place_ids were supplied — an exhausted paging walk returns success with zero results instead. `conflicting_query_mode`: query and at least one structured address field were both supplied; the two modes are mutually exclusive. `missing_query_mode`: Neither query nor any structured address field was supplied. `bounded_without_viewbox`: bounded was set without a viewbox for it to restrict results to. `invalid_viewbox`: The viewbox is inverted or degenerate: west at or beyond east, or south at or beyond north. `invalid_parameters`: Nominatim returned HTTP 400, refusing one of the forwarded parameters; its own message names which one. `rate_limited`: Nominatim returned HTTP 429, or HTTP 200 with a throttle document in place of JSON — the one request per second policy was exceeded. `upstream_error`: Nominatim returned a non-2xx status other than 429, or HTTP 200 with a non-JSON body carrying no throttle signature. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / nextExcludeIds / description
        Previous value: -"Accumulated exclude tokens (prior excludes plus this page) to pass as exclude_place_ids on the next call, retrieving further matches. Each token is a stable OSM ref (N/W/R + osm_id) when the result carries one, falling back to the Nominatim place_id otherwise. Present whenever the page filled the requested limit, whether or not truncated is set — the probe reads the relevance cutoff, and excluding this page can still surface less accurate matches beyond it. Best-effort rather than a stable cursor: Nominatim ranking can reorder slightly between calls, so a walk can still end sooner than the page count suggests."New value: +"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 otherwise. Present whenever the page filled the requested limit, whether or not truncated is set: excluding a full page can surface less accurate matches past the probe's cutoff. Best-effort, not a cursor — ranking can reorder between calls, so a walk can end sooner than the page count suggests."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for this page, covering two cases: results were capped at limit and a probe confirmed a further match at the query's relevance cutoff (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit, and absent when it fills the limit with nothing past the cutoff — that page still carries nextExcludeIds, which is the field to read for whether paging can continue. Carries paging guidance only — the tag-selection caveat has its own field so neither message can overwrite the other."New value: +"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_place_ids walk was exhausted and the page came back empty (the query matched; the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field's presence. Absent when a page returns below the limit, and when it fills the limit with nothing past the cutoff — read nextExcludeIds for whether paging can continue."
      • changedOutput schema / properties / results / items / properties / address / description
        Previous value: -"Structured address breakdown. Keys vary by feature type and country. Common keys: house_number, road, suburb, city, state, postcode, country, country_code."New value: +"Structured address breakdown, keys varying by feature type and country: house_number, road, suburb, city, state, postcode, country, country_code."
      • changedOutput schema / properties / results / items / properties / category / description
        Previous value: -"OSM feature category (e.g., \"amenity\", \"man_made\", \"boundary\")."New value: +"OSM feature category (e.g. \"amenity\", \"man_made\")."
      • changedOutput schema / properties / results / items / properties / name / description
        Previous value: -"Feature name if applicable (e.g., \"Space Needle\"). Absent for address-only results."New value: +"Feature name; absent for address-only results."
      • changedOutput schema / properties / results / items / properties / place_id / description
        Previous value: -"Nominatim internal place ID. Use osm_type+osm_id for stable cross-server references."New value: +"Nominatim internal place ID. Stable cross-server reference: osm_type+osm_id."
      • changedOutput schema / properties / results / items / properties / type / description
        Previous value: -"OSM feature type within category (e.g., \"hospital\", \"tower\", \"administrative\")."New value: +"OSM feature type within category (e.g. \"hospital\", \"tower\")."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the page filled the requested limit and a same-call probe for one further result confirmed another match at this query's relevance cutoff. Absent otherwise. Absence is not a claim that the set is exhausted: Nominatim applies its own relevance cutoff, so excluding a full page's ids can still surface further, less accurate matches — which is why nextExcludeIds is offered on any full page. Nominatim reports no total, so this is a confirmed observation rather than an inference from page size."New value: +"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 can still surface less accurate matches past that cutoff, which is why nextExcludeIds is offered on any full page. Nominatim reports no total, so this is a confirmed observation, not an inference from page size."
  4. 4 tool updates
    • Changedopenstreetmap_query_bbox2 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"
        +]
    • Changedopenstreetmap_query_nearby2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `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_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_tag",
        -  "query_timeout",
        -  "result_too_large",
        -  "rate_limited",
        -  "upstream_error",
        -  "overpass_gateway_timeout",
        -  "overpass_unavailable",
        -  "endpoints_exhausted"
        -]New value: +[
        +  "invalid_tag",
        +  "query_timeout",
        +  "result_too_large",
        +  "rate_limited",
        +  "upstream_error",
        +  "overpass_gateway_timeout",
        +  "overpass_unavailable",
        +  "endpoints_exhausted",
        +  "endpoints_unavailable"
        +]
    • Changedopenstreetmap_query_raw2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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: -[
        -  "query_error",
        -  "query_timeout",
        -  "result_too_large",
        -  "rate_limited",
        -  "upstream_error",
        -  "overpass_gateway_timeout",
        -  "overpass_unavailable",
        -  "endpoints_exhausted"
        -]New value: +[
        +  "query_error",
        +  "query_timeout",
        +  "result_too_large",
        +  "rate_limited",
        +  "upstream_error",
        +  "overpass_gateway_timeout",
        +  "overpass_unavailable",
        +  "endpoints_exhausted",
        +  "endpoints_unavailable"
        +]
    • Changedopenstreetmap_search_places3 fields changed
      • addedInput schema / properties / countrycodes / anyOf
        Added value: +[
        +  {
        +    "const": "",
        +    "type": "string"
        +  },
        +  {
        +    "description": "One ISO 3166-1 alpha-2 country code, or a comma-separated list of them, in any casing.",
        +    "pattern": "^\\s*(?:[A-Za-z]{2}\\s*)?(?:,\\s*(?:[A-Za-z]{2}\\s*)?)*$",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / countrycodes / description
        Previous value: -"Restrict results to one or more countries. Comma-separated ISO 3166-1 alpha-2 codes (e.g., \"us,ca\"). Preferred over the structured country field when filtering."New value: +"Restrict results to one or more countries. Comma-separated ISO 3166-1 alpha-2 codes (e.g., \"us,ca\"), in any casing and with optional spaces around the commas. Anything else — an alpha-3 code, a semicolon list, a country name — is rejected here rather than by Nominatim, which would discard it and silently return unfiltered results. A well-formed code for a country that does not exist is forwarded and matches nothing. An empty value is accepted and treated as omitted. Preferred over the structured country field when filtering."
      • removedInput schema / properties / countrycodes / type
        Removed value: -"string"
  5. 2 tool updates
    • Changedopenstreetmap_query_bbox6 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."
    • Changedopenstreetmap_query_nearby6 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\", \"highway\", \"natural\"). Use with tag_value. Cannot be combined with amenity."New value: +"Primary OSM tag key (e.g., \"leisure\", \"shop\", \"highway\", \"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\", \"primary\", \"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_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_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."
  6. 3 tool updates
    • Changedopenstreetmap_lookup_objects2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_id_format`: An array element is not a single N/W/R-prefixed OSM ID. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id_format`: An array element is not a single N/W/R-prefixed OSM ID. `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_id_format",
        -  "rate_limited",
        -  "upstream_error"
        -]New value: +[
        +  "invalid_id_format",
        +  "invalid_parameters",
        +  "rate_limited",
        +  "upstream_error"
        +]
    • Changedopenstreetmap_reverse_geocode5 fields changed
      • addedInput schema / properties / layer / anyOf
        Added value: +[
        +  {
        +    "const": "",
        +    "type": "string"
        +  },
        +  {
        +    "description": "One documented layer name, or a comma-separated list of them, in any casing.",
        +    "pattern": "^\\s*(?:(?:[aA][dD][dD][rR][eE][sS][sS]|[pP][oO][iI]|[rR][aA][iI][lL][wW][aA][yY]|[nN][aA][tT][uU][rR][aA][lL]|[mM][aA][nN][mM][aA][dD][eE])(?:\\s*,\\s*(?:[aA][dD][dD][rR][eE][sS][sS]|[pP][oO][iI]|[rR][aA][iI][lL][wW][aA][yY]|[nN][aA][tT][uU][rR][aA][lL]|[mM][aA][nN][mM][aA][dD][eE]))*)?\\s*$",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / layer / description
        Previous value: -"Restrict which OSM layer is matched. Comma-separated: address, poi, railway, natural, manmade. Default: address,poi."New value: +"Restrict which OSM layer is matched. One value or a comma-separated list drawn from: address, poi, railway, natural, manmade, in any casing. An undocumented layer name is rejected here rather than by Nominatim; an empty value is accepted and treated as omitted. Default: address,poi."
      • removedInput schema / properties / layer / type
        Removed value: -"string"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_coverage`: Nominatim returns an error indicating no OSM data at the given coordinates (e.g., open ocean or unmapped territory). `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_coverage`: Nominatim returns an error indicating no OSM data at the given coordinates (e.g., open ocean or unmapped territory). `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_coverage",
        -  "rate_limited",
        -  "upstream_error"
        -]New value: +[
        +  "no_coverage",
        +  "invalid_parameters",
        +  "rate_limited",
        +  "upstream_error"
        +]
    • Changedopenstreetmap_search_places16 fields changed
      • addedInput schema / properties / bounded
        Added value: +{
        +  "description": "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 scores higher.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / exclude_place_ids / description
        Previous value: -"OSM refs (N/W/R + id) or Nominatim place_ids to drop from results, forwarded as the exclude_place_ids parameter. Pass the nextExcludeIds value from a prior truncated response to page toward the next-best matches — it emits stable OSM refs when available, which page more reliably than volatile place_ids. When the walk runs out, the call succeeds with zero results and an exhaustion notice rather than failing — treat that as the loop-termination signal. Best-effort progressive retrieval, not a stable cursor — Nominatim ranking can reorder slightly between calls, so already-seen results may shift."New value: +"OSM refs (N/W/R + id) or Nominatim place_ids to drop from results, forwarded as the exclude_place_ids parameter. Each entry must be one of those two token forms — anything else is rejected here rather than by Nominatim. Entries are trimmed and lowercase ref prefixes uppercased before forwarding, and a blank entry is treated as absent. Pass the nextExcludeIds value from a prior full page to page toward further matches — it emits stable OSM refs when available, which page more reliably than volatile place_ids. When the walk runs out, the call succeeds with zero results and an exhaustion notice rather than failing — treat that as the loop-termination signal. Best-effort progressive retrieval, not a stable cursor — Nominatim ranking can reorder slightly between calls, so already-seen results may shift."
      • addedInput schema / properties / exclude_place_ids / items / anyOf
        Added value: +[
        +  {
        +    "const": "",
        +    "type": "string"
        +  },
        +  {
        +    "description": "An OSM ref (N/W/R plus the object id) or a bare Nominatim place_id.",
        +    "pattern": "^\\s*(?:[NWRnwr]\\d+|\\d+)?\\s*$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / exclude_place_ids / items / description
        Added value: +"One exclusion token, or an empty value that excludes nothing."
      • removedInput schema / properties / exclude_place_ids / items / type
        Removed value: -"string"
      • addedInput schema / properties / layer / anyOf
        Added value: +[
        +  {
        +    "const": "",
        +    "type": "string"
        +  },
        +  {
        +    "description": "One documented layer name, or a comma-separated list of them, in any casing.",
        +    "pattern": "^\\s*(?:(?:[aA][dD][dD][rR][eE][sS][sS]|[pP][oO][iI]|[rR][aA][iI][lL][wW][aA][yY]|[nN][aA][tT][uU][rR][aA][lL]|[mM][aA][nN][mM][aA][dD][eE])(?:\\s*,\\s*(?:[aA][dD][dD][rR][eE][sS][sS]|[pP][oO][iI]|[rR][aA][iI][lL][wW][aA][yY]|[nN][aA][tT][uU][rR][aA][lL]|[mM][aA][nN][mM][aA][dD][eE]))*)?\\s*$",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / layer / description
        Previous value: -"Filter by data layer. Comma-separated values: address, poi, railway, natural, manmade. Default: no restriction."New value: +"Filter by data layer. One value or a comma-separated list drawn from: address, poi, railway, natural, manmade, in any casing. An undocumented layer name is rejected here rather than by Nominatim; an empty value is accepted and treated as omitted. Default: no restriction."
      • removedInput schema / properties / layer / type
        Removed value: -"string"
      • addedInput schema / properties / viewbox
        Added value: +{
        +  "description": "Rectangular area to bias results toward, for disambiguating a name that repeats worldwide — a creek inside one watershed, a street inside one municipal boundary. Finer-grained than countrycodes and more precise than adding locality words to the query. Bias only by default: a better match outside the box is still returned. Set bounded to make it a hard restriction. Unlike openstreetmap_query_bbox, this box may not cross the antimeridian: west must be less than east and south less than north, or the call is rejected.",
        +  "properties": {
        +    "east": {
        +      "description": "Eastern boundary longitude. Must be strictly greater than west.",
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    },
        +    "north": {
        +      "description": "Northern boundary latitude. Must be strictly greater than south.",
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "south": {
        +      "description": "Southern boundary latitude. Must be strictly less than north.",
        +      "maximum": 90,
        +      "minimum": -90,
        +      "type": "number"
        +    },
        +    "west": {
        +      "description": "Western boundary longitude. Must be strictly less than east.",
        +      "maximum": 180,
        +      "minimum": -180,
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "west",
        +    "south",
        +    "east",
        +    "north"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / boundedApplied
        Added value: +{
        +  "description": "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.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / effectiveViewbox
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "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.",
        +  "properties": {
        +    "east": {
        +      "description": "Eastern boundary longitude sent to Nominatim.",
        +      "type": "number"
        +    },
        +    "north": {
        +      "description": "Northern boundary latitude sent to Nominatim.",
        +      "type": "number"
        +    },
        +    "south": {
        +      "description": "Southern boundary latitude sent to Nominatim.",
        +      "type": "number"
        +    },
        +    "west": {
        +      "description": "Western boundary longitude sent to Nominatim.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "west",
        +    "south",
        +    "east",
        +    "north"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_results`: No places matched the query on a first page — no exclude_place_ids were supplied. An exhausted paging walk returns success with zero results instead. `conflicting_query_mode`: The free-form query and at least one structured address field are both provided — the two modes are mutually exclusive. `missing_query_mode`: Neither the free-form query nor any structured address field is provided. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_results`: No places matched the query on a first page — no exclude_place_ids were supplied. An exhausted paging walk returns success with zero results instead. `conflicting_query_mode`: The free-form query and at least one structured address field are both provided — the two modes are mutually exclusive. `missing_query_mode`: Neither the free-form query nor any structured address field is provided. `bounded_without_viewbox`: bounded was set to true but no viewbox was supplied — there is no area for it to restrict results to. `invalid_viewbox`: The viewbox is inverted or degenerate on either axis — west at or beyond east, or south at or beyond north. `invalid_parameters`: Nominatim returned HTTP 400 — it refused one of the forwarded parameters. Its own message names the parameter and is carried in this error. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_results",
        -  "conflicting_query_mode",
        -  "missing_query_mode",
        -  "rate_limited",
        -  "upstream_error"
        -]New value: +[
        +  "no_results",
        +  "conflicting_query_mode",
        +  "missing_query_mode",
        +  "bounded_without_viewbox",
        +  "invalid_viewbox",
        +  "invalid_parameters",
        +  "rate_limited",
        +  "upstream_error"
        +]
      • changedOutput schema / properties / nextExcludeIds / description
        Previous value: -"Accumulated exclude tokens (prior excludes plus this page) to pass as exclude_place_ids on the next call, retrieving the next-best matches. Each token is a stable OSM ref (N/W/R + osm_id) when the result carries one, falling back to the Nominatim place_id otherwise. Present only when results were truncated. Nominatim reports no total, so a truncated page is not proof that more matches exist — the following page may come back exhausted (zero results plus a notice). Best-effort: Nominatim ranking is not perfectly stable across calls."New value: +"Accumulated exclude tokens (prior excludes plus this page) to pass as exclude_place_ids on the next call, retrieving further matches. Each token is a stable OSM ref (N/W/R + osm_id) when the result carries one, falling back to the Nominatim place_id otherwise. Present whenever the page filled the requested limit, whether or not truncated is set — the probe reads the relevance cutoff, and excluding this page can still surface less accurate matches beyond it. Best-effort rather than a stable cursor: Nominatim ranking can reorder slightly between calls, so a walk can still end sooner than the page count suggests."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for this page, covering two cases: results were capped at limit (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit without being capped. Carries paging guidance only — the tag-selection caveat has its own field so neither message can overwrite the other."New value: +"Guidance for this page, covering two cases: results were capped at limit and a probe confirmed a further match at the query's relevance cutoff (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit, and absent when it fills the limit with nothing past the cutoff — that page still carries nextExcludeIds, which is the field to read for whether paging can continue. Carries paging guidance only — the tag-selection caveat has its own field so neither message can overwrite the other."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True if the result count equals the requested limit (Nominatim may have more)."New value: +"True when the page filled the requested limit and a same-call probe for one further result confirmed another match at this query's relevance cutoff. Absent otherwise. Absence is not a claim that the set is exhausted: Nominatim applies its own relevance cutoff, so excluding a full page's ids can still surface further, less accurate matches — which is why nextExcludeIds is offered on any full page. Nominatim reports no total, so this is a confirmed observation rather than an inference from page size."
  7. 1 tool update
    • Changedopenstreetmap_query_raw4 fields changed
      • addedInput schema / properties / max_element_bytes
        Added value: +{
        +  "default": 20000,
        +  "description": "Serialized-byte budget for one element, measured in UTF-8 bytes and applied to each element of the page independently after limit and offset. It bounds what limit cannot: a single relation or geometry-heavy way. An element over budget keeps every scalar and its tags but has its members, nodes and geometry arrays withheld whole — never truncated to a prefix — and lists each one under withheld_keys with its item count and byte size; withheldElements and withheldNotice then carry the offset and raised budget that fetch that element back whole in one more call. The withheld_keys disclosure the element gains is not counted back against the budget, so a bounded element runs a fixed ~60 bytes per withheld key above it.",
        +  "maximum": 10000000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / elements / description
        Previous value: -"Raw Overpass API response elements for this page, up to the limit. Structure varies by query type — nodes have lat/lon, ways have nodes[], relations have members[]."New value: +"Raw Overpass API response elements for this page, up to the limit. Structure varies by query type — nodes have lat/lon, ways have nodes[], relations have members[]. An element over max_element_bytes carries a withheld_keys array instead of the heavy arrays it names, each entry giving the key, its item count, and its serialized byte size."
      • addedOutput schema / properties / withheldElements
        Added value: +{
        +  "description": "Elements on this page that exceeded max_element_bytes, each with the arguments that fetch it back whole. Absent when every element fit.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "description": "OSM id of the bounded element.",
        +        "type": "number"
        +      },
        +      "keys": {
        +        "description": "Keys withheld whole from this element: members, nodes, or geometry.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "maxElementBytes": {
        +        "description": "Serialized UTF-8 byte size of this element whole, which is the smallest max_element_bytes that returns it. Pass it on the retrieval call when it is at or below the 10000000 ceiling; above that no accepted budget returns the element whole and withheldNotice names the narrower query to use instead.",
        +        "type": "number"
        +      },
        +      "offset": {
        +        "description": "Absolute offset of this element in the full match set. Pass it with limit 1 to fetch this element alone.",
        +        "type": "number"
        +      },
        +      "type": {
        +        "description": "OSM element type of the bounded element.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "id",
        +      "keys",
        +      "offset",
        +      "maxElementBytes"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / withheldNotice
        Added value: +{
        +  "description": "How to retrieve the withheld arrays, one element per call. Absent when every element fit.",
        +  "type": "string"
        +}
  8. 6 tool updates
    • Changedopenstreetmap_lookup_objects3 fields changed
      • addedOutput schema / properties / results / items / properties / boundingbox / items
        Added value: +false
      • addedOutput schema / properties / results / items / properties / boundingbox / maxItems
        Added value: +4
      • addedOutput schema / properties / results / items / properties / boundingbox / minItems
        Added value: +4
    • Changedopenstreetmap_query_bbox1 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."
    • Changedopenstreetmap_query_nearby1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `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_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."
    • Changedopenstreetmap_query_raw1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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."
    • Changedopenstreetmap_reverse_geocode3 fields changed
      • addedOutput schema / properties / result / properties / boundingbox / items
        Added value: +false
      • addedOutput schema / properties / result / properties / boundingbox / maxItems
        Added value: +4
      • addedOutput schema / properties / result / properties / boundingbox / minItems
        Added value: +4
    • Changedopenstreetmap_search_places3 fields changed
      • addedOutput schema / properties / results / items / properties / boundingbox / items
        Added value: +false
      • addedOutput schema / properties / results / items / properties / boundingbox / maxItems
        Added value: +4
      • addedOutput schema / properties / results / items / properties / boundingbox / minItems
        Added value: +4
  9. 6 tool updates
    • Changedopenstreetmap_lookup_objects8 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": [
        +      "results",
        +      "not_found",
        +      "total",
        +      "attribution"
        +    ]
        +  },
        +  {
        +    "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_id_format`: An array element is not a single N/W/R-prefixed OSM ID. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_id_format",
        +            "rate_limited",
        +            "upstream_error"
        +          ],
        +          "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 / properties / results / items / properties / boundingbox / items
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / boundingbox / prefixItems
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "not_found",
        -  "total",
        -  "attribution"
        -]
    • Changedopenstreetmap_query_bbox6 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"
        -]
    • Changedopenstreetmap_query_nearby6 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_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_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"
        -]
    • Changedopenstreetmap_query_raw6 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",
        +      "total_elements",
        +      "attribution",
        +      "effectiveQuery",
        +      "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: `query_error`: Overpass returned a 400 error — malformed query syntax. `query_timeout`: The query exceeded its timeout (Overpass runtime error in response body). `result_too_large`: Overpass runtime error: query ran out of memory — 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 the [timeout:N] directive. `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": [
        +            "query_error",
        +            "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",
        -  "total_elements",
        -  "attribution",
        -  "effectiveQuery",
        -  "totalFound",
        -  "truncated"
        -]
    • Changedopenstreetmap_reverse_geocode8 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": [
        +      "result",
        +      "attribution"
        +    ]
        +  },
        +  {
        +    "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: `no_coverage`: Nominatim returns an error indicating no OSM data at the given coordinates (e.g., open ocean or unmapped territory). `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_coverage",
        +            "rate_limited",
        +            "upstream_error"
        +          ],
        +          "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 / properties / result / properties / boundingbox / items
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedOutput schema / properties / result / properties / boundingbox / prefixItems
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedOutput schema / required
        Removed value: -[
        -  "result",
        -  "attribution"
        -]
    • Changedopenstreetmap_search_places8 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": [
        +      "results",
        +      "total",
        +      "attribution",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "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: `no_results`: No places matched the query on a first page — no exclude_place_ids were supplied. An exhausted paging walk returns success with zero results instead. `conflicting_query_mode`: The free-form query and at least one structured address field are both provided — the two modes are mutually exclusive. `missing_query_mode`: Neither the free-form query nor any structured address field is provided. `rate_limited`: Nominatim returned HTTP 429, or answered HTTP 200 with a throttle document instead of JSON — the one request per second usage policy was exceeded. `upstream_error`: Nominatim returned an unexpected non-2xx status other than 429, or answered HTTP 200 with a body that is not JSON and carries no throttle signature. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_results",
        +            "conflicting_query_mode",
        +            "missing_query_mode",
        +            "rate_limited",
        +            "upstream_error"
        +          ],
        +          "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 / properties / results / items / properties / boundingbox / items
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / boundingbox / prefixItems
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "total",
        -  "attribution",
        -  "effectiveQuery"
        -]
  10. 3 tool updates
    • Changedopenstreetmap_lookup_objects3 fields changed
      • changedInput schema / properties / extratags / description
        Previous value: -"Include extra OSM tags (phone, website, wikidata, etc.)."New value: +"Include the extra OSM tags each looked-up object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Reports whatever the object happens to carry, so an absent tag describes that object rather than OpenStreetMap."
      • changedOutput schema / properties / results / items / properties / extratags / description
        Previous value: -"Additional OSM tags. Present only when extratags was requested."New value: +"Extra OSM tags this object carries — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). Present only when extratags was requested; an absent tag describes this object, not OpenStreetMap."
      • addedOutput schema / properties / tagSelectionCaveat
        Added value: +{
        +  "description": "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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present when extratags was requested.",
        +  "type": "string"
        +}
    • Changedopenstreetmap_reverse_geocode3 fields changed
      • changedInput schema / properties / extratags / description
        Previous value: -"Include extra OSM tags when available (phone, website, opening_hours, wikidata, etc.)."New value: +"Include the extra OSM tags the matched object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Opportunistic, not selective: it reports whatever the matched object happens to carry, so an absent tag describes that object rather than OpenStreetMap, and no value here can steer which object is matched."
      • changedOutput schema / properties / result / properties / extratags / description
        Previous value: -"Additional OSM tags (phone, website, opening_hours, wikidata). Present only when extratags was requested."New value: +"Extra OSM tags this object carries — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). Present only when extratags was requested; an absent tag describes this object, not OpenStreetMap."
      • addedOutput schema / properties / tagSelectionCaveat
        Added value: +{
        +  "description": "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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present when extratags was requested.",
        +  "type": "string"
        +}
    • Changedopenstreetmap_search_places5 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "query"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "street"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "city"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "county"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "state"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "country"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "postalcode"
        +    ],
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / extratags / description
        Previous value: -"Include extra OSM tags when available (e.g., phone, website, opening_hours, wikidata). Increases response size."New value: +"Include the extra OSM tags the matched object carries — contact and metadata tags (phone, website, opening_hours, wikidata) and physical attribute tags alike (surface, tracktype, sac_scale, ele, access). Opportunistic, not selective: it reports whatever the matched object happens to carry, so an absent tag describes that object rather than OpenStreetMap, and no value here can steer which object is matched. Increases response size."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance for this page, covering two cases: results were capped at limit (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit without being capped."New value: +"Guidance for this page, covering two cases: results were capped at limit (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit without being capped. Carries paging guidance only — the tag-selection caveat has its own field so neither message can overwrite the other."
      • changedOutput schema / properties / results / items / properties / extratags / description
        Previous value: -"Additional OSM tags (phone, website, opening_hours, wikidata). Present only when extratags was requested."New value: +"Extra OSM tags this object carries — contact and metadata (phone, website, opening_hours, wikidata) and physical attributes (surface, tracktype, sac_scale, ele, access). Present only when extratags was requested; an absent tag describes this object, not OpenStreetMap."
      • addedOutput schema / properties / tagSelectionCaveat
        Added value: +{
        +  "description": "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 rather than selecting them, so a missing tag is not evidence the tag is missing from OpenStreetMap. Present on every successful response.",
        +  "type": "string"
        +}
  11. 2 tool updates
    • Changedopenstreetmap_query_bbox2 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
    • Changedopenstreetmap_query_nearby2 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 like large campuses."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 like large campuses. 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
  12. 2 tool updates
    • Changedopenstreetmap_query_bbox1 field changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "amenity"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "tag_key",
        +      "tag_value"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedopenstreetmap_query_nearby1 field changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "amenity"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "required": [
        +      "tag_key",
        +      "tag_value"
        +    ],
        +    "type": "object"
        +  }
        +]
  13. 1 tool update
    • Changedopenstreetmap_query_raw10 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "description": "Maximum elements to return. Applied after the Overpass query — if the query matched more, they are truncated.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Number of matching elements 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; a result over 100000 elements is served but not cached, so paging that far re-queries and depends on the endpoint returning the same order. Pass the nextOffset value from a prior truncated response.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / timeout_seconds / description
        Previous value: -"Query timeout in seconds. The [timeout:N] directive in the query string takes precedence if present. Max 180s."New value: +"Query timeout in seconds, bounding how long Overpass itself spends on the query. The [timeout:N] directive in the query string takes precedence if present. The client waits for what is requested here, up to 180s, so a long-running query is not cut off early — but the endpoint enforces its own budget and may answer HTTP 504 first."
      • changedOutput schema / properties / elements / description
        Previous value: -"Raw Overpass API response elements. Structure varies by query type — nodes have lat/lon, ways have nodes[], relations have members[]."New value: +"Raw Overpass API response elements for this page, up to the limit. Structure varies by query type — nodes have lat/lon, ways have nodes[], relations have members[]."
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "description": "Offset to pass on the next call to retrieve the following page of elements. Present only when more elements remain beyond this page.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no elements were returned — e.g., check query syntax or broaden the filter. Absent when results were returned."New value: +"Guidance when the page came back empty. Distinguishes a query that matched nothing (check syntax or broaden the filter) from an offset past the end of a non-empty result set (retry at a lower offset). Absent when results were returned."
      • addedOutput schema / properties / totalFound
        Added value: +{
        +  "description": "Total elements returned by Overpass before limit truncation.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / total_elements / description
        Previous value: -"Number of elements returned."New value: +"Number of elements returned on this page. See totalFound for the full match count."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True if elements were cut at the limit. Narrow the query, or page with offset to retrieve the rest.",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "elements",
        -  "total_elements",
        -  "attribution",
        -  "effectiveQuery"
        -]New value: +[
        +  "elements",
        +  "total_elements",
        +  "attribution",
        +  "effectiveQuery",
        +  "totalFound",
        +  "truncated"
        +]
  14. 3 tool updates
    • Changedopenstreetmap_query_bbox1 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"
        +}
    • Changedopenstreetmap_query_nearby1 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"
        +}
    • Changedopenstreetmap_query_raw1 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. 4 tool updates
    • Changedopenstreetmap_query_bbox4 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"
        +]
    • Changedopenstreetmap_query_nearby2 fields changed
      • 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"
        +]
    • Changedopenstreetmap_query_raw1 field changed
      • changedOutput schema / properties / data_timestamp / description
        Previous value: -"OSM data freshness timestamp from the Overpass response. Absent if not included in the response."New value: +"OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata."
    • Changedopenstreetmap_search_places1 field changed
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when the page came back empty. Present when an exclude_place_ids paging walk is exhausted — the query matched, the walk simply ended, so no rewrite is needed. Absent when results were returned."New value: +"Guidance for this page, covering two cases: results were capped at limit (truncated is true — keep paging with nextExcludeIds), or an exclude_place_ids paging walk is exhausted and the page came back empty (the query matched, the walk simply ended, so no rewrite is needed). Tell them apart by truncated and the result count, not by this field being present. Absent when a page returns below the limit without being capped."
  16. 8 tool updates
    • Removedopenstreetmap_geocode
    • Removedopenstreetmap_lookup
    • Addedopenstreetmap_lookup_objects
    • Changedopenstreetmap_query_bbox1 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."
    • Changedopenstreetmap_query_nearby1 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."
    • Removedopenstreetmap_reverse
    • Addedopenstreetmap_reverse_geocode
    • Addedopenstreetmap_search_places

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides forward/reverse geocoding, bounding box extraction, nearby places discovery, batch geocoding, route waypoints, and administrative boundary lookup using OpenStreetMap data.
    10
    Apache 2.0
  • F
    license
    A
    quality
    C
    maintenance
    Enables querying OpenStreetMap data (buildings, roads, amenities, etc.) via Overpass API and converts them to GeoJSON format for GIS analysis and visualization.
    8
    6
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.