Server definition
- Hash
- sha256:45e21b22ab09007de1074c1e747a7458ef6370b356a49dd6b1b0ae75d160a266
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "Resolve place names and addresses to coordinates with openstreetmap_search_places, coordinates to an address with openstreetmap_reverse_geocode, and known OSM IDs to full records with openstreetmap_lookup_objects. Survey features with openstreetmap_query_nearby (a radius around a point) or openstreetmap_query_bbox (a bounding box, or within an OSM boundary ref such as R237385, built from the osm_type and osm_id the geocoding tools return), filtering by amenity or tag_key with an optional tag_value, and drop to openstreetmap_query_raw for arbitrary Overpass QL. Data is © OpenStreetMap contributors under ODbL 1.0.",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"extratags": {
"default": false,
"description": "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.",
"type": "boolean"
},
"language": {
"description": "Preferred language for names (BCP 47 code).",
"type": "string"
},
"osm_ids": {
"description": "OSM 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.",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
}
},
"required": [
"osm_ids"
],
"type": "object"
},
"name": "openstreetmap_lookup_objects",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"not_found",
"total",
"attribution"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"attribution": {
"description": "Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.",
"type": "string"
},
"error": {
"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. `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.",
"examples": [
"invalid_id_format",
"invalid_parameters",
"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"
},
"not_found": {
"description": "OSM IDs from the request that returned no result.",
"items": {
"type": "string"
},
"type": "array"
},
"results": {
"description": "Address details for the requested OSM IDs that were found.",
"items": {
"additionalProperties": false,
"description": "Address details for a single OSM ID lookup result.",
"properties": {
"address": {
"additionalProperties": {
"type": "string"
},
"description": "Structured address breakdown. Keys vary by feature type.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"boundingbox": {
"description": "Bounding box as [south, north, west, east] in WGS84 decimal degrees.",
"items": false,
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"category": {
"description": "OSM feature category.",
"type": "string"
},
"display_name": {
"description": "Full human-readable address string.",
"type": "string"
},
"extratags": {
"additionalProperties": {
"type": "string"
},
"description": "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.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"lat": {
"description": "Latitude in WGS84 decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in WGS84 decimal degrees.",
"type": "number"
},
"name": {
"description": "Feature name if applicable.",
"type": "string"
},
"osm_id": {
"description": "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.",
"type": "number"
},
"osm_type": {
"description": "OSM object type.",
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"place_id": {
"description": "Nominatim internal place ID.",
"type": "number"
},
"type": {
"description": "OSM feature type within category.",
"type": "string"
}
},
"required": [
"place_id",
"lat",
"lon",
"display_name"
],
"type": "object"
},
"type": "array"
},
"tagSelectionCaveat": {
"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"
},
"total": {
"description": "Number of results returned.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"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"
}
],
"properties": {
"amenity": {
"description": "OSM amenity tag value shortcut (e.g. \"cafe\", \"bench\", \"hospital\"). Exactly one primary mode is required: this or tag_key, never both.",
"type": "string"
},
"east": {
"description": "Eastern boundary longitude (maximum longitude). A value below west describes an antimeridian crossing rather than an inverted box.",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"element_types": {
"default": [
"node",
"way"
],
"description": "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.",
"items": {
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"minItems": 1,
"type": "array"
},
"filters": {
"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"
},
"limit": {
"default": 20,
"description": "Maximum results to return. Applied after the Overpass query — if the area has more features, they are truncated.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"north": {
"description": "Northern boundary latitude (maximum latitude).",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of matching features to skip before applying limit, for paging through a large result set. The full match set is fetched and cached ~10 minutes keyed by the query, so re-paging at a new offset is deterministic and costs no extra upstream request. Pass the nextOffset value from a prior truncated response.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"south": {
"description": "Southern boundary latitude (minimum latitude). One of four corner fields: supply all four, or use within instead.",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"tag_key": {
"description": "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.",
"type": "string"
},
"tag_value": {
"description": "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.",
"type": "string"
},
"timeout_seconds": {
"default": 25,
"description": "Overpass query timeout in seconds. Increase for large bounding boxes or dense areas.",
"maximum": 60,
"minimum": 5,
"type": "integer"
},
"west": {
"description": "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.",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"within": {
"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"
}
},
"type": "object"
},
"name": "openstreetmap_query_bbox",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"elements",
"attribution",
"effectiveTag",
"totalFound",
"truncated"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"areasTimestamp": {
"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"
},
"attribution": {
"description": "Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.",
"type": "string"
},
"data_timestamp": {
"description": "OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.",
"type": "string"
},
"effectiveArea": {
"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"
},
"effectiveTag": {
"description": "The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. \"amenity=restaurant, cuisine=italian, name\").",
"type": "string"
},
"elements": {
"description": "Matching OSM features inside the requested scope — the bounding box, or the within boundary — up to the limit.",
"items": {
"additionalProperties": false,
"description": "A single matching OSM feature.",
"properties": {
"lat": {
"description": "Latitude (present for nodes and ways/relations with computed center).",
"type": "number"
},
"lon": {
"description": "Longitude (present for nodes and ways/relations with computed center).",
"type": "number"
},
"name": {
"description": "Feature name from OSM tags.",
"type": "string"
},
"osm_id": {
"description": "OSM element ID. Use with osm_type for openstreetmap_lookup_objects.",
"type": "number"
},
"osm_type": {
"description": "OSM element type.",
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"tags": {
"additionalProperties": {
"type": "string"
},
"description": "All OSM tags for this feature. Values are always strings.",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"osm_type",
"osm_id",
"tags"
],
"type": "object"
},
"type": "array"
},
"error": {
"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_scope`: The two spatial scopes conflict: within sent alongside a corner field, neither scope sent, or only part of the four-corner set sent. `invalid_bbox`: south exceeds north — the latitude bounds are inverted. `invalid_tag`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, or a 425 — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler.",
"examples": [
"invalid_scope",
"invalid_bbox",
"invalid_tag",
"query_timeout",
"result_too_large",
"rate_limited",
"upstream_error",
"overpass_gateway_timeout",
"overpass_unavailable",
"endpoints_exhausted",
"endpoints_unavailable",
"endpoints_rejected",
"pacer_shed"
],
"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"
},
"nextOffset": {
"description": "Offset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.",
"type": "number"
},
"notice": {
"description": "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.",
"type": "string"
},
"servingEndpoint": {
"description": "Overpass endpoint that answered, named by origin alone (scheme, host, port), with \"(entry N)\" added when two configured endpoints share an origin. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, or stale.",
"type": "string"
},
"totalFound": {
"description": "Total features returned by Overpass before limit truncation.",
"type": "number"
},
"truncated": {
"description": "True if results were cut at the limit. Reduce bbox area, add more specific tags, or page with offset to retrieve the rest.",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"required": [
"amenity"
],
"type": "object"
},
{
"required": [
"tag_key"
],
"type": "object"
}
],
"properties": {
"amenity": {
"description": "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.",
"type": "string"
},
"element_types": {
"default": [
"node",
"way"
],
"description": "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.",
"items": {
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"minItems": 1,
"type": "array"
},
"filters": {
"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"
},
"lat": {
"description": "Center latitude in WGS84 decimal degrees.",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"limit": {
"default": 20,
"description": "Maximum results to return. Applied after the Overpass query — if the area has more features, they are truncated.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"lon": {
"description": "Center longitude in WGS84 decimal degrees.",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of matching features to skip before applying limit, for paging through a large result set. Features are distance-sorted before paging, so higher offsets return progressively farther matches; the full set is cached ~10 minutes so re-paging costs no extra upstream request. Pass the nextOffset value from a prior truncated response.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"radius_meters": {
"default": 1000,
"description": "Search radius in meters. Max 50,000m (50km). Keep under 5,000m for dense urban POI queries to avoid slow responses.",
"exclusiveMinimum": 0,
"maximum": 50000,
"type": "number"
},
"tag_key": {
"description": "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.",
"type": "string"
},
"tag_value": {
"description": "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.",
"type": "string"
},
"timeout_seconds": {
"default": 25,
"description": "Overpass query timeout in seconds. Increase for large radius or dense areas.",
"maximum": 60,
"minimum": 5,
"type": "integer"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "openstreetmap_query_nearby",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"elements",
"attribution",
"effectiveTag",
"totalFound",
"truncated"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"attribution": {
"description": "Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.",
"type": "string"
},
"data_timestamp": {
"description": "OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.",
"type": "string"
},
"effectiveTag": {
"description": "The full ordered AND filter chain: key=value for equality, key alone for existence (e.g. \"amenity=restaurant, cuisine=italian, name\").",
"type": "string"
},
"elements": {
"description": "Matching OSM features, up to the limit.",
"items": {
"additionalProperties": false,
"description": "A single matching OSM feature.",
"properties": {
"distance_meters": {
"description": "Great-circle distance in meters from the query center, rounded to one decimal. Results are sorted ascending by this value; omitted for elements without a computed coordinate.",
"type": "number"
},
"lat": {
"description": "Latitude (present for nodes and ways/relations with computed center).",
"type": "number"
},
"lon": {
"description": "Longitude (present for nodes and ways/relations with computed center).",
"type": "number"
},
"name": {
"description": "Feature name from OSM tags.",
"type": "string"
},
"osm_id": {
"description": "OSM element ID. Use with osm_type for openstreetmap_lookup_objects.",
"type": "number"
},
"osm_type": {
"description": "OSM element type.",
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"tags": {
"additionalProperties": {
"type": "string"
},
"description": "All OSM tags for this feature. Values are always strings.",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"osm_type",
"osm_id",
"tags"
],
"type": "object"
},
"type": "array"
},
"error": {
"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`: Tag modes conflict or are missing, a key or supplied value is blank, keys repeat after trimming, or a filter carries Overpass QL metacharacters. `query_timeout`: The query exceeded timeout_seconds. `result_too_large`: Overpass ran out of memory on this query. `rate_limited`: Every configured endpoint refused the query as throttled — HTTP 429, or a throttle document in place of JSON. `upstream_error`: Overpass reported a runtime error that is neither a timeout nor memory exhaustion. `overpass_gateway_timeout`: Overpass answered HTTP 504 or 408 — the query exceeded the endpoint's own time budget, not timeout_seconds. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, or a 425 — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler.",
"examples": [
"invalid_tag",
"query_timeout",
"result_too_large",
"rate_limited",
"upstream_error",
"overpass_gateway_timeout",
"overpass_unavailable",
"endpoints_exhausted",
"endpoints_unavailable",
"endpoints_rejected",
"pacer_shed"
],
"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"
},
"nextOffset": {
"description": "Offset to pass on the next call to retrieve the following page of features. Present only when more features remain beyond this page.",
"type": "number"
},
"notice": {
"description": "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.",
"type": "string"
},
"servingEndpoint": {
"description": "Overpass endpoint that answered, named by origin alone (scheme, host, port), with \"(entry N)\" added when two configured endpoints share an origin. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, or stale.",
"type": "string"
},
"totalFound": {
"description": "Total features returned by Overpass before limit truncation.",
"type": "number"
},
"truncated": {
"description": "True if results were cut at the limit. Reduce radius, add more specific tags, or page with offset to retrieve the rest.",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "Run an arbitrary Overpass QL query for anything the convenience tools cannot express: multi-type or union queries, relation membership, historical queries, regex tag matching. The query must include [out:json], e.g. \"[out:json][timeout:15];node[\\\"natural\\\"=\\\"peak\\\"](47.5,-122.5,47.7,-122.2);out body;\"; scope to an OSM boundary with rel(<id>);map_to_area->.a; or way(<id>);map_to_area->.a; then (area.a) on each statement (the 2400000000 way-area offset is gone since Overpass 0.7.57; openstreetmap_query_bbox takes the same scope as within, without QL). The response is one page: page with limit and offset, read totalFound and truncated for the whole match, and an element over max_element_bytes arrives with its members, nodes or geometry array withheld whole and withheldNotice saying how to fetch it back. For plain \"near X\" or \"in this area\" questions use openstreetmap_query_nearby or openstreetmap_query_bbox.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"limit": {
"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"
},
"max_element_bytes": {
"default": 20000,
"description": "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.",
"maximum": 10000000,
"minimum": 1000,
"type": "integer"
},
"offset": {
"default": 0,
"description": "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.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"query": {
"description": "Overpass 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;\"",
"type": "string"
},
"timeout_seconds": {
"default": 30,
"description": "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.",
"maximum": 180,
"minimum": 5,
"type": "integer"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "openstreetmap_query_raw",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"elements",
"total_elements",
"attribution",
"effectiveQuery",
"totalFound",
"truncated"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"attribution": {
"description": "Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.",
"type": "string"
},
"data_timestamp": {
"description": "OSM data freshness timestamp from the Overpass response. Absent when the endpoint reported no freshness metadata.",
"type": "string"
},
"effectiveQuery": {
"description": "The Overpass QL string as sent to the API (after any timeout injection).",
"type": "string"
},
"elements": {
"description": "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.",
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"error": {
"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 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 or 408 — the query exceeded the endpoint's own time budget, not the [timeout:N] directive. `overpass_unavailable`: Overpass answered an HTTP 5xx other than 501 and 504, or a 425 — the endpoint is down, restarting, shedding load, or not taking the query yet. `endpoints_exhausted`: No endpoint answered within its attempt window, or the total time budget ran out first. `endpoints_unavailable`: No configured endpoint would serve the call — connections refused, DNS failures, HTTP refusals such as 401/403/404, throttling, or instance faults, in some mix. `endpoints_rejected`: Every configured endpoint refused the call by HTTP status: a 401, 403, 404, or 501, a redirect, or another non-retried status below 500 other than 400 and 429. `pacer_shed`: The query waited 30 seconds in total for an Overpass slot while other calls held every slot it could take. Other values are possible when a failure originates below the handler.",
"examples": [
"query_error",
"query_timeout",
"result_too_large",
"rate_limited",
"upstream_error",
"overpass_gateway_timeout",
"overpass_unavailable",
"endpoints_exhausted",
"endpoints_unavailable",
"endpoints_rejected",
"pacer_shed"
],
"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"
},
"nextOffset": {
"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"
},
"notice": {
"description": "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.",
"type": "string"
},
"servingEndpoint": {
"description": "Overpass endpoint that answered, named by origin alone (scheme, host, port), with \"(entry N)\" added when two configured endpoints share an origin. May name a failover mirror, or the endpoint that originally served a cached response. Read with data_timestamp when a result looks slow, sparse, or stale.",
"type": "string"
},
"totalFound": {
"description": "Total elements returned by Overpass before limit truncation.",
"type": "number"
},
"total_elements": {
"description": "Number of elements returned on this page. See totalFound for the full match count.",
"type": "number"
},
"truncated": {
"description": "True if elements were cut at the limit. Narrow the query, or page with offset to retrieve the rest.",
"type": "boolean"
},
"withheldElements": {
"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"
},
"withheldNotice": {
"description": "How to retrieve the withheld arrays, one element per call. Absent when every element fit.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"extratags": {
"default": false,
"description": "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.",
"type": "boolean"
},
"language": {
"description": "Preferred language for the result (BCP 47 code or Accept-Language string).",
"type": "string"
},
"lat": {
"description": "Latitude in WGS84 decimal degrees.",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"layer": {
"anyOf": [
{
"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"
}
],
"description": "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."
},
"lon": {
"description": "Longitude in WGS84 decimal degrees.",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"zoom": {
"default": 18,
"description": "Address detail level, roughly corresponding to map zoom. 18=building, 16=street, 14=neighbourhood, 12=town, 10=city, 8=county, 5=state, 3=country.",
"maximum": 18,
"minimum": 3,
"type": "integer"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "openstreetmap_reverse_geocode",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"result",
"attribution"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"attribution": {
"description": "Required data attribution.",
"type": "string"
},
"error": {
"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 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.",
"examples": [
"no_coverage",
"invalid_parameters",
"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"
},
"result": {
"additionalProperties": false,
"description": "The closest matching OSM object at the given coordinates.",
"properties": {
"address": {
"additionalProperties": {
"type": "string"
},
"description": "Structured address, keys varying by feature type: house_number, road, suburb, city, state, postcode, country, country_code.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"boundingbox": {
"description": "Bounding box as [south, north, west, east] in WGS84 decimal degrees.",
"items": false,
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"category": {
"description": "OSM feature category (e.g. \"amenity\", \"building\").",
"type": "string"
},
"display_name": {
"description": "Full human-readable address.",
"type": "string"
},
"extratags": {
"additionalProperties": {
"type": "string"
},
"description": "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.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"lat": {
"description": "Latitude in WGS84 decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in WGS84 decimal degrees.",
"type": "number"
},
"name": {
"description": "Feature name when the object is named.",
"type": "string"
},
"osm_id": {
"description": "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.",
"type": "number"
},
"osm_type": {
"description": "OSM object type.",
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"place_id": {
"description": "Nominatim internal place ID.",
"type": "number"
},
"type": {
"description": "OSM feature type within category.",
"type": "string"
}
},
"required": [
"place_id",
"lat",
"lon",
"display_name"
],
"type": "object"
},
"tagSelectionCaveat": {
"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"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"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"
}
],
"properties": {
"bounded": {
"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"
},
"city": {
"description": "City name (structured query).",
"type": "string"
},
"country": {
"description": "Country name or ISO 3166-1 alpha-2 code (structured query).",
"type": "string"
},
"countrycodes": {
"anyOf": [
{
"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"
}
],
"description": "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."
},
"county": {
"description": "County or district (structured query).",
"type": "string"
},
"exclude_place_ids": {
"description": "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.",
"items": {
"anyOf": [
{
"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"
}
],
"description": "One exclusion token, or an empty value that excludes nothing."
},
"type": "array"
},
"extratags": {
"default": false,
"description": "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.",
"type": "boolean"
},
"featureType": {
"description": "Restrict results to a geographic feature type. Automatically implies the address layer.",
"enum": [
"country",
"state",
"city",
"settlement"
],
"type": "string"
},
"language": {
"description": "Preferred language for result names (BCP 47 code or Accept-Language string, e.g., \"en\", \"de\", \"fr,en\"). Defaults to local OSM language.",
"type": "string"
},
"layer": {
"anyOf": [
{
"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"
}
],
"description": "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."
},
"limit": {
"default": 5,
"description": "Maximum results to return. Nominatim may return fewer when additional results do not sufficiently match. Max 40.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"postalcode": {
"description": "Postal or ZIP code (structured query).",
"type": "string"
},
"query": {
"description": "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.",
"type": "string"
},
"state": {
"description": "State or province (structured query).",
"type": "string"
},
"street": {
"description": "House number and street name (structured query). Use with city/state/country fields. Cannot be combined with query.",
"type": "string"
},
"viewbox": {
"description": "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.",
"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"
}
},
"type": "object"
},
"name": "openstreetmap_search_places",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"total",
"attribution",
"effectiveQuery"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"attribution": {
"description": "Required data attribution: Data © OpenStreetMap contributors, ODbL 1.0.",
"type": "string"
},
"boundedApplied": {
"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"
},
"cap": {
"description": "The limit applied to this request.",
"type": "number"
},
"effectiveQuery": {
"description": "The effective query sent to Nominatim — the free-form query string, or a reconstructed string from the provided structured address fields.",
"type": "string"
},
"effectiveViewbox": {
"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"
},
"error": {
"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, 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.",
"examples": [
"no_results",
"conflicting_query_mode",
"missing_query_mode",
"bounded_without_viewbox",
"invalid_viewbox",
"invalid_parameters",
"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"
},
"nextExcludeIds": {
"description": "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.",
"items": {
"type": "string"
},
"type": "array"
},
"notice": {
"description": "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.",
"type": "string"
},
"results": {
"description": "Geocoding results, ordered by Nominatim relevance (importance score descending).",
"items": {
"additionalProperties": false,
"description": "A single geocoding result.",
"properties": {
"address": {
"additionalProperties": {
"type": "string"
},
"description": "Structured address breakdown, keys varying by feature type and country: house_number, road, suburb, city, state, postcode, country, country_code.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"boundingbox": {
"description": "Bounding box as [south, north, west, east] in WGS84 decimal degrees.",
"items": false,
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"type": "array"
},
"category": {
"description": "OSM feature category (e.g. \"amenity\", \"man_made\").",
"type": "string"
},
"display_name": {
"description": "Full human-readable address string.",
"type": "string"
},
"extratags": {
"additionalProperties": {
"type": "string"
},
"description": "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.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"importance": {
"description": "Nominatim relevance score (0–1). Higher is more globally prominent.",
"type": "number"
},
"lat": {
"description": "Latitude in WGS84 decimal degrees.",
"type": "number"
},
"lon": {
"description": "Longitude in WGS84 decimal degrees.",
"type": "number"
},
"name": {
"description": "Feature name; absent for address-only results.",
"type": "string"
},
"osm_id": {
"description": "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.",
"type": "number"
},
"osm_type": {
"description": "OSM object type.",
"enum": [
"node",
"way",
"relation"
],
"type": "string"
},
"place_id": {
"description": "Nominatim internal place ID. Stable cross-server reference: osm_type+osm_id.",
"type": "number"
},
"type": {
"description": "OSM feature type within category (e.g. \"hospital\", \"tower\").",
"type": "string"
}
},
"required": [
"place_id",
"lat",
"lon",
"display_name"
],
"type": "object"
},
"type": "array"
},
"shown": {
"description": "Number of results returned.",
"type": "number"
},
"tagSelectionCaveat": {
"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"
},
"total": {
"description": "Number of results returned.",
"type": "number"
},
"truncated": {
"description": "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.",
"type": "boolean"
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:45e21b22ab09007de1074c1e747a7458ef6370b356a49dd6b1b0ae75d160a266 | sha256sum