Mapsource OpenStreetMap & Geospatial APIs
Server Details
OpenStreetMap queries, maps/styles, search, routing, terrain, analysis, pipelines, and rendering.
- Status
- Healthy
- Uptime
- 98.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 13 tools
geo_data aggregates service status, basemap catalog, and elevation, duplicating service_status, basemap_catalog, and elevation. geo_search's discover overlaps with find_features, and geo_navigate contains route and isochrone operations that duplicate standalone route and isochrone tools.
Names mix verb phrases (find_features, overpass_query), nouns (elevation, isochrone, route), and a geo_ prefix applied inconsistently (geo_data, geo_search, geo_style, but not basemap_catalog or service_status). No clear verb_noun or resource-based pattern emerges.
13 tools is within a reasonable range for a geospatial API, but some tools are redundant given geo_data consolidates several others. Consolidation could reduce the count without losing functionality.
The API covers search, geocoding, routing, isochrones, elevation, geometry analysis, rendering, styles, and Overpass queries. Minor gaps exist, such as no direct tile-fetch tool, but core geospatial workflows are supported without dead ends.
Available Tools
13 toolsbasemap_catalogARead-onlyInspect
List raster and vector tile templates, source zoom ranges, dataset snapshots, and attribution. The catalog is public; tile requests require a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the catalog itself is public while tile requests require a subscription key, which is an auth/access behavior an agent cannot infer from the annotations or empty schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, and the enumeration of return contents is front-loaded ahead of the access caveat. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no params and no output schema, the description carries the burden of conveying what comes back, which it does by listing the catalog's fields. It could add a note on catalog stability, scope, or pagination, but for a zero-parameter read tool it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. Nothing in the schema needs compensating for, and the description correctly offers no parameter discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the verb 'List' with a specific resource and enumerates the catalog's contents (raster/vector tile templates, zoom ranges, dataset snapshots, attribution), making the purpose unambiguous. It does not explicitly contrast itself with siblings like geo_style or geo_render, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'The catalog is public; tile requests require a subscription key' gives a useful access condition, but it is an auth note rather than when-to-use-this-vs-alternatives guidance. No sibling tool is named and no exclusion condition is stated, so usage is only weakly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
elevationARead-onlyInspect
Sample terrain at lat/lon. elevationMeters is clamped to zero; sampledMeters retains the raw model elevation. belowSeaLevel identifies negative samples and bathymetryTile references the source raster. Requires a subscription key. Not survey-grade.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude in decimal degrees. | |
| lon | Yes | Longitude in decimal degrees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/non-destructive profile, so credit goes to the added context: it discloses a subscription-key auth requirement, an accuracy caveat ("not survey-grade"), and semantics for returned fields (clamped vs raw elevation, bathymetry source). These are meaningful behavioral traits not present in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by output-field semantics and then caveats. It is dense but each sentence carries information; the field-list sentence is slightly terse and would read better as structured output documentation, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately explains the return fields, auth requirement, and accuracy limitation, which is nearly complete for a simple 2-parameter sampler. Only the lack of usage context keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both lat and lon fully documented including bounds, so the schema carries this dimension. The description references lat/lon only in passing and adds no format or usage detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Sample terrain at lat/lon" gives a specific verb (sample) and resource (terrain) with the required inputs, which is easy to distinguish from sibling tools like route, isochrone, or geo_analyze. However, it never explicitly contrasts itself against any sibling, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance on when to use it versus alternatives, and no exclusions or prerequisites beyond the auth note. The agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_featuresAInspect
Find cafes, restaurants, buildings, parks, schools, hospitals, transit stops, drinking water, or trails within a bounding box up to 0.5 degrees per axis. Returns OSM geometry and tags, subject to the output limit. Requires a subscription key or authorized x402 payment.
| Name | Required | Description | Default |
|---|---|---|---|
| east | Yes | ||
| west | Yes | ||
| limit | No | Maximum returned OSM objects, not a pagination guarantee. | |
| north | Yes | ||
| south | Yes | ||
| category | Yes | Mapped feature category; use overpass_query for arbitrary OSM tags. | |
| responseMode | No | compact: inline when small, a result handle when large. handle: always a handle. raw: always the full body, however large. | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the 0.5-degree-per-axis bbox cap, that results are OSM geometry and tags, that output is subject to a limit, and that a subscription key or x402 payment is required. It omits rate limits and explicit read-only framing, but auth and constraint disclosure are solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the resource categories and scope, then return content, then prerequisites. The long category enumeration is slightly list-heavy but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description covers return content, scope limits, and auth requirements. It is close to complete for a read-style search tool; missing only finer points like failure behavior and rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43%; south/west/north/east are undocumented (though self-evident), while category, limit, and responseMode are described in the schema. The description adds genuinely useful meaning beyond the schema by stating the real 0.5-degree bbox cap, which is stricter than the schema's ±180/±85 bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and enumerates the exact resource categories, plus the geographic scope (bounding box). An agent can tell this is a bounded POI/feature search. It does not explicitly differentiate itself from siblings like geo_search or geo_data, though the schema's category note points to overpass_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via the category list and the bbox constraint, and states the auth prerequisite, but never says when to choose this over alternatives. The only alternative-routing hint ('use overpass_query for arbitrary OSM tags') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_analyzeARead-onlyInspect
Measure or transform geometry using buffer, centroid, bbox, area, length, distance, intersect, union, difference, contains, intersects, nearest, simplify, or convex. Inputs accept GeoJSON, coordinate pairs, Overpass results, and result handles. Polygon overlay operations require areas. Use operation pipeline for up to 12 ordered steps and estimateOnly for cost estimation. Requires a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| a | No | GeoJSON, a [lon, lat] pair, an Overpass result, a places result, or a result handle such as rh_ followed by 32 hex characters. Required for every operation except pipeline. | |
| b | No | The second operand, in the same forms as a. | |
| units | No | meters | |
| returns | No | pipeline only: which step to return, as $stepId. Defaults to the last. | |
| distance | No | Buffer radius or simplify tolerance. | |
| pipeline | No | pipeline only: ordered steps. Any argument may be $anEarlierStepId. | |
| operation | Yes | buffer and simplify take distance. distance, intersect, union, difference, contains, intersects and nearest take a second geometry in b. pipeline runs several steps server-side and takes pipeline instead of a. | |
| estimateOnly | No | pipeline: calculate estimated cost without execution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that (compute/transform, no persistence claims). Beyond the annotations it adds real context: the subscription-key auth requirement, the 12-step pipeline cap, the estimateOnly cost-estimation mode, and the constraint that overlay ops need polygon areas. It does not disclose rate limits or what a successful response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the operation enumeration and accepted input forms lead, followed by the pipeline/estimateOnly note and the auth prerequisite. Nearly every clause carries information, though the long operation list partially duplicates the enum in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter tool with a nested pipeline and no output schema, the description covers inputs, the pipeline cap, and auth but says nothing about what comes back (result handles, geometry payloads, units of numeric results) or failure behavior. The mention of 'result handle such as rh_...' in the schema hints outputs are handles, but the description never closes that loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the schema already documents a, b, distance, units, pipeline, returns, and estimateOnly, including which operations take b vs. distance. The description mostly restates this (operation list, input forms, 'polygon overlay operations require areas'), adding only marginal meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('measure or transform') plus the resource ('geometry') and enumerates all 15 operations, so an agent can tell this is a geometry-computation tool rather than a search or routing tool. It never names a sibling to route away from, so differentiation from geo_search/find_features/route is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional guidance for the pipeline path ('Use operation pipeline for up to 12 ordered steps and estimateOnly for cost estimation') and a prerequisite ('Polygon overlay operations require areas', 'Requires a subscription key'). It does not say when to prefer this tool over siblings such as geo_search, find_features, or route for spatial questions, so usage is only partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_dataARead-onlyInspect
Read service status, basemap catalog, point elevation, contours, usage, and metrics. Status includes subsystem availability and replication lag. Elevation returns surface and raw model heights. Metrics report request rates, success rates, latency percentiles, and dataset ages. Status and basemaps are public; other operations require a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | elevation and contours: latitude. | |
| lon | No | elevation and contours: longitude. | |
| zoom | No | contours only: detail level, 6 to 13. Defaults to 9. | |
| bands | No | contours only: how many elevation bands, 4 to 24. Defaults to 14. | |
| window | No | metrics only: minutes to measure over. Defaults to 60. | |
| operation | Yes | status: service state and dataset freshness. basemaps: tile catalogue. elevation: ground height at a point. contours: banded topographic contours. usage: this key's consumption. metrics: request rates, latency percentiles and how old each dataset is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds substantial context beyond that: status reports subsystem availability and replication lag, elevation returns surface and raw model heights, metrics report rates/latencies/dataset ages, and the public-vs-subscription-key auth requirement is disclosed. This is genuinely useful behavioral detail not available in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the operation list followed by per-operation output detail and the auth constraint. Each sentence carries information, though the output-detail sentence could be trimmed and the structure does not group constraints as cleanly as it could.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does describe what several operations return (subsystem availability, replication lag, surface/raw model heights, request rates, latency percentiles, dataset ages) and covers the auth requirement, which is enough for a dispatcher tool. The notable gap is sibling differentiation against basemap_catalog/elevation/service_status, plus no disclosure of defaulting behavior for zoom/bands/window (left to the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter (lat, lon, zoom, bands, window, operation) is already documented with type bounds and per-operation applicability in the schema. The description reinforces operation-level semantics but adds no new parameter detail, so the baseline 3 for high coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb (Read) and enumerates the six resources it covers (service status, basemap catalog, point elevation, contours, usage, metrics), giving a clear picture of the tool's scope. However, it draws no distinction from siblings like basemap_catalog, elevation, and service_status, which appear to overlap heavily with the 'basemaps', 'elevation', and 'status' operations, leaving the agent unable to tell which tool owns that functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no statement of when a sibling should be preferred, and no conditions selecting among the six operations beyond the auth note. The auth sentence ('Status and basemaps are public; other operations require a subscription key') is a prerequisite but not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_renderARead-onlyInspect
Render a static PNG map from a center and zoom or bounding box. Supports GeoJSON overlays, result handles, and up to 50 labeled markers. Dark and light styles use raster rendering; other preset or profile names use vector rendering. Requires a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lon | No | ||
| bbox | No | [west, south, east, north]. Fits the viewport to this instead of using lat/lon/zoom. | |
| zoom | No | ||
| pitch | No | Vector renders only. | |
| style | No | dark or light composites the raster basemaps. Any other value names a style preset or one of your saved basemap profiles and is rendered as vector against that compiled style. | dark |
| width | No | ||
| height | No | ||
| bearing | No | Vector renders only. | |
| geojson | No | GeoJSON to draw, or a result handle such as rh_ followed by 32 hex characters. | |
| markers | No | ||
| styleRevision | No | Saved profile revision to use for rendering. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: the style-dependent rendering mode (dark/light = raster, any other name = vector) and the subscription-key auth requirement, both of which an agent needs to call it successfully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core purpose before capabilities, rendering behavior, and the auth requirement. No filler; each sentence carries a distinct fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 12 parameters at 50% coverage, the description covers purpose, capabilities, render modes, and auth well. Minor gaps remain on default dimensions and how overlays interact with the center/bbox inputs, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and much of what the description says about parameters (GeoJSON, result handles, up to 50 markers, style modes) is already present in the schema. It adds little syntax or format detail for the undocumented parameters (width, height, lat/lon, zoom), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render a static PNG map') plus the two input modes (center/zoom or bounding box), so the agent knows exactly what it produces. It is clearly distinct from siblings like geo_analyze or route, but it never names or contrasts an alternative explicitly, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description explains the raster-vs-vector rendering rule and the subscription-key prerequisite, which helps an agent know when the tool behaves differently. However, there is no explicit when-to-use vs when-to-pick-another-sibling guidance, so it lands at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_searchARead-onlyInspect
Search places and retrieve geographic entities. Use lookup for local address, business, brand and landmark search with soft map-focus bias, strict house numbers, source IDs and ambiguity reporting. Use discover for POIs in a viewport, polygon or isochrone, optionally ranked by travel time. Other operations: search, autocomplete, nearby, reverse, details, geocode, resolve, entity. Requires a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | lookup: address/name text, 1–120 characters. discover: optional name/brand filter. search/autocomplete: populated-place name. geocode: compatibility provider query. | |
| lat | No | ||
| lon | No | ||
| bbox | No | west,south,east,north. lookup: soft focus unless bounded is true. discover: required region boundary unless region or minutes is supplied. | |
| limit | No | ||
| osmId | No | details only. | |
| types | No | lookup: comma-separated address,business,landmark,street,place. | |
| offset | No | discover: result page offset. | |
| radius | No | Metres. Defaults to 500 for nearby and 150 for reverse. | |
| rankBy | No | discover: travel_time compares the nearest 25 candidates. | |
| region | No | discover: polygon GeoJSON or owned result handle; alternatively supply bbox or minutes. | |
| bounded | No | lookup: explicitly restrict results to bbox. | |
| costing | No | ||
| minutes | No | discover: generate an isochrone from lat/lon. | |
| osmType | No | details only. | |
| category | No | lookup/discover: business or POI category, such as coffee, pharmacy or restaurants. nearby: feature category, such as cafe, restaurant, hospital or park. | |
| entityId | No | entity only: an id from resolve, beginning geo_. | |
| language | No | lookup: preferred language, default en. | |
| operation | Yes | lookup: local address, business and brand suggestions with soft map-focus bias. discover: businesses in a viewport, polygon or isochrone, optionally ranked by travel time. resolve: name to entity ID. entity: entity lookup. search: populated-place names. autocomplete: populated-place prefixes. nearby: radius search. reverse: coordinate lookup. details: OSM type and ID lookup. geocode: compatibility provider; use lookup for new integrations. | |
| placeClass | No | search and autocomplete: restrict to one class of populated place. | |
| countrycodes | No | lookup: comma-separated two-letter country filters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true and destructiveHint=false annotations, the description adds useful behavioral detail: lookup has a 'soft map-focus bias, strict house numbers, source IDs and ambiguity reporting', discover can rank 'by travel time', and a subscription key is required. These are non-obvious traits an agent would not infer from the annotations alone. It does not cover pagination or rate limits, but with the annotation safety profile already stated, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary purpose, and each sentence earns its place. It groups lookup vs discover first, then enumerates the remaining operations and ends with the auth requirement. There is no fluff or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (21 parameters, 10 operations), the description covers the main operational split and the non-obvious auth requirement. The schema provides detailed parameter descriptions for the rest. It does not mention return format, but there is no output schema and the read-only nature is captured; the description is complete enough for an agent to select and correctly invoke the tool for common cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 81% of parameters with descriptions, so the baseline is 3. The description enriches operation-level semantics (e.g., what lookup and discover use) and mentions behaviors like 'soft map-focus bias', but it does not add direct parameter-level meaning beyond the schema. The schema itself carries most of the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource ('Search places and retrieve geographic entities') and then sharply distinguishes the two main modes, lookup and discover, with concrete examples. It also lists the remaining operations, making the tool's overall scope obvious to an agent choosing between geo_search and its geo-* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use lookup for local address...' and 'Use discover for POIs...', giving clear context for the two primary operations. It also names all other operations and warns about the subscription key requirement. It does not provide when-not guidance or alternatives for the remaining operations, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geo_styleAInspect
Configure semantic basemap styles. Operations: explain and schema retrieve public definitions; intent generates a proposal; preview compiles changes; save, list, revisions, diff, and delete manage profiles. Submit semantic manifests or preset patches, not raw MapLibre JSON. Authenticated operations affect the current key's profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | diff only: the later revision. Defaults to the current one. | |
| base | No | Base preset for the patch. Available presets are listed at /api/styles. | dark |
| from | No | diff only: the earlier revision. Defaults to the one before `to`. | |
| name | No | save only: a human name for the profile. | |
| save | No | intent only: also save the proposal as a profile revision on this key. | |
| slug | No | save and delete: the profile's stable URL id. Defaults to a slug of the name on save. | |
| patch | No | Semantic overrides: {"tokens":{...},"typography":{...},"layers":{"roads.motorway":{"color":"#f2a900"}}}. Layer keys come from the explain operation. | |
| intent | No | intent: text description of the desired basemap. Returns an editable manifest and a summary of applied changes. | |
| operation | No | explain: layer definitions. schema: manifest JSON Schema. intent: generate a style proposal. preview: compile without saving. save: store a profile. list: available presets and profiles. revisions: saved versions. diff: revision comparison. delete: remove a profile. | preview |
| description | No | save: profile description. | |
| includeStyle | No | Include the compiled MapLibre style in addition to the hash, diff, and validation issues. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the auth scope ('Authenticated operations affect the current key's profiles'), that preview does not persist, that delete removes a profile, and the accepted input format versus raw MapLibre JSON. Note the tension with destructiveHint=false, which sits awkwardly next to a delete operation, though the description itself is explicit rather than misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by operations, an input constraint, and an auth caveat — a logical order with no filler. It loses a point because the operation list largely restates the schema's enum descriptions verbatim, which is redundant for an agent that can read the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, multi-mode tool with nested patch objects and no output schema, the description covers the operational model, the auth scoping, and the payload format expectation. It stops short of describing return payloads for the read-style operations (explain, schema, list, diff), which an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across 11 parameters, so the schema already carries per-parameter meaning and the operation-to-parameter mapping. The description reinforces the input-format expectation for the patch/manifest payload but adds no new syntax or per-parameter semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ('Configure semantic basemap styles'), and the operation enumeration (explain, schema, intent, preview, save, list, revisions, diff, delete) makes the tool's scope unmistakable against catalogue/render siblings. However, it never names or contrasts a sibling tool, so differentiation is implied by scope rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each operation is annotated with its purpose (e.g., 'preview: compile without saving', 'intent: generate a style proposal'), which tells the agent which mode fits a given goal. It also gives a concrete input constraint ('Submit semantic manifests or preset patches, not raw MapLibre JSON'), but provides no explicit when-not-to-use guidance or routing to alternatives like basemap_catalog.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isochroneARead-onlyInspect
Calculate reachable-area polygons from a coordinate for up to four travel-time bands. Returns GeoJSON for catchment, coverage, and accessibility analysis. Requires a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude of the centre point. | |
| lon | Yes | Longitude of the centre point. | |
| costing | No | Travel mode used to weight the road graph. | auto |
| contours | No | Travel-time bands in minutes, at most four. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, non-destructive profile, and the description adds genuinely useful behavioral context beyond them: an auth requirement (subscription key) and the return format (GeoJSON). It omits rate limits or precision caveats, so it falls short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose and progressing to output format and prerequisite. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully discloses the GeoJSON return type, covers the auth precondition, and the fully-described parameters leave little else needed. Minor gaps such as error behavior or band-ordering semantics keep it from 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so lat, lon, costing, and contours are already fully documented in the schema. The description only restates the coordinate input and the four-band limit, adding no syntax or default details beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-and-resource ('Calculate reachable-area polygons from a coordinate') plus the scope limit ('up to four travel-time bands'), which lets an agent distinguish it from the sibling route tool that returns paths rather than polygons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear use contexts ('catchment, coverage, and accessibility analysis') and a prerequisite ('Requires a subscription key'), but names no alternative tool or when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overpass_queryAInspect
Execute bounded Overpass QL over OSM nodes, ways, relations, tags, geometry, areas, metadata, and spatial selectors. Historical attic queries are unsupported. Requires a subscription key or authorized x402 payment. Use service_status to retrieve the dataset timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A complete bounded Overpass QL query, with explicit timeout and output limit. | |
| responseMode | No | compact: inline when small, a result handle when large. handle: always a handle. raw: always the full body, however large. | compact |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose key traits: the query must be bounded, historical attic queries are rejected, auth is required (subscription key or x402 payment), and the dataset timestamp lives behind service_status. It omits rate limits, error semantics, and cost/credit implications of large queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the capability, then tacks on the exclusions, auth requirement, and cross-reference in three tight sentences with no filler. It is appropriately sized for a two-parameter tool, though slightly clipped at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, it covers the essential call-time facts (bounded input, auth, unsupported query class, where to get dataset recency). It leaves the shape/size of the returned results only partially implied by the responseMode enum in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'query' (bounded QL with explicit timeout and output limit) and 'responseMode' (compact/handle/raw). The description adds no syntax, format, or default details beyond that, so it meets the baseline but adds no marginal meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Execute) and resource (bounded Overpass QL over OSM nodes/ways/relations/tags/geometry/areas), which makes the tool's nature clear. It doesn't explicitly contrast itself with nearby siblings like find_features or geo_search, so the agent must infer when raw QL is preferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete usage constraints: historical attic queries are unsupported, and a subscription key or authorized x402 payment is required. It also routes the agent to service_status for the dataset timestamp, but never states when to prefer this tool over find_features/geo_search for the same task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
routeARead-onlyInspect
Calculate a turn-by-turn route between 2–10 waypoints. Supported costing: auto, bicycle, pedestrian, truck, motor_scooter, and bus. Returns GeoJSON, distance, duration, and maneuvers. Set elevation to true for a terrain profile with gain and loss. Requires a subscription key.
| Name | Required | Description | Default |
|---|---|---|---|
| costing | No | Travel mode used to weight the road graph. | auto |
| elevation | No | Sample a terrain profile along the route and report total gain and loss in metres. | |
| locations | Yes | Ordered waypoints, 2 to 10; first is the origin and last is the destination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe read (readOnlyHint=true, destructiveHint=false), and the description adds meaningful context beyond that: the subscription-key auth requirement, the returned payload fields (GeoJSON, distance, duration, maneuvers), and the side effect of elevation=true producing gain/loss. Rate limits and error behavior are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and waypoint bounds, then options and the auth caveat. Efficient, though the enumerated costing list partially duplicates the schema enum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so (GeoJSON, distance, duration, maneuvers, elevation profile). The auth requirement is disclosed. Only minor gaps remain, such as behavior on invalid/duplicate waypoints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 costing, elevation, and the ordered 2–10 waypoint array. The description largely restates these (mode list, elevation gain/loss, waypoint count) without adding syntax or format details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Calculate a turn-by-turn route between 2–10 waypoints'), so an agent knows exactly what it produces. It does not name or distinguish itself from siblings like isochrone or geo_navigate, which also deal with routing/reachability, leaving some ambiguity in a crowded namespace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no alternatives are named. The agent is told what modes are supported and that a subscription key is required, but it must infer the conditions under which this tool beats isochrone or geo_navigate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_statusAInspect
Read Overpass engine readiness, dataset timestamp, billing state, and x402 payment mode. Public. Use geo_data with operation status for the full subsystem report.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden but does disclose that the tool is 'Public', implying no authentication is required, and 'Read' implies a non-mutating operation. It does not state side effects, rate limits, or failure behavior, though for a zero-parameter status probe the risk surface is small.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core capability and followed by access level and the sibling alternative. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully enumerates the return fields (readiness, dataset timestamp, billing state, payment mode), which is the key omitted structured data. A zero-parameter read tool with this field list is adequately covered, though response shape beyond the field names remains unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The listed fields add context about scope but no parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and enumerates the exact resources returned: Overpass engine readiness, dataset timestamp, billing state, and x402 payment mode. This is precise enough to distinguish it from the broad geo_data sibling, which it explicitly names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative directly ('Use geo_data with operation status for the full subsystem report'), giving a clear selection condition: this tool for a quick status read, geo_data for the fuller report. No explicit when-not or prerequisite guidance, but the routing to the sibling is unambiguous.
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 tool update
- Changed
geo_search4 fields changed- changed
Input schema / properties / bbox / descriptionPrevious value: -"lookup: west,south,east,north; soft focus unless bounded is true."New value: +"west,south,east,north. lookup: soft focus unless bounded is true. discover: required region boundary unless region or minutes is supplied." - changed
Input schema / properties / category / descriptionPrevious value: -"nearby: feature category, such as cafe, restaurant, hospital, or park."New value: +"lookup/discover: business or POI category, such as coffee, pharmacy or restaurants. nearby: feature category, such as cafe, restaurant, hospital or park." - changed
Input schema / properties / operation / descriptionPrevious value: -"resolve: name to entity ID. entity: entity lookup. search: place-name search. autocomplete: prefix search. nearby: radius search. reverse: coordinate lookup. details: OSM type and ID lookup. geocode: address lookup."New value: +"lookup: local address, business and brand suggestions with soft map-focus bias. discover: businesses in a viewport, polygon or isochrone, optionally ranked by travel time. resolve: name to entity ID. entity: entity lookup. search: populated-place names. autocomplete: populated-place prefixes. nearby: radius search. reverse: coordinate lookup. details: OSM type and ID lookup. geocode: compatibility provider; use lookup for new integrations." - changed
Input schema / properties / q / descriptionPrevious value: -"search, autocomplete and geocode: the text to look up."New value: +"lookup: address/name text, 1–120 characters. discover: optional name/brand filter. search/autocomplete: populated-place name. geocode: compatibility provider query."
1 tool update
- Changed
geo_search11 fields changed- added
Input schema / properties / bboxAdded value: +{ + "description": "lookup: west,south,east,north; soft focus unless bounded is true.", + "maxLength": 120, + "type": "string" +} - added
Input schema / properties / boundedAdded value: +{ + "description": "lookup: explicitly restrict results to bbox.", + "type": "boolean" +} - added
Input schema / properties / costingAdded value: +{ + "enum": [ + "auto", + "bicycle", + "pedestrian", + "truck" + ], + "type": "string" +} - added
Input schema / properties / countrycodesAdded value: +{ + "description": "lookup: comma-separated two-letter country filters.", + "maxLength": 40, + "type": "string" +} - added
Input schema / properties / languageAdded value: +{ + "description": "lookup: preferred language, default en.", + "maxLength": 12, + "type": "string" +} - added
Input schema / properties / minutesAdded value: +{ + "description": "discover: generate an isochrone from lat/lon.", + "maximum": 30, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "discover: result page offset.", + "maximum": 2000, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / operation / enumPrevious value: -[ - "search", - "autocomplete", - "nearby", - "reverse", - "details", - "geocode", - "resolve", - "entity" -]New value: +[ + "search", + "autocomplete", + "nearby", + "reverse", + "details", + "geocode", + "resolve", + "entity", + "lookup", + "discover" +] - added
Input schema / properties / rankByAdded value: +{ + "description": "discover: travel_time compares the nearest 25 candidates.", + "enum": [ + "distance", + "travel_time" + ], + "type": "string" +} - added
Input schema / properties / regionAdded value: +{ + "anyOf": [ + { + "maxLength": 120, + "type": "string" + }, + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + ], + "description": "discover: polygon GeoJSON or owned result handle; alternatively supply bbox or minutes." +} - added
Input schema / properties / typesAdded value: +{ + "description": "lookup: comma-separated address,business,landmark,street,place.", + "maxLength": 100, + "type": "string" +}
4 tool updates
- Changed
geo_analyze1 field changed- changed
Input schema / properties / estimateOnly / descriptionPrevious value: -"pipeline only: report what it would cost without running it."New value: +"pipeline: calculate estimated cost without execution."
- Changed
geo_render1 field changed- changed
Input schema / properties / styleRevision / descriptionPrevious value: -"Pin the render to an immutable revision of a saved profile, so the same call renders the same image after the profile is edited."New value: +"Saved profile revision to use for rendering."
- Changed
geo_search2 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"nearby only. Read the list from the error message if you send an unknown one."New value: +"nearby: feature category, such as cafe, restaurant, hospital, or park." - changed
Input schema / properties / operation / descriptionPrevious value: -"resolve: turn a name into a stable entity id you can pass to routing, isochrones and analysis instead of carrying coordinates. entity: read one back by its id. search: find a place by name anywhere on Earth. autocomplete: the same, prefix-matched while typing. nearby: named features or a category within a radius. reverse: what is at this coordinate. details: one feature by OSM type and id. geocode: address lookup through the external geocoder."New value: +"resolve: name to entity ID. entity: entity lookup. search: place-name search. autocomplete: prefix search. nearby: radius search. reverse: coordinate lookup. details: OSM type and ID lookup. geocode: address lookup."
- Changed
geo_style5 fields changed- changed
Input schema / properties / base / descriptionPrevious value: -"Preset the patch applies to. Read /api/styles for what each one is."New value: +"Base preset for the patch. Available presets are listed at /api/styles." - changed
Input schema / properties / description / descriptionPrevious value: -"save only: what this basemap is for."New value: +"save: profile description." - changed
Input schema / properties / includeStyle / descriptionPrevious value: -"Include the full compiled MapLibre style. Off by default because it is large; the hash, diff and issues are usually what you need."New value: +"Include the compiled MapLibre style in addition to the hash, diff, and validation issues. Defaults to false." - changed
Input schema / properties / intent / descriptionPrevious value: -"intent only: what the basemap is for, in plain language. The proposal comes back as an editable semantic manifest with the terms it understood and why; the prompt is provenance, not the style."New value: +"intent: text description of the desired basemap. Returns an editable manifest and a summary of applied changes." - changed
Input schema / properties / operation / descriptionPrevious value: -"explain: read the semantic layer namespace, free and unauthenticated. schema: the JSON Schema a manifest must satisfy, also free. intent: describe what the basemap is for and get a semantic proposal back. preview: compile a patch and return the hash, diff and issues without saving. save: store the result as a named basemap profile on this key. list: the presets plus profiles saved on this key. revisions: the immutable versions of one profile. diff: what changed between two revisions, in semantic terms. delete: remove a saved profile."New value: +"explain: layer definitions. schema: manifest JSON Schema. intent: generate a style proposal. preview: compile without saving. save: store a profile. list: available presets and profiles. revisions: saved versions. diff: revision comparison. delete: remove a profile."
1 tool update
- Changed
geo_data3 fields changed- changed
Input schema / properties / operation / descriptionPrevious value: -"status: service state and dataset freshness. basemaps: tile catalogue. elevation: ground height at a point. contours: banded topographic contours. usage: this key's consumption."New value: +"status: service state and dataset freshness. basemaps: tile catalogue. elevation: ground height at a point. contours: banded topographic contours. usage: this key's consumption. metrics: request rates, latency percentiles and how old each dataset is." - changed
Input schema / properties / operation / enumPrevious value: -[ - "status", - "basemaps", - "elevation", - "contours", - "usage" -]New value: +[ + "status", + "basemaps", + "elevation", + "contours", + "usage", + "metrics" +] - added
Input schema / properties / windowAdded value: +{ + "description": "metrics only: minutes to measure over. Defaults to 60.", + "maximum": 1440, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
geo_render1 field changed- added
Input schema / properties / styleRevisionAdded value: +{ + "description": "Pin the render to an immutable revision of a saved profile, so the same call renders the same image after the profile is edited.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +}
2 tool updates
- Changed
geo_search3 fields changed- added
Input schema / properties / entityIdAdded value: +{ + "description": "entity only: an id from resolve, beginning geo_.", + "maxLength": 300, + "minLength": 4, + "type": "string" +} - changed
Input schema / properties / operation / descriptionPrevious value: -"search: find a place by name anywhere on Earth. autocomplete: the same, prefix-matched while typing. nearby: named features or a category within a radius. reverse: what is at this coordinate. details: one feature by OSM type and id. geocode: address lookup through the external geocoder."New value: +"resolve: turn a name into a stable entity id you can pass to routing, isochrones and analysis instead of carrying coordinates. entity: read one back by its id. search: find a place by name anywhere on Earth. autocomplete: the same, prefix-matched while typing. nearby: named features or a category within a radius. reverse: what is at this coordinate. details: one feature by OSM type and id. geocode: address lookup through the external geocoder." - changed
Input schema / properties / operation / enumPrevious value: -[ - "search", - "autocomplete", - "nearby", - "reverse", - "details", - "geocode" -]New value: +[ + "search", + "autocomplete", + "nearby", + "reverse", + "details", + "geocode", + "resolve", + "entity" +]
- Changed
geo_style6 fields changed- added
Input schema / properties / fromAdded value: +{ + "description": "diff only: the earlier revision. Defaults to the one before `to`.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / intentAdded value: +{ + "description": "intent only: what the basemap is for, in plain language. The proposal comes back as an editable semantic manifest with the terms it understood and why; the prompt is provenance, not the style.", + "maxLength": 2000, + "minLength": 3, + "type": "string" +} - changed
Input schema / properties / operation / descriptionPrevious value: -"explain: read the semantic layer namespace, free and unauthenticated. preview: compile a patch and return the hash, diff and issues without saving. save: store the result as a named basemap profile on this key. list: the presets plus profiles saved on this key. delete: remove a saved profile."New value: +"explain: read the semantic layer namespace, free and unauthenticated. schema: the JSON Schema a manifest must satisfy, also free. intent: describe what the basemap is for and get a semantic proposal back. preview: compile a patch and return the hash, diff and issues without saving. save: store the result as a named basemap profile on this key. list: the presets plus profiles saved on this key. revisions: the immutable versions of one profile. diff: what changed between two revisions, in semantic terms. delete: remove a saved profile." - changed
Input schema / properties / operation / enumPrevious value: -[ - "explain", - "preview", - "save", - "list", - "delete" -]New value: +[ + "explain", + "schema", + "intent", + "preview", + "save", + "list", + "revisions", + "diff", + "delete" +] - added
Input schema / properties / saveAdded value: +{ + "default": false, + "description": "intent only: also save the proposal as a profile revision on this key.", + "type": "boolean" +} - added
Input schema / properties / toAdded value: +{ + "description": "diff only: the later revision. Defaults to the current one.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +}
1 tool update
- Added
geo_data
2 tool updates
- Changed
geo_analyze1 field changed- changed
Input schema / properties / a / descriptionPrevious value: -"GeoJSON, a [lon, lat] pair, an Overpass result, a places result, or a result handle such as res_abc123. Required for every operation except pipeline."New value: +"GeoJSON, a [lon, lat] pair, an Overpass result, a places result, or a result handle such as rh_ followed by 32 hex characters. Required for every operation except pipeline."
- Changed
geo_render1 field changed- changed
Input schema / properties / geojson / descriptionPrevious value: -"GeoJSON to draw, or a result handle such as res_abc123."New value: +"GeoJSON to draw, or a result handle such as rh_ followed by 32 hex characters."
1 tool update
- Changed
geo_search5 fields changed- changed
Input schema / properties / operation / descriptionPrevious value: -"nearby: named features or a category within a radius. reverse: what is at this coordinate. details: one feature by OSM type and id. geocode: look up a place by name."New value: +"search: find a place by name anywhere on Earth. autocomplete: the same, prefix-matched while typing. nearby: named features or a category within a radius. reverse: what is at this coordinate. details: one feature by OSM type and id. geocode: address lookup through the external geocoder." - changed
Input schema / properties / operation / enumPrevious value: -[ - "nearby", - "reverse", - "details", - "geocode" -]New value: +[ + "search", + "autocomplete", + "nearby", + "reverse", + "details", + "geocode" +] - added
Input schema / properties / placeClassAdded value: +{ + "description": "search and autocomplete: restrict to one class of populated place.", + "enum": [ + "city", + "town", + "village", + "suburb", + "neighbourhood", + "hamlet" + ], + "type": "string" +} - changed
Input schema / properties / q / descriptionPrevious value: -"geocode only: the place or address text."New value: +"search, autocomplete and geocode: the text to look up." - changed
Input schema / properties / q / minLengthPrevious value: -2New value: +1
1 tool update
- Changed
geo_render6 fields changed- added
Input schema / properties / bearingAdded value: +{ + "default": 0, + "description": "Vector renders only.", + "maximum": 180, + "minimum": -180, + "type": "number" +} - added
Input schema / properties / pitchAdded value: +{ + "default": 0, + "description": "Vector renders only.", + "maximum": 60, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / style / descriptionAdded value: +"dark or light composites the raster basemaps. Any other value names a style preset or one of your saved basemap profiles and is rendered as vector against that compiled style." - removed
Input schema / properties / style / enumRemoved value: -[ - "dark", - "light" -] - added
Input schema / properties / style / maxLengthAdded value: +64 - added
Input schema / properties / style / minLengthAdded value: +1
2 tool updates
- Changed
geo_analyze7 fields changed- changed
Input schema / properties / a / descriptionPrevious value: -"GeoJSON, a [lon, lat] pair, an Overpass result, or a result handle such as res_abc123."New value: +"GeoJSON, a [lon, lat] pair, an Overpass result, a places result, or a result handle such as res_abc123. Required for every operation except pipeline." - added
Input schema / properties / estimateOnlyAdded value: +{ + "default": false, + "description": "pipeline only: report what it would cost without running it.", + "type": "boolean" +} - changed
Input schema / properties / operation / descriptionPrevious value: -"buffer and simplify take distance. distance, intersect, union, difference, contains, intersects and nearest take a second geometry in b."New value: +"buffer and simplify take distance. distance, intersect, union, difference, contains, intersects and nearest take a second geometry in b. pipeline runs several steps server-side and takes pipeline instead of a." - changed
Input schema / properties / operation / enumPrevious value: -[ - "buffer", - "centroid", - "bbox", - "area", - "length", - "distance", - "intersect", - "union", - "difference", - "contains", - "intersects", - "nearest", - "simplify", - "convex" -]New value: +[ + "buffer", + "centroid", + "bbox", + "area", + "length", + "distance", + "intersect", + "union", + "difference", + "contains", + "intersects", + "nearest", + "simplify", + "convex", + "pipeline" +] - added
Input schema / properties / pipelineAdded value: +{ + "description": "pipeline only: ordered steps. Any argument may be $anEarlierStepId.", + "items": { + "properties": { + "args": { + "additionalProperties": {}, + "default": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "id": { + "description": "Referenced by later steps as $id.", + "type": "string" + }, + "op": { + "enum": [ + "search", + "nearby", + "route", + "isochrone", + "matrix", + "analyze", + "filter", + "sort", + "limit" + ], + "type": "string" + } + }, + "required": [ + "id", + "op" + ], + "type": "object" + }, + "maxItems": 12, + "type": "array" +} - added
Input schema / properties / returnsAdded value: +{ + "description": "pipeline only: which step to return, as $stepId. Defaults to the last.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "a" -]New value: +[ + "operation" +]
- Added
geo_render
4 tool updates
- Changed
find_features1 field changed- added
Input schema / properties / responseModeAdded value: +{ + "default": "compact", + "description": "compact: inline when small, a result handle when large. handle: always a handle. raw: always the full body, however large.", + "enum": [ + "compact", + "handle", + "raw" + ], + "type": "string" +}
- Added
geo_analyze - Added
geo_search - Changed
overpass_query1 field changed- added
Input schema / properties / responseModeAdded value: +{ + "default": "compact", + "description": "compact: inline when small, a result handle when large. handle: always a handle. raw: always the full body, however large.", + "enum": [ + "compact", + "handle", + "raw" + ], + "type": "string" +}
2 tool updates
- Added
geo_navigate - Changed
geo_style6 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "save only: what this basemap is for.", + "maxLength": 400, + "type": "string" +} - removed
Input schema / properties / explainRemoved value: -{ - "default": false, - "description": "Return the semantic layer namespace and the properties each key accepts, instead of compiling. Use this first when you do not know the keys.", - "type": "boolean" -} - added
Input schema / properties / nameAdded value: +{ + "description": "save only: a human name for the profile.", + "maxLength": 120, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / operationAdded value: +{ + "default": "preview", + "description": "explain: read the semantic layer namespace, free and unauthenticated. preview: compile a patch and return the hash, diff and issues without saving. save: store the result as a named basemap profile on this key. list: the presets plus profiles saved on this key. delete: remove a saved profile.", + "enum": [ + "explain", + "preview", + "save", + "list", + "delete" + ], + "type": "string" +} - changed
Input schema / properties / patch / descriptionPrevious value: -"Semantic overrides: {\"tokens\":{...},\"typography\":{...},\"layers\":{\"roads.motorway\":{\"color\":\"#f2a900\"}}}. Layer keys come from /api/basemap/contract."New value: +"Semantic overrides: {\"tokens\":{...},\"typography\":{...},\"layers\":{\"roads.motorway\":{\"color\":\"#f2a900\"}}}. Layer keys come from the explain operation." - added
Input schema / properties / slugAdded value: +{ + "description": "save and delete: the profile's stable URL id. Defaults to a slug of the name on save.", + "maxLength": 48, + "minLength": 2, + "type": "string" +}
1 tool update
- Added
geo_style
1 tool update
- Changed
route1 field changed- added
Input schema / properties / elevationAdded value: +{ + "default": false, + "description": "Sample a terrain profile along the route and report total gain and loss in metres.", + "type": "boolean" +}
2 tool updates
- Added
isochrone - Added
route
Related MCP Connectors
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
OpenStreetMap Overpass MCP — programmatic queries against the OSM database
Generate and run high performance queries on open and private spatial data at-scale in the cloud
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides forward/reverse geocoding, bounding box extraction, nearby places discovery, batch geocoding, route waypoints, and administrative boundary lookup using OpenStreetMap data.10Apache 2.0
- AlicenseAqualityCmaintenanceEnables LLMs to geocode and reverse geocode places, find nearby points of interest, search categories within an area, get turn-by-turn routing, suggest meeting points, and analyze neighborhoods, commutes, schools, EV charging, and parking through OpenStreetMap data services. It also serves place and map tile resources over stdio, SSE, or Streamable HTTP transports.12MIT
- FlicenseBqualityBmaintenanceProvides read-only query tools over OpenStreetMap data in PostGIS, enabling natural language queries for features, categories, and spatial analysis.7-
- AlicenseNot gradedqualityAmaintenanceGeocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data via MCP.600 npm5Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.