MCP server for Orbis Viaris EV chargers — monitor power, set limits and schedule charging from your local network.
Strong tool naming (all verb_noun pattern), comprehensive descriptions (avg 180 chars, within baseline 194), and complete input schemas with type definitions and parameter descriptions. All 12 tools have explicit registrations with descriptions and Zod schemas. Output is JSON-structured. Key gaps: no output schema documentation, missing error recovery guidance, no tool annotations (readOnlyHint/destructiveHint), and no pagination support for list-like tools (get_charging_history, get_configuration). Error handling returns raw messages without actionable recovery steps.
Schedules a charging time window. Times are in HH:MM format; a window crossing midnight (e.g. 23:00-06:00) is handled automatically.
Past charging sessions, most recent first: start, end, energy delivered in Wh, duration in minutes, and what started and stopped the charge.
Scheduled charging time windows, with times in HH:MM format.
Full read-only configuration: device, power limits, SPL mode, solar, LEDs, and under "readOnly" OCPP, Modbus and MQTT, which can only be changed from the web interface.
Charging status and instantaneous power of the chargers: how much the house is drawing, how much the car is drawing, and the active limits. Without "charger" it reports all chargers.
Removes a scheduled time window, given the id returned by get_charging_schedule.
No output schema documentation. Tools return JSON but LLMs cannot plan downstream calls without knowing response structure (e.g., what fields does get_status return? What is the structure of per-charger results?). Baseline: 100% of A+ tools document return types.
Error handling lacks recovery guidance. Failure() returns raw error messages without actionable next steps. Pattern requires: 'User not found. Try search_users() with a partial name.' Current: just err.message. LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Sets the maximum current in amperes that the charger can deliver to the car. The allowed maximum is whatever the device declares.
Allows or blocks charging outside the scheduled windows. This governs whether a session may begin: it does NOT interrupt charging already in progress, and the charger offers no way to do so over the local network. Requires at least one scheduled window to exist, otherwise the charger refuses the change.
Synchronizes the charger clock. Without parameters it sets the current time. The time zone requires timezone and timezoneCode together.
Sets the maximum power in watts that the household electrical supply can deliver. If the chargers are in an SPL master/slave setup the limit is written to the master and propagates; if they are independent, the response includes a warning about the risk of exceeding the contracted power.
Sets the charger LED intensity: 0 off, 50 reduced, 100 full.
Enables or disables solar charging and sets its priority.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Spec 2026-07-28 supports tool annotations to signal operation safety. get_status/get_charging_history/get_configuration should be marked readOnly=true; set_* tools should be marked destructive=true or idempotent=true. Helps LLMs reason about retry safety.
get_charging_history accepts 'limit' parameter but no pagination cursor/offset. Baseline pattern: tools returning lists must support pagination and return total count or next_cursor. Without it, large result sets blow context window.
set_device_time description mentions timezone parameters but does not explain when both 'timezone' and 'timezoneCode' are required together. Undocumented parameter dependencies cause silent misuse. Should state: 'Both timezone and timezoneCode must be provided together, or omit both to use system defaults.'