Skip to main content
Glama
wattsonic-modbus-docs

wattsonic-modbus-docs

Official

wattsonic-modbus-docs

Read-only Model Context Protocol server with the Modbus documentation of the Wattsonic MATIC hybrid inverter (ARM firmware M013V1130B01D05 or later), the same content as https://modbus.wattsonic.com/:

  • the native EMS register map (10000-19800) with integration fields (write function, effective conditions, read-back registers, persistence),

  • the SunSpec model chain (40000-40478: models 1, 123, 124, 103, 203, 120, 121, 122, 160) in the SunSpec JSON layout,

  • closed-loop control recipes (EMS session with watchdog and heartbeat, active-power setpoint, power limit, reactive power, Eco schedule, SunSpec gate, SunSpec limit, forced charge/discharge, recovery, emergency stop),

  • both reference pages as Markdown.

Safety

Documentation only. The server has no Modbus client, opens no network connection and never connects to an inverter. validate_write checks a planned write against the documentation and returns guidance; it does not write. generate_client_code returns source code as text; that code writes to a real inverter when you run it, so review it first.

Related MCP server: docs-mcp

Tools

Tool

Purpose

search_registers(query, interface?)

Find registers by address, name, SunSpec point or words

get_register(address)

Full record of a native register or SunSpec point

list_sunspec_models()

Model chain, addresses, lengths, writable points, conventions

get_sunspec_point(model, point)

One SunSpec point with device notes, writable range, scale factor

list_recipes() / get_recipe(task)

Closed-loop control recipes

validate_write(address, value, function_code)

Access, range, scale, 0x06-only rule, preconditions, read-back

generate_client_code(recipe_id, language, transport="tcp")

Python (pymodbus), Node.js (modbus-serial), C# (NModbus), Go (goburrow/modbus)

get_doc_section(page, section)

One section of the documentation as Markdown

Resources: wattsonic://docs/native.md, wattsonic://docs/sunspec.md, wattsonic://docs/llms.txt, wattsonic://docs/registers.v1130.json, wattsonic://docs/sunspec-models.v1130.json, wattsonic://docs/recipes.v1130.json, wattsonic://docs/VERSION.json. Prompt: integrate-matic-ems (goal, interface).

Data version: VERSION.json (<firmware>+<build date>, e.g. M013V1130B01D05+2026-10-23).

Install and configure

Requires uv. Run directly:

uvx wattsonic-modbus-docs

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "wattsonic-modbus-docs": { "command": "uvx", "args": ["wattsonic-modbus-docs"] }
  }
}

Claude Code:

claude mcp add wattsonic-modbus-docs -- uvx wattsonic-modbus-docs

Cursor (.cursor/mcp.json or ~/.cursor/mcp.json):

{
  "mcpServers": {
    "wattsonic-modbus-docs": { "command": "uvx", "args": ["wattsonic-modbus-docs"] }
  }
}

Codex (CLI and IDE extension; ~/.codex/config.toml):

codex mcp add wattsonic-modbus-docs -- uvx wattsonic-modbus-docs

or in ~/.codex/config.toml:

[mcp_servers.wattsonic-modbus-docs]
command = "uvx"
args = ["wattsonic-modbus-docs"]

Development

uv venv .venv && uv pip install --python .venv/bin/python -e ".[test]"
.venv/bin/python -m pytest -q

License

Code: Apache License 2.0. Documentation data: CC BY 4.0. See NOTICE for trademarks.

Available Tools

9 tools
generate_client_codeA

Generate a client program template for a recipe, using the libraries of the website examples: Python pymodbus (ModbusTcpClient), Node.js modbus-serial, C# NModbus, Go goburrow/modbus. The template checks the preconditions, performs the write sequence with the documented function codes, reads the confirmation registers and runs the keep-alive. Conditional steps are behind flags that default to off. The code writes to a live inverter when run: review it first. This server only returns text and never connects to a device.

Inputs: language (required), recipe_id (required), host, unit_id, +1 more.

get_doc_sectionA

Return one section of the published documentation as Markdown (from the heading to the next heading of the same level). If the heading is not found, returns the list of section headings. Documentation only; never touches a device.

Inputs: page (required), section (required).

get_recipeB

A closed-loop control recipe: preconditions (with read checks), ordered steps (op read/write, address, function code, raw value or value range, check), confirmation reads with expected values, failure and recovery, notes and the documentation sections it is based on. Values are raw register values; negative values are sent as 16-bit two's complement. Documentation only; never touches a device.

Inputs: task (required).

get_registerA

Full documentation of one register: name, description, type, scale/unit, access, documented range and values, and where documented: applies_from_firmware, write_function (0x06 only or 0x06/0x10), effective_when, confirm_by (registers to read back) and persistence (retained, volatile, volatile_over_tcp, command). For SunSpec addresses: model, point, size, sf with its constant value, writable range, device notes. Documentation only; never touches a device.

Inputs: address (required).

get_sunspec_pointB

One SunSpec point in the SunSpec model layout (name, type, size, sf, units, access, mandatory, symbols) with the device object: address, offset, implemented (yes/conditional/no), writable and write_range (raw), write_kind (control, stored_setting, fixed_value), sf_address and sf_value, and the device notes on how to read or write it precisely. Documentation only; never touches a device.

Inputs: model (required), point (required).

list_recipesA

List the closed-loop control recipes (id, title, interface, summary): EMS session with watchdog and heartbeat, active-power setpoint 11045, power limit 11320/11321, reactive power, Eco schedule, watchdog recovery, restart recovery, emergency stop, SunSpec gate, SunSpec active-power limit, SunSpec forced charge/discharge. Documentation only; never touches a device.

Inputs: no named parameters.

list_sunspec_modelsA

The device's SunSpec model chain: base address 40000 ('SunS'), each model with ID address, length, point count and writable points, the END marker, transport and data conventions (word order, scale factors, not-implemented values). Documentation only; never touches a device.

Inputs: no named parameters.

search_registersA

Search the documented registers of the Wattsonic MATIC inverter (native EMS map and SunSpec map).

Returns compact entries: address, name or SunSpec point, type, unit/scale or sf, access. Use get_register for the full record (value list, range, write function, effective conditions, read-back registers, persistence). Documentation only; never touches a device.

Inputs: query (required), limit, interface.

validate_writeA

Check a planned write against the documentation WITHOUT writing anything: access (read-only points are rejected), documented range, scale, single-register requirement (0x06 only for 11300-11303, 11320-11324, 11330, 11057, 11254, commands), SunSpec writable range, gate and veto preconditions, side effects (e.g. 0x5A5A on 12026) and the registers to read back afterwards. Returns verdict ok / ok_with_warnings / reject with reasons. Guidance only; this server never connects to a device and never writes registers.

Inputs: value (required), address (required), function_code, value_is_engineering.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 9 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes: search vs full register lookup, SunSpec model vs point lookup, recipe list vs recipe detail, and validation vs code generation. The main possible confusion is between get_register and get_sunspec_point for SunSpec addresses, though their descriptions distinguish register-level and point-layout views.

    Naming Consistency5/5

    All tools use snake_case with a predictable verb_noun pattern (search_registers, get_register, list_sunspec_models, get_sunspec_point, list_recipes, get_recipe, validate_write, generate_client_code, get_doc_section). The naming is internally consistent and readable.

    Tool Count5/5

    Nine tools is well-scoped for a documentation/guidance server covering register lookup, SunSpec inspection, recipes, write validation, code generation, and documentation retrieval. Each tool appears to earn its place without excessive surface area.

    Completeness4/5

    The surface covers the main workflows: discovering registers, inspecting full records, navigating SunSpec models and points, listing and reading recipes, validating planned writes, generating client code, and retrieving documentation sections. Minor gaps exist, such as no dedicated recipe search/filtering or firmware-compatibility overview, but agents can likely work around them.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables deterministic querying of RVTDocs documentation with tools for fetching, scanning, and debugging documentation content.
      9
      2
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Local documentation search server for AI models using hybrid retrieval (phrase, keyword, vector). Provides MCP tools to search and fetch documentation from bundled or custom doc sets without any external API keys.
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables local-first search and analysis of Boxes home inventory exports and images, with tools for inventory queries, documentation audits, and signed webhook verification.
      7
      Apache 2.0
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI clients to search and retrieve current technical documentation for supported agent frameworks such as LangChain, LlamaIndex, AutoGen, Agno, OpenAI Agents SDK, MCP docs, CAMEL-AI, and CrewAI. It supports both stdio and SSE transport so documentation can be accessed locally or remotely.
      -