Skip to main content
Glama
Disane87

weishaupt-wem-mcp-server

Weishaupt WEM Portal MCP Server

Control and monitor your Weishaupt heating system with AI assistants via the WEM Portal

Version npm License: MIT Blog Website

MCP TypeScript Node.js semantic-release

GitHub Stars GitHub Issues CI


Features

  • Device Discovery - List all devices and modules from your WEM Portal account

  • Live Parameters - Read temperatures, pressure, operating modes with current values

  • Full Overview - Get a complete snapshot of your entire heating system in one call

  • Write Parameters - Adjust target temperatures, operating modes, schedules

  • Device Status - Check connection status of your devices

  • Writable Filter - List only the parameters you can actually change

  • Session Management - Automatic cookie-based auth with login lock for concurrent requests


Related MCP server: victron-tcp

Quick Start

No installation needed. Configure your MCP client to run:

npx @disane-dev/weishaupt-wem-mcp-server

Install from source

git clone https://github.com/Disane87/weishaupt-wem-mcp-server.git
cd weishaupt-wem-mcp-server
npm install
npm run build

Configuration

Add to your Claude Desktop config:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "weishaupt-wem": {
      "command": "npx",
      "args": ["-y", "@disane-dev/weishaupt-wem-mcp-server"],
      "env": {
        "WEM_USERNAME": "your_email@example.com",
        "WEM_PASSWORD": "your_password"
      }
    }
  }
}
claude mcp add weishaupt-wem -- npx -y @disane-dev/weishaupt-wem-mcp-server

Set the environment variables WEM_USERNAME and WEM_PASSWORD before starting.

{
  "mcpServers": {
    "weishaupt-wem": {
      "command": "node",
      "args": ["/path/to/wem-mcp/build/index.js"],
      "env": {
        "WEM_USERNAME": "your_email@example.com",
        "WEM_PASSWORD": "your_password"
      }
    }
  }
}

Environment Variables

Variable

Required

Description

WEM_USERNAME

Yes

Your WEM Portal email

WEM_PASSWORD

Yes

Your WEM Portal password

WEM_API_URL

No

API base URL (default: https://www.wemportal.com/app)


Available Tools

Tool

Description

wem_get_devices

List all devices with modules. Call this first to discover IDs.

wem_get_device_status

Get connection status of a device

wem_get_overview

Full device overview: all modules with all parameters in one call

wem_get_parameters

Get all parameters of a module with current values

wem_get_parameter_meta

Get parameter metadata (names, min/max, enums, writable flag)

wem_get_writable_parameters

List only adjustable parameters with ranges and options

wem_read_parameters

Read specific parameter values by ID

wem_write_parameter

Set a parameter value (e.g., target temperature)

TIP

Start withwem_get_devices to discover your deviceId, moduleIndex, and moduleType, then use wem_get_overview for a complete snapshot of your heating system.


Typical Workflow

1. wem_get_devices
   -> Returns devices with modules (WE0=heat generator, HZK0=heating circuit, WW0=hot water)

2. wem_get_overview (deviceId)
   -> Returns ALL modules with ALL parameters in one call

3. wem_get_writable_parameters (deviceId, moduleIndex, moduleType)
   -> Shows what you can adjust, with min/max ranges

4. wem_write_parameter (deviceId, moduleIndex, moduleType, parameterId, numericValue)
   -> Sets a writable parameter (e.g. target temperature)

Common Module Types

Type

Name

Description

1

SYSTEM

System overview

2

HZK

Heating circuit (temperatures, operating mode)

3

WW

Hot water (temperature, push, schedule)

5

TERMINAL

Control panel

6

GATEWAY

Communication gateway

7

WE

Heat generator (boiler/heat pump performance)

9

Device

Physical device unit

10

GROUND

Ground module


Development

Command

Description

npm run build

Build the project

npm run watch

Watch mode (auto-rebuild on changes)

npm start

Run server directly

npm test

Test API connection

npm run inspector

Official MCP Inspector (Web UI)

npm run inspector:cli -- devices

CLI inspector for quick API tests


Troubleshooting

NOTE

Make sure you can log in atwemportal.com before using this server.

Issue

Solution

Authentication failed

Verify credentials, check if WEM Portal blocks after too many attempts

Connection timeout

Check internet, WEM Portal may be temporarily unavailable (30s default timeout)

Parameter values show 0

Some parameters (e.g. room temperature) require a physical sensor connected to the device


Contributing

Contributions are welcome! Please open an issue or submit a pull request.


License

MIT - see LICENSE


disane.dev | Blog | GitHub | npm


Available Tools

8 tools
wem_get_devicesA

Get all WEM devices with their modules. Returns device IDs, names, connection status, and module list (each with Index, Type, Name). Use this first to discover deviceId, moduleIndex, and moduleType needed for other tools.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose the shape of what comes back (IDs, names, connection status, module list with field names), implying a read-only enumeration, but says nothing about volume, pagination, or whether the list is scoped to a target/connection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: purpose and scope first, then return fields, then usage ordering. Every clause earns its place and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields, and with no parameters there is nothing else required to invoke it. The remaining gap is the unexplained overlap with wem_get_device_status and any guidance on result size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is no parameter semantics to compensate for. The description correctly implies the call needs no input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get all WEM devices") and enumerates the return contents: device IDs, names, connection status, and module list with Index/Type/Name. It is mostly distinguishable from siblings, but it returns connection status while a sibling named wem_get_device_status exists, and the description never explains how the two differ.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this first to discover deviceId, moduleIndex, and moduleType needed for other tools" gives explicit sequencing and the downstream purpose, which is strong guidance for a zero-param discovery tool. It stops short of naming the alternatives it feeds into or saying when a more targeted sibling should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_get_device_statusB

Get connection/online status of a specific device.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. 'Get' implies a non-mutating read and 'connection/online status' discloses the core returned concept, but there is no mention of permissions, status value semantics (online/offline/unknown), freshness, or behavior for unknown device IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is efficient, though slightly sparse given the absence of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers what is fetched but not the shape or meaning of the status values, nor error behavior for invalid device IDs. Adequate minimum but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single deviceId parameter already documents its source ('from wem_get_devices'). The description adds no further parameter meaning, so the schema does the heavy lifting and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('connection/online status of a specific device'), which is clearly distinct from wem_get_devices (which lists devices) and the parameter tools. It doesn't explicitly name the sibling boundary, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'a specific device', suggesting single-device status checks rather than bulk listing. There is no explicit when-to-use/when-not guidance or named alternative for listing devices, leaving routing to be inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_get_overviewA

Get a complete overview of a device: all modules with all their parameters and current values in a single call. Useful for getting a full picture of the heating system state.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does disclose the key behavior that this is an aggregate single-call read returning every module's parameters and current values, which hints at a large response. It omits whether the payload is truncated/paginated, permission requirements, and cost of a full sweep.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core capability and the "single call" qualifier before the usage note. The second sentence is mildly redundant but does add decision context rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter, no annotations, and no output schema, the description usefully compensates by describing what comes back (all modules, all parameters, current values). It is nearly complete for a simple read tool; only pagination/size expectations and a sibling comparison are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents that deviceId comes from wem_get_devices, so the schema does the heavy lifting. The description adds no further meaning about the parameter, which is the expected baseline for fully documented single-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get an overview of a device) and defines scope precisely: all modules with all parameters and current values in one call. It implicitly contrasts with the narrower sibling readers like wem_get_parameters and wem_read_parameters, but never names them, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for getting a full picture of the heating system state" implies when to reach for it, but no explicit when-not condition or named alternative is given. An agent must guess whether to call this instead of wem_get_devices + wem_get_parameters or wem_get_device_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_get_parameter_metaA

Get metadata for all parameters of a module: parameter IDs, names, writable flag, data types, min/max values, enum options. Use this to discover available parameters before reading values.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)
moduleTypeYesModule type (from device's Modules array)
moduleIndexYesModule index (from device's Modules array)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It helpfully enumerates the returned metadata fields and implies a read-only discovery operation, but never explicitly states read-only/non-destructive semantics, permission requirements, or pagination/response shape for large modules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the capability and followed by the workflow guidance. No filler, no repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does the necessary work by listing the returned metadata fields and the intended discovery workflow. Minor gaps remain around read-only guarantees and response size, but an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already documents its provenance (deviceId from wem_get_devices, moduleType/moduleIndex from the device's Modules array). The description adds no additional parameter meaning beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get metadata for all parameters of a module') and enumerates exactly what the metadata contains (IDs, names, writable flag, data types, min/max, enum options). It implicitly distinguishes itself from value-reading siblings via 'before reading values', though it never names wem_get_parameters or wem_read_parameters directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage context: 'Use this to discover available parameters before reading values', which establishes the discovery-before-read workflow. It does not explicitly exclude alternatives or explain when to prefer wem_get_parameters or wem_get_writable_parameters, which matters given seven siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_get_parametersA

Get all parameters of a module with current values. Combines metadata + refresh + read into one call. Returns parameter names, current numeric/string values, units, and writable flags.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)
moduleTypeYesModule type (from device's Modules array)
moduleIndexYesModule index (from device's Modules array)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does real work by disclosing that this is a composite operation bundling a refresh, not a pure cached read — that is meaningful behavioral context an agent won't get from the schema. It stops short of saying whether the refresh causes a round-trip to the device, what happens on communication failure, or any permission/latency implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then the operational nuance, then the return shape. Every sentence earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by enumerating the return fields (names, values, units, writable flags). It is nearly complete; it could still say what the values look like for suppressed/invalid params or how errors surface, but nothing critical to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: all three params are documented with provenance pointers back to wem_get_devices and the device's Modules array. The description adds no parameter-level semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get all parameters of a module with current values') and the composite nature of the call, which implicitly separates it from the granular siblings wem_get_parameter_meta and wem_read_parameters. It never names those siblings, so the differentiation is left partly to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Combines metadata + refresh + read into one call' implies this is the one-shot alternative to the granular tools, so the when-to-use is implied. There is no explicit statement of when NOT to call it (e.g., when only metadata is needed, prefer wem_get_parameter_meta) and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_get_writable_parametersA

Get only the writable parameters of a module (parameters that can be changed). Shows current values, min/max ranges, and enum options. Useful to see what can be adjusted.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)
moduleTypeYesModule type
moduleIndexYesModule index

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does well to disclose the return shape (current values, min/max ranges, enum options) and implies a non-mutating read via 'get', but says nothing about prerequisites, whether device state/busy state matters, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the scoping qualifier and the return content. No filler, though the parenthetical duplicates the word 'writable' already present in the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming exactly what the response contains (values, min/max, enum options). With parameters fully covered by the schema, this is close to complete for a simple read tool; only permissions/prerequisites are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented; the description adds nothing about deviceId, moduleIndex, or moduleType, including how to discover a valid moduleType or moduleIndex. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and a precisely scoped resource (only writable parameters of a module), with a parenthetical clarifying what 'writable' means. It implicitly distinguishes itself from the broader parameter-reading siblings by the word 'only', though it never names wem_get_parameters or wem_read_parameters directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful to see what can be adjusted' implies a use case but gives no explicit when-to-use or when-not-to-use guidance relative to the sibling tools that also read parameters (wem_get_parameters, wem_read_parameters, wem_get_parameter_meta). The agent must infer the routing itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_read_parametersA

Read current values for specific parameters. Refreshes data from device first, then reads. Use when you only need specific parameter values instead of all.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)
moduleTypeYesModule type
moduleIndexYesModule index
parameterIdsYesArray of parameter IDs to read (from wem_get_parameter_meta)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description still discloses a non-obvious behavioral trait: it refreshes data from the device before reading, implying device I/O and added latency versus a cached read. It does not cover failure behavior, permissions, or whether the refresh has side effects on the device.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose and then the refresh behavior, with no filler. There is mild redundancy in 'Read current values ... then reads' but it costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Four required parameters, no annotations, and no output schema mean the description carries the burden of explaining results, yet it says nothing about what is returned (values keyed by parameter ID? partial failures for invalid IDs?). The refresh disclosure helps, but the return-shape gap leaves it only minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every property already documents its source tool (wem_get_devices, wem_get_parameter_meta), so baseline 3 applies. The description adds no meaning about the parameters themselves, e.g. whether parameterIds must come from the same module or how moduleType interacts with parameterIds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read current values for specific parameters') with a scoping qualifier ('specific' vs all) that implicitly separates it from wem_get_parameters. It never names that sibling explicitly, so the differentiation must be inferred from the trailing 'instead of all' clause.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when you only need specific parameter values instead of all' gives a clear selection condition against the bulk-read alternative. It stops short of naming wem_get_parameters or stating exclusions such as when a full snapshot is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wem_write_parameterA

Set a parameter value (e.g., target temperature). Only works for writable parameters. Check wem_get_parameter_meta for min/max values and enum options first.

NameRequiredDescriptionDefault
deviceIdYesDevice ID (from wem_get_devices)
moduleTypeYesModule type
moduleIndexYesModule index
parameterIdYesParameter ID to write
stringValueNoString value (optional, for enum/text parameters)
numericValueYesNumeric value to set

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses the writable-only constraint and the need to pre-validate ranges/enums, which is meaningful. It says nothing about whether the write is immediate, persistent across reboots, what error surface appears for out-of-range values, or whether it is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the constraint and the prerequisite check front-loaded before any elaboration. Nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-required-parameter mutation tool with no annotations and no output schema, the description covers the essential guardrails (writable check, meta lookup) but leaves open units, what the call returns, and the stringValue/numericValue decision. Adequate, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all six parameters, giving a baseline of 3. The description adds no field-level meaning beyond the example value, and in particular never explains the numericValue vs. stringValue selection that an agent must decide for enum/text parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Set a parameter value" names a specific verb and resource, with a concrete example (target temperature) that makes the abstraction tangible. It does not explicitly contrast itself with sibling read tools like wem_read_parameters, but the write/read split is inferable from the name and text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a hard precondition ("Only works for writable parameters") and a sequencing instruction ("Check wem_get_parameter_meta for min/max values and enum options first"). That is real routing guidance, though it never names the alternative write path or says what to do if the parameter turns out non-writable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 8 tool updatesv0.2.0
    • First observedwem_get_device_status
    • First observedwem_get_devices
    • First observedwem_get_overview
    • First observedwem_get_parameter_meta
    • First observedwem_get_parameters
    • First observedwem_get_writable_parameters
    • First observedwem_read_parameters
    • First observedwem_write_parameter

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation3/5

Five of eight tools are read-oriented and overlap substantially: wem_get_parameters explicitly 'combines metadata + refresh + read', which duplicates wem_get_parameter_meta and wem_read_parameters, while wem_get_overview and wem_get_writable_parameters are largely views/filters over the same data. The descriptions do clarify scope (device-wide vs module-wide vs specific params vs writable-only), preventing total confusion, but an agent must read carefully to pick correctly.

Naming Consistency4/5

All tools use a clean wem_<verb>_<noun> snake_case pattern. The only blemish is inconsistent verb choice for the same operation: wem_get_parameters vs wem_read_parameters vs wem_get_parameter_meta, which mixes 'get' and 'read' for parameter retrieval.

Tool Count4/5

Eight tools is a reasonable, well-scoped size for a device-control server. However, the read surface (overview, all parameters, specific parameters, writable parameters, metadata) could likely be consolidated to 2-3 tools, so a couple of tools do not fully earn their place.

Completeness4/5

The lifecycle is well covered: device discovery, status, parameter metadata, reading values, and writing values form a complete read/inspect/write loop. Minor gaps remain: no batch write for multiple parameters, and no alarm/fault/error diagnostics beyond connection status.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Home Assistant smart home devices through natural language. Control devices, manage automations, query entity states, and retrieve historical data across your home automation system.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connect AI assistants to Victron Energy systems to read real-time solar, battery, grid, and inverter data from your local network via Modbus TCP or MQTT.
    32
    29 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLM applications to query and visualize data from Bosch/Buderus heat pumps via ems-ESP, including temperatures, statistics, and heat curves through natural language.
    9
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An unofficial MCP (Model Context Protocol) server that exposes a Vaillant heat pump's data to AI assistants like Claude. Query outdoor and room temperatures, hot water status, energy consumption, COP estimates, schedules, and diagnostics through natural conversation.
    4
    MIT