{
  "markdown": "<div align=\"center\">\n\n<img src=\"https://www.wemportal.com/favicon.ico\" alt=\"WEM Portal\" width=\"80\" />\n\n# Weishaupt WEM Portal MCP Server\n\n**Control and monitor your Weishaupt heating system with AI assistants via the WEM Portal**\n\n[![Version](https://img.shields.io/github/v/release/Disane87/weishaupt-wem-mcp-server?style=for-the-badge&label=Version&color=e63946)](https://github.com/Disane87/weishaupt-wem-mcp-server/releases)\n[![npm](https://img.shields.io/npm/v/@disane-dev/weishaupt-wem-mcp-server?style=for-the-badge&logo=npm&color=e63946)](https://www.npmjs.com/package/@disane-dev/weishaupt-wem-mcp-server)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n[![Blog](https://img.shields.io/badge/Blog-disane.dev-blue?style=for-the-badge&logo=ghost&logoColor=white)](https://blog.disane.dev)\n[![Website](https://img.shields.io/badge/Website-disane.dev-blue?style=for-the-badge&logo=safari&logoColor=white)](https://disane.dev)\n\n[![MCP](https://img.shields.io/badge/MCP-Server-purple?style=flat-square&logo=anthropic&logoColor=white)](https://modelcontextprotocol.io)\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js_%3E=18-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org/)\n[![semantic-release](https://img.shields.io/badge/semantic--release-conventionalcommits-e10079?style=flat-square&logo=semantic-release)](https://github.com/semantic-release/semantic-release)\n\n![GitHub Stars](https://img.shields.io/github/stars/Disane87/weishaupt-wem-mcp-server?style=flat-square&logo=github)\n![GitHub Issues](https://img.shields.io/github/issues/Disane87/weishaupt-wem-mcp-server?style=flat-square&logo=github)\n![CI](https://img.shields.io/github/actions/workflow/status/Disane87/weishaupt-wem-mcp-server/release.yml?style=flat-square&label=Release&logo=github)\n\n</div>\n\n---\n\n## Features\n\n- **Device Discovery** - List all devices and modules from your WEM Portal account\n- **Live Parameters** - Read temperatures, pressure, operating modes with current values\n- **Full Overview** - Get a complete snapshot of your entire heating system in one call\n- **Write Parameters** - Adjust target temperatures, operating modes, schedules\n- **Device Status** - Check connection status of your devices\n- **Writable Filter** - List only the parameters you can actually change\n- **Session Management** - Automatic cookie-based auth with login lock for concurrent requests\n\n---\n\n## Quick Start\n\n### Install via npx (recommended)\n\nNo installation needed. Configure your MCP client to run:\n\n```bash\nnpx @disane-dev/weishaupt-wem-mcp-server\n```\n\n### Install from source\n\n```bash\ngit clone https://github.com/Disane87/weishaupt-wem-mcp-server.git\ncd weishaupt-wem-mcp-server\nnpm install\nnpm run build\n```\n\n---\n\n## Configuration\n\n<details open>\n<summary><strong>Claude Desktop</strong></summary>\n\nAdd to your Claude Desktop config:\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"weishaupt-wem\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@disane-dev/weishaupt-wem-mcp-server\"],\n      \"env\": {\n        \"WEM_USERNAME\": \"your_email@example.com\",\n        \"WEM_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary><strong>Claude Code</strong></summary>\n\n```bash\nclaude mcp add weishaupt-wem -- npx -y @disane-dev/weishaupt-wem-mcp-server\n```\n\nSet the environment variables `WEM_USERNAME` and `WEM_PASSWORD` before starting.\n\n</details>\n\n<details>\n<summary><strong>From source</strong></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"weishaupt-wem\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/wem-mcp/build/index.js\"],\n      \"env\": {\n        \"WEM_USERNAME\": \"your_email@example.com\",\n        \"WEM_PASSWORD\": \"your_password\"\n      }\n    }\n  }\n}\n```\n\n</details>\n\n### Environment Variables\n\n| Variable | Required | Description |\n|---|---|---|\n| `WEM_USERNAME` | Yes | Your WEM Portal email |\n| `WEM_PASSWORD` | Yes | Your WEM Portal password |\n| `WEM_API_URL` | No | API base URL (default: `https://www.wemportal.com/app`) |\n\n---\n\n## Available Tools\n\n| Tool | Description |\n|---|---|\n| `wem_get_devices` | List all devices with modules. **Call this first** to discover IDs. |\n| `wem_get_device_status` | Get connection status of a device |\n| `wem_get_overview` | Full device overview: all modules with all parameters in one call |\n| `wem_get_parameters` | Get all parameters of a module with current values |\n| `wem_get_parameter_meta` | Get parameter metadata (names, min/max, enums, writable flag) |\n| `wem_get_writable_parameters` | List only adjustable parameters with ranges and options |\n| `wem_read_parameters` | Read specific parameter values by ID |\n| `wem_write_parameter` | Set a parameter value (e.g., target temperature) |\n\n> [!TIP]\n> Start with `wem_get_devices` to discover your `deviceId`, `moduleIndex`, and `moduleType`, then use `wem_get_overview` for a complete snapshot of your heating system.\n\n---\n\n## Typical Workflow\n\n```\n1. wem_get_devices\n   -> Returns devices with modules (WE0=heat generator, HZK0=heating circuit, WW0=hot water)\n\n2. wem_get_overview (deviceId)\n   -> Returns ALL modules with ALL parameters in one call\n\n3. wem_get_writable_parameters (deviceId, moduleIndex, moduleType)\n   -> Shows what you can adjust, with min/max ranges\n\n4. wem_write_parameter (deviceId, moduleIndex, moduleType, parameterId, numericValue)\n   -> Sets a writable parameter (e.g. target temperature)\n```\n\n### Common Module Types\n\n| Type | Name | Description |\n|---|---|---|\n| 1 | SYSTEM | System overview |\n| 2 | HZK | Heating circuit (temperatures, operating mode) |\n| 3 | WW | Hot water (temperature, push, schedule) |\n| 5 | TERMINAL | Control panel |\n| 6 | GATEWAY | Communication gateway |\n| 7 | WE | Heat generator (boiler/heat pump performance) |\n| 9 | Device | Physical device unit |\n| 10 | GROUND | Ground module |\n\n---\n\n## Development\n\n| Command | Description |\n|---|---|\n| `npm run build` | Build the project |\n| `npm run watch` | Watch mode (auto-rebuild on changes) |\n| `npm start` | Run server directly |\n| `npm test` | Test API connection |\n| `npm run inspector` | Official MCP Inspector (Web UI) |\n| `npm run inspector:cli -- devices` | CLI inspector for quick API tests |\n\n---\n\n## Troubleshooting\n\n> [!NOTE]\n> Make sure you can log in at [wemportal.com](https://www.wemportal.com/) before using this server.\n\n| Issue | Solution |\n|---|---|\n| Authentication failed | Verify credentials, check if WEM Portal blocks after too many attempts |\n| Connection timeout | Check internet, WEM Portal may be temporarily unavailable (30s default timeout) |\n| Parameter values show 0 | Some parameters (e.g. room temperature) require a physical sensor connected to the device |\n\n---\n\n## Contributing\n\nContributions are welcome! Please open an issue or submit a pull request.\n\n<!-- contrib:start -->\n<div align=\"center\">\n\n<a href=\"https://github.com/Disane87/weishaupt-wem-mcp-server/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=Disane87/weishaupt-wem-mcp-server\" />\n</a>\n\n</div>\n<!-- contrib:end -->\n\n---\n\n## License\n\nMIT - see [LICENSE](LICENSE)\n\n---\n\n<div align=\"center\">\n\n**[disane.dev](https://disane.dev)** | **[Blog](https://blog.disane.dev)** | **[GitHub](https://github.com/Disane87)** | **[npm](https://www.npmjs.com/package/@disane-dev/weishaupt-wem-mcp-server)**\n\n</div>\n",
  "bytes": 7607,
  "sha": "e829b45c205e0cf6771c46bbcc1b3ae9944ca6b89dd4bcd34fba6994aa68b297",
  "repo_slug": "disane87/weishaupt-wem-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_disane87_weishaupt_wem_mcp_ser_63b40459/readme"
}