Tommertom/plugwise-mcp

๐Ÿ› ๏ธ Other Tools and Integrations
0 Views
0 Installs

๐Ÿ“‡ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - TypeScript-based smart home automation server for Plugwise devices with automatic network discovery. Features comprehensive device control for thermostats, switches, smart plugs, energy monitoring, multi-hub management, and real-time climate/power consumption tracking via local network integration.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "tommertom-plugwise-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "tommertom-plugwise-mcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

Plugwise MCP Server

A TypeScript-based Model Context Protocol (MCP) server for Plugwise smart home integration with automatic network discovery.

โœจ Key Features

  • ๐Ÿค– AI Agent Mode: Natural language control via built-in AI agent
  • ๐Ÿ“ก JSON-RPC Support: Programmatic API for scripting and automation
  • ๐Ÿ” Automatic Network Scanning: Discovers all Plugwise hubs on your network
  • ๐Ÿ” Credential Management: Stores hub passwords securely from .env file
  • ๐Ÿ”Œ Device Control: Control thermostats, switches, and smart plugs
  • ๐ŸŒก๏ธ Temperature Management: Set temperatures, presets, and schedules
  • ๐Ÿ“Š Energy Monitoring: Read power consumption and sensor data
  • ๐Ÿ  Multi-Hub Support: Manage multiple gateways simultaneously
  • ๐Ÿ”„ Real-time Updates: Get current device states and measurements

๐Ÿš€ Quick Start

Installation via npm (Recommended)

Install globally to use with any MCP client:

npm install -g plugwise-mcp-server

Or use directly with npx (no installation needed):

npx plugwise-mcp-server

Installation from Source

git clone https://github.com/Tommertom/plugwise-mcp-server.git
cd plugwise-mcp-server
npm install
npm run build

Prerequisites

  • Node.js 17 or higher
  • npm or yarn
  • Plugwise gateway (Adam, Anna, Smile P1, or Stretch)

Quick Test

Test the installation without real hardware using mock mode:

# Test all read operations
npm run test:read-only -- --mock

# Test protocol features
npm run test:features -- --mock

Or with real hardware:

# Set up gateway credentials
echo "PLUGWISE_HOST=192.168.1.100" > .env
echo "PLUGWISE_PASSWORD=your-gateway-password" >> .env

# Run tests
npm run test:read-only

See Quick Test Guide for more options.

Start the Server

Option 1: Standard MCP Server (15+ specialized tools)

When installed via npm:

plugwise-mcp-server

When running from source:

npm start

Option 2: AI Agent Mode (Single natural language tool)

# Interactive mode with prompt
npm run agent "List my devices"
npm run agent "Set living room to 21 degrees"

# Interactive with verbose debugging
npm run agent "What's the power usage?" -- -v

# MCP server mode (no arguments)
npm run agent

# JSON-RPC mode (for scripting)
npm run agent -- --jsonrpc
echo '{"jsonrpc":"2.0","method":"execute","params":{"instruction":"List devices"},"id":1}' | npm run agent -- --jsonrpc

See Agent Documentation and JSON-RPC Mode for details.

๐Ÿ”Œ Adding the MCP Server to Your Client

The Plugwise MCP server can work with any MCP client that supports standard I/O (stdio) as the transport medium. Choose between:

  • Standard Mode: 15+ specialized tools for direct device control
  • Agent Mode: Single manage_plugwise tool with natural language interface

Claude Desktop

Standard Mode (15+ tools):

{
  "mcpServers": {
    "plugwise": {
      "command": "npx",
      "args": ["-y", "plugwise-mcp-server@latest"],
      "env": {
        "HUB1": "abc12345",
        "HUB1IP": "192.168.1.100",
        "HUB2": "def67890",
        "HUB2IP": "192.168.1.101"
      }
    }
  }
}

Agent Mode (natural language):

{
  "mcpServers": {
    "plugwise-agent": {
      "command": "node",
      "args": ["/path/to/plugwise/dist/cli/plugwise-agent-cli.js"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "PLUGWISE_AGENT_MODEL": "gpt-4o-mini"
      }
    }
  }
}

Cline

To configure Cline to use the Plugwise MCP server, edit the cline_mcp_settings.json file. You can open or create this file by clicking the MCP Servers icon at the top of the Cline pane, then clicking the Configure MCP Servers button.

{
  "mcpServers": {
    "plugwise": {
      "command": "npx",
      "args": ["-y", "plugwise-mcp-server@latest"],
      "disabled": false,
      "env": {
        "HUB1": "abc12345",
        "HUB1IP": "192.168.1.100",
        "HUB2": "def67890",
        "HUB2IP": "192.168.1.101"
      }
    }
  }
}

Cursor

To configure Cursor to use the Plugwise MCP server, edit either the file .cursor/mcp.json (to configure only a specific project) or the file ~/.cursor/mcp.json (to make the MCP server available in all projects):

{
  "mcpServers": {
    "plugwise": {
      "command": "npx",
      "args": ["-y", "plugwise-mcp-server@latest"],
      "env": {
        "HUB1": "abc12345",
        "HUB1IP": "192.168.1.100",
        "HUB2": "def67890",
        "HUB2IP": "192.168.1.101"
      }
    }
  }
}

Visual Studio Code Copilot

To configure a single project, edit the .vscode/mcp.json file in your workspace:

{
  "servers": {
    "plugwise": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "plugwise-mcp-server@latest"],
      "env": {
        "HUB1": "abc12345",
        "HUB1IP": "192.168.1.100",
        "HUB2": "def67890",
        "HUB2IP": "192.168.1.101"
      }
    }
  }
}

To make the server available in every project you open, edit your user settings:

{
  "mcp": {
    "servers": {
      "plugwise": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "plugwise-mcp-server@latest"],
        "env": {
          "HUB1": "abc12345",
          "HUB1IP": "192.168.1.100",
          "HUB2": "def67890",
          "HUB2IP": "192.168.1.101"
        }
      }
    }
  }
}

Windsurf Editor

To configure Windsurf Editor, edit the file ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "plugwise": {
      "command": "npx",
      "args": ["-y", "plugwise-mcp-server@latest"],
      "env": {
        "HUB1": "abc12345",
        "HUB1IP": "192.168.1.100",
        "HUB2": "def67890",
        "HUB2IP": "192.168.1.101"
      }
    }
  }
}

Environment Variables

The server reads hub passwords from environment variables. You can provide these in two ways:

Option 1: MCP Configuration (Recommended) Add the env field directly to your MCP client configuration as shown in the examples above.

Option 2: .env File Create a .env file in your project root or set system-wide environment variables:

# Hub passwords (8-character codes from gateway stickers)
HUB1=abc12345
HUB2=def67890

# Optional: Known IP addresses for faster discovery and auto-loading
HUB1IP=192.168.1.100
HUB2IP=192.168.1.101

Security Note: When using the MCP configuration env field, credentials are passed securely to the server process. For enhanced security, consider using .env files which are typically excluded from version control.

Quick Test

# Automatically discover and connect to your hubs
node scripts/workflow-demo.js

๐Ÿ“ก MCP Tools

Network Discovery

connect

Connect to a Plugwise gateway.

// Connect to specific hub
await mcpClient.callTool('connect', { host: '192.168.1.100' });

// Manual connection
await mcpClient.callTool('connect', { 
  host: '192.168.1.100', 
  password: 'abc12345' 
});

Device Management

get_devices

Get all devices and their current states.

const result = await mcpClient.callTool('get_devices', {});
// Returns all devices, zones, sensors, and their current values

Climate Control

set_temperature

Set thermostat temperature setpoint.

await mcpClient.callTool('set_temperature', {
  location_id: 'zone123',
  setpoint: 21.0
});

set_preset

Change thermostat preset mode.

await mcpClient.callTool('set_preset', {
  location_id: 'zone123',
  preset: 'away'  // Options: home, away, sleep, vacation
});

Device Control

control_switch

Turn switches/plugs on or off.

await mcpClient.callTool('control_switch', {
  appliance_id: 'plug123',
  state: 'on'  // 'on' or 'off'
});

Gateway Management

  • set_gateway_mode: Set gateway mode (home, away, vacation)
  • set_dhw_mode: Set domestic hot water mode (auto, boost, comfort, off)
  • set_regulation_mode: Set heating regulation mode
  • delete_notification: Clear gateway notifications
  • reboot_gateway: Reboot the gateway (use with caution)

MCP Resources

  • plugwise://devices: Access current state of all devices as a resource

MCP Prompts

  • setup_guide: Get comprehensive step-by-step setup instructions

๐Ÿงช Testing

Comprehensive Read-Only Test Suite

npm run test:all

This runs a complete test of all read-only MCP operations:

  • โœ… Server health check
  • โœ… MCP protocol initialization
  • โœ… Network scanning for hubs
  • โœ… Gateway connection and info retrieval
  • โœ… Device state reading
  • โœ… Resources and prompts

Safe: Only tests read operations, never changes device states.

See Test Documentation for details.

Complete Workflow Demo

node scripts/workflow-demo.js

This demonstrates:

  1. โœ… Network scanning with .env passwords
  2. โœ… Auto-connection without credentials
  3. โœ… Device discovery and listing
  4. โœ… Multi-hub management

Network Scanning Test

node scripts/test-network-scan.js

Full MCP Test Suite

node scripts/test-mcp-server.js

Bash Script for Hub Discovery

./scripts/find-plugwise-hub.sh

๐Ÿ—๏ธ Supported Devices

Gateways

  • Adam: Smart home hub with OpenTherm support (thermostat control, floor heating)
  • Anna: Standalone thermostat gateway
  • Smile P1: Energy monitoring gateway (electricity, gas, solar)
  • Stretch: Legacy hub for connecting Circle smart plugs

Connected Devices

  • Jip: Motion sensor with illuminance detection
  • Lisa: Radiator valve (requires hub)
  • Tom/Floor: Floor heating controller
  • Koen: Radiator valve (requires a Plug as intermediary)
  • Plug: Smart plug with power monitoring (Zigbee)
  • Aqara Plug: Third-party Zigbee smart plug
  • Circle: Legacy Circle/Circle+ plugs (via Stretch only)

๐Ÿ“– Documentation

๐Ÿ”ง Development

Development Mode

Run with hot-reload:

npm run dev

Build

Compile TypeScript to JavaScript:

npm run build

Project Structure

plugwise/
โ”œโ”€โ”€ src/mcp/              # TypeScript source
โ”‚   โ”œโ”€โ”€ server.ts         # MCP server with tools
โ”‚   โ”œโ”€โ”€ plugwise-client.ts # Plugwise API client
โ”‚   โ””โ”€โ”€ plugwise-types.ts  # Type definitions
โ”œโ”€โ”€ build/mcp/            # Compiled JavaScript
โ”œโ”€โ”€ docs/                 # Documentation
โ”œโ”€โ”€ scripts/              # Test scripts
โ”‚   โ”œโ”€โ”€ workflow-demo.js
โ”‚   โ”œโ”€โ”€ test-network-scan.js
โ”‚   โ”œโ”€โ”€ test-mcp-server.js
โ”‚   โ””โ”€โ”€ find-plugwise-hub.sh
โ”œโ”€โ”€ .env                  # Hub credentials
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ tsconfig.json

๐Ÿ” Security

  1. Password Storage: Store passwords in .env file only (never in code)
  2. Git Ignore: .env is in .gitignore to prevent committing secrets
  3. Network Security: Plugwise uses HTTP Basic Auth (not HTTPS)
    • Keep gateways on secure local network
    • Use VPN for remote access
    • Consider separate VLAN for IoT devices
  4. API Access: The API has full control over your heating system - restrict access accordingly

๐Ÿ› Troubleshooting

No Hubs Found During Scan

  1. Check .env file has HUB1, HUB2, etc. defined
  2. Verify passwords are correct (case-sensitive, check gateway sticker)
  3. Ensure gateways are powered on and connected to network
  4. Confirm you're on the same network as the hubs
  5. Try: ping <gateway_ip> to test connectivity

Connection Errors

  1. Verify IP address is correct
  2. Check firewall isn't blocking port 80
  3. Test with manual connection: curl http://<ip>/core/domain_objects
  4. Ensure gateway isn't overloaded with requests

๐Ÿค Integration Examples

Using with Claude Code

claude mcp add --transport http plugwise-server http://localhost:3000/mcp

Using with VS Code Copilot

Add to .vscode/mcp.json:

{
  "mcpServers": {
    "plugwise": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

Using MCP Inspector

npx @modelcontextprotocol/inspector

Connect to: http://localhost:3000/mcp

๐Ÿ“Š Example Workflows

Morning Routine

// Connect to hub
await mcpClient.callTool('connect', { host: '192.168.1.100' });

// Set home mode
await mcpClient.callTool('set_preset', {
  location_id: 'living_room',
  preset: 'home'
});

// Warm up bathroom
await mcpClient.callTool('set_temperature', {
  location_id: 'bathroom',
  setpoint: 22.0
});

Energy Monitoring

const devices = await mcpClient.callTool('get_devices', {});

for (const [id, device] of Object.entries(devices.data)) {
  if (device.sensors?.electricity_consumed) {
    console.log(`${device.name}: ${device.sensors.electricity_consumed}W`);
  }
}

Multi-Hub Management

// List all hubs
const hubsList = await mcpClient.callTool('list_hubs', {});

// Get devices from each hub
for (const hub of hubsList.hubs) {
  await mcpClient.callTool('connect', { host: hub.ip });
  const devices = await mcpClient.callTool('get_devices', {});
  console.log(`Hub ${hub.ip}: ${Object.keys(devices.data).length} devices`);
}

๐Ÿ“š Documentation

Migration Guides

Architecture & Design

Implementation Guides

Quick References

Testing & Development

Publishing & Setup

๐ŸŒŸ Credits

Based on the excellent python-plugwise library.

Architectural patterns inspired by sonos-ts-mcp.

๐Ÿ“„ License

MIT License - See LICENSE file for details

๐Ÿš€ Version

Current version: 1.0.2

  • โœ… Full MCP protocol support
  • โœ… Automatic network scanning
  • โœ… Multi-hub management
  • โœ… Complete device control
  • โœ… Comprehensive documentation
  • โœ… Structure migration planning

Related MCP Servers

modelcontextprotocol/server-everythingVerified

๐Ÿ“‡ ๐Ÿ  - MCP server that exercises all the features of the MCP protocol

๐Ÿ› ๏ธ Other Tools and Integrations1 views
0xMassi/webclaw

๐Ÿฆ€ ๐Ÿ  ๐ŸŽ ๐Ÿง - Web content extraction for AI agents. 10 tools: scrape, crawl, map, batch, extract, summarize, diff, brand, search, research. TLS fingerprinting bypasses anti-bot without a browser. 67% fewer tokens than raw HTML. npx create-webclaw auto-configures Claude, Cursor, Windsurf, Codex, OpenCode.

๐Ÿ› ๏ธ Other Tools and Integrations0 views
2niuhe/plantuml_web

๐Ÿ ๐Ÿ  โ˜๏ธ ๐ŸŽ ๐ŸชŸ ๐Ÿง - A web-based PlantUML frontend with MCP server integration, enable plantuml image generation and plantuml syntax validation.

๐Ÿ› ๏ธ Other Tools and Integrations0 views
2niuhe/qrcode_mcp

๐Ÿ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - A QR code generation MCP server that converts any text (including Chinese characters) to QR codes with customizable colors and base64 encoding output.

๐Ÿ› ๏ธ Other Tools and Integrations0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.