MCP server wrapping HERE EV Routing and Geocoding APIs for electric vehicles. Exposes tools for planning EV routes with charging stops using the HERE Routing API v8 with EV-specific consumption and charging parameters.
Server has 4 tools with complete input schemas and descriptions. Naming follows verb_noun convention (geocode_place, list_vehicles, get_vehicle, plan_route). Descriptions are present and substantive (100-300 chars), explaining WHAT each tool does and WHEN to use it. However, parameter descriptions lack detail on constraints (e.g., initial_soc_pct accepts 0-100 but no validation guidance in description text). Output schemas are documented in docstrings but not formally declared in tool registration. Error handling is basic, no recovery guidance or categorization. No tool annotations (readOnlyHint, destructiveHint). Composition is sound: tools are single-purpose and chainable (geocode_place feeds into plan_route). Security: API key properly injected via environment variable, not exposed as parameter.
Resolve a place name or address to lat/lng coordinates via HERE Geocoding. Results are cached on disk to avoid redundant API calls. If `query` is already a "lat,lng" string it is returned as-is without calling the API.
Get full specs (battery, consumption tables, charging curve) for a vehicle.
List all supported EV models in the plugin catalog.
Plan an EV route from origin to destination with automatic charging stops. Uses HERE Routing v8 with EV params (consumption tables, charging curve, connector types). If origin or destination is not "lat,lng", it is geocoded via HERE Geocoding.
Output schemas not formally declared in tool registration. Docstrings document return structure, but FastMCP tool decorator does not expose structured output schema to clients. LLMs cannot parse expected response fields without explicit schema.
Parameter descriptions lack constraint details. E.g., initial_soc_pct and min_arrival_soc_pct accept 0-100 but descriptions do not state range, min/max, or validation rules. LLMs may pass invalid values (e.g., 150) without guidance.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared. Clients cannot infer safety properties without explicit annotations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Error handling lacks recovery guidance. RuntimeError and ValueError are raised but do not suggest next steps (e.g., 'Unknown vehicle id, call list_vehicles() to see available options'). Errors are not categorized as retryable vs. user-fixable.
list_vehicles() returns no pagination or limit. If vehicle catalog grows large, response could bloat context. No offset/limit parameters or total count returned.