Skip to main content
Glama

Server Details

Maps built for agents: routing incl. truck/ADR, geocoding, matrices, isochrones — 34 tools.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Tool DescriptionsA

Average 4.4/5 across 29 of 34 tools scored. Lowest: 3.8/5.

Server CoherenceB
Disambiguation3/5

Most clusters are distinct (geo_* primitives, style tools, routing/planning), but plan_day and order_stops overlap heavily for multi-stop ordering, and search_along_route subsumes much of cheapest_fuel_along_route's purpose when 'fuel' is passed as a category. Geocode/nearby_places/verify_places also have somewhat fuzzy boundaries, though the descriptions do clarify intended use.

Naming Consistency4/5

The dominant verb_noun (or geo_*) pattern is consistent and predictable, with clear families like check_*, set_*, and geo_*. Deviations like 'route', 'matrix', 'elevation', and 'nearby_places' are few and idiomatic rather than chaotic.

Tool Count2/5

34 tools is well above the 25-tool threshold and approaches kitchen-sink breadth for one server. Many tools are individually justified, but the number forces an agent to consider a very large surface, and several micro geo_* operations could reasonably be grouped.

Completeness4/5

The core mapping domain is covered broadly: geocoding/reverse geocoding, places, routing/matrix, multi-stop optimization, isochrones, elevation, geometry, style editing, and map-issue reporting. Minor gaps exist (no list/delete style, no render tool), but agents can complete most workflows without dead ends.

Available Tools

34 tools
cheapest_fuel_along_routeAInspect

Find the cheapest fuel along a route, with the REAL extra travel time of stopping at each station — never a straight-line guess. Provide origin + destination (a route is computed) or an existing route's geometry_polyline6, plus a fuel code ("diesel" default, "petrol_95", "petrol_98", "premium_diesel", "e85", "lpg") and max_detour_minutes (default 10). Stations come from the live open-data price feeds (UK CMA retailer scheme and/or the statutory Fuel Finder, FR prix-carburants, DE Tankerkoenig; the response's fuel_attribution names the ones actually matched), are priced through the routing engine with your costing (a truck profile makes detours respect dimensional/ADR restrictions) and ranked cheapest first. Each result carries price {value, currency, updated_at, stale} (stale = not verifiably fresher than 24 h), detour_minutes/detour_km, and saving_per_litre vs the cheapest on-route baseline (pass fill_litres to also get saving_total). Requires the MapMap gateway; answers a clear error when the deployment has no fuel-price dataset. Display the returned fuel_attribution with the prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuelNoWhich fuel to price: "diesel" (default), "petrol_95", "petrol_98", "premium_diesel", "e85" or "lpg" (aliases "petrol", "unleaded", "e10", "super_unleaded", "e5", "b7" and "sdv" are accepted).
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck"; the detours then respect dimensional/ADR restrictions.
originNoRoute origin (with `destination`, when no geometry is given).
costingNoCosting model for the route and detour matrix: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
destinationNoRoute destination.
fill_litresNoOptional fill size in litres; each result then also carries `saving_total` = `saving_per_litre` × `fill_litres`.
max_resultsNoMaximum results (default 5, at most 25).
geometry_polyline6NoAn existing route geometry as an encoded polyline6 (the `route` tool's `geometry_polyline6`). Provide either this or `origin` + `destination`, not both.
max_detour_minutesNoLargest acceptable detour in minutes (default 10, at most 120).

Output Schema

ParametersJSON Schema
NameRequiredDescription
fuelYesThe normalised fuel code that was priced (e.g. "diesel").
costingYesThe costing the detours were priced with.
resultsYesStations within the detour budget, cheapest first (price, then detour).
baselineYesThe cheapest effectively-on-route option per currency (empty when no station sits on the route itself).
candidate_capYesThe matrix fan-out cap in force.
route_length_mYesLength of the route geometry in metres.
fuel_attributionNoAttribution string for the fuel-price data sources actually returned — display it with the prices (a licence obligation).
route_distance_mNoDirect origin→destination distance in metres.
route_duration_sNoDirect origin→destination travel time in seconds (same estimator as the detour legs), when routable.
candidates_costedYesCandidates actually priced through the engine (fan-out capped at `candidate_cap`, cheapest kept).
max_detour_minutesYesThe detour budget applied, minutes.
candidates_consideredYesStations selling the fuel that passed the corridor pre-filter.
Behavior5/5

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

With no annotations at all, the description carries the full burden of behavioral disclosure, and it delivers: it names live open-data feeds, defines the stale flag as 'not verifiably fresher than 24 h', explains ranking by cheapest first, documents the error when no dataset exists, and states how truck costing affects detour restrictions. It also surfaces the 'never a straight-line guess' guarantee.

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

Conciseness4/5

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

The description is dense but well-organized: value proposition first, then route input, then data sources, then output fields and error behavior. Every sentence adds useful context, though it is somewhat long and partially echoes schema descriptions.

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

Completeness5/5

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

For a tool with 9 optional parameters and an output schema, the description covers the essential invocation modes, defaults, data provenance, result fields, error handling, and even an agent-facing display instruction. Minor omissions like max_results are already fully documented in the schema, so nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description adds extra meaning beyond the schema: it explains the mutual exclusivity of geometry_polyline6 vs origin+destination, that fill_litres produces saving_total, the effect of truck profiles on detours, and the default/alias behavior of fuel codes. Some repetition of schema text prevents a 5.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Find the cheapest fuel along a route', and immediately distinguishes itself from any generic routing or place-search tool by emphasizing real detour times rather than straight-line guesses. This clear scoping separates it from siblings like search_along_route and nearby_places without needing to open the schema.

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

Usage Guidelines4/5

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

It gives concrete invocation guidance: provide origin+destination, or geometry_polyline6, plus fuel code and max_detour_minutes, and states the MapMap gateway prerequisite. It does not explicitly name alternatives or provide when-not conditions, so it stops short of a 5, but the usage context is otherwise clear.

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

check_adr_tunnelAInspect

Check whether a vehicle may pass through a tunnel of a given ADR category ("A"–"E"). Provide hazmat and, when known, the load's ADR 8.6.4 tunnel restriction code (e.g. "B", "C5000D", "B/D", "none"). Applies the conservative worst-case reading: conditional clauses are assumed to apply, so a blocked answer may over-restrict but never under-restricts. No network access; answers instantly.

ParametersJSON Schema
NameRequiredDescriptionDefault
hazmatYesWhether the vehicle carries dangerous goods at all. When false the ADR tunnel matrix does not apply and every tunnel is permitted.
tunnel_codeNoADR 8.6.4 tunnel restriction code of the load, e.g. "B", "C5000D", "B/D", or "(—)"/"none". Leave unset for a hazmat load of unknown code (conservatively treated as code B).
tunnel_categoryYesADR category of the tunnel to check: "A", "B", "C", "D" or "E".

Output Schema

ParametersJSON Schema
NameRequiredDescription
reasonNoWhy passage is forbidden (present only when blocked); cites the ADR 8.6.4 rule that applied.
decisionYesWhether passage is allowed or blocked.
explanationYesHuman-readable explanation of how the decision was reached, including the conservative worst-case reading.
forbidden_tunnel_categoriesYesADR tunnel categories this load is forbidden from under the worst-case reading (conditional clauses assumed to apply). Empty when unrestricted.
Behavior5/5

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

With no annotations provided, the description carries the full disclosure burden and succeeds: it states the conservative worst-case reading ('a blocked answer may over-restrict but never under-restricts') and operational traits ('No network access; answers instantly'). This is exactly the kind of behavioral context agents need beyond the schema.

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

Conciseness5/5

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

Three sentences, purpose front-loaded in the first ('Check whether a vehicle may pass through a tunnel...'), with every sentence earning its place. No fluff; the behavioral caveat and operational notes are tightly packed in the final sentence.

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

Completeness4/5

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

The description covers purpose, parameter usage, interpretation semantics, and operational behavior, while the output schema covers return values and the input schema covers all parameters. Slightly more could be said about edge-case handling (e.g., unrecognized tunnel codes), but nothing essential to selecting or invoking the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters; baseline is 3. The description adds marginal value by reinforcing which parameters to supply and giving code examples ('B', 'C5000D', 'B/D', 'none'), though these overlap with the schema's own examples.

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

Purpose5/5

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

States a specific verb and resource: 'Check whether a vehicle may pass through a tunnel of a given ADR category ("A"–"E")'. The ADR tunnel category scope clearly differentiates it from geo siblings like check_clearance_on_route, which concerns route clearance rather than hazmat tunnel restrictions.

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

Usage Guidelines3/5

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

The description implies its use case (determining hazmat tunnel passage) and instructs what to provide ('Provide hazmat and, when known, the load's ADR 8.6.4 tunnel restriction code'), but it never explicitly contrasts with alternatives such as check_clearance_on_route or states when not to use it. Usage context is present but left to inference.

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

check_clearance_on_routeAInspect

Measure a vehicle's overhead clearance along a route against surveyed point cloud geometry, wherever survey coverage exists. Routes with truck costing (so the search already avoids the height restrictions the map has tagged), then measures that corridor. Give origin, destination and height_m; optional width_m asks the corridor-width axis too, and optional margin_m adds your operating margin to the vehicle before the verdict. Returns pass, fail, indeterminate or no_verdict with the limiting point, the measured headroom, its uncertainty bound (safe_headroom_m, sigma_m, sampling_gap_m) and a link to that exact view in the survey viewer. An indeterminate carries indeterminate_reasons as codes to branch on and the same reasons as English inside explanation; read out the English. A pass may carry no limiting point at all, which means the survey found nothing above that corridor, and the width axis may answer not_assessed where the corridor edges are too sparsely surveyed while the height axis still answers. Honesty, and it matters here: this measures physical geometry from a dated survey. It is not a signed or posted height, clearance_enforcement.route_certified is always false, and the caveat is on every answer including the clear one. Ground the survey did not cover comes back as not_surveyed_m and is never judged, so a pass is possible over complete coverage and nowhere else; sparse or stale coverage comes back separately as insufficient_data_m. Reach for this when a truck route came back unchanged and you need to know whether that means anything: an unchanged route avoids what the map records, which is a different claim from measured headroom, because a structure nobody tagged is routed through like open road. Needs the MapMap gateway (GATEWAY_URL + GATEWAY_API_KEY), which holds the surveys; there is no fallback, and it will not answer from the routing step alone. The mapmap://guide/clearance resource sets out what each answer proves.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesRoute origin.
width_mNoVehicle width in metres. Supplying it asks the width axis as well as the height axis; the width answer is reported separately and is never a headroom.
height_mYesVehicle height in metres. Required: there is no default vehicle, because a default vehicle is how somebody gets an answer about a lorry that is not theirs.
margin_mNoOperating margin in metres, added to the height before the verdict is decided (default 0). Your compliance policy, not ours: the measured figure and the safe bound are both reported whatever you set here, and the margin is echoed back. It is applied to the measurement, not to the routing step, where the map's own posted heights already carry a margin of their own.
destinationYesRoute destination.

Output Schema

ParametersJSON Schema
NameRequiredDescription
basisYesAlways `"surveyed_geometry_not_signage"`.
widthYesThe width axis, answered separately when `width_m` was given.
verdictYes`pass`, `fail`, `indeterminate` or `no_verdict` for the height axis. A `pass` is possible over completely surveyed ground and nowhere else: unsurveyed ground yields `no_verdict`, never a pass.
datasetsYesThe surveys drawn on, with their capture dates and staleness.
limitingNoThe limiting point on a `fail`, the tightest point on a `pass`, the worst contested point on an `indeterminate`. Absent on a `no_verdict`, and absent on a `pass` where the survey found nothing at all above the corridor.
view_urlNoDeep link to that exact view in the survey viewer, so the reading can be looked at rather than taken on trust.
advisoriesYesNotes on stretches of the route: vegetation age, a reading limited by a wire, a seam between surveys.
assessed_mYesMetres of route measured against survey data good enough to decide on.
explanationYesWhat was measured, when, with what bound, and what the tool declined to conclude. It may over-restrict; it never under-restricts.
not_surveyed_mYesMetres of route no survey covers. This is the absence of a measurement, and it is never the same statement as a measured open sky. No verdict is drawn over it.
resolution_hintNoWhat would resolve an `indeterminate`, in one sentence, as the measuring service phrased it.
route_distance_mYesLength of the route the vehicle was routed over, metres.
route_duration_sYesEstimated driving time for that route, seconds.
geometry_polyline6YesThe route as a six-digit-precision encoded polyline, so the same shape can be drawn or re-measured without routing again.
insufficient_data_mYesMetres of route a survey covers but too sparsely, or too stale, to decide on. Also an absence, and reported apart from `not_surveyed_m` because the two have different remedies.
clearance_enforcementYesWhat this answer does and does not prove. Read it.
indeterminate_reasonsYesWhy an `indeterminate` could not be called, as machine-readable codes (`inside_uncertainty_band`, `vegetation_age_exceeded`, `artefact_stale`, `artefact_freshness_unchecked`). Empty on every other verdict. These are for branching on, not for reading out: the same reasons appear as English in `explanation`, and a person shown `artefact_freshness_unchecked` has been failed by whatever displayed it.
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it discloses dated-survey limitations, that route_certified is always false, how coverage gaps return not_surveyed_m and insufficient_data_m, and how pass/fail/indeterminate/no_verdict correspond to physical evidence. It even flags that a pass may have no limiting point and that width can return not_assessed.

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

Conciseness4/5

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

The purpose is front-loaded and nearly every sentence adds functional or caveat information. It is quite long and has rhetorical and grammatical turns ('Honesty, and it matters here'; 'Routes with truck costing... then measures that corridor') that keep it from being optimally concise.

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

Completeness5/5

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

Given the tool's complexity and the lack of annotations, the description is remarkably complete: it names all required and optional inputs, explains verdict semantics, uncertainty fields, coverage handling, authentication requirements, and where to find further guidance. An agent has enough information to call the tool correctly and interpret all answer types.

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

Parameters4/5

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

The schema already covers parameters at 100%, so the baseline is 3. The description adds useful meaning by explaining that margin_m is applied to the measurement rather than the routing step, that width_m is reported separately and never as headroom, and that there is no default vehicle height, though it adds little new detail for origin and destination.

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

Purpose5/5

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

The first sentence states a specific verb and resource: 'Measure a vehicle's overhead clearance along a route against surveyed point cloud geometry.' It also distinguishes itself from map-tagged height restrictions and sibling tools like check_adr_tunnel by clarifying it measures physical surveyed geometry, not posted or signed heights.

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

Usage Guidelines4/5

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

It gives a concrete trigger: 'Reach for this when a truck route came back unchanged' and states prerequisites (MapMap gateway, no fallback). However, it does not explicitly name an alternative sibling tool or say 'do not use this for posted height checks,' so the when-not guidance is implied rather than explicit.

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

check_style_contrastAInspect

Audit a map style's colour contrast against WCAG 2.1 (4.5:1 for label text, 3:1 for graphics like the route line), across both the light and dark palette variants. Pass a hosted style_id OR an inline theme document (as accepted by create_style). Advisory: failing pairs list the palette slots to adjust with set_palette; publishing is never blocked on contrast.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNo…or an inline theme document (as accepted by `create_style`). Exactly one of `style_id`/`theme` must be given.
style_idNoHosted style id whose latest theme should be checked…

Output Schema

ParametersJSON Schema
NameRequiredDescription
passesYesTrue when every audited pair meets its WCAG threshold.
findingsYesEvery audited pair, failing pairs first.
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the two palette variants checked, the exact thresholds, that failing pairs list slots to adjust, and that contrast never blocks publishing. It does not explicitly state it is read-only, but 'Audit' and 'Advisory' imply no mutation.

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

Conciseness5/5

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

Three front-loaded sentences carry purpose, input, thresholds, and advisory behavior with no filler. Every sentence earns its place.

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

Completeness5/5

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

The tool has only two parameters, an output schema exists, and the description supplies thresholds, input alternatives, palette variants, and follow-up guidance via set_palette. Nothing needed to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the exactly-one-of style_id/theme rule and theme format. The description adds only a concise restatement and a pointer to create_style, which is useful but not a major increment over the schema.

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

Purpose5/5

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

The description opens with a specific verb ('Audit'), a precise resource ('a map style's colour contrast'), and an explicit standard (WCAG 2.1 thresholds for label text and graphics). This clearly distinguishes it from sibling tools like check_adr_tunnel or set_palette.

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

Usage Guidelines4/5

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

It gives a clear invocation condition ('Pass a hosted style_id OR an inline theme document') and directs failed pairs to set_palette. It lacks an explicit 'when not to use' contrast, but the advisory note that publishing is never blocked on contrast conveys the appropriate context.

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

create_styleAInspect

Create a hosted map style. Provide a name and optionally a theme document ({base: "light"|"dark", palette: {slot: colour}, layers: {layer_id: overrides}}); omitted, the style starts from the default theme. A theme may also set worldview (ISO 3166-1 alpha-2, accepted: AE, KR, SA, US) to display that jurisdiction's official names for a small curated registry of renamed features; omitted, labels keep the OSM on-the-ground names. Returns the generated style_id (pass it to set_palette / set_layer_paint) and the compiled style URL for MapLibre.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable style name; its kebab-case slug seeds the style id.
themeNoOptional theme document (palette/layer overrides). Omitted, the style starts from the default theme carrying `name`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
themeYesThe theme document that was stored.
versionYesThe published version (always 1 on create).
style_idYesThe generated style id — pass it to `set_palette`, `set_layer_paint` and `get_style`.
style_urlYesImmutable URL of the compiled style at this version.
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains default-theme behavior, optional worldview filtering with accepted ISO codes, fallback to OSM on-the-ground names, and the return format. It does not cover auth, persistence, or rate limits, but the core side effects are clearly described.

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

Conciseness4/5

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

The description is a dense but efficient paragraph with the main purpose front-loaded. It is slightly long because of the worldview detail and return-value explanation, but every sentence contributes actionable information rather than filler.

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

Completeness5/5

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

For a tool with no annotations and a schema that under-describes the theme object, the description is self-sufficient. It covers required input, optional theme structure, accepted worldview codes, default behaviors, output values, and even names sibling tools that consume the returned style_id.

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

Parameters4/5

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

Schema coverage is high, placing the baseline at 3, but the description adds meaningful detail: it expands the theme parameter into its structure ({base, palette, layers}), enumerates accepted worldview values, and clarifies what happens when each optional parameter is omitted. This goes beyond the schema's generic theme description.

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

Purpose5/5

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

The opening phrase 'Create a hosted map style' is a specific verb+resource pair that clearly distinguishes this from sibling tools such as get_style, list_style_layers, set_palette, and set_layer_paint. It also states the main output (style_id and compiled style URL), removing ambiguity about the tool's role.

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

Usage Guidelines4/5

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

The description provides clear usage context: provide a name, optionally supply a theme document, and rely on defaults when omitted. It even tells the agent that the returned style_id should be passed to set_palette/set_layer_paint, which implies a create-then-modify workflow. It does not explicitly list when not to use the tool, but the workflow guidance is strong.

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

elevationAInspect

Sample terrain elevation. Provide points (a bare list of coordinates) for point elevation, or encoded_polyline (optionally with resample_distance_m) for an along-route profile — not both. Returns one sample per point/resampled point in order; elevation_m is null wherever the engine's DEM tile set has no coverage at that point (never a guess). The encoded_polyline form also returns each sample's resampled lat/lon and cumulative range_km from the start.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsNoPoints to sample. Provide this or `encoded_polyline`, not both.
encoded_polylineNoA route as a Google encoded polyline with six digits of precision. Provide this or `points`, not both.
resample_distance_mNoResamples `encoded_polyline` at this spacing in metres before sampling height (ignored for `points`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
samplesYesOne sample per input point (or per resampled shape point, in the `encoded_polyline` form), in order.
Behavior5/5

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

With no annotations present, the description carries the full disclosure burden. It states that one sample is returned per input point in order, that `elevation_m` is null for missing DEM coverage 'never a guess,' and that polyline inputs additionally return resampled lat/lon and cumulative `range_km`. This is unusually honest and useful behavioral detail for an unannotated tool.

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

Conciseness5/5

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

Three tightly written sentences cover the operation, the two input modes, mutual exclusivity, output ordering, missing-data behavior, and polyline-specific outputs. The high-level purpose is front-loaded, and every clause adds information. There is no filler or repetition of schema text.

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

Completeness5/5

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

The description is complete for a terrain sampling tool: it covers both input modes, the output contract, missing-data semantics, and extra polyline outputs, while the output schema handles return fields. Nothing an agent needs to invoke the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents each parameter, including mutual exclusivity and the meaning of `resample_distance_m`. The description adds a small amount of relational context by grouping the parameters into 'point elevation' and 'along-route profile,' but it does not substantially extend what the schema already provides.

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

Purpose5/5

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

The description opens with the exact verb and resource: 'Sample terrain elevation.' It immediately distinguishes the tool's two modes (point sampling and along-route profile), which sets it apart from nearby routing and geospatial analysis tools. The phrasing is specific enough that an agent can match the tool to elevation queries without inspecting the schema.

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

Usage Guidelines4/5

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

The description clearly instructs when to provide `points` versus `encoded_polyline` and explicitly warns 'not both.' It also notes that `resample_distance_m` only applies to polyline input. It does not mention alternative sibling tools or state when not to use this tool, but the mode-selection guidance gives agents a clear operational context.

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

geo_areaAInspect

Area in square metres enclosed by a ring of 3+ coordinates, computed geodesically. Always positive: the answer does not depend on whether the ring is wound clockwise or anticlockwise. Intended for zones and boundaries, not for polygons covering more than half the globe. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsYesThe coordinates to consider.

Output Schema

ParametersJSON Schema
NameRequiredDescription
area_sq_mYesEnclosed area in square metres, always positive regardless of winding order.
Behavior4/5

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

With no annotations, the description carries the full behavioral load and does it well: geodesic computation, always-positive sign, winding-order independence, and local computation with no network or quota impact. It does not mention behavior on invalid input such as fewer than 3 points, but this is a minor gap for such a simple pure function.

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

Conciseness5/5

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

Four compact, front-loaded sentences each earn their place: result and units, sign behavior, intended scope, and execution characteristics. There is no filler or redundancy.

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

Completeness4/5

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

The tool has a single required parameter and an output schema, so the description doesn't need to explain return conventions. It supplies the key contextual facts—geodesic method, area unit, positive result, half-globe limitation, and local execution—leaving only minor edge-case behavior unstated.

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

Parameters3/5

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

The schema already documents `points` and the `lat`/`lon` fields completely, so the baseline 3 applies. The description adds useful context like 'ring' and the 3+ requirement, but it doesn't elaborate on ordering, precision, or repeated closing coordinates—details that would be extra value beyond the schema.

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

Purpose5/5

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

The description states a specific operation—computing enclosed area in square metres from a geodesic ring of 3+ coordinates—making it instantly distinguishable from line-measurement siblings like geo_distance and geo_length. The '3+ coordinates' condition further defines the expected input resource.

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

Usage Guidelines4/5

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

It gives clear intended use ('zones and boundaries') and an explicit exclusion ('not for polygons covering more than half the globe'). It stops short of naming alternative tools for that exclusion, but the guidance is sufficient for an agent to understand when this tool applies.

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

geo_bboxAInspect

The axis-aligned bounding box enclosing 1+ coordinates, as {min_lat, min_lon, max_lat, max_lon}. Useful for fitting a map view to a set of stops. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsYesThe coordinates to consider.

Output Schema

ParametersJSON Schema
NameRequiredDescription
max_latYesMaximum latitude (north edge).
max_lonYesMaximum longitude (east edge).
min_latYesMinimum latitude (south edge).
min_lonYesMinimum longitude (west edge).
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It adds valuable context by stating that the computation is local, involves no network call, and consumes no quota. It does not cover edge cases like empty input, but the '1+' constraint mitigates that concern.

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

Conciseness5/5

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

Three short sentences deliver the output format, primary use case, and key performance trait without any filler. The essential definition is front-loaded, making it easy for an agent to parse quickly.

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

Completeness5/5

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

For a pure local computation with a single well-documented parameter and an output schema, the description is complete. It explains what the tool returns, why an agent would use it, and that it has no network or quota implications. Nothing critical is missing for correct invocation.

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

Parameters3/5

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

The input schema already documents the single `points` parameter at 100% coverage, including the LatLon structure. The description adds little parameter-level meaning beyond the '1+' minimum, so the schema does the heavy lifting. This matches the baseline score for high schema coverage.

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

Purpose5/5

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

The description clearly defines the tool as computing an axis-aligned bounding box and explicitly gives the output shape {min_lat, min_lon, max_lat, max_lon}. This distinguishes it from sibling geo tools like geo_centroid, geo_area, and geo_distance with specific, non-tautological language.

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

Usage Guidelines4/5

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

The description provides a concrete use case: fitting a map view to a set of stops. It does not explicitly name alternatives or say when not to use this tool, but the context is clear and actionable enough for an agent to select it appropriately among geometry siblings.

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

geo_bearingAInspect

Initial bearing from one coordinate to another, in degrees clockwise from true north (0-360). This is the bearing at the START of the geodesic; over long distances the bearing changes en route. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd coordinate.
fromYesStart coordinate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bearing_degYesInitial bearing from `from` to `to`, degrees clockwise from true north, normalised to 0–360. Note this is the bearing at the start of the geodesic: over long distances the bearing changes en route.
Behavior4/5

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

With no annotations provided, the description carries the full burden. It transparently discloses that the computation is local (no network call, no quota) and explains a key behavior: the bearing changes en route over long distances. It does not mention error handling, but for a pure calculation the disclosed behavior 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.

Conciseness5/5

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

Two sentences with zero fluff. The core purpose is front-loaded, and the important caveat about initial bearing follows immediately. The local computation note is a useful extra. Every sentence earns its place.

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

Completeness4/5

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

For a simple calculation tool with an output schema, the description covers the essential aspects: what it computes, the unit, the geodesic nuance, and the local nature. It doesn't mention potential edge cases (e.g., antimeridian), but that is minor and not expected for such a tool. The provided context is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% — both 'from' and 'to' are described in the schema as start/end coordinates, and the LatLon object defines lat/lon. The description adds no new parameter semantics beyond restating the schema. Given the high coverage, baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (calculate initial bearing) with a clear resource (one coordinate to another) and defines the output in degrees clockwise from true north. It is unambiguous, but it does not explicitly differentiate from sibling tools like geo_destination or geo_distance, despite the clarity of the purpose.

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

Usage Guidelines3/5

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

The description implies usage by clarifying that the bearing is at the START of the geodesic, which hints that this is not for constant bearing over long distances. However, it does not explicitly mention when to use this tool versus alternatives, nor does it name any sibling tools. The guidance is implicit rather than direct.

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

geo_centroidAInspect

The centroid (geometric mean position) of 1+ coordinates, e.g. to pick a depot location or centre a map. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsYesThe coordinates to consider.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointYesThe computed coordinate.
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It explicitly states local computation with no network call and no quota, which is valuable transparency for an agent deciding whether invocation is safe or costly. It does not discuss edge cases such as antimeridian handling, but the simple pure-computation nature and available output schema mitigate the gap.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The core definition and example are front-loaded, and the computational transparency is stated succinctly at the end.

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

Completeness4/5

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

For a simple pure function with one well-documented parameter and an output schema, the description is largely complete: it covers purpose, input cardinality, use cases, and local execution. It could still mention what happens with a single coordinate or edge-case behavior, but the low complexity means these are minor omissions.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantic meaning beyond the schema by specifying '1+ coordinates' and clarifying that they are combined as a geometric mean. This helps the agent understand constraints and intended input semantics beyond the raw parameter descriptions.

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

Purpose5/5

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

The description clearly identifies the operation as computing the centroid, or geometric mean position, of coordinates. The examples of picking a depot or centring a map make the purpose immediately understandable, and it is distinct from sibling geometry tools like geo_bbox, geo_area, and geo_bearing.

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

Usage Guidelines3/5

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

The description gives example use cases ('pick a depot location or centre a map') which imply when to use it. However, it does not explicitly contrast this tool with related siblings or state when not to use it, so the guidance is implied rather than direct.

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

geocodeAInspect

Turn a free-text place query (address, POI, town) into coordinates. Returns up to limit (default 10) candidates with name, one-line label, lat/lon, type and address parts. Pass focus {lat, lon} to rank results near a location higher. Results are matched in lang (default "en"), so English exonyms — "Munich", "Cologne", "Geneva" — resolve to the place meant; pass lang when querying in another language, or "default" for each place's local name.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage of the place names to match and return, as a two-letter code. Defaults to "en", which is what makes English exonyms ("Munich", "Cologne", "Geneva") resolve to the place meant rather than a same-named town elsewhere. Set it to the language your query is written in; "default" asks for each place's own local name. Deployments support a fixed set (this one: "en", "de", "fr"), and anything outside it is refused.
focusNoOptional location bias: results near this point rank higher.
limitNoMaximum number of results (1–50, default 10).
queryYesFree-text place query, e.g. "Dover ferry terminal".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesMatching places, best first.
Behavior5/5

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

There are no annotations, so the description carries the burden, and it does so well. It discloses that multiple candidates are returned, the default limit, the effect of focus on ranking, language-dependent matching, English exonym resolution, and the 'default' local-name behavior. These are the key behavioral traits an agent needs before calling the tool.

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

Conciseness5/5

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

The description is three sentences and front-loaded with the core operation. It packs in return fields, the limit default, focus behavior, and language subtleties without filler or redundancy. Each sentence earns its place and the structure is easy to scan.

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

Completeness5/5

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

For a 4-parameter tool with an output schema present, the description covers the required query, optional limit/focus/lang, and the shape of results well enough for correct invocation. The output schema handles return-value details, so the description does not need to restate them.

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

Parameters4/5

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

Schema description coverage is 100%, so a score of 3 is the baseline. The description adds meaningful semantics beyond the schema with concrete examples like 'Munich', 'Cologne', and 'Geneva' to illustrate why lang matters, and explains the 'default' local-name mode. But it largely mirrors the schema for focus and limit rather than introducing new meaning.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Turn a free-text place query (address, POI, town) into coordinates.' It goes on to list returned fields (name, label, lat/lon, type, address parts), which concretely frames this as forward geocoding and distinguishes it from siblings like reverse_geocode and nearby_places.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: any time you have free text address/POI/town input and need coordinates. It also gives conditional guidance for focus and lang. However, it does not explicitly name alternatives or state when not to use geocode versus reverse_geocode or nearby_places.

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

geo_destinationAInspect

The coordinate reached by travelling distance_m metres from from on bearing_deg (degrees clockwise from true north). The inverse of geo_distance + geo_bearing. Local computation: no network call.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesStarting coordinate.
distance_mYesDistance to travel in metres.
bearing_degYesBearing in degrees clockwise from true north.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointYesThe computed coordinate.
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It adds 'Local computation: no network call,' informing the agent that this is a fast, offline operation. It also describes the mathematical behavior (inverse of distance+bearing). It does not discuss edge cases (e.g., invalid ranges), but for a simple geometric function the provided information 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.

Conciseness5/5

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

Two sentences with no wasted words. The functional definition is front-loaded, and the inverse relationship plus local computation note are appended efficiently. Every word contributes.

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

Completeness4/5

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

For a simple local calculation with complete schema descriptions and an assumed output schema, the description covers all essential aspects: what it computes, the inverse relationship, and the local/network behavior. It does not mention precision or error handling, but those are not critical for this straightforward tool.

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

Parameters3/5

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

Schema coverage is 100% and every parameter is already described in the schema (start coordinate, distance in metres, bearing clockwise from true north). The description essentially restates these values without adding new meaning, so it does not go beyond the baseline for fully covered parameters.

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

Purpose5/5

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

The description states a specific verb (travel) and resource (coordinate), and precisely defines the output as the coordinate reached by traveling a given distance and bearing. It explicitly identifies itself as the inverse of `geo_distance` and `geo_bearing`, which distinguishes it from those sibling tools immediately.

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

Usage Guidelines4/5

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

It clearly indicates the relationship to `geo_distance` and `geo_bearing` by calling itself the inverse, which implies the appropriate usage context (i.e., when you need a destination point rather than distance or bearing). It does not explicitly state 'use this when...' or give exclusions, but the inverse relationship provides adequate context for an agent to route correctly.

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

geo_distanceAInspect

Distance in metres between two coordinates. Computed geodesically on the WGS84 ellipsoid, so it is the straight-line (as-the-crow-flies) distance, NOT a driving distance — use route or matrix for travel distance and time. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd coordinate.
fromYesStart coordinate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
distance_mYesDistance in metres along the WGS84 ellipsoid.
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It conveys several behavioral traits: geodesic computation on the WGS84 ellipsoid, straight-line semantics, local computation (no network call), and no quota impact. While it does not discuss edge cases like identical or antipodal coordinates, the disclosed traits go well beyond a minimal description and there is no contradiction with any annotation.

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

Conciseness5/5

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

The description is two short sentences with zero filler. The core result (distance in metres) is front-loaded, followed by the critical driving-distance distinction and the network/quota qualifier. Every sentence earns its place, and the structure is easy for an agent to parse.

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

Completeness5/5

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

For a simple two-parameter tool with an output schema present, the description is complete. It covers what the tool computes, its geographic model, the distinction from route/matrix, and performance characteristics. The output schema handles the return value, so the description doesn't need to explain it. No important decision-relevant information is missing.

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

Parameters3/5

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

Schema description coverage is 100%—the schema already documents `from` and `to` as start/end coordinates and fully describes the nested lat/lon fields with ranges and a WGS84 note. The description adds little parameter-level meaning beyond naming two coordinates. This aligns with the baseline 3 for high schema coverage, where the schema does the heavy lifting.

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

Purpose5/5

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

The description immediately states a specific verb and resource: 'Distance in metres between two coordinates.' It further specifies the computational model ('geodesically on the WGS84 ellipsoid') and explicitly distinguishes itself from driving distance, which also differentiates it from sibling tools like route and matrix. Even without seeing the schema, an agent knows exactly what this tool does.

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

Usage Guidelines5/5

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

The description gives explicit guidance on when to use this tool versus alternatives: 'NOT a driving distance — use route or matrix for travel distance and time.' It also adds a decisive performance qualifier—'Local computation: no network call, no quota'—which helps an agent choose it when avoiding network latency or quota concerns.

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

geo_lengthAInspect

Total length in metres of a polyline through 2+ coordinates, summed geodesically. This measures the line you supply, NOT a driven route — use route for that. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsYesThe coordinates to consider.

Output Schema

ParametersJSON Schema
NameRequiredDescription
length_mYesTotal geodesic length in metres.
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that the computation is local ('no network call, no quota') and that the measurement is geodesic and summed over a 2+ point polyline. It does not detail error behavior for fewer than 2 points, but for a simple calculation tool this is adequate context.

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

Conciseness5/5

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

Three short sentences with no filler. The core measurement is front-loaded, the route distinction follows, and the local-computation note is compact and useful. Every sentence earns its place.

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

Completeness5/5

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

For a one-parameter tool with an output schema, the description covers the essential context: units (metres), geodesic method, line-vs-route distinction, and the side-effect-free local computation. Nothing critical is missing for selecting and invoking it correctly.

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

Parameters4/5

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

The schema provides 100% coverage for the `points` parameter but only says 'The coordinates to consider.' The description adds meaningful semantics: a polyline must have 2+ coordinates and the calculation is geodesic and summed. This goes beyond the schema's bare description.

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

Purpose5/5

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

The description clearly states the tool computes 'Total length in metres of a polyline through 2+ coordinates, summed geodesically', specifying both the resource (a supplied polyline) and the operation (length measurement). It also explicitly distinguishes itself from a driven route by pointing to the `route` sibling tool, eliminating ambiguity.

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

Usage Guidelines5/5

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

It provides explicit guidance: 'This measures the line you supply, NOT a driven route — use `route` for that.' This tells an agent exactly when to use this tool versus the alternative sibling, making the selection criterion clear.

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

geo_nearest_point_on_lineAInspect

The closest position on a polyline to a given coordinate, plus the geodesic distance to it in metres. The answer may lie between vertices, not only on them. Useful for 'how far is this address from the route?'. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesThe polyline's coordinates, 2 or more.
pointYesThe coordinate to measure from.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointYesThe closest position on the line, which may lie between vertices.
distance_mYesGeodesic distance from the input point to that position, metres.
Behavior5/5

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

With no annotations present, the description carries the full burden and does so well. It discloses that the computation is local, requires no network or quota, returns geodesic distance in metres, and that the closest point may lie between vertices. These are non-obvious behaviors that the schema does not convey.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the primary output, the second clarifies a subtle geometric behavior, and the third gives a use case and performance characteristic. Information is front-loaded and there is no redundant filler.

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

Completeness5/5

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

For a simple two-parameter geometry calculation, the combination of a 100% documented schema, an output schema, and a description covering purpose, behavior, units, and execution context is complete. An agent has enough information to select and call the tool correctly.

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

Parameters3/5

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

The input schema documents both parameters fully with descriptions of the coordinate and polyline, so schema coverage is 100%. The description adds contextual framing ('coordinate' and 'polyline') but no additional parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

Clearly states what the tool does: finds the closest position on a polyline to a given coordinate and returns the geodesic distance in metres. The added detail that the result may fall between vertices, not only on them, helps distinguish it from simpler point-in-polygon or point-to-point distance tools.

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

Usage Guidelines4/5

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

Gives a concrete use case ('how far is this address from the route?') and highlights that it is a local computation with no network call and no quota, which helps an agent decide when to prefer it. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough.

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

geo_point_in_polygonAInspect

Whether a coordinate lies inside a polygon: delivery zones, catchments, congestion or clean-air zones, site boundaries. Provide point {lat, lon} and polygon as 3+ {lat, lon} coordinates of the outer ring (closed automatically if the last does not repeat the first). Points exactly on the boundary count as OUTSIDE. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointYesThe coordinate to test.
polygonYesThe polygon's outer ring, 3 or more coordinates. Closed automatically if the last point does not repeat the first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
insideYesTrue when the point is strictly inside the ring. Points exactly on the boundary are **not** counted as inside.
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It reveals two non-obvious behaviors: boundary points are treated as OUTSIDE, and the polygon closes automatically if the last coordinate doesn't repeat the first. It also reassures about local computation with no network or quota. A brief statement about being read-only is absent but implied by the query phrasing.

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

Conciseness5/5

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

Every sentence earns its place: a clear purpose statement, concrete use cases, required inputs, the boundary caveat, and the local-computation guarantee. The information is front-loaded and there is no wasted wording.

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

Completeness5/5

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

For a two-parameter boolean geospatial predicate with an output schema, the description covers all necessary behavioral context: input shape, closure behavior, boundary semantics, and cost characteristics. Nothing an agent needs to invoke and interpret the tool correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates the point and polygon shape plus the 3+ coordinate requirement, but the schema already documents the LatLon fields, required minimum, and automatic closure. The description adds minimal semantic value beyond the structured schema.

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

Purpose5/5

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

The description begins with a precise predicate — 'Whether a coordinate lies inside a polygon' — and names concrete use cases (delivery zones, catchments, clean-air zones, site boundaries). This clearly distinguishes it from sibling geometry tools like geo_distance, geo_area, or geo_bbox.

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

Usage Guidelines4/5

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

The context is clear: use this when the question is point-in-polygon containment, with examples of typical polygon types. It does not explicitly list sibling alternatives or when-not-to-use it, but the predicate itself makes the applicable situation obvious. The 'local computation, no quota' note further helps selection.

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

geo_simplifyAInspect

Reduce the number of coordinates in a polyline while keeping its shape (Douglas-Peucker). tolerance_deg is in DEGREES, not metres: about 0.0001 drops detail finer than roughly 10 m at the equator. Endpoints are always kept. Returns the retained points and how many were removed. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsYesThe polyline's coordinates, 2 or more.
tolerance_degYesDouglas-Peucker tolerance in **degrees**, not metres. Around 0.0001 drops detail finer than roughly 10 m at the equator.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsYesThe retained coordinates, endpoints always preserved.
removedYesHow many coordinates were removed.
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses that tolerance is in degrees, not metres, that endpoints are always kept, the nature of the return value, and that no network call or quota is involved. It does not cover edge cases or error behavior, but the provided details are useful and non-obvious.

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

Conciseness5/5

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

Every sentence in the description earns its place: the core purpose, the unit warning, the endpoint guarantee, the return value, and the local-computation note. It is compact, front-loaded, and free of filler.

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

Completeness5/5

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

For a two-parameter tool with full schema coverage and an output schema, the description provides all essential information: how to interpret tolerance, the guarantee about endpoints, and what the return contains. No critical gap remains for an agent to invoke it correctly.

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

Parameters4/5

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

The schema already documents both parameters fully, so the baseline is 3. The description adds value by clarifying the tolerance unit conversion (degrees vs metres, with a concrete equivalence) and by stating that endpoints are always kept, which affects how the points parameter is interpreted.

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

Purpose5/5

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

The description uses a specific verb and resource ('Reduce the number of coordinates in a polyline while keeping its shape') and names the Douglas-Peucker algorithm. It clearly distinguishes geo_simplify from geometric calculation or measurement siblings like geo_length, geo_area, and geo_centroid.

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

Usage Guidelines4/5

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

The description gives clear context for use: simplifying a polyline by reducing coordinates while preserving shape. It also notes 'Local computation: no network call, no quota,' which is a practical usage consideration, though it does not explicitly mention alternatives or when not to use the tool.

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

get_styleAInspect

Fetch a hosted style's latest theme document (the editable source) and the URL of its latest compiled MapLibre style. Use the theme to inspect current palette and layer overrides before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
style_idYesHosted style id, e.g. "midnight-fleet-a1b2c3".

Output Schema

ParametersJSON Schema
NameRequiredDescription
themeYesThe latest theme document — the editable source the next version is published from.
style_idYesHosted style id.
style_urlYesURL of the latest compiled MapLibre style (point MapLibre GL at it).
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It does convey read-only intent through 'Fetch' and 'inspect before editing,' and it usefully distinguishes the editable theme document from the compiled style. However, it does not explicitly state side-effect-free behavior, permission requirements, or error handling, leaving some transparency gaps.

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

Conciseness5/5

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

Two sentences with no filler: the main fetch action is front-loaded, and the second sentence adds practical guidance. Every word earns its place.

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

Completeness4/5

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

For a single-required-parameter read operation with an output schema present, the description is largely self-sufficient. It explains the two outputs and the intended editing context, though it could name related sibling tools or explicitly confirm the operation is non-mutating.

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

Parameters3/5

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

Schema description coverage is 100%, including an explicit example for style_id. The description adds only a mild hosted-style framing and does not meaningfully enhance understanding beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Fetch') and names precise resources: the latest theme document and the URL of the compiled MapLibre style. It also ties the tool to an inspection-before-editing workflow, which clearly differentiates it from editing-focused siblings like set_palette and set_layer_paint.

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

Usage Guidelines4/5

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

The description gives clear usage context: use the theme to inspect current palette and layer overrides before editing. It does not explicitly name alternatives or state when not to use the tool, but the intended workflow is evident.

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

list_style_layersAInspect

List everything a MapMap style theme can style: the named palette slots with their light/dark default colours, the skeleton layer ids (paint order) that set_layer_paint accepts, and the OpenMapTiles source-layers extra layers may reference. Attribution is enforced on every compiled style and cannot be themed away. Local lookup, no network; always works.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
layer_idsYesThe skeleton layer ids a theme's `layers` may override, in paint order (first = bottom).
attributionYesThe attribution contract: enforced on every compiled style, not themable.
palette_slotsYesThe named palette slots a theme's `palette` may override, with their light/dark defaults, in presentation order.
source_layersYesThe OpenMapTiles source-layers the tiles emit; `extra_layers` must reference one of these.
Behavior4/5

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

With no annotations, the description carries the transparency burden and does well: it explicitly states attribution is enforced and cannot be themed away, and that lookup is local with no network and always works. It could have explicitly said the operation is read-only, but 'List' plus the output schema largely covers that.

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

Conciseness5/5

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

The description is compact and front-loaded with the tool's core purpose, immediately enumerating the three categories of things it lists. The two follow-up sentences about attribution and local lookup earn their place by adding important behavioral context without padding.

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

Completeness5/5

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

For a zero-parameter listing tool with an output schema, the description is fully adequate: it specifies what categories of data are returned, mentions an important constraint (attribution), and reassures about availability. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters and 100% schema description coverage, so the baseline is 4 per the rubric. The description adds no parameter-specific detail, but none is needed because there is nothing to configure.

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

Purpose5/5

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

The description uses a specific verb ('List') and identifies the exact resource: everything a MapMap style theme can style, broken into palette slots, skeleton layer ids, and OpenMapTiles source-layers. This makes it clearly distinct from sibling tools like set_layer_paint, set_palette, and get_style.

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

Usage Guidelines4/5

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

The description provides clear context by stating that skeleton layer ids are what set_layer_paint accepts and source-layers are what extra layers may reference, making the tool's role as a reference/discovery tool obvious. It does not explicitly name alternatives or give when-not-to-use conditions, but the context is sufficient for a listing tool.

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

matrixAInspect

Compute a travel time/distance matrix between origins (rows) and destinations (columns). Costing "auto", "truck" (with optional truck profile as in route), "bicycle", "pedestrian" or "motor_scooter". Returns durations_s[i][j] in seconds and distances_m[i][j] in metres; null cells are unreachable pairs. Up to 10,000 cells per call (origins × destinations). Optional exclude_polygons for before/after scenarios ("close this bridge and recompute the matrix"): an array of polygons, each an array of [lon, lat] pairs forming one ring — longitude FIRST — whose intersecting roads are excluded from every cell's path finding. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck".
costingNoCosting model: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
originsYesOrigin locations (matrix rows).
destinationsYesDestination locations (matrix columns).
exclude_polygonsNoAreas to avoid — scenario analysis ("close this bridge and recompute the matrix"): an array of polygons, each an array of `[lon, lat]` pairs forming one exterior ring (GeoJSON-style, longitude FIRST). Roads intersecting any ring are excluded from every cell's path finding. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
distances_mYesTravel distances in metres, same shape as `durations_s`. Null cells are unreachable pairs.
durations_sYesTravel times in seconds; `durations_s[i][j]` is origin `i` → destination `j`. Null cells are unreachable pairs.
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It responsibly reveals the exact output units, null cells for unreachable pairs, the 10,000-cell cap, and the engine-specific behavior of exclude_polygons (Valhalla supported, GraphHopper ignored). This is strong transparency for a read-only compute tool, though it stops short of discussing timeout/error handling.

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

Conciseness4/5

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

The description is four sentences, front-loaded with the core action and followed by essential operational details. Every sentence contributes useful information (costing modes, return fields, cell limit, polygon behavior) with no filler. It could be tightened slightly for readability but is well within acceptable density.

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

Completeness4/5

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

Given the tool's complexity and the presence of an output schema, the description is nearly complete: it specifies what is returned, limits, engine compatibility, and the purpose of the optional parameter. The only minor omissions are edge-case behavior (e.g., what happens when exceeding the cell limit) and explicit auth/rate-limit info, but these are not critical for invoking the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds some conceptual framing—'origins (rows)' and 'destinations (columns)'—and the engine caveat for exclude_polygons, but this largely mirrors what the schema already says. It does not materially deepen parameter understanding beyond the structured definitions.

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

Purpose5/5

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

The description opens with a precise verb and resource: 'Compute a travel time/distance matrix between origins (rows) and destinations (columns).' It clearly distinguishes this from the sibling 'route' tool by focusing on multi-origin/multi-destination matrix output, and the mention 'as in route' only serves as a cross-reference for the truck profile. No ambiguity about what the tool does.

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

Usage Guidelines3/5

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

The description implies the use case ('before/after scenarios' for exclude_polygons) and states hard limits (10,000 cells) but never explicitly says when to choose this over alternatives like 'route' for single pairs or 'reachable_area' for isochrones. An agent must infer the matrix-vs-route distinction from the tool name and purpose rather than from explicit guidance.

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

nearby_placesAInspect

Find places near a point, nearest first with distance in metres — by category (cafes, fuel, EV charging, parking), by name or brand ("the nearest Lloyds bank", "nearest Sainsbury's"), or both. Use this instead of geocode whenever the question is about what is NEAR a location: geocode ranks a brand's branches everywhere and only biases by proximity, so it will happily return a Lloyds in another city over the one 100 m away. Provide lat, lon and at least one of category or name. category is matched against the map's lowercased OSM tag values (amenity/shop/tourism/…), e.g. "cafe", "fuel", "charging_station", "parking", "pharmacy", "supermarket", "hotel", "restaurant", "fast_food", "atm", "bakery", "hospital", "station"; common colloquial names are normalised ("coffee" -> cafe, "ev_charging" -> charging_station, "petrol" -> fuel, "chemist" -> pharmacy). name matches the place's name or alternative names word by word, case- and accent-insensitively, with the last word also matching as a prefix. Combine the two to disambiguate a brand — "Lloyds" plus "bank" excludes Lloyds Pharmacy. A category or name the map does not carry returns an empty list, never an error. Optional radius_m (default 2500, max 100000) bounds the straight-line search distance and limit (default 5, max 10) the result count. Each result has name, one-line label, lat/lon, address parts, distance_m, categories and a details object of display tags (opening_hours, website, phone, ...) when the map carries them. Every result also carries bearing_deg and a spoken direction. Pass heading_deg (degrees clockwise from true north, 0 = north, 90 = east) and results are described from where the user stands — "ahead and slightly to your right, about 80 metres" — with a signed relative_bearing_deg (negative left, positive right); without a heading the phrasing falls back to cardinals ("to the north-east"), so this works with or without a compass. Add fov_deg to keep only what lies within that cone of the heading — it is the FULL width of the cone, so 90 keeps what lies within 45 degrees either side of dead ahead; anything dropped is counted in out_of_view, so a non-zero count means there ARE matching places nearby, just not in front of the user — say that rather than "nothing nearby". Prefer reading direction aloud over coordinates. Requires the MapMap gateway (GATEWAY_URL + GATEWAY_API_KEY).

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude of the search point in decimal degrees (−90 to 90).
lonYesLongitude of the search point in decimal degrees (−180 to 180).
nameNoThe name or brand of the place to find — "Lloyds", "Lloyds Bank", "Sainsbury's" — for "where is the nearest X" questions. Every word must appear in the place's name or one of its alternative names, case- and accent-insensitively, with the last word also matching as a prefix ("Sains" finds Sainsbury's). Combine with `category` to disambiguate a brand used by more than one kind of place ("Lloyds" plus "bank" excludes Lloyds Pharmacy). Optional when `category` is given; at least one of the two is required.
limitNoMaximum number of results (1–10, default 5).
fov_degNoField of view: the full width in degrees of a cone centred on `heading_deg`, outside which results are dropped — it is the FULL width, so 90 keeps only what lies within 45 degrees either side of dead ahead. Needs `heading_deg` — a cone has to point somewhere. The count of results removed is reported as `out_of_view`.
categoryNoThe kind of place to find. The gateway matches it against the index's lowercased OSM tag values (the value of the POI's `amenity`/`shop`/`tourism`/`railway`/… tag) — e.g. "cafe", "fuel", "charging_station", "parking", "pharmacy", "supermarket", "hotel", "restaurant", "fast_food", "atm", "bakery", "hospital", "station" — and normalises common colloquial names first ("coffee" → cafe; "ev_charging", "ev charging" → charging_station; "petrol" → fuel; "chemist" → pharmacy). A category the index does not carry matches nothing: the result is an empty list, not an error. Optional when `name` is given; at least one of the two is required.
radius_mNoMaximum straight-line distance of any result from the point, in metres (1–100000, default 2500).
heading_degNoWhich way the user is facing, in degrees **clockwise from true north** (0 = north, 90 = east, 180 = south, 270 = west). Supply it and every result is also described from the user's point of view ("just ahead on your right"); omit it and results fall back to cardinal directions ("to the north-east"), so the tool works with or without a compass.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesMatching places, nearest first. Empty when the index has no such place within the radius.
out_of_viewNoHow many otherwise-matching places were dropped for falling outside `fov_deg`. Non-zero means there are matching places near the user that are simply not in front of them — say so rather than reporting nothing nearby. Always 0 when no field of view was set.
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: empty-list-not-error, case/accent-insensitive prefix matching, category normalization examples, fov_deg full-width semantics, heading fallback behavior, and out_of_view meaning. It even notes the gateway requirement. Exceptionally transparent.

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

Conciseness4/5

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

The description is long, but every sentence earns its place given the 8-parameter tool with complex matching/bearing logic. It front-loads the core purpose and then flows into parameter details and edge cases. A bit dense, but structurally organized and appropriately sized for the complexity.

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

Completeness5/5

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

Covers input requirements, output result fields (name, distance, bearing, details), edge cases (empty list, out_of_view), and gateway prerequisites. With an output schema present, it still effectively explains all necessary call parameters and expected behavior. Nothing an agent needs is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond schema by clarifying the 'at least one of category or name' requirement (not in required collection), explaining the disambiguation strategy ('Lloyds' plus 'bank'), and mentioning the 'Prefer reading direction aloud' tip. Slight redundancy with schema, but meaningful extra context.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Find places near a point, nearest first with distance in metres' and immediately scopes by category or name. It distinctly separates itself from geocode by explaining the proximity focus, so an agent can tell it apart from the sibling without ambiguity.

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

Usage Guidelines5/5

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

Explicitly instructs to 'Use this instead of geocode whenever the question is about what is NEAR a location' and explains why geocode is unsuitable (returns far branches over nearby ones). This direct comparison gives clear when-to-use guidance with no left to inference.

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

optimise_routesAInspect

Optimise multi-vehicle, multi-stop delivery plans (VRP). Provide vehicles (id, start/end, capacity, skills, time_window), jobs (id, location, service_s, delivery/pickup, skills, time_windows) and/or shipments (pickup+delivery pairs that ride the same vehicle). Costing "auto", "truck", "bicycle", "pedestrian" or "motor_scooter" (cargo-bike and courier fleets welcome): with a truck profile (dimensions + ADR declaration, as in route), the travel-time matrix respects dimensional and dangerous-goods restrictions, so every optimised route is truck-legal. Returns a summary, unassigned tasks and per-vehicle routes with ordered steps (arrival_s/duration_s in seconds, distance_m in metres). Fair use: at most 200 unique locations per problem, and no wider than the routing engine's 400 km matrix span.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobsNoSingle-stop jobs (at least one job or shipment overall).
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck"; the travel-time matrix then respects dimensional and dangerous-goods restrictions, so the whole plan is truck-legal.
costingNoCosting model for the travel-time matrix: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
vehiclesYesThe fleet (at least one vehicle, each with a start and/or end).
shipmentsNoPickup+delivery pairs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
routesYesOne optimised route per used vehicle.
profileYesThe matrix costing profile the plan was computed with ("auto", "truck", "bicycle", "pedestrian" or "motor_scooter").
summaryYesSolution summary.
unassignedYesTasks the solver could not assign to any vehicle.
Behavior4/5

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

With no annotations, the description carries the full burden and does a solid job: it discloses the returned components (summary, unassigned tasks, per-vehicle routes), units (seconds, metres), and the truck-legality guarantee when a truck profile is used. It does not cover failure modes or edge-case validation, but it is well above minimal.

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

Conciseness4/5

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

The description is dense but well structured: purpose first, then input categories, costing semantics, output shape, and fair-use limits. The parenthetical 'cargo-bike and courier fleets welcome' is mildly promotional but not harmful; overall, each sentence contributes useful information.

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

Completeness4/5

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

The description covers the essential invocation context: input categories, vehicle/job/shipment relationships, truck-profile behavior, output summary, and hard usage limits. An output schema exists for return values, so the description need not enumerate response fields; the only minor gap is lack of explicit minimum-job guidance, but that is already in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter in detail. The description adds useful high-level context about vehicles, jobs, shipments, and costing, but it does not add meaning beyond what the schema already provides.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Optimise multi-vehicle, multi-stop delivery plans (VRP)'. It clearly distinguishes this from single-route or single-vehicle sibling tools by emphasizing multi-vehicle, multi-stop VRP semantics and by explaining what truck-legal routes mean.

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

Usage Guidelines4/5

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

The intended use is clearly conveyed: multi-vehicle, multi-stop delivery optimisation, with concrete input categories (vehicles, jobs, shipments) and costing modes. It does not explicitly say when not to use this tool or point to alternatives like route or order_stops, but the context is strong enough to route an agent effectively.

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

order_stopsAInspect

Put a single run's stops in the best visiting order ("order my errands"). Provide start {lat, lon} and stops (1-100 entries of {location, label?, service_s?}); optionally an end destination or round_trip: true to return to the start. Costing "auto" = car, "truck" = lorry (pass truck as in route for a truck-legal order). Returns the stops in visit order with arrival offsets in seconds, plus total duration and distance.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoOptional fixed final destination. Mutually exclusive with `round_trip`; omitted (and not a round trip), the run ends at whichever stop the solver visits last.
startYesWhere the run starts.
stopsYesThe stops to put in the best visiting order (1–100).
truckNoTruck profile (dimensions + ADR declaration); requires costing "truck". The travel-time matrix then respects dimensional and dangerous-goods restrictions.
costingNoCosting model: "auto" (default) or "truck".auto
round_tripNoReturn to `start` after the last stop (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
orderedYesThe stops in optimal visiting order.
profileYesThe matrix costing profile ("auto" or "truck").
distance_mNoTotal travel distance in metres, when reported.
duration_sYesTotal travel time in seconds.
unassigned_stop_indexesYes0-based indexes of stops the solver could not fit (empty in the normal, unconstrained case).
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It clearly discloses the output contract: stops in visit order, arrival offsets in seconds, plus total duration and distance, and it clarifies truck mode produces a truck-legal order. It does not mention statelessness or failure behavior, but as a pure computation tool the disclosure is adequate.

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

Conciseness5/5

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

Three dense sentences front-load the purpose before parameter details, with no filler. Each sentence adds distinct information while keeping the whole description readable and scannable.

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

Completeness5/5

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

Given that an output schema exists and the input schema fully documents each parameter, the description is complete enough for correct invocation. It covers required inputs, the 1–100 stop limit, optional end/round_trip behavior, costing selection, truck-legal ordering, and the return value shape without needing to repeat schema details.

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

Parameters4/5

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

The input schema already documents all parameters (100% coverage), so the baseline is 3. The description adds human-readable meaning: auto=car, truck=lorry, a compact stop shape of {location, label?, service_s?}, and a pointer to route's truck syntax, all of which help an agent map intent to parameters.

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

Purpose5/5

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

States a specific operation: "Put a single run's stops in the best visiting order," reinforced by the quoted user intent "order my errands". The phrase "single run's stops" separates it from broader fleet tools like optimise_routes and from route geometry tools, so an agent can identify what it does precisely.

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

Usage Guidelines3/5

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

The description gives practical configuration guidance: optional end vs round_trip, costing auto vs truck, and passing truck as in route. However, it never explicitly says when to choose this tool over optimise_routes, route, or matrix; the use case is implied rather than stated with when-not-to-use conditions.

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

plan_dayAInspect

Turn an itinerary into one navigable multi-stop route. Provide a start and stops (each a location {lat, lon} or a free-text name to geocode, plus optional dwell_minutes time at the stop), optional depart_at (RFC 3339) for absolute ETAs, optimise: true to reorder stops for the shortest day (VROOM solver), and return_to_start. Costing "auto", "truck" (with a truck profile the whole day respects dimensional/ADR restrictions), "bicycle", "pedestrian" or "motor_scooter". Returns the stops in visit order with per-leg duration/distance and arrival/departure times, totals, and the full route geometry (polyline6). Geocoded names carry a resolution — when ambiguous is true, check alternatives and re-run with an explicit location rather than trusting the guess.

ParametersJSON Schema
NameRequiredDescriptionDefault
startYesWhere the day starts (name or location; `dwell_minutes` ignored).
stopsYesThe stops to visit (1–20). Visited in the given order unless `optimise` is true.
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck".
costingNoCosting model: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
optimiseNoReorder the stops for the shortest day (VROOM solver; requires the optimisation sidecar). Default false: visit in the given order.
depart_atNoDeparture time as RFC 3339 (e.g. "2026-07-18T09:00:00Z"); when given, every ETA is also returned as an absolute timestamp.
return_to_startNoEnd the day back at the start (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
startYesThe day's starting point.
stopsYesThe stops in visit order, each with leg, ETAs and any geocoding resolution to double-check.
costingYesThe costing the plan was routed with.
summaryYesOne-line human-readable summary of the day.
depart_atNoThe departure time echoed back, when one was given.
finish_atNoAbsolute end of the day (RFC 3339), when `depart_at` was given.
optimisedYesWhether the stop order was optimised (VROOM) or kept as given.
return_legNoThe leg back to the start, when `return_to_start` was set.
total_dwell_sYesTotal time at stops, seconds.
finish_offset_sYesEnd of the day (last arrival + dwell), seconds after departure.
total_distance_mYesTotal travel distance, metres.
geometry_polyline6YesFull multi-stop route geometry (polyline6) — hand it to the map SDK or the `route` tool consumers directly.
total_travel_duration_sYesTotal driving/travel time, seconds.
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: it discloses the return shape (stops in visit order, per-leg duration/distance, ETAs, totals, polyline6 geometry), optimization behavior (VROOM reorder), costing semantics (truck respects dimensional/ADR), and dwell_minutes shifting later ETAs. The geocoding ambiguity disclosure — flagged resolution, check alternatives, re-run with explicit location — is exemplary transparency with actionable remediation steps.

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

Conciseness4/5

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

A single dense paragraph structured as purpose → parameters → costing → returns → caveat, with the primary purpose front-loaded. Every clause earns its place; the length is justified by the tool's 7-parameter complexity, and no filler or repetition of the schema is present.

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

Completeness4/5

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

For a 7-param tool with an output schema, the description is near-complete: request shape, costing model, return hints, and a geocoding caveat with remediation are all covered. Minor operational gaps remain — the optimisation-sidecar prerequisite and the 1–20 stop limit live only in the schema and are not surfaced in the description.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds binding contextual meaning beyond the schema: the truck-costing/ADR interplay, dwell_minutes shifting later ETAs, and RFC 3339 format for depart_at. It explains how parameters interact rather than duplicating per-parameter schema docs, which is genuine added value.

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

Purpose5/5

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

States a specific purpose — 'Turn an itinerary into one navigable multi-stop route' — with clear scope over start, stops, costing, and optional optimization. It differentiates itself from siblings like route (single trip), order_stops, and optimise_routes (sub-problems) by combining optimization and routing into one call.

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

Usage Guidelines3/5

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

Usage is implied by the description — multi-stop day planning with optional optimization and truck restrictions — but it never names siblings or states when to prefer route, matrix, or order_stops instead. An agent must infer the boundary from sibling tool names rather than from explicit routing guidance.

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

reachable_areaAInspect

Compute the area reachable from an origin within one or more travel-time budgets — walkability/cyclability rings. Costing "pedestrian" answers "how far can I walk in 15 minutes?", "bicycle" the cycling equivalent; "auto", "truck" and "motor_scooter" work too (e.g. delivery coverage). contours_minutes lists the ring boundaries in minutes (1-10 values, each up to 120); set polygons true for filled polygons ready to render as a map fill layer instead of contour lines. Returns a GeoJSON FeatureCollection, one feature per contour. Optional exclude_polygons for before/after scenarios ("close this bridge and recompute reachability"): an array of polygons, each an array of [lon, lat] pairs forming one ring — longitude FIRST — whose intersecting roads are excluded from the reachability search. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesOrigin the reachable area is computed from.
costingNoTravel mode: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
polygonsNoReturn filled polygons instead of contour linestrings (default false). Polygons draw directly as a MapLibre fill layer.
contours_minutesYesContour boundaries in minutes of travel time, e.g. [5, 10, 15] for 5/10/15-minute rings. 1–10 values, each between 0 and 120 minutes.
exclude_polygonsNoAreas to avoid — scenario analysis ("close this bridge and recompute reachability"): an array of polygons, each an array of `[lon, lat]` pairs forming one exterior ring (GeoJSON-style, longitude FIRST). Roads intersecting any ring are excluded from the reachability search. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
geojsonYesGeoJSON FeatureCollection of the reachability contours, one feature per requested minute value (each feature's `contour` property is its minutes), as returned by the routing engine.
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses the GeoJSON FeatureCollection return shape, filled polygons versus contour lines, the 'longitude FIRST' ordering requirement for exclude_polygons, and the Valhalla-only / GraphHopper-ignored engine behavior. It does not explicitly state read-only/no side effects, but the compute-oriented phrasing makes that risk low.

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

Conciseness5/5

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

The text is dense and every clause earns its place: purpose, costings, contours_minutes constraints, polygon rendering, output format, exclude scenarios, and engine support. The core purpose is front-loaded and there is no filler.

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

Completeness5/5

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

With an output schema present and all five parameters documented in the input schema, the description covers the remaining practical knowledge: output feature count, rendering-ready polygons, scenario use, and engine limitations. Nothing needed to call the tool correctly appears missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value above the schema by turning costing modes into practical questions and by highlighting when polygons and exclude_polygons are useful. The engine caveat for exclude_polygons is also conveyed in prose beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Compute the area reachable from an origin within one or more travel-time budgets', then clarifies the concept as walkability/cyclability rings. This clearly distinguishes the tool from point-based route/matrix siblings by emphasizing areal coverage.

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

Usage Guidelines4/5

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

The description supplies concrete use cases: 'how far can I walk in 15 minutes?', cycling equivalents, delivery coverage, and before/after scenarios using exclude_polygons. It gives clear context but does not explicitly name alternatives or say when not to use this tool versus route or matrix.

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

report_map_issueAInspect

Report that the live world disagrees with the map — a closed road, a wrong or missing restriction, a bad speed limit, a missing road, a wrong one-way, or changed access. Use it when you observe the mismatch mid-task. Provide location {lat, lon}, a category (road_closed, wrong_restriction, wrong_speed_limit, missing_road, wrong_oneway, access_changed, other) and optionally a description, the OSM way_id and an evidence_url. This is a first-party observation: it is QUEUED for human/agent review and NEVER changes routing immediately or edits any map. Returns the queued report_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
way_idNoThe OSM way id the observation concerns, when the caller knows it. Optional — the report stands on its own as a first-party observation and is never tied to OSM data beyond this hint.
categoryYesWhat kind of mismatch this is.
locationYesWhere the mismatch was observed (WGS84 decimal degrees).
descriptionNoFree-text detail of what was observed on the ground, e.g. "barrier across the lane, diversion signed via the B4009". Bounded length.
evidence_urlNoA URL backing the observation (photo, notice, news item), when one exists. Bounded length.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesAlways "queued": the report awaits human/agent review and changes nothing about routing immediately.
categoryYesThe category, echoed back as its snake_case wire tag.
report_idYesThe generated id of the queued report (cite it in follow-ups).
Behavior5/5

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

With no annotations, the description carries the full behavioral burden. It clearly states the report is QUEUED for human/agent review, NEVER changes routing immediately, and NEVER edits any map, plus it names the return value (report_id). This prevents the agent from assuming immediate side effects.

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

Conciseness5/5

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

The description is compact and front-loaded with purpose, then moves to usage trigger, parameter requirements, and side-effect caveat. Every sentence contributes needed information; there is no filler or repetition of title.

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

Completeness5/5

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

For a 5-parameter tool with no annotations, the description covers purpose, when to use it, parameter requirements, behavioral consequences, and return value. The output schema exists and the description explicitly names the queued report_id, so nothing needed to invoke the tool correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% with per-parameter descriptions and category enum semantics, so the baseline is 3. The description usefully compresses required vs optional parameters and lists category values, but adds little meaning beyond what the schema already provides.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Report that the live world disagrees with the map' and enumerates seven concrete mismatch types. None of the 33 sibling tools covers map-issue reporting, so this is unambiguously distinct.

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

Usage Guidelines4/5

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

It gives an explicit trigger: 'Use it when you observe the mismatch mid-task.' It doesn't name exclusions or alternatives, but there are no obvious sibling alternatives, and the queued-observation framing helps the agent understand the tool's role.

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

reverse_geocodeAInspect

Turn coordinates into the nearest places: addresses, POIs and localities with distance in metres. The inverse of geocode. Provide lat and lon; returns up to limit (default 5, max 10) results, nearest first, each with name, one-line label, lat/lon, type, address parts and distance_m, plus categories and a details object of display tags (opening_hours, website, phone, wikipedia, ...) on POI hits when the index carries them. Every result also carries bearing_deg and a spoken direction. Pass heading_deg (degrees clockwise from true north, 0 = north, 90 = east) and results are described from where the user stands — "ahead and slightly to your right, about 80 metres" — with a signed relative_bearing_deg (negative left, positive right); without a heading the phrasing falls back to cardinals ("north-east of you"), so this works with or without a compass. Add fov_deg to keep only what lies within that cone of the heading — it is the FULL width, so 90 keeps what lies within 45 degrees either side of dead ahead; anything dropped is counted in out_of_view. Prefer reading direction aloud over coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (−90 to 90).
lonYesLongitude in decimal degrees (−180 to 180).
limitNoMaximum number of results (1–10, default 5). The hosted first-party index answers at most 5 nearest hits per lookup.
fov_degNoField of view: the full width in degrees of a cone centred on `heading_deg`, outside which results are dropped — it is the FULL width, so 90 keeps only what lies within 45 degrees either side of dead ahead. Needs `heading_deg` — a cone has to point somewhere. The count of results removed is reported as `out_of_view`.
heading_degNoWhich way the user is facing, in degrees **clockwise from true north** (0 = north, 90 = east, 180 = south, 270 = west). Supply it and every result is also described from the user's point of view ("just ahead on your right"); omit it and results fall back to cardinal directions ("to the north-east"), so the tool works with or without a compass.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesNearby places, nearest first.
out_of_viewNoHow many otherwise-matching places were dropped for falling outside `fov_deg`. Non-zero means there are places near the user that are simply not in front of them — say so rather than reporting nothing nearby. Always 0 when no field of view was set.
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and exceeds it. It details the output structure (name, label, lat/lon, type, address parts, distance_m, categories, details object, bearing_deg, direction), dynamic behavior (heading-based relative_bearing_deg, FOV-based out_of_view count), and even advises to 'Prefer reading direction aloud over coordinates.' This is exceptionally transparent about how the tool behaves across different inputs.

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

Conciseness4/5

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

The description is well-structured and front-loaded with purpose, then logically flows into output details, heading behavior, FOV, and a recommendation. However, it repeats the 'FULL width' explanation of fov_deg that already exists verbatim the schema description, and it restates the default/max for limit that is also in the schema. While not wasteful, these redundancies could be trimmed without losing value. The density is justified by complexity but slightly over-lengthy.

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

Completeness5/5

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

This is a complex tool with 5 parameters and rich output behavior, and the description covers everything an agent needs: input requirements, output field descriptions, edge cases (FOV without heading), fallback behavior (cardinals vs relative), and even a usability recommendation. The output schema exists but the description still explains return fields in detail, which is helpful. No gaps are evident for correct invocation and interpretation.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds substantial semantic value beyond the schema. It explains the interplay between fov_deg and heading_deg (a cone must point somewhere), the full-width vs. half-width interpretation of fov_deg, the default/max for limit, and the meaning of signed relative_bearing_deg. It also clarifies that out_of_view reports dropped results, which is not in the schema property descriptions. This enriches parameter understanding significantly.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Turn coordinates into the nearest places: addresses, POIs and localities with distance in metres.' It explicitly frames itself as 'The inverse of geocode,' immediately distinguishing it from the sibling tool. This gives an agent a precise understanding of what it does and how it relates to geocode.

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

Usage Guidelines4/5

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

The description explicitly names geocode as the inverse, which guides when to use this tool. It also explains two usage modes (with or without heading_deg) and how that changes output phrasing. However, it does not mention any other sibling tools like nearby_places, nor does it state when NOT to use this tool. The inverse reference and mode explanations provide strong contextual guidance, but exclusions are absent.

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

routeAInspect

Compute a turn-by-turn route between origin and destination (optionally via waypoints). Costing "auto" = car, "truck" = lorry, "bicycle", "pedestrian" = walking, "motor_scooter" = moped. Pass truck {height_m, width_m, length_m, gross_weight_t, hazmat, tunnel_code} to apply dimensional limits and the ADR dangerous-goods tunnel matrix to the search; pedestrian {use_lit 0-1, type "wheelchair"|"blind", max_hiking_difficulty 1-6} for lit-street walking, accessibility and trail limits; bicycle {bicycle_type, use_roads 0-1, use_living_streets 0-1, avoid_bad_surfaces 0-1, use_hills 0-1} for quiet-ride and surface preferences. Returns distance (m), duration (s), maneuvers, polyline6 geometry and the ADR costing that was applied. Any of truck, auto, bicycle, pedestrian or motor_scooter routes may set rationale: true (opt-in, costs up to 1 + N extra routing calls) to learn which declared truck constraints or avoidance-side preferences (hills, surfaces, tolls, unlit streets, …) actually changed the route (rationale.avoided[], basis route_divergence — it proves a field was binding, it does not identify the physical restriction or feature, and no live traffic or incident data is ever attributed). ADR honesty: applied_adr.forbidden_tunnel_categories describes the LOAD, not the returned route, and applied_adr.tunnel_enforcement states the boundary: roads are excluded only where the routing graph records an ADR tunnel category, so an unchanged route is not a clearance. Set landmarks: true for turn instructions anchored to recognisable places — each manoeuvre that passes one gains a landmark_instruction like "Turn right just after the Shell garage" beside the engine's own street-name instruction, which is never replaced. Prefer reading it aloud: it is how a passenger gives directions. Nothing is named unless it is recognisable from the road, within 40 m of the junction and not tagged as closed, so many routes return none and a landmarks.annotated of 0 with no note means this route genuinely passes nothing recognisable. Needs the MapMap gateway (GATEWAY_URL + GATEWAY_API_KEY), whose place index does the lookup. Optional exclude_polygons for what-if scenarios ("close this bridge and re-route"): an array of polygons, each an array of [lon, lat] pairs forming one ring — longitude FIRST — whose intersecting roads are excluded from the search. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck"; when present, ADR dangerous-goods costing options are merged into the request.
originYesRoute origin.
bicycleNoBicycle options (bicycle type, road/surface/hill preferences). Requires costing "bicycle".
costingNoCosting model: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
landmarksNoName landmarks in the turn instructions (default false): each manoeuvre that passes a recognisable place — a petrol station, a supermarket, a household-name chain — gains a `landmark_instruction` like "Turn right just after the Shell garage" beside the engine's own street-name instruction, which is never replaced. Nothing is named unless it is recognisable from the road, within 40 m of the junction and not tagged as closed, so many routes come back with none: a wrong landmark is worse than no landmark. Needs the MapMap gateway, whose place index does the lookup.
rationaleNoExplain the route (default false): re-routes with each declared truck constraint (truck costing) or avoidance-side routing preference (auto, bicycle, pedestrian, motor_scooter) relaxed and reports the ones that actually changed the route as `rationale.avoided[]`. Opt-in — it costs up to 1 + N extra routing calls, one per declared field plus one combined probe, and it is billed for the ones it actually makes: at most 8 in total, typically fewer, and 1 when there is nothing to probe. Against the hosted gateway each probe is its own metered route call, which is exactly what `POST /route` with `rationale: true` charges for its own fan-out, so the two surfaces price the same explanation the same way.
waypointsNoOptional intermediate stops, visited in order between origin and destination.
pedestrianNoPedestrian options (lit-street preference, wheelchair/blind type, hiking difficulty). Requires costing "pedestrian".
destinationYesRoute destination.
exclude_polygonsNoAreas to avoid — scenario analysis ("close this bridge and re-route"): an array of polygons, each an array of `[lon, lat]` pairs forming one exterior ring (GeoJSON-style, longitude FIRST). Roads intersecting any ring are excluded from the search. Applies to the Valhalla engine; unsupported on the GraphHopper engine, where it is ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryYesOne-line human-readable summary of the route.
landmarksNoThe landmark-annotation summary (only when `landmarks: true` was requested): how many manoeuvres gained a `landmark_instruction`, and a `note` when the per-route cap was hit or the deployment has no place index. A zero with no note means this route genuinely passes nothing recognisable.
maneuversYesOrdered turn-by-turn maneuvers across all legs.
rationaleNoWhy the route goes this way (only when `rationale: true` was requested; computed for truck, auto, bicycle, pedestrian and motor_scooter costings).
distance_mYesTotal route distance in metres.
duration_sYesTotal estimated travel time in seconds.
applied_adrNoThe ADR costing merged into the request, or null when no truck profile was given.
geometry_polyline6YesFull route geometry as a Google encoded polyline with six digits of decimal precision (polyline6).
Behavior5/5

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

With no annotations provided, the description carries the full burden and discharges it exceptionally: it discloses return fields, explains rationale probing costs, warns about ADR interpretation ('describes the LOAD, not the returned route'), states landmark limitations ('many routes return none'), and notes engine-specific ignore behavior for exclude_polygons on GraphHopper.

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

Conciseness4/5

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

The description is long but organized by topic and mostly earns its length given the breadth of behaviors (rationale, landmarks, ADR, engine differences). Some redundancy exists with the schema, and phrases like 'Prefer reading it aloud' are evocative but not strictly necessary, keeping it just shy of a 5.

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

Completeness5/5

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

For a complex 10-parameter tool with no annotations, the description covers everything an agent needs: parameter semantics, behavioral caveats, return values, ADR honesty, rationale pricing/costs, landmark fallback behavior, gateway dependency, and engine support differences. The presence of an output schema means return details need not all be restated, yet the description still adds the crucial interpretive context.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning beyond the schema: it maps costing strings to real-world vehicles ('truck = lorry'), explains what truck fields do (dimensional limits and ADR tunnel matrix), clarifies pedestrian and bicycle semantics, and gives the longitude-first warning for exclude_polygons.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Compute a turn-by-turn route between origin and destination (optionally via waypoints).' It goes on to explain each costing mode in human terms, making the tool's purpose unmistakable even among route-related siblings like matrix, optimise_routes, and reachable_area.

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

Usage Guidelines4/5

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

The description provides clear contextual guidance for when to use each option: truck constraints for dimensional/ADR limits, pedestrian for accessibility and lit streets, bicycle for quiet-ride preferences, and exclude_polygons for what-if rerouting. It does not explicitly name alternatives like matrix or reachable_area or state when not to use this tool, but the use-case context is otherwise strong.

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

search_along_routeAInspect

Find places (POIs) along a route with the REAL extra travel time of stopping at each — never a straight-line guess. Provide origin + destination (a route is computed) or an existing route's geometry_polyline6, plus a free-text query ("coffee", "EV charger", "truck stop") and max_detour_minutes (default 10). For a category intent ("fuel", "EV charger", "coffee") pass category instead of relying on words alone: it takes the same vocabulary as nearby_places (lowercased OSM tag values such as "fuel", "cafe", "charging_station", "parking", "pharmacy"), and common colloquial phrases are normalised server-side ("petrol station" and "gas station" to fuel, "coffee" to cafe, "EV charger" to charging_station). query alone also promotes a pure category phrase to the same browse, so "fuel" finds fuel stations rather than places whose NAME starts "Ful"; anything else stays free-text name matching. When a browse ran, the response echoes the tokens used in matched_categories. Candidates near the route corridor are priced through the routing engine with your costing: detour = (origin→place) + (place→destination) − (origin→destination). Costing "auto", "truck" (with a truck profile the detours respect dimensional/ADR restrictions), "bicycle", "pedestrian" or "motor_scooter". Returns results sorted by detour with detour_minutes, detour_km, along_route_position (0-1) and off_route_m; at most 25 candidates are priced per call (candidate_cap).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFree-text POI query, e.g. "coffee", "EV charger", "truck stop".
truckNoTruck profile (dimensions + ADR declaration). Requires costing "truck"; the detours then respect dimensional/ADR restrictions.
originNoRoute origin (with `destination`, when no geometry is given).
costingNoCosting model for the route and detour matrix: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto
categoryNoExplicit place category ("fuel", "cafe", "charging_station" — same vocabulary as nearby_places). Colloquial phrases are normalised server-side; prefer this over query for category intents.
destinationNoRoute destination.
max_resultsNoMaximum results (default 5, at most 25).
geometry_polyline6NoAn existing route geometry as an encoded polyline6 (the `route` tool's `geometry_polyline6`). Provide either this or `origin` + `destination`, not both.
max_detour_minutesNoLargest acceptable detour in minutes (default 10, at most 120).

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesThe query as interpreted.
costingYesThe costing the detours were priced with.
resultsYesPlaces within the detour budget, cheapest detour first.
candidate_capYesThe matrix fan-out cap in force.
route_length_mYesLength of the route geometry in metres.
fuel_attributionNoAttribution string for fuel-price data sources, present only when at least one returned result carries `fuel_prices` (gateway-preferred mode with `SN_FUEL_PRICES` configured; see [`AlongRouteHit`]).
route_distance_mNoDirect origin→destination distance in metres.
route_duration_sNoDirect origin→destination travel time in seconds (same estimator as the detour legs), when routable.
candidates_costedYesCandidates actually priced through the engine (fan-out is capped at `candidate_cap` nearest-to-route).
matched_categoriesNoThe normalised category tokens the candidates were browsed by, present only when a category browse actually ran (an explicit `category`, or a query the server promoted to one). Absent means free-text name matching answered the call, so a caller can tell how its words were understood rather than inferring it from the results.
max_detour_minutesYesThe detour budget applied, minutes.
candidates_consideredYesCandidates found near the corridor before pricing.
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure — and it does so extensively. It reveals the detour calculation formula, category normalization behavior, costing-specific truck restrictions, sorting order, response fields, candidate cap, and that a browse echoes `matched_categories`. This is far beyond what the schema alone conveys.

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

Conciseness4/5

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

The description is long but dense and front-loaded with the core value proposition. Nearly every sentence adds operational detail rather than padding. It is slightly verbose, but for a complex 9-parameter tool with no annotations, the length is justified.

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

Completeness5/5

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

Given the tool's 9 parameters, no annotations, and an output schema, the description is exceptionally complete. It covers route input alternatives, costing modes, truck profile implications, detour semantics, response fields, result caps, and normalization rules — an agent has everything needed to select and invoke the tool correctly.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds substantial meaning: it explains detour math, defaults, candidate pricing cap, category vocabulary normalization, and the exclusive relationship between `geometry_polyline6` and `origin`+`destination`. It also clarifies the practical semantic difference between `query` and `category`, which the schema does not fully articulate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Find places (POIs) along a route' with the unique value of 'REAL extra travel time of stopping at each — never a straight-line guess.' It clearly differentiates itself from nearby POI tools by emphasizing route-based detour pricing, and the sibling `cheapest_fuel_along_route` is implicitly distinguished since this tool searches arbitrary categories rather than only fuel.

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

Usage Guidelines5/5

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

The description gives explicit usage direction: provide `origin` + `destination` OR `geometry_polyline6`, pass `category` instead of `query` for category intent, and notes the default `max_detour_minutes`. It also explains when `query` alone is promoted to a category browse versus free-text name matching, giving the agent concrete decision rules for invocation.

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

set_layer_paintAInspect

Set one MapLibre paint property on one skeleton layer of a hosted style (e.g. layer_id "road-major", property "line-width", value 4 or an expression array) and publish the result as a new immutable style version. Layer ids come from list_style_layers. Returns the new version and style URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe paint value (any MapLibre-valid JSON: number, colour string or expression array).
layer_idYesSkeleton layer id, e.g. "road-major". Call `list_style_layers` for the accepted ids.
propertyYesMapLibre paint property name, e.g. "line-width" or "fill-color".
style_idYesHosted style id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionYesThe newly published version.
style_idYesHosted style id.
style_urlYesImmutable URL of the compiled style at this version.
Behavior4/5

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

With no annotations, the description must carry the burden of behavioral transparency. It discloses that the operation is non-destructive in effect by publishing 'a new immutable style version', and it states the returned artifacts ('new version and style URL'). It does not mention permissions or failure modes, but the core side-effect is clearly communicated.

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

Conciseness5/5

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

Two sentences deliver the verb, target, scope, example, prerequisite id source, and return value with no filler. The most important information is front-loaded, and every phrase earns its place.

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

Completeness4/5

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

The description is functionally complete: it states the operation, target, examples, where layer ids come from, and what is returned; an output schema handles return shape. It could explicitly mention set_palette as the multi-property alternative for full sibling differentiation, but the gap is minor.

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

Parameters3/5

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

The schema already describes all four parameters in detail, including value types and examples. The description adds a concrete example ('road-major', 'line-width', '4') and reminds the agent that expressions are valid, but this largely mirrors the schema's existing documentation. With 100% schema coverage, the description's added semantic value is modest.

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

Purpose5/5

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

The description names a precise operation: 'Set one MapLibre paint property on one skeleton layer of a hosted style', immediately clarifying scope and context. It also explains the outcome ('publish the result as a new immutable style version') and explicitly contrasts this with related styling tools by using 'one property' and 'one skeleton layer'.

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

Usage Guidelines4/5

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

The description clearly establishes when to use this tool: when you need to change a single paint property on a layer, and it tells the agent where to get valid layer ids ('Layer ids come from list_style_layers'). It does not explicitly contrast with set_palette or state when not to use it, but the single-layer/single-property framing is clear context.

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

set_paletteAInspect

Recolour one or more palette slots of a hosted style (e.g. {"water": "#0b2038", "roadMajor": "#8a6d3b"}) and publish the result as a new immutable style version. Slot names come from list_style_layers; colours are CSS (#rgb/#rrggbb/#rrggbbaa/rgb()/hsl()). Returns the new version and style URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
coloursYesPalette overrides: slot name → CSS colour (e.g. {"water": "#0b2038"}). Call `list_style_layers` for the slot names.
style_idYesHosted style id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionYesThe newly published version.
style_idYesHosted style id.
style_urlYesImmutable URL of the compiled style at this version.
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that this operation publishes a new immutable style version, which implies the existing style version is not mutated, and it states the return value. It could additionally mention side effects like publication visibility, but the core behavior is clear.

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

Conciseness5/5

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

The description is a single dense sentence that front-loads the action, includes a concrete example, covers input sources and colour syntax, and states the return value. There is no fluff or repetition of schema content.

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

Completeness4/5

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

The description covers what the tool does, how to find slot names, allowed colour formats, and the return value. Since an output schema exists, detailed return documentation is unnecessary. A brief note drawing the boundary against set_layer_paint would make it fully complete, but nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by enumerating accepted CSS colour formats (#rgb, #rrggbb, #rrggbbaa, rgb(), hsl()) and providing a concrete example of the colours object. This helps the agent construct valid parameter values.

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

Purpose5/5

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

The description states a specific action ('Recolour one or more palette slots'), a specific resource ('hosted style'), and a distinctive outcome ('publish the result as a new immutable style version'). It clearly separates this from siblings like set_layer_paint by focusing on palette slots rather than layer paint properties.

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

Usage Guidelines4/5

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

The description gives clear operational context: it tells the agent to obtain slot names from list_style_layers and explains how colours should be formatted. It does not explicitly compare against siblings such as set_layer_paint or create_style, so exclusion guidance is implied rather than stated.

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

submit_integration_retroAInspect

Send MapMap a structured integration retro (problems, gotchas, wins, docs gaps). Call at most once, after your MapMap integration works or you stop trying, and only if the developer has approved sending feedback to MapMap. Sends ONLY the structured fields in this schema to MapMap — never your conversation or code. Provide what_built (required), problems [{area: sdk|api|mcp|docs|billing|self-host|other, description, workaround_found}], gotchas, wins, docs_gaps, and optionally agent_name and sdk_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
winsNoWhat went well (at most 20 entries × 500 bytes).
gotchasNoSurprises/traps worth documenting (at most 20 entries × 500 bytes).
problemsNoProblems hit during the integration (at most 20).
docs_gapsNoDocumentation gaps hit (at most 20 entries × 500 bytes).
agent_nameNoThe submitting agent's name, e.g. "Claude Code" (at most 100 bytes).
what_builtYesWhat was built with MapMap, in one or two sentences (required, at most 500 bytes).
sdk_versionNoMapMap SDK version integrated against, when known (at most 50 bytes).

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes`received` when the gateway stored it; `queued` when it was appended to the local review queue.
messageYesA short, honest sentence for the agent saying where the retro landed — sent to MapMap, or held in this server's local queue.
deliveryYesHow it was delivered: `gateway` or `local-queue`.
retro_idYesId of the stored retro (gateway id, or the local queue id).
Behavior5/5

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

With no annotations, the description carries full behavioral disclosure. It clearly states the tool only sends structured schema fields, never conversation or code, and that it should be called at most once. This covers the key side effects and privacy boundary a caller needs to know.

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

Conciseness5/5

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

Three dense sentences: purpose, invocation constraints, and field summary. Every sentence earns its place, and the most critical information is front-loaded.

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

Completeness5/5

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

The description is complete for this tool: it specifies when to call, what conditions must be met, what is sent, what is not sent, and which fields are required or optional. The output schema exists, so not explaining return values is acceptable. Nothing needed for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter in detail. The description adds a useful summary of required vs. optional fields, but does not materially expand on the schema's own description of each parameter. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Send MapMap a structured integration retro'. It clearly distinguishes this tool from the geo/mapping siblings by naming the unique feedback purpose.

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

Usage Guidelines5/5

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

Description provides explicit when-to-use guidance: 'Call at most once, after your MapMap integration works or you stop trying, and only if the developer has approved sending feedback to MapMap.' This is precise and leaves no ambiguity about invocation conditions.

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

validate_geodataAInspect

Check whether a dataset's DECLARED coordinate reference system actually describes its own coordinates, before you draw it on a map. Catches the failures that are otherwise silent: swapped lat/lon axes, degrees labelled as metres, and Web Mercator or another projection mislabelled with a UTM or national-grid code. Pass the declared CRS (e.g. "EPSG:4326") and a sample of the raw coordinates as {x, y} in the dataset's OWN units — deliberately not named lon/lat, because whether they are degrees is the question. Returns a verdict (consistent / suspect / impossible), what is wrong in plain language, and where the numbers actually point when read another way. This is a sanity check, not a reprojection: it never transforms coordinates. Local computation: no network call, no quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
coordinatesYesA sample of the dataset's coordinates. A few dozen is plenty; the check is about ranges and spans, not volume.
declared_crsYesThe CRS the dataset claims, e.g. `"EPSG:4326"`, `"EPSG:32610"`, `"EPSG:3857"`, `"EPSG:27700"`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
extentYesObserved extent of the sample, in the dataset's own units.
verdictYes
problemsYesPlain-language findings, most important first. Empty when consistent.
suggestionsYesWhat the numbers look like, when they do not match the declaration.
interpreted_asYesThe CRS family the declaration was understood as.
Behavior5/5

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

With no annotations, the description fully carries the behavioral burden and does so thoroughly. It discloses the return shape (verdict, plain-language problem, alternative interpretation), states that no coordinate transformation occurs, and guarantees local computation with no network call or quota. This gives an agent a complete picture of side effects and non-effects.

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

Conciseness5/5

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

Every sentence earns its place: purpose, failure modes, input prescription, output summary, and capability boundary. The description is dense but not bloated, and the most decision-relevant information is front-loaded.

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

Completeness5/5

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

For a 2-parameter validation tool with a full output schema present, the description covers what matters: what the tool checks, why it exists, what inputs to provide, what outputs to expect, and what it will not do. An agent has everything needed to select and invoke it correctly without additional context.

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

Parameters4/5

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

The schema already covers 100% of parameters, so the baseline is 3; the description adds real value beyond that by explaining why parameters are named x/y rather than lon/lat, giving concrete EPSG examples, and advising that 'a few dozen is plenty'. This helps the agent construct sensible inputs without restating schema content.

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

Purpose5/5

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

The first sentence gives a precise verb-check, a specific resource (a dataset's declared CRS against its own coordinates), and a concrete use moment ('before you draw it on a map'). It also names example failure modes (swapped axes, degrees labelled as metres), making the tool's job unmistakable and distinct from the many geo sibling tools.

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

Usage Guidelines4/5

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

The description clearly frames when to use it ('before you draw it on a map') and explicitly excludes a major misuse case ('a sanity check, not a reprojection: it never transforms coordinates'). It does not name an alternative tool for reprojection or other coordinate operations, so it stops just short of explicit alternative routing.

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

verify_placesAInspect

Check whether places (and itineraries) an AI mentioned are real, findable and physically possible. Pass structured claims (reliable, and the only path that supports itinerary feasibility) or free text (best-effort quoted-phrase extraction). Each claim resolves to exactly one of three verdicts, never a boolean: "verified" (matched a real place, with its stable id and the source/date of the evidence), "contradicted" (a specific, dated, sourced fact rules it out — currently only an itinerary leg the routing engine proves cannot be driven in the stated time, with the computed travel time as evidence), or "unverified" (no evidence either way). This tool NEVER asserts that a named real business does not exist or has closed — that would be a defamation risk with no upside; a missing match is always "unverified". Claims sharing increasing sequence values and both carrying claimed_time (ISO 8601) form itinerary legs checked for feasibility via matrix, catching e.g. "breakfast in Bath, 10am meeting in Edinburgh". Max 20 claims per request. The response's summary field is a concise plain-text digest — also returned as this tool result's text content — so clients that drop structured/non-text content blocks still see the verdicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoFree text to extract place claims from (best-effort heuristic: quoted phrases and Title Case runs after "at/in/near/to/from/ visiting" — not NLP or an LLM call, and it does not attempt itinerary feasibility since there are no explicit times to anchor legs to). Mutually exclusive with `claims`. Max 8,000 characters.
claimsNoStructured claims — the reliable path, and the only path that supports itinerary feasibility. Mutually exclusive with `text`. Max 20 per request.
costingNoCosting for feasibility legs: "auto" (default), "truck", "bicycle", "pedestrian" or "motor_scooter".auto

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
summaryYesAlways present: a concise plain-text summary alongside the structured `results` — several MCP clients (notably ChatGPT connectors) drop non-text content blocks, so this must stand on its own. This same string is also returned as the tool call's text content block, not only inside the structured JSON.
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and exceeds it: it explains the non-boolean verdicts, the defamation-avoidance rule, how sequence/claimed_time trigger routing-based contradiction checks, the 20-claim limit, and that `summary` is surfaced as text content. This is exemplary disclosure for a tool with this complexity.

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

Conciseness5/5

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

Though long, every sentence earns its place: purpose, mode selection, verdict semantics, a crucial behavioral caveat, itinerary feasibility, request limits, and output-format note. The structure front-loads the primary action and then layers necessary detail without fluff.

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

Completeness5/5

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

For a tool with three parameters, no annotations, and real behavioral nuance, the description is complete: it covers input-mode tradeoffs, verdict semantics, constraints, edge-case behavior, and response-format quirks. The presence of an output schema means the description does not need to enumerate return fields, and nothing an agent needs to call the tool correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds real semantic value beyond the schema by labeling `claims` as the reliable path, `text` as best-effort heuristic extraction, and explaining why `sequence` and `claimed_time` together enable feasibility checks. It does not merely repeat schema text.

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

Purpose5/5

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

The opening sentence states a specific verb and resource: checking whether places and itineraries an AI mentioned are real, findable, and physically possible. The three-verdict model (verified/contradicted/unverified) further sharpens what the tool does and clearly distinguishes it from geocoding or place-search siblings.

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

Usage Guidelines4/5

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

The description explicitly tells agents when to use structured `claims` versus free `text`, and notes that only `claims` supports itinerary feasibility. It does not explicitly name sibling alternatives like `geocode` or `nearby_places` as things to use instead, but the usage context is clear enough for a unique-purpose tool.

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

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Geospatial API tools for AI agents — geocoding, reverse geocoding, routing, isochrone, distance matrix, static maps, H3 hexagons, elevation, GPS map-matching, point-in-polygon, address normalisation, timezone lookup, and batch geocoding. Built on OpenStreetMap infrastructure. Cost-effective alternative to Google Maps API.
    18
    37
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.
    8
    37
    7
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server providing 30 tools for geocoding, routing, and OpenStreetMap data analysis. It enables AI assistants to search for locations, calculate travel routes, and perform quality assurance checks on map data.
    30
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources