Skip to main content
Glama
holger1411

unofficialMCP4Vaillant

by holger1411

unofficialMCP4Vaillant

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.

This project is not affiliated with, endorsed by, or sponsored by Vaillant Group. "Vaillant" is a registered trademark of Vaillant Group; it is used here only to describe what the server connects to.

Disclaimer: This project uses an unofficial, reverse-engineered API via myPyllant and is not affiliated with Vaillant Group. The API may change or break at any time. Use at your own risk.

Features (v1, read-only)

  • Status snapshot — outdoor / room / DHW temperatures, water pressure, per-zone setpoints, per-circuit flow temperature, special functions.

  • Hardware inventory — controller, firmware, all heat generators and auxiliary devices, serial numbers.

  • Energy report — consumption, environment energy, heat generated per device per operation mode, with a derived COP estimate and quality flag.

  • Diagnostics — trouble codes, heating curve, bivalence points, holiday mode.

Write/control operations are explicitly out of scope for v1.

Related MCP server: zont-mcp

Prerequisites

  • A MyVaillant account with at least one claimed system.

  • Python 3.10–3.13 (myPyllant does not yet support 3.14).

  • Claude Desktop or any MCP-compatible client.

Installation

git clone https://github.com/holger1411/unofficialMCP4Vaillant.git
cd unofficialMCP4Vaillant
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e .

Configuration

cp .env.example .env
# edit .env and set VAILLANT_USERNAME, VAILLANT_PASSWORD,
# and (if not in Germany or not the Vaillant brand) VAILLANT_BRAND / VAILLANT_COUNTRY.

Variable

Default

Description

VAILLANT_USERNAME

required

MyVaillant account email

VAILLANT_PASSWORD

required

MyVaillant account password

VAILLANT_BRAND

vaillant

One of vaillant, sdbg, bulex, glow-worm

VAILLANT_COUNTRY

germany

Country slug (see myPyllant.const.COUNTRIES)

VAILLANT_DEFAULT_SYSTEM_ID

empty

Override picked system when more than one exists

VAILLANT_CACHE_ENABLED

true

Disable for debugging

VAILLANT_LOG_LEVEL

INFO

DEBUG / INFO / WARNING / ERROR

Claude Desktop

Add to your claude_desktop_config.json (see claude_desktop_config_snippet.json for a template):

{
  "mcpServers": {
    "unofficial-mcp4vaillant": {
      "command": "/absolute/path/to/unofficialMCP4Vaillant/.venv/bin/python",
      "args": ["-m", "vaillant_mcp_server"],
      "env": {
        "VAILLANT_USERNAME": "your-email@example.com",
        "VAILLANT_PASSWORD": "your-password"
      }
    }
  }
}

Available Tools

Tool

Description

vaillant_get_status

Current temperatures, water pressure, modes, per-zone/DHW state

vaillant_get_devices

Static hardware inventory

vaillant_get_energy_report

Energy consumption + COP estimate over a time range

vaillant_get_diagnostics

Trouble codes, heating curve, holiday mode

Time ranges accepted: today, yesterday, week (ISO Mon–today), month, year, custom. All ranges are resolved in the home's local timezone, not the host's.

Architecture

  • Single long-lived MyPyllantAPI instance, owned by a VaillantClient. Concurrent reads are lock-free; the lock is held only during initial login and re-login.

  • On 401/403, the client transparently re-authenticates and retries the call once. The old API instance stays usable for in-flight callers and is closed after they drain.

  • Transient errors (5xx, timeouts, connection resets) retry up to 3× with jittered exponential backoff. Rate limits (429) raise a dedicated error honoring Retry-After.

  • Per-tool TTL cache (status 60 s, devices 24 h, energy_report 5 min, diagnostics not cached). Failures are never cached.

  • All logs go to stderr through a SecretRedactor filter that scrubs credentials, tokens, serial numbers, and UUIDs.

Security

See SECURITY.md. Report security issues via GitHub Private Vulnerability Reporting, not as public issues.

Development

pip install -e '.[dev]' || pip install -r requirements-dev.txt
pytest
ruff check .
mypy

See CONTRIBUTING.md for fixture-capture and live-test workflows.

Credits

This project would not exist without:

License

MIT.

Available Tools

4 tools
vaillant_get_devicesA

Static hardware inventory: home name, controller model, firmware, plus all heat-generators, backup heaters, ventilation, gateway. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
system_idNo

TDQS

A3.6/5.0
Behavior4/5

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

No annotations provided; description compensates by declaring the tool is static and read-only, which are key behavioral traits. However, lacks details on auth requirements or potential errors.

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?

Single sentence with clear list of included data. Front-loaded with core purpose. No unnecessary words.

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?

Given no annotations, no output schema, and 1 undocumented parameter, the description provides a high-level overview but lacks completeness on parameter semantics and return format. Adequate for a simple read-only tool but has gaps.

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

Parameters1/5

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

Schema has one parameter (system_id) with 0% description coverage. The tool description does not explain what system_id is, its format, or how to obtain it, leaving the parameter entirely undocumented.

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

Purpose5/5

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

Description clearly states it provides static hardware inventory including specific components, and notes it's read-only. Distinct from siblings (diagnostics, energy report, status).

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?

Implicitly useful for retrieving hardware details, but no explicit when-to-use/when-not-to-use guidance or comparison with siblings.

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

vaillant_get_diagnosticsB

Diagnostic snapshot split into engineering_config (heating curve, bivalence points, controller type) and volatile_state (DTCs, holiday, system_off). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
system_idNo

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavioral traits. It only states 'Read-only', which indicates safety but omits details like whether it's a point-in-time snapshot, any performance implications, or authentication requirements.

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?

The description is a single sentence of 18 words, front-loading the main purpose and then elaborating succinctly. Every word is necessary with no redundancy.

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?

Given the tool's complexity (one optional parameter, no output schema, no annotations), the description partially compensates by naming the two return categories and their sub-items. However, it lacks detail on the 'system_id' parameter and return format, leaving gaps.

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

Parameters1/5

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

The description provides no information about the only parameter 'system_id'. Schema description coverage is 0%, and the description does not explain its purpose or usage, leaving the agent uninformed about how to invoke the tool correctly.

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

Purpose5/5

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

The description clearly states that the tool retrieves a 'Diagnostic snapshot' and splits it into two categories: engineering_config and volatile_state, listing specific attributes. This distinguishes it from sibling tools (vaillant_get_devices, vaillant_get_energy_report, vaillant_get_status) which target different data.

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?

The description does not explicitly state when to use this tool over alternatives. While the purpose implies it's for diagnostics, no guidance on prerequisites or exclusions is provided. Sibling tools differ in data type, but no comparison is given.

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

vaillant_get_energy_reportB

Energy consumption and generation per device per operation_mode for a given time range, in the home's local timezone. Includes a derived cop_estimate (heat_generated / consumed_electrical) with a quality flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoISO date, required for custom
system_idNo
start_dateNoISO date, required for custom
time_rangeNotoday
device_uuidNo

TDQS

B3.2/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 discloses that it returns consumption, generation, and a derived cop_estimate with a quality flag, but does not mention side effects, permissions, or limitations. Transparency is moderate.

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?

The description is a single sentence that effectively conveys purpose and output details without extraneous information. It is front-loaded with key actions and returns.

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

Completeness2/5

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

With 5 parameters, no output schema, and no annotations, the description lacks explanation of parameter roles, data units, error handling, or usage constraints. The output is partially described but incomplete for an agent to fully understand the tool's behavior.

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

Parameters2/5

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

Schema description coverage is only 40% (end_date, start_date described). The description hints at 'time range' and 'per device' but does not explain parameters like system_id, device_uuid, or how operation_mode is used (likely in output). It adds little beyond schema for parameters.

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

Purpose5/5

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

The description clearly states it retrieves energy consumption and generation per device per operation_mode for a time range in local timezone, including a derived COP estimate. This verb-resource combination and specificity distinguish it from siblings like vaillant_get_devices or vaillant_get_diagnostics.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings or prerequisites. The description implies a time-range query but fails to mention scenarios or exclusions, leaving the agent without clear decision criteria.

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

vaillant_get_statusA

Current snapshot of the Vaillant heat pump system: outdoor temperature, water pressure, energy manager state, plus per-zone, per-circuit, per-DHW, per-ventilation details. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
system_idNoOptional system_id; defaults to env or first system.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explicitly states 'Read-only,' indicating no side effects, and lists the specific data fields returned. This provides clear behavioral context for a read operation.

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?

The description is a single sentence that is front-loaded with the key purpose ('Current snapshot') and lists the data types. Every word adds value; no redundancy or waste.

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?

Given the simplicity of the tool (one optional parameter, read-only, no output schema), the description adequately covers the return values (list of data points). It does not specify the exact format (e.g., JSON object), but for a status snapshot this is acceptable.

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% (the parameter 'system_id' is documented in the input schema). The description does not add any meaning beyond the schema; it does not mention the parameter or its default behavior. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states it provides a 'current snapshot' of the Vaillant heat pump system, listing specific data points (outdoor temperature, water pressure, etc.). This distinguishes it from sibling tools like vaillant_get_devices or vaillant_get_diagnostics, which have different purposes.

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?

The description implies usage for a system status snapshot and labels it 'Read-only,' but does not explicitly state when to use it versus alternatives or provide exclusion criteria. The sibling tools are mentioned in context but not differentiated in usage.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedvaillant_get_devices
    • First observedvaillant_get_diagnostics
    • First observedvaillant_get_energy_report
    • First observedvaillant_get_status

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct aspect: devices for hardware inventory, diagnostics for configuration and faults, energy report for consumption data, and status for live system state. No overlap in purpose.

Naming Consistency5/5

All tools follow a consistent pattern: 'vaillant_get_<resource>', using snake_case and a uniform verb-noun structure.

Tool Count5/5

Four tools is well-scoped for a read-only monitoring server covering essential areas: inventory, diagnostics, energy, and live status.

Completeness4/5

Covers all key read-only needs for a heat pump system. Minor gap: no historical trending beyond energy report, and no tool for firmware updates or config changes, but those are likely write operations outside scope.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    A Model Context Protocol server that enables AI assistants like Claude to interact directly with Home Assistant, allowing them to query device states, control smart home entities, and perform automation tasks.
    16
    337
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that connects AI assistants to the ZONT heating system via the official REST API. It enables users to monitor device states, control heating modes, and perform diagnostics using natural language.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that wraps the Ambient Weather REST API. Query your personal weather stations conversationally from Claude Code, Claude.ai, or any MCP-compatible client.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP (Model Context Protocol) server that exposes Polestar 2 vehicle data to AI assistants like Claude. Query your car's battery status, vehicle info, and health data through natural conversation.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/holger1411/unofficialMCP4Vaillant'

If you have feedback or need assistance with the MCP directory API, please join our Discord server