Buva EcoStream MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Buva EcoStream MCP ServerWhat's the current CO₂ level?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Buva EcoStream MCP Server
An MCP (Model Context Protocol) server that connects Claude to a Buva EcoStream WTW ventilation unit over your local network.
Once installed, you can control your ventilation and read air quality data directly in conversation with Claude — no app needed.
Note: The EcoStream does not use a native WebSocket. It streams JSON state updates over a persistent HTTP long-poll connection. This server handles that automatically and falls back to polling if needed.
Features
Read live sensor data: CO₂, TVOC, humidity, temperatures (ETA/EHA/ODA), fan RPM, bypass position, heat recovery efficiency, WiFi info
Control fan presets (low / mid / high)
Set a custom airflow in m³/h with optional duration
Start/stop boost mode
Open/close bypass valve
Enable/disable schedule and summer comfort mode
Reset filter timer
Built-in endpoint discovery tool for diagnosing your specific device firmware
Related MCP server: Plugwise MCP Server
Requirements
Python 3.11+
Claude Desktop (or any MCP-compatible host)
Buva EcoStream on your local network with a known IP address
Installation
1. Clone or download this repository
git clone https://github.com/YOUR_USERNAME/ecostream-mcp.git
cd ecostream-mcp2. Install dependencies
pip3 install -r requirements.txt3. Configure Claude Desktop
Open your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following (adjust the path and IP address):
{
"mcpServers": {
"ecostream": {
"command": "python3",
"args": ["/absolute/path/to/ecostream-mcp/server.py"],
"env": {
"ECOSTREAM_HOST": "192.168.X.X",
"ECOSTREAM_PORT": "80",
"ECOSTREAM_STREAM": "/stream",
"ECOSTREAM_CONFIG": "/config"
}
}
}
}4. Restart Claude Desktop
The EcoStream tools will now appear automatically in Claude.
Configuration
All settings are passed as environment variables:
Variable | Default | Description |
|
| IP address of your EcoStream |
|
| HTTP port |
|
| Endpoint for reading state |
|
| Endpoint for sending commands |
If you're unsure which endpoints your firmware uses, run the discover_endpoints tool in Claude after installation — it probes all known paths and shows which ones respond.
Available Tools
Tool | Description |
| Returns all current sensor values: CO₂, temperatures, airflow, fan speed, bypass, modes, WiFi |
| Set ventilation to |
| Set a custom airflow in m³/h with an optional duration in minutes |
| Turn boost mode on or off (5, 10, 15, 30, or 60 minutes) |
| Open or close the bypass valve |
| Enable or disable the built-in ventilation schedule |
| Enable or disable summer comfort mode (auto-bypass on warm days) |
| Reset the filter replacement timer after changing the filter |
| Scan the device for working HTTP endpoints — useful for initial setup or debugging |
Example prompts
Once connected, you can ask Claude things like:
"What's the CO₂ level right now?"
"Turn on boost mode for 15 minutes, it's stuffy in here."
"Set ventilation to low for the night."
"Is the bypass open? What's the outside temperature?"
"Reset the filter timer, I just replaced the filter."
"Scan which endpoints the EcoStream responds to."
How it works
The EcoStream device exposes a local HTTP server. When polled, it returns JSON containing the full device state (sensor readings, active modes, setpoints). Configuration changes are sent as HTTP POST requests with a JSON body.
This server implements the MCP stdio transport, meaning Claude Desktop launches it as a subprocess and communicates over stdin/stdout.
State is fetched on demand when you call get_status. The server tries the configured streaming endpoint first, then falls back to /Status and /api/status if that fails.
For sending commands, the server tries the EcoStream JSON format ({"config": {...}}) and, if that doesn't respond, falls back to the older Q-Stream {"Value": "TIMER ..."} format.
Troubleshooting
"Cannot reach EcoStream"
Confirm the device IP with your router's DHCP table
Make sure your computer and the EcoStream are on the same network/VLAN
Try
curl http://192.168.x.x/Statusin a terminal to test basic connectivity
Tools appear but return errors
Run
discover_endpointsin Claude to see which paths actually respondAdjust
ECOSTREAM_STREAMandECOSTREAM_CONFIGin your config accordingly
Sensor values are missing or labeled "unknown"
Your firmware may use different JSON field names
Run
get_statusand look at the "Overige velden" section — those are unrecognised fields from the deviceOpen an issue with the raw output and I'll add support
Protocol notes
The reverse-engineered protocol is based on the community Home Assistant integration by @epodegrid and @Recognition2. This MCP server is an independent implementation and is not affiliated with BUVA.
Supported devices:
Device | Status |
BUVA EcoStream | ✅ Supported |
BUVA EcoStream+ | ✅ Supported |
BUVA Q-Stream 2.0 | ⚠️ Partial (different protocol, timer commands only) |
Other BUVA models | ❌ Not supported |
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/kalmma/buva-ecostream-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server