Skip to main content
Glama

geospatial-mcp

An MCP server for geospatial work: coordinates, geocoding, routing, terrain, weather and radio links. 22 tools, no API key required for any of them.

Built for logistics, telecom, agriculture, insurance, real estate, utilities, emergency response, surveying and mapping — anywhere a question starts with where.

"How long to drive from the depot to the customer?"          route_directions
"Everywhere a van can reach in 20 minutes"                   route_isochrone
"Which depot is closest by road to each of today's jobs?"    route_matrix
"How steep is this section of the trail?"                    terrain_profile
"How far will a 1800 MHz cell reach over suburban ground?"   rf_link_budget
"What's the area of this field in hectares?"                 geom_measure
"Convert this grid reference the survey crew gave me"        coord_convert

Install

Nothing to clone or build. Every client below runs the server with uvx.

claude mcp add geospatial -- uvx geospatial-mcp
{
  "mcpServers": {
    "geospatial": {
      "command": "uvx",
      "args": ["geospatial-mcp"]
    }
  }
}
[mcp_servers.geospatial]
command = "uvx"
args = ["geospatial-mcp"]
{
  "mcpServers": {
    "geospatial": {
      "command": "uvx",
      "args": ["geospatial-mcp"]
    }
  }
}
{
  "servers": {
    "geospatial": {
      "type": "stdio",
      "command": "uvx",
      "args": ["geospatial-mcp"]
    }
  }
}
{
  "context_servers": {
    "geospatial": {
      "command": { "path": "uvx", "args": ["geospatial-mcp"] }
    }
  }
}
docker run -p 8000:8000 ghcr.io/ystoneman/geospatial-mcp --transport http

The HTTP transport binds 127.0.0.1 unless PORT is set by the platform. Put it behind a reverse proxy with authentication before exposing it publicly.

Related MCP server: mapsi-mcp

Tools

Every tool taking a location accepts any of these, interchangeably:

48.8584, 2.2945          decimal degrees (canonical, latitude first)
48°51'30"N 2°17'40"E     degrees / minutes / seconds
31UDQ4825211954          USNG / MGRS grid reference
u09tunquc                geohash
891fb46741bffff          H3 cell
8FW4V75V+9R6             Plus Code
Eiffel Tower, Paris      a place name, geocoded for you

core — 20 tools, always on

Tool

What it answers

Offline

coord_convert

This position in every notation at once

●

coord_describe

Is this a valid coordinate, and how precise?

●

coord_transform_crs

Between EPSG systems, with an accuracy figure

●

geom_measure

Distance, bearing, area, perimeter, centroid

●

geom_transform

Buffer, simplify, hull, centroid, repair

●

geom_overlay

Intersection, union, difference

●

geom_relate

Point-in-polygon, overlap, nearest distance

●

place_geocode

Address or place name → coordinates

○

place_reverse

Coordinates → address

○

place_search

Fuel, hospitals, chargers, warehouses nearby

○

route_directions

Driving, cycling, walking, HGV directions

○

route_isochrone

Everywhere reachable in N minutes

○

route_matrix

Travel times between many origins and destinations

○

terrain_elevation

Height above sea level

○

terrain_profile

Elevation along a path, ascent and descent

○

env_weather

Current conditions and forecast

○

sun_moon

Sunrise, twilight, golden hour, shadow length

●

time_at_location

Time zone, local time, next DST change

●

data_convert

GeoJSON ⇄ WKT ⇄ KML ⇄ GPX ⇄ CSV ⇄ polyline

●

geo_capabilities

What is enabled, and how to enable more

●

rf — 2 tools, always on

Tool

What it answers

Offline

rf_link_budget

Path-loss budget and cell radius

●

rf_towers

Known cell towers nearby

○

analysis — 2 tools, opt-in (pip install 'geospatial-mcp[stats]')

Tool

What it answers

Offline

stats_cluster

Where do these points concentrate?

●

coord_grid_cells

Bin points into H3 or geohash cells

●

● runs with no network at all. ○ calls a free public API.

Link budgets are an everyday tool for mobile operators, wireless ISPs, utilities running SCADA telemetry and IoT fleets: how far a radio reaches for a given power, frequency and environment.

This is one server among many. If you are working out which to use, Sparkgeo's geo-mcp-servers is a curated, machine-checked index of the geospatial MCP field, kept current and marked for liveness — a better place to compare coverage than any claim this README could make about itself. docs/REFERENCES.md lists the servers, standards and research this project leans on or points at.

Selecting toolsets

uvx geospatial-mcp --toolsets core       # 20 tools, drops the RF set
uvx geospatial-mcp --toolsets all        # adds the analysis toolset (needs [stats])
GEO_TOOLSETS=offline uvx geospatial-mcp  # 13 tools that never touch the network
uvx geospatial-mcp --list-tools          # print the catalogue and exit

offline is for field use with no signal. It keeps only tools that make no network call under any input, so it excludes geom_measure and the place tools — those accept a place name, which means they may geocode.

Toolset

Tools

Needs

core

20

nothing

rf

2

nothing

analysis

2

geospatial-mcp[stats]

Configuration

No API key is needed for anything. Every keyed provider has a keyless default.

Variable

Purpose

GEO_TOOLSETS

default, all, offline, or a comma-separated list

GEO_CACHE_DIR

Response cache location (default ~/.cache/geospatial-mcp)

GEO_CACHE

0 disables the disk cache

GEO_USER_AGENT

Override the User-Agent sent to providers

NOMINATIM_URL, PHOTON_URL, OVERPASS_URL, VALHALLA_URL, OPEN_METEO_BASE_URL

Point at self-hosted instances

OPENROUTESERVICE_API_KEY

Optional routing upgrade over the keyless default

OPENCELLID_API_KEY

Optional; larger cell-tower database

OPEN_METEO_API_KEY

Required for commercial weather use (see below)

Data sources and licensing

Results carry the attribution their licence requires in meta.attribution — pass it through when you display them. Two obligations worth knowing before you build on this: OpenStreetMap-derived data (geocoding, places, routing) is ODbL 1.0 and requires attribution, and Open-Meteo's free tier is non-commercial, so commercial deployments need OPEN_METEO_API_KEY or a self-hosted instance.

The public instances are free and shared. This server caches aggressively and rate-limits per host to stay inside their usage policies; for heavy use, self-host and set the corresponding *_URL. See Sources and credits for the complete list.

What it gets right that is easy to get wrong

  • Distances and areas are geodesic. Karney's algorithm on the WGS84 ellipsoid, accurate to millimetres at any distance. Not 111.32 km/degree, which is 0.25% out at 60° latitude and worse further north.

  • Buffers are circles on the ground. Buffering in degrees produces an ellipse stretched by 1/cos(latitude) — 2× wrong at 60°, 5× at 78°. Every buffer here is projected to an azimuthal equidistant plane first.

  • Grid references truncate, they never round. A reference names the square a position falls in, so dropping digits must move the point to the coarser square's corner. Rounding would hand back a neighbouring square — a kilometre away at four digits, and confidently wrong.

  • DEM gaps stay gaps. A missing elevation is reported as null, never substituted with zero. Substituting sea level flattens a ridge into an entirely plausible plain, and every statistic downstream inherits it.

  • Place names are never silently guessed. "Springfield" matches cities of near-equal prominence 1,500 km apart, so a tool asked about it lists them and asks, rather than quietly answering for Illinois. When a name is clear enough to use, meta.notes says exactly which place it was taken to mean, and names any others that share it.

  • Errors are errors. Failures raise, so the MCP response is marked isError. A tool that returns {"status": "error"} is reported to the model as a success, and it will proceed on invented data.

  • Empirical models report their limits. COST231-Hata outside 1500–2000 MHz still returns a number; meta.notes tells you it is out of range.

  • CRS transforms admit their accuracy. Every transform names the operation PROJ used for that point and its published accuracy. When a better operation needs a grid file that is not installed, the response names the file; when no published transformation exists at all, it says the datum shift was ignored.

Development

git clone https://github.com/ystoneman/geospatial-mcp && cd geospatial-mcp
uv sync --all-extras
make check          # lint, types, tests — exactly what CI runs
make test-network   # additionally hit the live APIs
make evals          # tool-selection eval suite

See AGENTS.md for the layout and conventions, and CONTRIBUTING.md to add a tool.

Sources and credits

Almost none of the geospatial computation here is ours. This package is an integration layer: it chooses which established libraries, published algorithms and public data services to expose to a language model, wires them together, and tries hard to get the units, datums and error handling right. The interesting work was done by the projects below, and this section exists so you can see exactly which ones you are depending on.

To put a number on it — of the Python that ships when you install this package, 1.0% is ours and 99.0% is dependencies (6,912 lines against 654,791), inside a 150 MB installation of which 109 MB is compiled native libraries and 9 MB is the EPSG registry. Counted by installing the package with no extras into an empty environment and measuring site-packages.

Runtime dependencies

Everything below is permissively licensed. Licences were read from each package's own LICENSE file, not from its classifiers — the two disagree more often than you would expect.

Package

Version

Licence

What it provides here

mcp

2.0.0

MIT

The Model Context Protocol SDK: tool registration, transports, schemas

pydantic

2.12.5

MIT

Tool input and output schemas, response validation

numpy

2.4.2

BSD-3-Clause and others

Terrain arrays, profile statistics, hillshade kernels

shapely

2.1.2

BSD-3-Clause

All polygon geometry — buffer, union, hulls, predicates

pyproj

3.7.2

MIT

CRS transforms and every geodesic distance, bearing and area

pygeodesy

26.8.18

MIT

Rhumb lines, great-circle intersections, cross-track distance, USNG/MGRS grid references

h3

4.5.0

Apache-2.0

Uber's hexagonal hierarchical spatial index

geohashr

1.6.0

BSD-3-Clause

Geohash encoding and decoding

pluscodes

2022.1.3

Apache-2.0

Open Location Code (Plus Codes)

mercantile

1.2.1

BSD-3-Clause

XYZ tile and quadkey arithmetic

astral

3.2

Apache-2.0

Sun and moon position, twilight, golden hour

tzfpy

1.3.3

MIT

Offline timezone lookup from coordinates

geojson-pydantic

2.1.1

MIT

Typed GeoJSON models

polyline

2.0.4

MIT

Google encoded polyline format

pyshp

3.1.6

MIT

Shapefile reading and writing without GDAL

Optional extras: pillow (MIT-CMU), sgp4 and skyfield (MIT), scikit-learn, esda and libpysal (BSD-3-Clause), fast-tsp (MIT), staticmap (Apache-2.0), rasterio and rio-tiler (BSD), pystac-client (Apache-2.0), morecantile (MIT).

Native libraries bundled inside those wheels

Library

Licence

Reached through

GEOS

LGPL-2.1-or-later

shapely — used unmodified and dynamically linked; see THIRD_PARTY_NOTICES.md for how the licence is satisfied

PROJ

MIT

pyproj, with the EPSG registry

GEOS is the one copyleft component in the tree. It is unavoidable — it sits under Shapely, GeoPandas, OGR, PostGIS and DuckDB-spatial alike, and there is no permissive replacement with equivalent overlay correctness.

Live data services

None require an API key. Results carry the attribution their licence demands in meta.attribution; pass it through when you display them.

Service

Provides

Data licence

Nominatim / Photon

Geocoding, reverse geocoding

OpenStreetMap, ODbL 1.0

Overpass API

Points of interest by category

OpenStreetMap, ODbL 1.0

Valhalla via FOSSGIS

Routing, isochrones, matrices

OpenStreetMap, ODbL 1.0

Open-Meteo

Weather, elevation, air quality

CC-BY 4.0 — free tier is non-commercial

Copernicus GLO-90 DEM

Elevation, via Open-Meteo

© DLR e.V. 2010–2014, © Airbus Defence and Space GmbH 2014–2018

BeaconDB

Cell towers (keyless default)

Public domain (CC0)

OpenCelliD

Cell towers (optional, keyed)

CC-BY-SA 4.0 — share-alike on derived databases

Algorithms, and where they come from

Every computation in this package traces to a library, a published formula or a public service. None of it was invented here, and the literature is cited so you can check the implementation against the source.

Capability

Implemented by

Source

Geodesic distance, bearing, area

PROJ, via pyproj.Geod

Karney, C. F. F. (2013), "Algorithms for geodesics", Journal of Geodesy 87(1), 43–55

Datum and projection transforms

PROJ

The EPSG Geodetic Parameter Dataset

USNG / MGRS grid references

pygeodesy

FGDC-STD-011-2001, the United States National Grid; the same squares are MGRS outside the US

Polygon overlay, buffering, hulls

GEOS, via shapely

The OGC Simple Features specification

Line simplification

GEOS

Douglas, D. H. & Peucker, T. K. (1973), The Canadian Cartographer 10(2), 112–122

Hexagonal spatial index

h3

Uber H3

Geohash

geohashr

Niemeyer, G. (2008)

Plus Codes

pluscodes

Google Open Location Code specification

Free-space path loss

this package

ITU-R P.525, "Calculation of free-space attenuation"

Okumura-Hata path loss

this package

Hata, M. (1980), IEEE Trans. Veh. Technol. 29(3), 317–325; after Okumura et al. (1968)

COST 231-Hata path loss

this package

COST Action 231 final report (1999), ch. 4

Two-ray ground reflection

this package

Standard textbook propagation model

Slope, aspect, hillshade

this package

Horn, B. K. P. (1981), "Hill shading and the reflectance map", Proc. IEEE 69(1), 14–47

Terrarium DEM decode

this package

Mapzen Terrain Tiles published encoding

Sun and moon position

astral

Standard astronomical almanac formulae

DBSCAN clustering

scikit-learn

Ester, M. et al. (1996), KDD-96

HDBSCAN clustering

scikit-learn

Campello, R. J. G. B. et al. (2013), PAKDD

"Implemented by: this package" means the formula was written out from the cited publication in geo/rf.py or geo/terrain.py, because no permissively licensed Python library implements it. The mathematics is not ours; only the transcription is.

What this package actually adds

Given the above, it is worth being plain about what is left:

  • The composition — which capabilities belong in one server, and what the tool surface should look like for a model rather than a human.

  • Correct units and datums at the seams. Geodesic buffering via an azimuthal equidistant reprojection, geodesic path sampling, geodesic area — the places where naive degree arithmetic silently gives wrong answers.

  • A shared HTTP layer with per-host rate limiting, a disk cache, bounded retries and mirror failover, so the free public services are used within their stated policies.

  • Error design — tools raise rather than returning an error payload, and every message names the input, the problem and a valid example.

  • Attribution plumbing, so licence obligations travel with the data.

  • Tests and evals — 293 tests and a 31-case tool-selection eval library.

Full licence texts and obligations are in THIRD_PARTY_NOTICES.md. If you spot a missing or incorrect attribution, please open an issue — that is a bug.

Licence

MIT — see LICENSE.

Available Tools

22 tools
coord_convertA
Read-onlyIdempotent

Convert a position between every common coordinate notation at once.

Detects the input format automatically and returns decimal degrees, DMS, USNG/MGRS, UTM, geohash, H3, Plus Code, quadkey and GeoJSON together, so one call answers any "what is this in X?" question.

Use this for format conversion. For a different datum or projection (British National Grid, State Plane, Web Mercator) use coord_transform_crs. To check whether a string is a valid coordinate without converting it, use coord_describe.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesA position in any supported notation: decimal degrees '48.8584,2.2945'; DMS '48°51'30"N 2°17'40"E'; USNG/MGRS '31UDQ4825211954'; geohash 'u09tunquc'; H3 '891fb46741bffff'; Plus Code '8FW4V75V+9R6'; or a place name to geocode.
tile_zoomNoWeb-map zoom for the quadkey.
grid_digitsNoDigits in the USNG/MGRS reference: 10 gives 1 m, 8 gives 10 m, 4 gives 1 km.
h3_resolutionNoH3 resolution.
geohash_lengthNoGeohash characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
inputYes
formatsYes
detected_formatYes
input_precision_mNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds valuable behavioral context: it auto-detects input format, returns a comprehensive set of notations, and accepts place names for geocoding. These are traits not evident from annotations or schema alone.

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 well-structured: it opens with the core purpose, explains the auto-detection and output scope in the second sentence, and then delivers usage guidance concisely. Every sentence earns its place, with no redundancy.

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 (multi-format conversion), the presence of an output schema, and annotations covering safety, the description is sufficiently complete. It explains the auto-detection, lists output formats, includes geocoding capability, and routes to alternatives, leaving nothing an agent needs to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% with detailed parameter descriptions (e.g., grid_digits precision mapping, location examples). The description adds no additional parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool converts a position between all common coordinate notations, with a specific verb and resource. It distinguishes itself from siblings by naming coord_transform_crs for datum/projection conversion and coord_describe for validation, making its unique role obvious.

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 provides when-to-use and when-not-to-use guidance, naming two alternatives (coord_transform_crs and coord_describe) with clear conditions for each. This fully removes ambiguity about tool selection.

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

coord_describeA
Read-onlyIdempotent

Check whether a string is a valid coordinate and report its precision.

Identifies which notation it is, normalises it, and states the ground accuracy the notation implies -- a grid reference with four digits names a 1 km square, not a point, and a 5-character geohash is about 5 km wide. Returns is_valid=false with an explanation rather than failing, so it is safe to use for validating user input before acting on it.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe coordinate string to inspect.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
inputYes
problemNo
is_validYes
latitudeNo
longitudeNo
normalizedNo
detected_formatNo
implied_precision_mNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description doesn't need to repeat that. It adds value by explaining that the tool normalizes input and returns an explanation for invalid input, which is useful context beyond the safety hints. However, it doesn't describe the exact output structure or the precision levels returned, but given annotations cover safety, a 3 is reasonable.

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 well-structured, starting with the primary purpose, then explaining the normalization and precision implications, and ending with error behavior. Each sentence serves a purpose, and the use of a concrete example (4-digit grid reference, 5-char geohash) makes it informative without being verbose.

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?

With an output schema present, the description doesn't need to detail return values. It covers the tool's validation purpose, normalization behavior, and precision implications, which is sufficient for a single-parameter tool. A minor gap is not describing the exact output format, but that's covered by the output 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 coverage is 100% (the only parameter 'value' is described as 'The coordinate string to inspect.'). The description adds context about what the tool does with the value, but doesn't add new parameter-specific semantics beyond what the schema already provides. Hence baseline 3.

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

Purpose5/5

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

The description clearly states it checks if a string is a valid coordinate and reports its precision. It specifies the resource (coordinate strings) and the operation (validate, normalize, state precision), distinguishing it from sibling tools that convert, transform, or measure.

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

Usage Guidelines5/5

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

It explicitly mentions it is safe to use for validating user input before acting on it, and explains error behavior (returns is_valid=false rather than failing). This gives clear guidance on when to use it versus other tools, though it doesn't name alternatives explicitly, 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.

coord_transform_crsA
Read-onlyIdempotent

Transform coordinates between any two coordinate reference systems.

For national grids (EPSG:27700 British National Grid, EPSG:2154 Lambert-93, State Plane), Web Mercator (EPSG:3857) and any other EPSG-registered CRS.

Reports the transformation PROJ used for this point and its published accuracy. ballpark=true means no published transformation links the two datums, so the shift was ignored: expect tens to hundreds of metres of error. When a more accurate transformation needs a grid file that is not installed, missing_grids names it.

Inputs and outputs are always x/easting first, y/northing second, regardless of the axis order the CRS authority declares.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesEasting or longitude, in the source CRS units.
yYesNorthing or latitude, in the source CRS units.
source_crsNoSource CRS, e.g. 'EPSG:4326'.EPSG:4326
target_crsNoTarget CRS, e.g. 'EPSG:27700'.EPSG:3857

Output Schema

ParametersJSON Schema
NameRequiredDescription
xYes
yYes
metaYes
sourceYes
targetYes
ballparkYes
pipelineYes
accuracy_mYes
source_infoYes
target_infoYes
missing_gridsNo

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it discloses that the tool reports the exact PROJ transformation and accuracy, explains what ballpark=true means in practical error terms, and reveals that missing_grids identifies unavailable grid files. It also documents the always-x/y axis-order convention, which is valuable operational information.

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 dense but every sentence earns its place: purpose, supported systems, accuracy caveats, and axis-order rule. It is front-loaded with the primary action and avoids filler or redundant restatement of the schema.

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 read-only, idempotent transform tool with an output schema, the description covers all important operational concerns: supported CRS scope, transformation accuracy, missing-grid behavior, and axis order. Nothing critical appears missing for an agent 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.

Parameters4/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 meaning beyond the schema by clarifying that inputs and outputs are always x/easting first and y/northing second regardless of CRS axis order, which directly informs how x and y parameters must be supplied. This lifts it above the baseline.

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 clearly states the core action with a specific verb and resource: 'Transform coordinates between any two coordinate reference systems.' It names supported CRS families and 'any other EPSG-registered CRS,' but it does not explicitly distinguish this tool from the sibling coord_convert, so it stops short of full sibling differentiation.

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: whenever coordinates need transforming between CRSs, with national grids, Web Mercator, and any EPSG-registered system named as examples. It does not provide explicit exclusions or name alternatives for when not to use it, so it earns a 4 rather than a 5.

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

data_convertA
Read-onlyIdempotent

Convert geospatial data between GeoJSON, WKT, WKB, KML, GPX, CSV and polyline.

Detects the input format automatically and validates the result, reporting specific problems (self-intersections, out-of-range coordinates, the removed RFC 7946 'crs' member) rather than a bare pass/fail.

Handles the everyday format wrangling of real work: a customer sends KML, the routing engine wants an encoded polyline, the warehouse system exports CSV, the web map needs GeoJSON. Runs entirely offline.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe geometry or dataset to convert: GeoJSON (object or string), WKT, WKB hex, an encoded polyline, KML, GPX, or CSV with latitude/longitude columns.
to_formatNoOutput format.geojson
from_formatNoInput format; 'auto' detects it.auto

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
outputYes
validationNo
input_formatYes
measurementsYes
output_formatYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description reveals meaningful behavior: automatic input detection, validation of results, and specific error reporting (self-intersections, out-of-range coordinates, removed RFC 7946 'crs' member). It also notes offline execution, which is useful operational context not present in annotations.

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

Conciseness5/5

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

The description is compact, starts with the core conversion action, and every sentence carries distinct value: format list, validation behavior, and real-world use cases. No filler or redundant restatement.

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 three-parameter tool with full schema coverage and an output schema present, the description covers input formats, output format flexibility, validation behavior, offline operation, and typical usage scenarios. Nothing essential 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 data, to_format, and from_format thoroughly. The description adds general context about auto-detection and validation, but does not add parameter-level detail 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 uses a specific verb ('Convert') with a clear resource ('geospatial data') and enumerates the supported formats, which immediately distinguishes this tool from coordinate-focused siblings like coord_convert and geometry-operation tools like geom_transform. The scope is precise and actionable.

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 applicable scenarios with concrete examples ('a customer sends KML, the routing engine wants an encoded polyline'), making it easy to know when to call this tool. It does not explicitly name sibling tools to avoid, but the format-conversion focus is distinct enough among the listed siblings.

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

env_weatherA
Read-onlyIdempotent

Get current weather and a multi-day forecast for a location.

Returns temperature, precipitation, wind, cloud cover, humidity and visibility from Open-Meteo -- no API key needed.

Useful for delivery and field-work scheduling, construction and outdoor event planning, agricultural spray windows, and travel decisions.

Note the free Open-Meteo tier is licensed for non-commercial use; set OPEN_METEO_API_KEY and OPEN_METEO_BASE_URL for commercial deployments.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoForecast days to return.
locationYesPosition, as coordinates or a place name.
include_hourlyNoInclude an hourly breakdown for the first 24 hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
dailyNo
currentNo
latitudeYes
timezoneNo
longitudeYes
hourly_summaryNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds context about the free tier licensing and the need to set OPEN_METEO_API_KEY and OPEN_METEO_BASE_URL for commercial use, which goes beyond the annotations. It also notes no API key is needed for the free tier, adding useful behavioral context.

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 five sentences, with the purpose stated upfront. It is concise and each sentence adds value, though it could be slightly trimmed without losing meaning.

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 weather tool with a full output schema and comprehensive annotations, the description is complete. It covers the API provider, licensing, use cases, and data returned. No critical missing information is apparent.

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 provides descriptions for all three parameters (location, days, include_hourly) with 100% coverage, so the description adds no additional parameter guidance. The baseline of 3 is appropriate as the schema carries the semantic load.

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 action (Get) and resource (current weather and multi-day forecast) for a location. It lists the specific data fields returned (temperature, precipitation, wind, cloud cover, humidity, visibility) and names the provider (Open-Meteo), distinguishing it from sibling tools like sun_moon or terrain_elevation.

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 explicit use cases such as delivery scheduling, field work, construction, outdoor events, agricultural spray windows, and travel decisions. However, it does not mention when not to use the tool or name alternative tools, so it lacks explicit exclusions.

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

geo_capabilitiesA
Read-onlyIdempotent

List which geospatial toolsets are enabled and what else is available.

Call this when a capability seems to be missing, before telling the user something is impossible -- the tool they need may simply be in a toolset that is switched off, and this returns the exact command to enable it.

Also reports which optional API keys are configured and where the response cache lives.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
cacheYes
versionYes
api_keysYes
toolsetsYes
how_to_enableYes
enabled_toolsetsYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses concrete outputs: the exact enable command, which optional API keys are configured, and where the response cache lives. This adds meaningful behavioral context that the annotations do not capture, fully informing the agent of what to expect from the call.

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 short paragraphs, front-loaded with the core purpose, then usage guidance, then additional output details. Every sentence earns its place, with no filler or redundancy. The structure guides the reader from what → when → what else, which is optimal for agent comprehension.

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 zero-parameter interface, safe annotations, and existence of an output schema, the description is fully sufficient. It explains the purpose, the trigger condition, and the expected outputs, leaving nothing an agent needs to decide whether and when to call it. No gaps are apparent.

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 takes zero parameters, and the schema coverage is 100% (vacuously). Per the rubric, the baseline is 4 for zero-parameter tools. The description does not need to elaborate on parameters, and it doesn't; it focuses on purpose and output, which 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 precise verb and resource: 'List which geospatial toolsets are enabled and what else is available.' This clearly distinguishes it from the sibling geospatial tools, which perform specific operations; this tool is a meta-capability probe. The purpose is unambiguous and immediately actionable.

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

Usage Guidelines5/5

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

It explicitly tells the agent when to invoke it: 'Call this when a capability seems to be missing, before telling the user something is impossible.' It also explains the rationale and what the tool returns (the exact command to enable a toolset), leaving no doubt about its appropriate use. No alternative tools are needed, but the condition is specific.

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

geom_measureA
Read-onlyIdempotent

Measure geodesic distance and bearing between points, or a geometry's area.

Distances use Karney's algorithm on the WGS84 ellipsoid, accurate to millimetres at any distance including near-antipodal pairs. Areas are computed on the ellipsoid, not in degree space.

This is straight-line ("as the crow flies") distance. For travel distance and time along real roads, use route_directions instead -- road distance is typically 20-40% longer.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesStart position, in any coordinate notation or as a place name.
geojsonNoA GeoJSON or WKT geometry to measure instead of a point pair. Accepts a JSON object or a string. Returns geodesic area, perimeter, length, centroid and bounding box.
destinationNoEnd position. Omit when measuring a geometry supplied in `geojson` instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
compassNo
geometryNo
midpointNo
distance_mNo
distance_kmNo
distance_milesNo
final_bearing_degNo
initial_bearing_degNo
distance_nautical_milesNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond that: the use of Karney's algorithm on WGS84, millimetre accuracy, near-antipodal robustness, and ellipsoidal area computation. It also clarifies that results are straight-line, which is a key behavioral trait not captured in annotations.

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

Conciseness5/5

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

The description is concise and well-structured: it front-loads the purpose, then provides algorithm details, and ends with a usage alternative. Every sentence adds value, with no redundancy or 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?

The tool has a rich output schema (as indicated by 'Has output schema: true'), so the description need not explain return values. It covers the core computational behavior, accuracy, and the key distinction from route_directions, which is essential for correct usage. The parameter schema covers parameter semantics, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (origin, geojson, destination). The description does not add parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate. It mentions area and distance but does not tie them to parameters beyond what the schema already does.

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 ('measure') and resource ('geodesic distance and bearing between points, or a geometry's area'), which clearly distinguishes it from sibling tools like route_directions. It also explicitly notes this is straight-line distance, making the tool's role unambiguous.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool vs. an alternative: 'For travel distance and time along real roads, use route_directions instead.' This is a clear exclusionary condition, and it also implies the intended use for geodesic/straight-line measurements.

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

geom_overlayA
Read-onlyIdempotent

Combine two geometries with a set operation, reporting the resulting area.

The workhorse of overlay analysis: how much of this delivery zone falls inside that flood extent (intersection), what is the combined footprint of these service areas (union), which part of a territory is not yet covered (difference).

Invalid input geometries are repaired automatically before the operation, since self-intersecting polygons are common in real data.

ParametersJSON Schema
NameRequiredDescriptionDefault
geojson_aYesFirst geometry, as GeoJSON (object or string) or WKT.
geojson_bYesSecond geometry, as GeoJSON (object or string) or WKT.
operationNoThe set operation to apply.intersection

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
geometryYes
measurementsYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds a valuable behavioral detail: invalid geometries are auto-repaired before the operation, which is beyond the annotations and helps set expectations. It also clarifies the output is the resulting area, which is useful. No contradictions.

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: the core function is front-loaded, followed by illustrative use cases, then a note on auto-repair. Every sentence earns its place with no redundancy. It is concise and well-structured.

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

Completeness4/5

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

The tool has an output schema (per context signals), so return values are covered externally. The description covers purpose, use cases, and an important behavioral nuance (auto-repair). It does not explicitly mention symmetric_difference, but the schema lists it, so the description is complete enough for a 3-parameter tool with an output 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 coverage is 100% per the context signals, so the schema already documents all three parameters with descriptions and enums. The description does not add parameter-specific details beyond what the schema provides, but it does mention the operation types in examples. Since the schema is thorough, the 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 explicitly states 'Combine two geometries with a set operation, reporting the resulting area.' It provides concrete examples (intersection, union, difference) and clearly differentiates this overlay tool from siblings like geom_measure or geom_relate. The verb+resource+outcome are specific and unambiguous.

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

Usage Guidelines4/5

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

It gives real-world scenarios (delivery zone vs. flood extent, service area footprints, uncovered territory) that illustrate when to use this tool. However, it does not explicitly mention when NOT to use it or name alternative tools, so it falls short of a 5 but is still clear on context.

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

geom_relateA
Read-onlyIdempotent

Test the spatial relationship between two geometries.

Answers point-in-polygon, overlap, containment and adjacency in one call, plus the shortest geodesic distance between them and the nearest point on each. Use this for geofence checks ("is this vehicle inside the zone?"), territory assignment and proximity screening.

ParametersJSON Schema
NameRequiredDescriptionDefault
geojson_aYesFirst geometry, as GeoJSON (object or string) or WKT.
geojson_bYesSecond geometry, as GeoJSON (object or string) or WKT.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
distance_mYes
relationshipsYes
nearest_pointsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral value by disclosing that the tool returns multiple relationship types plus geodesic distance and nearest points in one call, which is beyond what annotations provide. It doesn't mention error behavior or edge cases, but the annotations carry the main safety burden.

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 with zero waste. The core purpose is front-loaded, the output scope is summarized in the second sentence, and concrete use cases close it out. 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?

The description is complete for a read-only relationship-testing tool with a rich output schema. It covers what the tool does, what it returns, and when to use it. The only minor gap is not mentioning whether the input geometries must be in the same CRS or how invalid geometries are handled, but the output schema and annotations cover most operational needs.

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 both parameters as GeoJSON or WKT. The description adds the semantic context that these are two geometries being tested for relationships, but doesn't add format details beyond the schema. Baseline 3 is appropriate since 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 names a specific verb ('test') and resource ('spatial relationship between two geometries'), then enumerates the exact relationship types (point-in-polygon, overlap, containment, adjacency) plus distance and nearest-point outputs. This clearly distinguishes it from sibling tools like geom_measure (measurement) and geom_overlay (spatial operations).

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

Usage Guidelines5/5

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

The description explicitly lists use cases: geofence checks, territory assignment, and proximity screening. It also implicitly distinguishes from siblings by focusing on relationship testing rather than coordinate conversion, transformation, or measurement. The 'Use this for' phrasing gives concrete when-to-use guidance.

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

geom_transformA
Read-onlyIdempotent

Reshape a geometry: buffer, simplify, hull, centroid, repair or bounding box.

All distances are true ground metres. Buffering projects to an azimuthal equidistant plane centred on the geometry, so a 5 km buffer is 5 km on the ground at every latitude -- not an ellipse stretched by longitude convergence, which is what buffering in degrees produces.

concave_hull traces the real outline of a scattered point set (a service territory, a fire perimeter); convex_hull bridges across genuine gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratioNoFor concave_hull: 0 hugs the points tightly, 1 equals the convex hull. The scale is steeply non-linear -- try 0.0 first and raise it only if the outline is too ragged.
geojsonYesInput geometry as GeoJSON (object or string) or WKT.
operationYesThe transformation to apply.
distance_mNoFor buffer: offset distance in metres (negative shrinks). For simplify: tolerance in metres.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
geometryYes
measurementsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: distances are true ground metres, buffering uses an azimuthal equidistant projection (avoiding degree-based distortion), and concave vs convex hulls have distinct use cases. This goes beyond what annotations provide.

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

Conciseness4/5

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

The description is front-loaded with a one-sentence summary, then provides necessary details on projection and hull selection. The second paragraph is somewhat lengthy but explains a common pitfall (degree-based distortion) that saves real trouble. Overall it is tight and purposeful, with no filler.

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

Completeness3/5

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

The tool supports seven operations, but the description only elaborates on buffer and hulls. Centroid, simplify, repair, and bbox are not given any specific behavioral or usage context. Since an output schema exists, return values are covered, but some operations remain under-described for an AI agent to choose among them confidently.

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 the baseline is 3. The description adds meaningful nuance beyond the schema: it explains that distances are true ground metres, that the ratio scale is steeply non-linear, and that distance_m is applied in metres for both buffer and simplify. This enhances understanding of how parameters behave in practice.

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 first sentence 'Reshape a geometry: buffer, simplify, hull, centroid, repair or bounding box' clearly states a specific verb (reshape) and the resource (geometry), and lists the supported operations. It does not explicitly differentiate from sibling tools like geom_measure or geom_overlay, but the operation list makes the tool's scope evident and distinct enough.

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 implicit usage guidance by naming the operations, but it never explicitly says 'use this tool when you need X, use geom_measure when you need Y'. There is useful internal guidance on choosing concave_hull vs convex_hull, but no direct comparison to sibling tools or exclusions, so it remains at an implied level.

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

place_geocodeA
Read-onlyIdempotent

Find the coordinates of an address, place name or landmark.

Uses OpenStreetMap: Nominatim for exact structured lookups, or Photon when fuzzy=true for misspelled or partial input (Nominatim's usage policy forbids autocomplete-style queries, so route those here).

To go the other way -- coordinates to an address -- use place_reverse. To find categories of thing nearby (fuel, hospitals, hotels) rather than one named place, use place_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuzzyNoUse the typo-tolerant Photon backend instead of Nominatim. Set this for partial, misspelled or as-you-type input.
limitNoMaximum matches to return.
queryYesAn address, place name or landmark.
country_codesNoComma-separated ISO 3166-1 alpha-2 codes to restrict results, e.g. 'gb,ie'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
queryYes
matchesYes
providerYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds valuable context about the backend (Nominatim vs Photon) and why the fuzzy path exists, going beyond what annotations convey. It does not contradict any annotations.

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

Conciseness5/5

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

The description is three short paragraphs, each earning its place: the first states the core purpose, the second explains backend routing and policy, and the third directs to sibling tools. It is front-loaded and free of 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?

Given the tool's moderate complexity (4 params, output schema present, annotations covering safety), the description fully covers what an agent needs: the exact input kind, the fuzzy distinction, the policy constraint, and clear alternatives. No missing operational details.

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's mention of the fuzzy parameter largely repeats what the schema already says ('Set this for partial, misspelled or as-you-type input'), and it does not add extra meaning to limit, country_codes, or query beyond their schema 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 opens with a clear, specific statement of what the tool does: 'Find the coordinates of an address, place name or landmark.' It explicitly distinguishes itself from place_reverse (reverse geocoding) and place_search (categorical search), leaving no ambiguity about its scope.

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 when-to-use guidance, including when to set fuzzy=true for misspelled/partial input and routes to place_reverse and place_search for other use cases. It also mentions Nominatim's policy restriction, which directly informs tool selection.

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

place_reverseA
Read-onlyIdempotent

Find the address or place name at a set of coordinates.

The inverse of place_geocode. Useful for labelling GPS traces, describing a delivery destination, or identifying the administrative area a position falls in (lower the zoom to get city, region or country instead of a street address).

ParametersJSON Schema
NameRequiredDescriptionDefault
zoomNoDetail level: 18 building, 16 street, 10 city, 5 state, 3 country.
locationYesPosition in any coordinate notation: decimal degrees, DMS, a USNG/MGRS grid reference, geohash, H3 or Plus Code.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
typeNo
addressYes
categoryNo
latitudeYes
longitudeYes
display_nameYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnly, openWorld, idempotent, and destructive hints, so the safety profile is known. The description adds valuable behavioral context by explaining how the zoom parameter changes the granularity of results (building to country), which is not captured by the annotations alone. This goes beyond the minimal requirement and gives the agent a clear mental model of output variation.

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 concise, with the primary purpose stated in the first sentence, followed by a brief explanation of its relationship to place_geocode and concrete use cases. No unnecessary words; every sentence adds value. The zoom tip is placed at the end, effectively closing with actionable guidance.

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 presence of an output schema (has_output_schema=true) and comprehensive annotations, the description covers all necessary aspects for correct invocation: purpose, use cases, inverse relationship, and zoom behavior. No missing prerequisites or error conditions are critical for an agent to use this tool safely and 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?

Schema coverage is 100%, so both parameters are documented. The description enhances the zoom parameter by providing a practical usage hint ('lower the zoom to get city, region or country instead of a street address'), which adds meaning beyond the schema's 'Detail level' list. It also reinforces that location accepts multiple notations, tying back to the schema 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 states a specific action ('Find the address or place name') and resource (at a set of coordinates), clearly distinguishing it from siblings by explicitly naming it the inverse of place_geocode. The purpose is unambiguous and immediately differentiates the tool from place_search or coordinate conversion tools.

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 use cases ('labelling GPS traces, describing a delivery destination, or identifying the administrative area a position falls in') and names the inverse sibling (place_geocode), giving clear guidance on when to use this tool versus alternatives. The zoom tip ('lower the zoom to get city, region or country') further guides selection based on granularity needed.

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

rf_towersA
Read-onlyIdempotent

Find known cell towers near a location.

Returns crowdsourced tower records with radio technology (GSM/UMTS/LTE/NR), operator MCC-MNC and approximate position. Useful for coverage benchmarking, IoT and fixed-wireless site qualification, and understanding why signal is poor at a specific address.

Uses OpenCelliD when OPENCELLID_API_KEY is set, otherwise the keyless BeaconDB. Coverage is crowdsourced and sparse outside dense urban areas -- an empty result means no contributor has mapped the area, not that no towers exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesSearch centre, as coordinates or a place name.
radius_mNoSearch radius in metres.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
countYes
towersYes
latitudeYes
providerYes
radius_mYes
longitudeYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable context beyond that: the conditional backend selection (OpenCelliD vs BeaconDB) and the interpretation of empty results as unmapped areas rather than absence of towers. No contradiction with annotations.

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

Conciseness5/5

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

Three tightly scoped paragraphs: a one-line purpose, return/use-case context, and a data-source caveat. Every sentence carries decision-relevant information, and the most important facts are 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?

Combined with the full input schema, output schema, and safety annotations, the description covers purpose, data-source behavior, coverage limitations, and interpretation of results. 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?

Input schema covers both parameters with 100% description coverage, so the schema already explains location and radius_m. The description does not add parameter-level syntax or format details, but it does not need to given the complete 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?

States a specific verb and resource: 'Find known cell towers near a location.' It also describes the return data (radio technology, operator MCC-MNC, approximate position), making the tool's function unambiguous and distinct from spatial or RF-calculation 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?

Gives concrete use cases: coverage benchmarking, IoT/fixed-wireless site qualification, and diagnosing poor signal at an address. It also explains the empty-result meaning. It does not explicitly name alternative sibling tools or state when not to use it, so it stops short of a 5.

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

route_directionsA
Read-onlyIdempotent

Get driving, cycling or walking directions along real roads.

Returns distance, travel time and turn-by-turn instructions using OpenStreetMap road data via Valhalla -- no API key needed.

Use this for anything involving actual travel: delivery and field-service scheduling, ambulance response-time modelling, freight planning with vehicle restrictions, commute estimation, hiking and cycling routes.

For straight-line distance instead, use geom_measure -- it is much cheaper and needs no network. To find everywhere reachable within a time budget rather than the path to one place, use route_isochrone. For travel times between many places at once, use route_matrix rather than calling this repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
viaNoOptional intermediate stops, semicolon-separated, visited in the order given. Example: '48.87,2.33; 48.88,2.35'
detailNo'summary' returns distance, duration and turn list. 'full' adds the route geometry as GeoJSON, which is much larger.summary
originYesStart, as coordinates or a place name.
profileNoVehicle type. 'truck' respects weight, height, width and hazmat restrictions; 'walk' uses footpaths; 'bicycle' prefers cycleways.car
destinationYesEnd, as coordinates or a place name.
coordinate_formatNo'grid' adds a USNG/MGRS grid reference to each turn. Useful for crews working from gridded paper maps -- search and rescue, wildland fire, surveying.decimal

Output Schema

ParametersJSON Schema
NameRequiredDescription
endYes
metaYes
startYes
stepsNo
profileYes
providerYes
duration_sYes
distance_kmYes
distance_milesYes
duration_displayYes
geometry_geojsonNo
geometry_polylineNo
profile_descriptionYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description adds high-value behavioral context: no API key needed, OpenStreetMap data via Valhalla, return contents (distance, travel time, turn-by-turn instructions), and size implications of 'full' detail. It also discloses routing-behavior differences such as truck restrictions and walking/bicycle preferences. There is no contradiction with the readOnly/openWorld/idempotent annotations.

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

Conciseness5/5

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

The description is well-structured: what it does, what it returns, when to use it, and when to use alternatives. The sentence list of concrete use cases is specific and earns its place, and the alternative-routing guidance is front-loaded after the core purpose. Nothing feels redundant.

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

Completeness5/5

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

Given six parameters and an output schema, the description covers the important contextual ground: data source, no-auth requirement, use cases, and clear routing to siblings. Because an output schema exists, the description does not need to enumerate return fields, and it still communicates the main outputs. This is complete for safe, 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%, so the baseline is 3 even without additional parameter detail. The main description adds broad use context and routing profile awareness, but it does not materially extend parameter semantics beyond what the schema already provides for origin/destination format, via ordering, detail levels, profile restrictions, and coordinate_format. It neither repeats nor compensates heavily, so the baseline 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: 'Get driving, cycling or walking directions along real roads.' It immediately distinguishes this tool from geometry-only tools by emphasizing 'real roads' and from isochrone/matrix tools by stating it returns the path to one place. 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 Guidelines5/5

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

The description explicitly states when to use it: 'Use this for anything involving actual travel' with concrete examples. It also names three alternatives and the conditions that select them: geom_measure for straight-line distance, route_isochrone for reachable areas, and route_matrix for multiple origin/destination pairs at once. This is exactly the when-vs-alternatives guidance an agent needs.

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

route_isochroneA
Read-onlyIdempotent

Map everywhere reachable within a travel-time budget.

Returns drive-time (or walk-time, cycle-time) polygons. This is the tool for catchment and accessibility questions: which customers are within 30 minutes of a depot, what a store's 15-minute trade area looks like, how many homes a fire station covers in 8 minutes, where to site a warehouse.

direction='to' computes the reverse catchment, which is the correct choice when siting a facility people travel to.

Returns polygons that can be passed straight to geom_relate or geom_overlay to count what falls inside them.

For the path to one specific destination, use route_directions instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutesNoTravel-time contours in minutes, comma-separated. Example: '10,20,30'.15
profileNoVehicle type.car
locationYesCentre point, as coordinates or a place name.
directionNo'from' = everywhere reachable FROM this point (delivery range). 'to' = everywhere that can REACH this point (catchment area).from

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
centreYes
profileYes
contoursYes
directionYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it returns polygons, supports multiple travel modes, explains reverse catchment semantics, and notes that results can be passed directly to geom_relate or geom_overlay.

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 front-loaded with the core purpose, then organized into short paragraphs covering use cases, direction semantics, downstream composability, and the sibling alternative. Every sentence earns its place without unnecessary 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 4-parameter tool with an output schema and strong annotations, the description covers everything an agent needs: what it does, when to use it, how direction affects results, what the output is, and how it can be consumed by other tools. Nothing important is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema. It clarifies that profile corresponds to drive/walk/cycle time and gives practical guidance on when direction='to' is appropriate, which is more useful than the raw enum 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 opens with a specific verb and resource: 'Map everywhere reachable within a travel-time budget.' It clearly distinguishes this tool from route_directions by stating that isochrones are for catchment and accessibility questions, not point-to-point paths.

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

Usage Guidelines5/5

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

It explicitly names the use cases (catchment, accessibility, trade areas, coverage) and provides concrete examples. It also gives an exclusion rule: for a path to one specific destination, use route_directions instead, and explains when direction='to' is the correct choice.

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

route_matrixA
Read-onlyIdempotent

Get road travel times and distances between many origins and destinations at once.

One call answers "which depot is closest by road to each customer", "which crew can reach each job fastest", or ranks candidate sites by access. Returns a duration and distance for every origin-destination pair, indexed [origin][destination], plus the nearest destination for each origin. Unreachable pairs are null.

For turn-by-turn directions on one trip, use route_directions. For everywhere reachable within a time budget, use route_isochrone. For straight-line distance, use geom_measure.

ParametersJSON Schema
NameRequiredDescriptionDefault
originsYesStart points, semicolon-separated, as coordinates or place names. Example: '48.8584,2.2945; 48.8606,2.3376'
profileNoVehicle type.car
destinationsNoEnd points in the same form. Leave empty to measure every origin against every other origin.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
nearestYes
originsYes
profileYes
duration_sYes
distance_kmYes
destinationsYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds substantial behavioral detail beyond annotations: every origin-destination pair is returned, results are indexed [origin][destination], the nearest destination per origin is included, and unreachable pairs are null. This gives the agent a clear model of the operation's output behavior.

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

Conciseness5/5

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

The description is well-structured and front-loaded: first sentence states the core function, second gives representative use cases, third explains return shape, and the final sentence routes to alternatives. Every sentence earns its place without redundancy.

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 output schema exists and annotations are rich, the description is complete for an agent to select and invoke the tool. It covers the matrix semantics, null behavior, and sibling differentiation. No critical missing context is apparent.

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 origins, profile, and destinations with examples and defaults. The description reinforces the multi-origin/destination nature but does not add significant new parameter-level semantics. Baseline 3 is appropriate because the schema carries the burden.

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: 'Get road travel times and distances between many origins and destinations at once.' It immediately conveys the batch origin-destination calculation and distinguishes itself from route_directions, route_isochrone, and geom_measure through concrete use cases. This is clearly differentiated from 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 Guidelines5/5

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

The description provides explicit routing guidance: use route_directions for turn-by-turn directions, route_isochrone for time-budget reachability, and geom_measure for straight-line distance. It also gives example analytical questions the tool answers, such as which depot is closest by road. This is exemplary when-to-use versus when-not-to-use guidance.

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

sun_moonA
Read-onlyIdempotent

Get sunrise, sunset, twilight, golden hour and moon phase for a location.

Computed offline from astronomical formulas -- no network needed.

Includes the shadow-length ratio, which is what construction shadow studies, right-to-light assessments and solar-panel shading analysis actually need: a 10 m object at 30 degrees solar elevation casts a 17.3 m shadow. Also used for photography scheduling, crop modelling, delivery windows before dusk, and retail daylight-hours analysis.

Inside the polar circles, events that do not occur are returned as null with an explanation rather than as an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
on_dateNoDate as YYYY-MM-DD. Defaults to today (UTC).
locationYesPosition, as coordinates or a place name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sunYes
dateYes
metaYes
moonYes
latitudeYes
timezoneYes
longitudeYes
position_nowNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds valuable behavior: 'Computed offline from astronomical formulas -- no network needed' and the crucial edge-case handling 'Inside the polar circles, events that do not occur are returned as null with an explanation rather than as an error.' This goes beyond annotations to disclose surprising behavior.

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 front-loaded with the main purpose and then provides behavioral context and use cases. It is somewhat verbose (multiple paragraphs) but each sentence adds value; the edge-case explanation is useful. It could be trimmed slightly, but it's well-structured.

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 covers the core function, the offline computation method, the shadow-length ratio with an example, multiple use cases, and the polar-circle null behavior. Since an output schema exists, return-value details are not needed. Nothing essential for calling this 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 both parameters (location and on_date) are already documented. The description does not add any parameter-specific meaning beyond the schema, so the baseline of 3 applies.

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-resource statement: 'Get sunrise, sunset, twilight, golden hour and moon phase for a location.' It also names the shadow-length ratio, a distinct deliverable. This clearly differentiates it from sibling tools like env_weather or time_at_location, even without explicit comparison.

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 rich usage context—'construction shadow studies, right-to-light assessments, solar-panel shading analysis, photography scheduling, crop modelling, delivery windows before dusk, and retail daylight-hours analysis'—and notes it works offline. However, it does not explicitly state when to prefer this over alternatives or when not to use it, so it stops short of a 5.

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

terrain_elevationA
Read-onlyIdempotent

Get ground elevation above sea level at a location.

Returns height in metres and feet from the Copernicus GLO-90 global DEM (90 m resolution), relative to the EGM2008 geoid -- that is, orthometric height above mean sea level, which is what "elevation" normally means. GNSS receivers report ellipsoidal height, which differs by tens of metres.

For elevation along a path rather than at one point, use terrain_profile -- it fetches up to 100 samples in a single request.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesPosition, as coordinates or a place name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
datasetYes
latitudeYes
longitudeYes
elevation_mYes
elevation_ftYes
vertical_datumYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description explains the data source (Copernicus GLO-90), resolution (90 m), datum (EGM2008 geoid), and why this differs from GNSS ellipsoidal height. This prevents a real-world misinterpretation of the returned value.

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: purpose in the first sentence, key return details in the second, and the alternate tool in the third. Every sentence contributes context without redundancy.

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 single-parameter read-only lookup with an output schema present, the description covers units, datum, source, and sibling routing. An agent has everything it needs to invoke the tool correctly and interpret the result.

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 single parameter is already fully described in the schema as 'Position, as coordinates or a place name', so the description adds no extra parameter-level format details. The schema carries the explanatory burden, matching the baseline for 100% schema description 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 first sentence names the exact operation ('Get ground elevation above sea level at a location') and the description explicitly contrasts it with terrain_profile, so the tool is unambiguously distinguishable from its closest sibling.

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

Usage Guidelines5/5

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

It explicitly states when to prefer terrain_profile ('For elevation along a path rather than at one point') and names the sibling, giving clear selection guidance. No important condition is left to inference.

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

terrain_profileA
Read-onlyIdempotent

Get the terrain elevation profile along a path between two points.

Samples the ground along a true geodesic and returns the full profile plus statistics: minimum, maximum, relief, total ascent and descent. All samples come from one batched request rather than one call per point.

Use this for cycling and hiking route difficulty, pipeline and cable routing, drainage assessment, or sizing earthworks. For the elevation at a single point, or at a scattered set of them, use terrain_elevation -- this tool always samples the straight line between two ends.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesStart of the path.
samplesNoNumber of evenly-spaced elevation samples along the path.
destinationYesEnd of the path.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
profileYes
samplesYes
statisticsYes
total_distance_mYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds valuable behavioral details beyond annotations: it samples along a true geodesic, returns full profile plus statistics, and all samples come from one batched request rather than one call per point. This informs performance expectations and output nature. It does not contradict annotations. The only minor gap is lack of mention of any potential errors or limitations, but given the annotations and output schema, it's more than 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?

The description is concise, front-loaded with the primary purpose, and each sentence adds value. It starts with the core function, then explains the sampling behavior and statistics, and finally provides usage guidance and differentiation from a sibling. No filler or redundant content. It is well-structured and efficient.

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 (fully covered by schema), strong annotations (read-only, idempotent, non-destructive), and an output schema, the description covers all essential aspects: what it does, how it behaves (true geodesic, batched), when to use it, and how it differs from the sibling. It leaves no critical gap for an agent to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add extra meaning to the parameters beyond what the schema already provides; it mentions 'samples' in the context of the tool's action but does not elaborate on the parameter format or constraints. The schema already defines origin, destination, and samples with clear descriptions and bounds. Therefore, a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Get'), a clear resource ('terrain elevation profile'), and the scope ('along a path between two points'). It explicitly differentiates from the sibling tool terrain_elevation by noting this tool samples the straight line between two ends, while the sibling handles single or scattered points. This is unambiguous and distinguishes it from all siblings.

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 use cases ('cycling and hiking route difficulty, pipeline and cable routing, drainage assessment, or sizing earthworks') and directly names the alternative ('use terrain_elevation') for different scenarios ('single point, or at a scattered set of them'). This leaves no doubt about when to choose this tool over the sibling.

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

time_at_locationA
Read-onlyIdempotent

Get the time zone and current local time at a location.

Returns the IANA zone name, current local time, UTC offset, whether daylight saving is active, and when the next DST transition happens. Computed offline from a bundled boundary dataset.

Useful for scheduling across sites, interpreting timestamps in GPS traces, and working out delivery or support-window overlaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesPosition, as coordinates or a place name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
infoYes
metaYes
latitudeYes
longitudeYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful context beyond that: it is computed offline from a bundled boundary dataset, and it discloses the specific return fields including DST transition timing. This gives the agent useful expectations about data source and behavior without contradicting annotations.

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

Conciseness5/5

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

The description is compact and well-structured: a one-line summary, a concise list of return values, a note on the offline computation, and relevant use cases. Every sentence adds value, and the most important 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 single-parameter, read-only tool with a rich output schema, the description covers the tool's purpose, return contents, computational basis, and example use cases. Nothing essential is missing for an agent to decide whether and how to invoke it.

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 describes the single parameter as 'Position, as coordinates or a place name,' so schema coverage is 100%. The description does not add further parameter-level detail such as accepted coordinate formats or how place names are resolved, but the schema already carries the necessary meaning, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get the time zone and current local time at a location.' It then enumerates the exact outputs (IANA zone name, local time, UTC offset, DST status, next DST transition), which clearly differentiates it from sibling tools like place_geocode, env_weather, or sun_moon.

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 concrete use cases: scheduling across sites, interpreting GPS timestamps, and delivery/support-window overlaps. It does not explicitly name alternatives or state when not to use this tool, but the context is clear enough for an agent to recognize appropriate invocation scenarios.

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

Tool Schema Changelog

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

  1. 22 tool updatesv0.1.0
    • First observedcoord_convert
    • First observedcoord_describe
    • First observedcoord_transform_crs
    • First observeddata_convert
    • First observedenv_weather
    • First observedgeo_capabilities
    • First observedgeom_measure
    • First observedgeom_overlay
    • First observedgeom_relate
    • First observedgeom_transform
    • First observedplace_geocode
    • First observedplace_reverse
    • First observedplace_search
    • First observedrf_link_budget
    • First observedrf_towers
    • First observedroute_directions
    • First observedroute_isochrone
    • First observedroute_matrix
    • First observedsun_moon
    • First observedterrain_elevation
    • First observedterrain_profile
    • First observedtime_at_location

TDQS

A4.2/5.0

Scored across 22 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: coordinate validation/conversion/CRS transformation, geometry operations, place lookup, routing modes, terrain, weather, time, data conversion, and RF analysis are all separated. Descriptions explicitly cross-reference similar tools (e.g., coord_convert vs coord_transform_crs, geom_measure vs route_directions), so misselection is unlikely.

Naming Consistency4/5

Tool names follow a predictable lower_snake_case prefix-based pattern (coord_, geom_, place_, route_, terrain_, rf_) and are readable. However, not all follow a single verb_noun grammar: some are noun_noun (route_directions, env_weather) or noun_prep_noun (time_at_location), making the convention consistent but not perfectly uniform.

Tool Count4/5

At 22 tools, the count sits above the typical 3-15 range and feels slightly heavy, but the broad geospatial domain justifies the number. Each tool covers a distinct capability with no obvious redundancy, and the prefix grouping keeps the set navigable.

Completeness4/5

The tool surface covers core geospatial workflows well: coordinate/CRS handling, geometry analysis, geocoding/search, routing, terrain, weather, timezone, data conversion, and RF. Minor gaps such as batch geocoding, historical weather, or route optimization exist, but most are workarounds and tools compose cleanly (e.g., isochrones into geom_overlay/relate).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides 14 comprehensive tools for geocoding, navigation, and visual mapping using Google Maps APIs. It also offers detailed environmental data including weather forecasts, air quality indices, and solar irradiance for location-based analysis and trip planning.
    14
    11
    MIT
  • 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
    19 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides forward/reverse geocoding, bounding box extraction, nearby places discovery, batch geocoding, route waypoints, and administrative boundary lookup using OpenStreetMap data.
    10
    Apache 2.0