sigenergy-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SIGENERGY_HOST | Yes | IP address of the Sigenergy system (required) | |
| SIGENERGY_PORT | No | Modbus TCP port | 502 |
| SIGENERGY_TIMEOUT | No | Modbus request timeout, seconds | 10 |
| SIGENERGY_PLANT_ID | No | Plant device id | 247 |
| SIGENERGY_AUDIT_LOG | No | File to append a JSON line to for every write | |
| SIGENERGY_LOG_LEVEL | No | Python log level | WARNING |
| SIGENERGY_HTTP_TOKEN | No | Bearer token required by the HTTP transport | |
| SIGENERGY_ALLOW_WRITES | No | Enable control (write) tools | false |
| SIGENERGY_INVERTER_IDS | No | Comma-separated inverter device ids | 1 |
| SIGENERGY_AC_CHARGER_IDS | No | AC charger (EVAC) device ids, usually 1 | |
| SIGENERGY_DC_CHARGER_IDS | No | DC charger (EVDC) ids = the inverter's id | |
| SIGENERGY_HTTP_ALLOWED_HOSTS | No | Allowed Host headers for HTTP, e.g. pi.local:8000,192.168.1.20:8000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_plant_statusA | Live overview of the whole system: PV, battery, grid and load power, battery SOC, mode and active alarms.
|
| get_battery_statusB | Battery (ESS) state for the whole plant: SOC, SOH, power, capacity, available energy and limits. |
| get_grid_statusB | Grid connection point: total and per-phase active/reactive power and on/off-grid status. |
| get_energy_totalsA | Plant energy counters (kWh): PV, load, battery, grid import/export and EV charger totals. These registers need Modbus protocol V2.5+ firmware; any the system doesn't support are listed in |
| get_inverter_statusA | Detailed live data for a hybrid inverter: power, battery, temperatures, AC voltages/currents and PV strings. Args: inverter_id: Modbus device id of the inverter. Omit to read every configured inverter. |
| get_inverter_infoA | Static inverter information: model, serial number, firmware and ratings. Args: inverter_id: Modbus device id of the inverter. Omit to read every configured inverter. |
| get_control_settingsB | Current plant control settings: remote EMS enable/mode, power limits and SOC limits. |
| list_registersB | List the named registers known to this server for the plant or an inverter. |
| read_registersA | Read named registers (see list_registers) and return scaled values with units. Args: names: Register names, e.g. ["ess_soc", "pv_power"]. scope: "plant" (system level), "inverter", "ac_charger" or "dc_charger". device_id: Modbus device id. Defaults to the plant id (247) or the first configured device of that kind. |
| read_raw_registersA | Read arbitrary registers by address, for registers not in the built-in map. Args: address: Start register address as given in the Sigenergy Modbus protocol (e.g. 30014). count: Number of 16-bit words to read (1-125). device_id: Modbus device id. Defaults to the plant id (247). register_type: "input" (function 0x04) or "holding" (0x03). Defaults to input for 3xxxx, holding otherwise. data_type: Optionally decode the words as this type. |
| get_ev_charger_statusA | Status of every configured Sigen EV charger. AC chargers (EVAC): state (IEC 61851: no vehicle / connected / charging...), charging power, energy, ratings, alarms. DC chargers (EVDC, built into a SigenStor): state, output power, vehicle SOC, session energy and duration, lifetime totals and power limits. |
| discover_devicesA | Scan Modbus device ids to find the plant, inverters, DC chargers and AC chargers. Probes ids 1..max_device_id in order and stops at the first id that doesn't answer. Use the result to set SIGENERGY_INVERTER_IDS, SIGENERGY_AC_CHARGER_IDS and SIGENERGY_DC_CHARGER_IDS. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Each tool targets a distinct subsystem (plant, grid, battery, inverter, EV charger, energy totals, registers), so boundaries are mostly clear. The only mild overlap is that get_plant_status summarizes data also exposed by the individual status tools, but descriptions clarify the live-overview vs subsystem-detail distinction.
Names follow a consistent verb_noun snake_case pattern (get_*_status, get_*_info, list_registers, read_registers, read_raw_registers, discover_devices). The verbs (get/list/read/discover) map predictably to action type.
12 tools is well within the sweet spot for a monitoring/inspection domain, and each earns its place by covering a distinct device or data access layer.
The read surface is thorough: live status, static info, energy counters, settings, named-register and raw-register access, device discovery, and EV charging. The notable gap is write/control operations (e.g. setting power or SOC limits) implied by get_control_settings, though read_raw_registers partially mitigates unmapped reads.