Skip to main content
Glama

here-hgv-mcp

A production-grade Model Context Protocol server for HERE Platform location services, specialised for HGV (heavy goods vehicle) navigation. TypeScript, Node ≥ 22, the official @modelcontextprotocol/sdk, with both transports:

  • stdio — the default, for the MCP gateway supervisor and harnesses that spawn the process

  • Streamable HTTP — POST /mcp (plus GET /health), enabled with HTTP_PORT/MCP_HTTP_PORT

14 tools cover the whole logistics workflow: geocoding, place search, truck routing with a full vehicle profile, many-to-many matrices, reachable-area isolines, multi-stop order optimisation, live traffic incidents/flow, HGV toll costs, static maps and a self-contained polyline decoder — plus an entitlement/health prober.

Why not HERE's own hosted MCP? HERE publishes an official Location Reasoning MCP and a documentation MCP at https://docs.here.com/mcp. Neither exposes truck/HGV specific routing (height/width/weight/axle/hazmat/tunnel restrictions) or UK HGV toll analysis. This server is the HGV-specific layer over the same HERE APIs.


Tools

Tool

What it does

here_geocode

Free-text address/place → coordinates, structured address parts, bbox. UK focus by default (countryCode:GBR), limit, lang, result types.

here_reverse_geocode

Coordinates → nearest address(es), optional search radius, language.

here_search_places

Places around a point (Discover v7) or HERE category browse (Browse v7); radius, categories, openNow (best-effort), language.

here_autosuggest

Typed-ahead address/POI suggestions, GB bbox bias by default, optional proximity point.

here_route

HERE Routing v8: car | truck | pedestrian | bicycle | scooter. Full HGV profile (vehicle[...]), avoid features/areas/countries, departure/arrival time, metric units, en-GB, GBP, tolls, instructions, spans, polylines (opt-in).

here_route_matrix

Many origins × destinations travel times. Runs HERE's async job flow (submit → poll status → gzip result) and returns a 2-D durations matrix. Resumable by matrixId.

here_isoline

Reachable area (isochrone/isodistance) polygons by time or distance, truck profile aware, multiple ranges.

here_waypoint_sequence

Multi-stop order optimisation (findsequence2): depot, optional end, up to 50 stops, truck profile, improveFor time/distance.

here_traffic_incidents

Live incidents (closures, accidents, roadworks…) in a bbox/circle/corridor, filter by criticality/type, OLR references.

here_traffic_flow

Live speeds and jam factor per segment in a bbox/circle/corridor; maxJamFactor defaults to 10 so congestion is not hidden.

here_map_image

Static PNG/JPEG map with markers and an optional route line. Saved server-side; the API key is never returned.

here_route_tolls

Toll cost and toll-system detail for an HGV route, e.g. UK HGV Levy England; fares are returned as alternatives (cheapest vs dearest).

here_api_health

Probes every HERE service with the configured key and reports status, latency, entitlement errors and rate-limit headers.

here_flexible_polyline_decode

Decode HERE Flexible Polyline geometry to [lat,lng] — local computation, no API call, no quota.

Every tool returns structured JSON text first (stable shape, ok: true|false) and, where useful, a compact human summary as a second text block. All failures are structured ({ok:false,error:{type,message,status,service,retryable}}) instead of thrown protocol errors.


Related MCP server: NextBillion.ai MCP Server

Quick start

npm install
npm run build

# stdio (default) — what the gateway/harnesses use
HERE_API_KEY=... node dist/index.js

# Streamable HTTP on http://127.0.0.1:8840 (POST /mcp, GET /health)
HERE_API_KEY=... HTTP_PORT=8840 node dist/index.js

# validate configuration + tool wiring without starting a transport
HERE_API_KEY=... node dist/index.js --check

For local development keep the key in a gitignored .env.local and let Node load it:

set -a; . ./.env.local; set +a
npm run build && node dist/index.js --check
# or: node --env-file=.env.local dist/index.js

Never commit a key. The server reads HERE_API_KEY from the environment only.


Environment variables

Variable

Required

Default

Purpose

HERE_API_KEY

yes

—

HERE API key. Never logged, never returned, never written to disk by this server.

HTTP_PORT / MCP_HTTP_PORT

no

unset

Set to run Streamable HTTP instead of stdio (e.g. 8840).

MCP_HTTP_HOST

no

0.0.0.0

HTTP bind address.

MCP_TRANSPORT

no

auto

Force http or stdio. CLI flags --http / --stdio also work.

MCP_STATELESS

no

false

HTTP mode without session ids (one transport per request).

HERE_TIMEOUT_MS

no

20000

Per-request timeout.

HERE_MAX_RETRIES

no

2

Retries on 429/5xx/network errors (exponential backoff + Retry-After).

HERE_RETRY_BASE_MS

no

250

Base backoff delay.

HERE_DEFAULT_COUNTRY

no

GBR

Country focus for geocode/autosuggest.

HERE_DEFAULT_LANG

no

en-GB

Instruction/name language.

HERE_DEFAULT_CURRENCY

no

GBP

Toll currency.

HERE_DEFAULT_UNITS

no

metric

metric/imperial guidance units.

HERE_MAP_OUTPUT_DIR

no

<tmp>/here-hgv-mcp-maps

Where here_map_image writes saved images.

HERE_LOG_LEVEL

no

warn

debug|info|warn|error|silent (all logs go to stderr).

HERE_BASE_<SERVICE>

no

HERE production

Override a base URL (e.g. HERE_BASE_ROUTING) — for tests/proxies.


Transports

stdio (default)

The gateway import starts managed servers with std::process pipes, so stdio is the default. The process writes MCP on stdout; all logs go to stderr (a stray stdout log would corrupt the protocol).

mcp-manifest.json:

{
  "name": "here-hgv",
  "version": "1.0.0",
  "runtime": "node22",
  "build_command": "npm run setup",
  "start_command": "node dist/index.js",
  "capabilities": { "high_privilege_tools": [], "delegation_supported": false }
}

The gateway runs build_command without a shell (it is whitespace-tokenised), so && cannot appear there — npm run setup expands to npm install --include=dev && npm run build inside package.json, where npm provides the shell.

The gateway injects HERE_API_KEY at process start from an encrypted configuration profile attached to the server (Configurations → Profiles, or POST /admin/config-profiles then POST /admin/config-profiles/:id/apply). required_secrets is deliberately not declared in the manifest: it makes the gateway resolve the name from its internal secret namespace and abort the start when absent, whereas the supported path for this service is a profile-owned value. The server fails fast with a clear JSON error if HERE_API_KEY is missing at runtime.

Streamable HTTP

Only when HTTP_PORT/MCP_HTTP_PORT is set (or --http):

  • POST /mcp — MCP JSON-RPC (sessions via mcp-session-id, initialize first)

  • GET /health — {"ok":true,"name":"here-hgv","version":"1.0.0","transport":"http","toolCount":14,...}

  • GET /mcp — SSE stream for an existing session; DELETE /mcp — terminate a session

  • CORS headers and OPTIONS are handled so browser/Omb clients can connect

Verify with curl:

# 1) initialize — save the mcp-session-id response header
curl -sS -D headers.txt \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
  http://127.0.0.1:8840/mcp
SID=$(grep -i '^mcp-session-id:' headers.txt | tr -d '\r' | awk '{print $2}')

# 2) send the initialized notification
curl -sS -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -H "mcp-session-id: $SID" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  http://127.0.0.1:8840/mcp

# 3) list tools
curl -sS -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -H "mcp-session-id: $SID" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  http://127.0.0.1:8840/mcp

# 4) call a tool (truck route, 4.2 m / 44 t)
curl -sS -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -H "mcp-session-id: $SID" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"here_route","arguments":{"origin":"53.4808,-2.2426","destination":"53.8008,-1.5491","transportMode":"truck","truck":{"heightM":4.2,"grossWeightKg":44000,"axleCount":6},"departureTime":"2026-11-03T08:30:00+00:00","includeTolls":true}}}' \
  http://127.0.0.1:8840/mcp

HGV / UK notes

  • Dimensions are metres, weights kilograms in the tool API (e.g. heightM: 4.2, grossWeightKg: 44000). They are sent to HERE in the units HERE expects: vehicle[height] etc. in centimetres, weights in kg.

  • HERE Routing v8 uses vehicle[...] parameters (truck[...] is the deprecated spelling). The profile supports height, width, length, gross weight, weight per axle, axle count, trailer count, trailer axle count, hazardous goods, tunnel category, vehicle category and licence plate.

  • Tunnel categories are ADR cargo codes: A unrestricted, B–E increasingly restrictive. The router only uses tunnels of a less restrictive category.

  • Hazardous goods are sent as vehicle[shippedHazardousGoods]; any real class makes the router apply hazmat restrictions. none is dropped.

  • Emissions are a toll attribute, not a vehicle one in HERE v8: here_route/here_route_tolls send tolls[emissionType] (e.g. euro6). There is deliberately no vehicle[emissionType]/limitedWeight — HERE silently ignores unknown parameters, so advertising them would be misleading.

  • UK defaults: units=metric, lang=en-GB, currency=GBP, country focus GBR.

  • Tolls: here_route_tolls returns the fare products HERE reports. For the UK HGV Levy these are alternative day/week/month passes, so totalCost is the cheapest product for the trip and totalCostMax the dearest — do not sum the fares. tolls[summaries]=total,tollSystem,country is requested.

  • Traffic: here_traffic_flow defaults maxJamFactor=10 (HERE's default of 1.0 hides congestion) and always sends locationReferencing (mandatory for /v7/flow).

  • Departure/arrival times must be RFC 3339 with an explicit UTC offset (2026-11-03T08:30:00+00:00 or ...Z); a bare local time is rejected with an actionable message.


Design notes

  • One client (src/client.ts) owns base URLs, apiKey injection, timeouts, bounded retries with exponential backoff + jitter on 429/5xx/network errors (honouring Retry-After), and typed errors. URLs are redacted before they reach a log line or error message.

  • Response shaping (src/util/shape.ts) projects HERE's verbose payloads into stable, agent-friendly structures: metres + km, seconds + human duration, traffic delay computed as duration − baseDuration, polylines opt-in, large span/instruction lists capped.

  • Place resolution: every tool that needs a point accepts either "lat,lng" or free-text (auto-geocoded with the configured country focus), so an agent never has to chain geocode → route manually.

  • Matrix uses the verified minimal body {origins,destinations,regionDefinition:{type:"world"}} (never matrixAttributes, which HERE v8 rejects), submits with async=true, polls the status URL with redirects manual so the key survives HERE's 303, then fetches the gzip result. transportMode/vehicle are only sent when explicitly requested.

  • Static maps are downloaded server-side and written inside HERE_MAP_OUTPUT_DIR; the returned URL is credential-free by design.

  • Health uses HERE's /health endpoints where they exist and minimal real queries otherwise. HERE does not expose remaining monthly quota per key over these APIs, so quota is reported as "not exposed"; x-ratelimit-* headers are surfaced when present.


Security

  • HERE_API_KEY is read from the environment only; it is never logged, never returned in tool output, and errors are scrubbed of it.

  • All log output goes to stderr, never stdout (stdio transport integrity).

  • .env* is gitignored; only .env.example is committed.

  • here_map_image will not write outside the configured output directory, and only writes a file when the bytes really are a PNG/JPEG.

  • Tool annotations mark every tool read-only except here_map_image (local file write). No HERE data is mutated by this server.


Tests

npm test        # 35 unit + integration tests (vitest, mocked fetch)
npm run build   # tsc → dist/
npm run typecheck

Coverage includes: URL/parameter building (deep objects, repeated via, keyless URLs, S3 redirects), retries/429, 4xx typed errors, timeouts, binary map responses, the full vehicle[...] truck mapping, avoid-feature aliases, response shaping (route summaries, traffic delay, fares-as-alternatives, matrix envelope, traffic results[]), the Flexible Polyline reference vector, and end-to-end tests over both an in-memory transport and real Streamable HTTP (initialize → tools/list → tools/call → health).

Live verification against the real HERE APIs (all 14 tools) is recorded in EVIDENCE.md.


Known limitations

  • Matrix v8 is effectively car-based. The verified async flow accepts origins/destinations/regionDefinition; truck vehicle options are sent only when explicitly requested and may be rejected — use here_route for per-route HGV restrictions.

  • openNow is best-effort. HERE Geocoding & Search v7 does not return opening hours, so the tool reports openNowApplied:false with a warning when it cannot filter.

  • HERE silently ignores unknown parameters, so this server validates and documents every parameter it sends rather than trusting a 200.

  • No static "truck restriction lookup" tool: HERE's restriction data is exposed through routing (vehicle[...], avoid features) and map image vehicle_restrictions, not a queryable endpoint. here_map_image with style/features can render them visually.

  • here_waypoint_sequence has no HERE /health endpoint; here_api_health only probes it with probeCalculations=true (real calculation, consumes quota).


Licence

MIT — see LICENSE. The Flexible Polyline decoder in src/util/geo.ts is a TypeScript port of HERE's reference implementation (MIT, © HERE Europe B.V.).

Available Tools

14 tools
here_api_healthHERE API health and entitlement probeA
Read-only

Probe the configured HERE API key against every service this server uses and report connectivity, HTTP status, latency and any rate-limit headers. Services probed: geocode, reverseGeocode, discover, autosuggest, routing, matrix, isoline, traffic, mapImage; waypointSequence only when probeCalculations=true (it has no /health endpoint and would consume routing quota). Use this first when a HERE tool fails: it distinguishes a bad/expired key (401/403), a missing entitlement (403), an outage (5xx) and a network problem, service by service. Note: HERE does not expose remaining monthly quota per key through these APIs; x-ratelimit-* headers are reported when present. HERE_API_KEY values are never returned — only whether one is configured.

Inputs: services, timeoutMs, probeCalculations.

here_autosuggestHERE autosuggest (typed-ahead suggestions)A
Read-only

Turn a partial address/POI query into ranked suggestions using the HERE Autosuggest v7 API — the right tool when the user has typed only part of a name ("Manch", "Traff", "M6 Toll"). UK bias by default: without at, suggestions are restricted to a Great Britain bounding box (HERE Autosuggest does not accept a country-code filter). Pass at="lat,lng" to rank suggestions near a point (e.g. the driver's current location) instead. Suggestions include addresses, places, and query terms. Use here_geocode afterwards to resolve a chosen suggestion to coordinates if it has no position. For complete addresses or coordinates use here_geocode; for places around a point use here_search_places.

Inputs: q (required), at, lang, limit, +1 more.

here_flexible_polyline_decodeDecode HERE Flexible PolylineA
Read-only

Decode a HERE Flexible Polyline (the compact geometry returned by HERE Routing v8, Isoline v8 and Map Image v3) into a [lat,lng] point list. Pure local computation — no HERE API call, no quota, no key. Use it when a route/isoline response includes "encoded" polylines and you need coordinates: distances, bounding boxes, drawing, or checking whether a stop lies on the route geometry. Also returns the encoding header (precision, third dimension type) and an optional GeoJSON LineString for direct rendering/mapping. Invalid encodings are rejected with a clear validation error rather than silently producing wrong coordinates.

Inputs: encoded (required), includeGeoJson.

here_geocodeHERE geocode (address → coordinates)A
Read-only

Resolve a free-text address or place to WGS84 coordinates using the HERE Geocoding & Search v7 API. Use this first when you only have an address and need a point for routing, search or mapping. UK defaults: a country focus of GBR (set countryFocus to another ISO-3166-1 alpha-3 code, or "ANY" to search worldwide) and lang=en-GB. Examples: {"q":"10 Downing Street, London"}, {"q":"Trafford Park, Manchester"}, {"q":"M6 Toll","types":["place"]}. Returns a ranked list with formatted address components, lat/lng, bounding box and match score. Empty results are a success with count=0.

Inputs: q (required), at, bbox, lang, +4 more.

here_isolineHERE isoline (reachable area by time or distance)A
Read-only

Calculate the area reachable from a point within one or more time or distance ranges (isochrone/isodistance) using HERE Isoline Routing v8. HGV support: transportMode="truck" plus the same "truck" profile as here_route (metres/kg) so reachability respects height/weight/hazmat/tunnel restrictions. rangeType="time" (ranges in seconds, default [900,1800,2700] = 15/30/45 min) or "distance" (ranges in metres, default [5000,10000,15000]). Returns one polygon per range as HERE Flexible Polyline geometry; set includePolygonPoints=true to also get decoded [lat,lng] rings (larger). UK defaults: departure now with live traffic, en-GB notices, metric.

Inputs: origin (required), avoid, truck, ranges, +7 more.

here_map_imageHERE static map image (markers + route line)A

Render a static HERE map (Map Image API v3) centred on a point, with optional numbered/pinned markers and an optional route line, then save it as a PNG/JPEG and return the local file path. UK default style "explore.day". width/height default 800×600. zoom default 13 (city level); 9-10 gives a regional overview for a long HGV route. Route line: pass routePolyline (the encoded HERE Flexible Polyline returned by here_route includePolyline) — it is sent as HERE's compact overlay, so long routes do not overflow the URL — OR routePoints as [[lat,lng],…] (downsampled to 200 points). Markers are formatted as pinned labels. The saved file can be opened with an image viewer / read_image tool. The returned URL is credential-free; the HERE API key is never exposed (the image is fetched server-side and written to HERE_MAP_OUTPUT_DIR). For a simple “where is this?” image omit markers; for a delivery map pass markers for each stop.

Inputs: latitude (required), longitude (required), lang, zoom, +10 more.

here_reverse_geocodeHERE reverse geocode (coordinates → address)A
Read-only

Convert WGS84 coordinates into the nearest address/street/locality using the HERE Reverse Geocoding v7 API. Useful for naming a route origin/destination or for reporting where an incident or vehicle is. radiusM limits the search around the point (HERE "circle" filter); omit it for the nearest match only. Returns formatted addresses with country/postcode/street/house number and the distance to the requested point.

Inputs: latitude (required), longitude (required), lang, limit, +2 more.

here_routeHERE route (car/truck/bike/pedestrian, HGV profile)A
Read-only

Calculate a route with HERE Routing v8. Supports transportMode car | truck | pedestrian | bicycle | scooter. HGV routing: set transportMode="truck" and pass "truck" — e.g. {"heightM":4.2,"widthM":2.55,"lengthM":16.5,"grossWeightKg":44000,"weightPerAxleKg":11500,"axleCount":6,"trailerCount":1} — to honour height/width/weight/axle/hazmat/tunnel restrictions. Dimensions are metres and weights kg; they are converted to HERE vehicle[height] centimetres etc. Origin/destination/via accept either "lat,lng" or a free-text address (auto-geocoded, UK focus). departureTime or arrivalTime (RFC 3339 WITH offset, e.g. "2026-11-03T08:30:00+00:00") makes the route traffic-aware; without it the route is traffic-free (baseDuration == duration). By default returns a compact summary only (distance, duration, traffic delay, legs, critical notices). Opt in to polyline, turn-by-turn instructions, spans and tolls with the include* flags — polylines are large. UK defaults: units=metric, lang=en-GB, currency=GBP.

Inputs: origin (required), destination (required), via, lang, +20 more.

here_route_matrixHERE route matrix (origins × destinations)A
Read-only

Calculate travel times (and distances when available) between many origins and destinations with HERE Matrix Routing v8. Handles the HERE async job flow internally: submits the matrix, polls the status URL, downloads the gzip result, and returns a 2D durations matrix in seconds. If the job is still running after waitSeconds it returns matrixId + status so you can call again with {"matrixId":"..."} to resume. Locations are "lat,lng" or addresses (UK focus auto-geocode). Origins and destinations are ordered as supplied and echoed in the response so rows/columns are unambiguous. VERIFIED CAVEAT: HERE Matrix v8 is car-based in practice. transportMode and the HGV "truck" profile are only sent when you explicitly ask for them; if HERE rejects them, retry without them. For per-route HGV restrictions use here_route (truck) instead. The request body is the minimal verified payload: origins, destinations and regionDefinition {type:"world"}. matrixAttributes is never sent (v8 rejects it).

Inputs: origins (required), truck, matrixId, routingMode, +4 more.

here_route_tollsHERE route tolls (HGV toll costs and toll roads)A
Read-only

Calculate the toll cost and toll systems for an HGV route using HERE Routing v8 return=tolls. Returns totalCost (cheapest fare option per toll), totalCostMax (dearest), currency, and per-section toll details including toll system names, country, and every fare product with its validity period and payment methods. Typical UK results include "UK HGV LEVY ENGLAND" (day/week/month passes) and motorway tolls such as the M6 Toll. Passes are alternatives — do NOT sum them; use totalCost for the trip cost. Uses the same "truck" profile (metres/kg) as here_route so toll class is based on real dimensions/axles/emissions. emissionType maps to HERE tolls[emissionType] for Euro-class discounts. For a route summary without tolls use here_route; for traffic incidents on the corridor use here_traffic_incidents.

Inputs: origin (required), destination (required), via, avoid, +6 more.

here_search_placesHERE search places (discover / browse)A
Read-only

Find places around a coordinate — fuel stations, truck stops, depots, services, restaurants, etc. Free-text search uses HERE Discover v7 ("q"). If you pass "categories" it uses HERE Browse v7 with HERE Places category IDs (e.g. "700-7600-0116" for petrol stations) and "name" filtering. Always ranked by importance/distance from the supplied "at" point; radiusM is a hard circle filter. UK default: 2 km radius, en-GB names. HGV tip: combine with here_route to check whether the access is suitable for a large vehicle — place categories alone do not encode HGV access. openNow is best-effort: HERE GS7 returns no opening-hours data, so when it cannot be determined the response carries openNowApplied=false plus a warning and unfiltered items.

Inputs: at (required), q, lang, limit, +5 more.

here_traffic_flowHERE traffic flow (speeds and jam factor)A
Read-only

Read live traffic flow for roads within a bounding box, circle or corridor using HERE Traffic API v7. Returns jamFactor (0 = free flow, 10 = blocked), current speed, uncapped speed, free-flow speed, confidence and traversability per road segment, plus a location description and OLR reference. locationReferencing is MANDATORY for flow (default ["olr"]). maxJamFactor defaults to 10 so congestion is NOT hidden (HERE's own default of 1.0 would only return free-flowing roads). For HGV route risk assessment: average jam factor and count of jams ≥5 across the corridor is a quick congestion indicator before calling here_route. Note: HERE returns all matching segments; limit truncates the returned list only.

Inputs: at, bbox, limit, radiusM, +7 more.

here_traffic_incidentsHERE traffic incidents (closures, accidents, roadworks)A
Read-only

List live traffic incidents within a bounding box, circle or corridor using HERE Traffic API v7. Returns incident id, type (accident/construction/roadClosure/roadHazard/…), criticality (low/minor/major/critical), localised description and summary, start/end time, road-closed flag, affected length and an OLR location reference. Filter by criticality and type. locationReferencing defaults to ["olr"]; use ["shape"] if you need geometry points (adds size). For HGV planning: roadClosures and critical incidents are the ones to surface to a driver first — combine with here_route avoid areas if a closure blocks the planned corridor. Note: HERE returns all matching incidents; limit truncates the returned list only.

Inputs: at, bbox, lang, limit, +10 more.

here_waypoint_sequenceHERE waypoint sequence (multi-stop order optimisation)A
Read-only

Find the optimal visiting order for a multi-drop run using HERE Waypoints Sequence v8 (findsequence2). Provide a start (depot), an optional end, and the stops to visit. The response lists the optimised order with per-leg distance/time and totals — ideal for planning a delivery round for an HGV. improveFor="time" (default) or "distance". transportMode="truck" with the "truck" profile applies HGV restrictions for the whole sequence (metres/kg converted to HERE cm/kg with units). departureTime is RFC 3339 with offset; it defaults to "now" because live traffic is factored into the sequence. avoidFeatures uses HERE's mode route-features: tollroad, motorway, boatFerry, railFerry, tunnel, dirtRoad (strict avoidance).

Inputs: start (required), waypoints (required), end, truck, +5 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 14 tools

    Disambiguation5/5

    Each tool targets a distinct resource and operation, and related tools (geocode vs reverse_geocode vs autosuggest vs search_places; route vs route_matrix vs isoline vs waypoint_sequence vs route_tolls) are explicitly differentiated in the descriptions with clear usage guidance. An agent can reliably pick the right tool for a given input.

    Naming Consistency5/5

    All 14 tools are snake_case with a uniform 'here_' prefix followed by a predictable service/resource name (here_route, here_route_matrix, here_route_tolls, here_traffic_incidents, here_traffic_flow). No camelCase, mixed verbs, or inconsistent casing anywhere.

    Tool Count5/5

    14 tools is within the sweet spot for a routing/mapping server and each one earns its place, covering geocoding, search, routing, matrices, isolines, sequencing, tolls, traffic, mapping, decoding and diagnostics with no redundancy.

    Completeness5/5

    The surface covers a full geospatial lifecycle: forward/reverse geocoding, autosuggest, POI search, single/matrix/isoline/toll routing, waypoint optimization, incident and flow traffic, static map rendering, polyline decoding, and health probing. No obvious dead ends for an HGV routing/planning workflow.

    Related MCP Connectors

    Related MCP Servers