Victron Vrm Mcp — Mcp Server
About
# Victron VRM MCP — MCP Server MCP server for Victron Energy's [VRM cloud API](https://vrmapi.victronenergy.com/v2/docs). Exposes 52 VRM tools over Streamable HTTP — ready for the [Anthropic MCP Connector API](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) and any HTTP-capable MCP client. > 52…
Explore
- 52 tools covering 88 VRM operations (direct + widget endpoints)
- All destructive tools are confirm-gated for safety
- Streamable HTTP transport for remote, API-backed usage
- Security-first design with per-request authentication
- 208 tests for reliability
- Compatible with Anthropic MCP Connector and any MCP-over-HTTP client
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Victron Vrm Mcp — Mcp ServerCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Unlike victron-tcp, this package is a server you self-host, not a process your client spawns. You run it once, put HTTPS in front of it, and connect MCP clients to its URL.
npx victron-vrm-mcp
npm install -g victron-vrm-mcp
victron-vrm-mcp
| Variable | Default | Description |
|----------|---------|-------------|
| PORT | 3000 | HTTP port |
| HOST | 127.0.0.1 | Bind address |
| MCP_PATH | /mcp | Endpoint path |
| VRM_AUTH_SCHEME | Token | Default scheme for forwarding to VRM. Use Token (access tokens). Bearer is deprecated by VRM on 2026-06-01. Per-request override: x-vrm-auth-scheme header. |
| VRM_ALLOWED_SITES | _(unset)_ | Comma-separated idSite allowlist. If unset, any site the token can access is allowed. |
| ALLOWED_ORIGINS | _(unset)_ | Comma-separated list of allowed Origin header values. If unset, only same-origin + loopback accepted. |
vrm_list_installations
List all sites the token can access (supports `limit` for markdown truncation)
vrm_search_sites
Search by site ID, email, username, serial number, site identifier, or email domain
vrm_get_site_id
Resolve a 12-char portal ID to a numeric `idSite`
vrm_list_invites
List invitations issued/received by the user
vrm_get_system_overview
Connected devices + roles for a site
vrm_get_diagnostics
Per-device last-known attribute values
vrm_get_stats
Time-series stats (15min/hours/days/weeks/months/years)
vrm_get_overallstats
Lifetime aggregate stats
vrm_get_alarms
Configured alarms, devices, notification users, available attributes
vrm_get_site_users
Users + invites + access requests + group links on a site
vrm_get_tags
Tags grouped by source (user/team/group/predefined)
vrm_get_dynamic_ess_settings
Current Dynamic ESS configuration
vrm_get_gps_download
GPS position history
vrm_get_forecasts_last_reset
Timestamp of the last forecasts reset (0 if never)
vrm_get_custom_widgets
Custom widgets configured on a site
vrm_widget
Generic dispatcher for any VRM widget name (BatterySummary, SolarChargerSummary, TankSummary, VeBusState, MPPTState, InputState, InverterState, PVInverterStatus, MotorSummary, GlobalLinkSummary, MeteorologicalSensorOverview, Status, HoursOfAc, LithiumBMS, DCMeter, FuelCellState, BatteryRelayState, ChargerRelayState, GatewayRelayState, SolarChargerRelayState, BatteryMonitorWarningsAndAlarms, VeBusWarningsAndAlarms, InverterChargerState, InverterChargerWarningsAndAlarms, EssBatteryLifeState, IOExt
vrm_widget_graph
Time-series graph with `attributeCodes[]` / `attributeIds[]`, `start`/`end`, `useMinMax`
vrm_widget_generator_state
Generator state-change timeline
vrm_set_favorite
Mark/unmark a site as favorite
vrm_tags_add
Attach a tag to a site
vrm_tags_remove
Detach a tag from a site
vrm_clear_alarm
Acknowledge an active alarm
vrm_add_alarm
Create alarm (float or enum threshold variant)
vrm_edit_alarm
Modify existing alarm
vrm_delete_alarm
Delete alarm definition
vrm_reset_forecasts
Reset forecasting baseline for a site
vrm_set_site_settings
Update site name/notes/geofence/alarm-monitoring/Node-RED restrictions/etc.
vrm_set_dynamic_ess_settings
Write Dynamic ESS configuration (schedule, b2g, priceSchedule, batteryKwh, etc.)
vrm_invite_user
Invite a user by email with access level (0=monitoring, 1=admin, 2=technician)
vrm_unlink_user
Remove a user from a site
vrm_unlink_installation
Remove the current user from a site (self-unlink)
vrm_set_user_rights
Bulk-update per-user access levels
vrm_set_invite_rights
Bulk-update pending-invite access levels
vrm_link_user_groups
Link user groups with access levels
vrm_set_user_group_access_level
Change or remove a user group's access level
vrm_add_site
Add an installation to a user account
vrm_create_access_token
Create a long-lived personal access token
vrm_delete_access_token
Revoke one token by id or ALL with `"*"` — **can self-lockout**
vrm_auth_login_as_demo
Fetch a short-lived Bearer for the demo tenant (read-only)
vrm_auth_login
Log in with email+password (DEPRECATED, security hazard — use access tokens)
vrm_auth_logout
Invalidate the current Bearer session
vrm_create_custom_widget
Create (confirm-gated)
vrm_patch_custom_widget
Update (confirm-gated)
vrm_delete_custom_widget
Delete (confirm-gated)
vrm_find_by_data_attributes
Search user's installations by attribute conditions (`bs>=50,au=(1,2)`); server-side `page`/`count` pagination
vrm_list_data_attributes
Catalog of all VRM attribute definitions
vrm_admin_list_devices
All devices across the system
vrm_admin_data_attributes_count
Count installations by data-attribute condition
vrm_admin_search_download
Bulk search export
vrm_list_firmwares
Firmware catalog (requires `feedChannel` + `victronConnectVersion`)
vrm_add_system
Register a new system (confirm-gated)
vrm_installation_overview_download
Bulk overview export (returns binary payload as base64)
52 tools covering 88 VRM operations (52 direct + 35+ widget endpoints via the generic vrm_widget dispatcher). Every destructive tool is confirm: true gated; every tool declares inputSchema, outputSchema, and MCP annotations.
<details>
<summary><strong>Discovery & Lookup (4 tools)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_list_installations | List all sites the token can access (supports limit for markdown truncation) |
| vrm_search_sites | Search by site ID, email, username, serial number, site identifier, or email domain |
| vrm_get_site_id | Resolve a 12-char portal ID to a numeric idSite |
| vrm_list_invites | List invitations issued/received by the user |
</details>
<details>
<summary><strong>Monitoring — reads (11 tools)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_get_system_overview | Connected devices + roles for a site |
| vrm_get_diagnostics | Per-device last-known attribute values |
| vrm_get_stats | Time-series stats (15min/hours/days/weeks/months/years) |
| vrm_get_overallstats | Lifetime aggregate stats |
| vrm_get_alarms | Configured alarms, devices, notification users, available attributes |
| vrm_get_site_users | Users + invites + access requests + group links on a site |
| vrm_get_tags | Tags grouped by source (user/team/group/predefined) |
| vrm_get_dynamic_ess_settings | Current Dynamic ESS configuration |
| vrm_get_gps_download | GPS position history |
| vrm_get_forecasts_last_reset | Timestamp of the last forecasts reset (0 if never) |
| vrm_get_custom_widgets | Custom widgets configured on a site |
</details>
<details>
<summary><strong>Widgets (3 tools — 35+ widget endpoints covered)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_widget | Generic dispatcher for any VRM widget name (BatterySummary, SolarChargerSummary, TankSummary, VeBusState, MPPTState, InputState, InverterState, PVInverterStatus, MotorSummary, GlobalLinkSummary, MeteorologicalSensorOverview, Status, HoursOfAc, LithiumBMS, DCMeter, FuelCellState, BatteryRelayState, ChargerRelayState, GatewayRelayState, SolarChargerRelayState, BatteryMonitorWarningsAndAlarms, VeBusWarningsAndAlarms, InverterChargerState, InverterChargerWarningsAndAlarms, EssBatteryLifeState, IOExtenderInOut, BMSDiagnostics, HistoricData, TempSummaryAndGraph, TempAirQuality, EvChargerSummary, etc.) |
| vrm_widget_graph | Time-series graph with attributeCodes[] / attributeIds[], start/end, useMinMax |
| vrm_widget_generator_state | Generator state-change timeline |
</details>
<details>
<summary><strong>Writes — low-risk (4 tools, confirm-gated)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_set_favorite | Mark/unmark a site as favorite |
| vrm_tags_add | Attach a tag to a site |
| vrm_tags_remove | Detach a tag from a site |
| vrm_clear_alarm | Acknowledge an active alarm |
</details>
<details>
<summary><strong>Writes — medium-risk (5 tools, confirm-gated)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_add_alarm | Create alarm (float or enum threshold variant) |
| vrm_edit_alarm | Modify existing alarm |
| vrm_delete_alarm | Delete alarm definition |
| vrm_reset_forecasts | Reset forecasting baseline for a site |
| vrm_set_site_settings | Update site name/notes/geofence/alarm-monitoring/Node-RED restrictions/etc. |
</details>
<details>
<summary><strong>Writes — high-impact (1 tool, confirm-gated)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_set_dynamic_ess_settings | Write Dynamic ESS configuration (schedule, b2g, priceSchedule, batteryKwh, etc.) |
</details>
<details>
<summary><strong>Access management (8 tools, confirm-gated)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_invite_user | Invite a user by email with access level (0=monitoring, 1=admin, 2=technician) |
| vrm_unlink_user | Remove a user from a site |
| vrm_unlink_installation | Remove the current user from a site (self-unlink) |
| vrm_set_user_rights | Bulk-update per-user access levels |
| vrm_set_invite_rights | Bulk-update pending-invite access levels |
| vrm_link_user_groups | Link user groups with access levels |
| vrm_set_user_group_access_level | Change or remove a user group's access level |
| vrm_add_site | Add an installation to a user account |
</details>
<details>
<summary><strong>Access tokens (2 tools, confirm-gated)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_create_access_token | Create a long-lived personal access token |
| vrm_delete_access_token | Revoke one token by id or ALL with "*" — can self-lockout |
</details>
<details>
<summary><strong>Auth (3 tools — Bearer flow, deprecated 2026-06-01)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_auth_login_as_demo | Fetch a short-lived Bearer for the demo tenant (read-only) |
| vrm_auth_login | Log in with email+password (DEPRECATED, security hazard — use access tokens) |
| vrm_auth_logout | Invalidate the current Bearer session |
</details>
<details>
<summary><strong>Custom widgets CRUD (4 tools)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_get_custom_widgets | List custom widgets on a site |
| vrm_create_custom_widget | Create (confirm-gated) |
| vrm_patch_custom_widget | Update (confirm-gated) |
| vrm_delete_custom_widget | Delete (confirm-gated) |
</details>
<details>
<summary><strong>Data attributes (2 tools)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_find_by_data_attributes | Search user's installations by attribute conditions (bs>=50,au=(1,2)); server-side page/count pagination |
| vrm_list_data_attributes | Catalog of all VRM attribute definitions |
</details>
<details>
<summary><strong>Admin / collection (6 tools — most require admin privileges)</strong></summary>
| Tool | Description |
|------|-------------|
| vrm_admin_list_devices | All devices across the system |
| vrm_admin_data_attributes_count | Count installations by data-attribute condition |
| vrm_admin_search_download | Bulk search export |
| vrm_list_firmwares | Firmware catalog (requires feedChannel + victronConnectVersion) |
| vrm_add_system | Register a new system (confirm-gated) |
| vrm_installation_overview_download | Bulk overview export (returns binary payload as base64) |
</details>
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"victron vrm mcp \u2014 mcp server": [
{
"type": "url",
"url": "https://victron-vrm.example.com/mcp",
"name": "victron-vrm",
"authorization_token": "<your-vrm-personal-access-token>"
}
]
}
}
Mcp_servers
[
{
"type": "url",
"url": "https://victron-vrm.example.com/mcp",
"name": "victron-vrm",
"authorization_token": "<your-vrm-personal-access-token>"
}
]
Tools
[
{
"type": "mcp_toolset",
"mcp_server_name": "victron-vrm"
}
]
MCP server for Victron Energy's VRM cloud API. Exposes 52 VRM tools over Streamable HTTP — ready for the Anthropic MCP Connector API and any HTTP-capable MCP client.
> 52 tools | Streamable HTTP | Security-first | 208 tests | MCP Connector compatible
---
Which package do I want?
This is the cloud / remote half of a pair. The local / LAN half is victron-tcp.
| | victron-tcp | victron-vrm-mcp (this repo) |
|---|---|---|
| Transport | stdio (local subprocess) | Streamable HTTP (remote) |
| Data source | Modbus TCP + MQTT on your LAN | VRM cloud API |
| Needs access to the GX on your LAN | Yes | No |
| Works when you're away from the boat / house | No | Yes |
| Works when the internet is down | Yes | No |
| Latency | Real-time (~50 ms) | ~15 min (VRM sampling) |
| Raw register access | Yes (900+ registers) | No |
| Write coverage | Read-only today; writes via MQTT planned | 24 destructive tools, all confirm-gated |
| MCP Connector API compatible | No (stdio) | Yes (HTTPS) |
| Clients | Claude Code, Claude Desktop, Cursor, Windsurf | Anthropic Messages API + anything that speaks MCP over HTTP |
| Auth | None locally (trusts LAN) | Per-request VRM personal access token |
Use victron-tcp when: you're on the same LAN as a GX device and want real-time access with raw register support.
Use victron-vrm-mcp when: you need remote access, you're building an API-backed app via the MCP Connector, or you don't want to expose anything on your LAN.
You can use both simultaneously — they serve different use cases.
---
Installation
Unlike victron-tcp, this package is a server you self-host, not a process your client spawns. You run it once, put HTTPS in front of it, and connect MCP clients to its URL.
Run from npm (recommended)
```bash
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



