Victron Vrm Mcp — Mcp Server

by lubosstrejcek

217 downloads Not rated yet
GitHub

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:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Victron Vrm Mcp — Mcp Server
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. 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

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.