Skip to main content
Glama
Tommertom

Plugwise MCP Server

by Tommertom

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

Related MCP server: Homey MCP Server

๐Ÿš€ Quick Start

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

Available Tools

16 tools
add_hubA

Add a new Plugwise hub by providing its name (used as password). Scans the network to find the hub and stores it in the /hubs folder as a JSON file for future use. The hub name is the unique identifier printed on the back of your Plugwise device.

ParametersJSON Schema
NameRequiredDescriptionDefault
hubNameYesThe hub name/ID (e.g., glmpuuxg) which is also used as the password. This is the unique identifier found on the back label of your Plugwise hub.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behaviors: network scanning, file storage location (/hubs folder), and file format (JSON). However, it lacks details on error handling, network requirements, or what happens if the hub already exists. It adequately describes the core operation but misses some behavioral nuances.

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 efficiently structured in two sentences: the first states the action and key parameter, the second explains the process and storage. Every sentence adds essential information with zero waste, making it easy to parse and understand quickly.

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?

For a single-parameter tool with no annotations and no output schema, the description covers the purpose, process, and outcome well. It explains what the tool does, how it works (network scan, file storage), and the parameter's real-world meaning. The main gap is lack of output details, but given the tool's simplicity, this is a minor omission.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that the hub name is 'used as password' and is 'the unique identifier printed on the back of your Plugwise device,' providing practical context beyond the schema's technical description. This elevates the score above baseline.

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 the verb ('Add'), resource ('new Plugwise hub'), and specific action ('by providing its name'). It distinguishes from siblings like 'list_hubs' by specifying creation vs. listing, and from 'connect' by focusing on initial setup rather than ongoing connection.

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?

The description implies usage context ('Scans the network to find the hub') and storage outcome ('stores it in the /hubs folder as a JSON file for future use'), but does not explicitly state when NOT to use it or name alternatives. It suggests this is for initial hub setup, which provides clear guidance but lacks explicit exclusions.

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

connectA

Connect to a Plugwise gateway (Adam, Anna, Smile P1, or Stretch) and retrieve gateway information. If no host is provided, automatically connects to the first discovered hub. Returns detailed gateway information including model, type, version, hostname, and MAC address.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoIP address or hostname of the Plugwise gateway. If omitted, connects to first discovered hub from registry.
passwordNoPassword for the Plugwise gateway (typically the hub name). If omitted and host matches a discovered hub, uses stored password.
portNoPort number (default: 80)
usernameNoUsername (default: smile)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the core behavior (connection and retrieval of gateway details) and the fallback mechanism for missing host. However, it lacks details on potential side effects (e.g., authentication requirements beyond password hints, network timeouts, or error handling) and does not specify the return format beyond listing fields like model and MAC address.

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 front-loaded with the main purpose in the first sentence, followed by conditional behavior and return details in a second sentence. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.

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 tool's moderate complexity (connection with optional parameters) and no output schema, the description is mostly complete: it covers the purpose, usage context, and return information. However, it could be more complete by detailing error cases or the structure of the returned gateway information, which would help an agent handle responses better.

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 the schema already documents all four parameters thoroughly. The description does not add any additional meaning or examples beyond what the schema provides (e.g., it mentions 'If no host is provided' but the schema already states this). Baseline 3 is appropriate as the schema handles parameter documentation adequately.

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 the specific action ('connect to a Plugwise gateway'), identifies the resource types (Adam, Anna, Smile P1, or Stretch), and distinguishes this from sibling tools like 'list_hubs' or 'get_devices' by focusing on establishing a connection and retrieving gateway metadata rather than listing or controlling devices.

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?

The description provides clear context on when to use this tool (to connect to a gateway and get its info) and includes a fallback behavior ('If no host is provided, automatically connects to the first discovered hub'). However, it does not explicitly state when not to use it or name specific alternatives among the siblings, such as 'list_hubs' for discovery without connection.

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

control_switchB

Turn a switch or relay on or off. Works with Plugwise switches, relays, and smart plugs. Use this to control any switchable device in your Plugwise network.

ParametersJSON Schema
NameRequiredDescriptionDefault
appliance_idYesID of the appliance/device to control
stateYesDesired state: "on" to turn on, "off" to turn off
modelNoSwitch model type (default: relay). Options: relay, switch, plug

TDQS

B3.3/5.0
Behavior2/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 mentions the tool 'works with' specific device types and controls 'switchable devices', but lacks details on behavioral traits like required permissions, error handling, rate limits, or whether the action is reversible. For a mutation tool with zero annotation coverage, this is a significant gap.

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 two concise sentences with zero waste. It front-loads the core purpose ('Turn a switch or relay on or off') and efficiently adds context about device compatibility and usage scope, making it easy to understand quickly.

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 (mutation with 3 parameters), no annotations, and no output schema, the description is moderately complete. It covers the purpose and device scope but lacks details on behavioral aspects and output expectations. It's adequate as a minimum viable description but has clear gaps for safe and effective use.

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 the schema fully documents the three parameters (appliance_id, state, model). The description adds no additional meaning beyond what's in the schema, such as explaining parameter interactions or usage examples. Baseline score of 3 is appropriate as the schema handles 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?

The description clearly states the action ('turn on or off'), the target ('switch or relay'), and the scope ('Plugwise switches, relays, and smart plugs'). It specifies the resource type but doesn't explicitly differentiate from sibling tools like 'set_gateway_mode' or 'set_preset', which also control devices but for 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 by stating 'Works with Plugwise switches, relays, and smart plugs' and 'Use this to control any switchable device', providing context for when to use it. However, it doesn't explicitly mention when not to use it or name alternatives among siblings, such as distinguishing from 'set_preset' for temperature-related controls.

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

delete_notificationA

Delete all gateway notifications. Use this to clear error messages or warnings from the Plugwise gateway.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.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 full burden. It discloses that this is a destructive operation ('Delete all gateway notifications') and specifies the target ('error messages or warnings'), but it does not mention potential side effects, permissions required, or confirmation prompts. The description adds some behavioral context but lacks completeness for a mutation tool.

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 two concise sentences with zero waste. The first sentence states the action and resource, and the second provides usage guidance, making it front-loaded and efficiently structured.

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 tool's complexity (a mutation with 0 parameters, no output schema, and no annotations), the description is reasonably complete. It explains what the tool does and when to use it, but it could benefit from additional details on behavioral aspects like irreversible effects or error handling, which are not covered by other structured fields.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description does not add parameter details beyond the schema, but since there are no parameters, a baseline of 4 is appropriate as it does not need to compensate for any gaps.

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 the specific action ('Delete all gateway notifications') and the resource ('gateway notifications'), distinguishing it from siblings like 'reboot_gateway' or 'get_devices'. It also specifies the purpose ('clear error messages or warnings'), making the verb+resource combination precise and unambiguous.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'Use this to clear error messages or warnings from the Plugwise gateway.' This provides clear context for its application, distinguishing it from other tools that might manage devices or settings rather than notifications.

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

get_all_temperaturesA

Get current temperatures and setpoints for all thermostats and zones in the system. Returns comprehensive temperature data including measured values, setpoints, control states, and climate modes for every temperature-capable device.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/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 discloses the tool's behavior by describing the return data (measured values, setpoints, control states, climate modes) and scope (all devices), but does not mention potential limitations like rate limits, authentication needs, or data freshness. It adds useful context but lacks operational details.

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 two sentences, front-loaded with the core purpose and followed by details on return data. Every sentence adds value: the first defines the action and scope, the second elaborates on the comprehensive output. No wasted words or redundancy.

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 tool's complexity (retrieving data for all devices), no annotations, and no output schema, the description is fairly completeโ€”it explains what data is returned and for which devices. However, it could improve by mentioning output format or pagination, but the absence of an output schema is partially compensated by the descriptive return details.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing on the tool's purpose and output. Baseline is 4 for zero parameters, as it avoids unnecessary details.

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 the verb ('Get') and resource ('current temperatures and setpoints for all thermostats and zones'), specifying it returns comprehensive data for every temperature-capable device. It distinguishes from siblings like 'get_temperature' (likely single device) and 'get_devices' (broader device info).

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?

The description implies usage for retrieving temperature data across all devices, but does not explicitly state when to use this versus alternatives like 'get_temperature' (single device) or 'get_devices' (general device list). It provides clear context but lacks explicit exclusions or named alternatives.

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

get_devicesA

Retrieve all Plugwise devices and their current states, sensors, and capabilities. Returns comprehensive information for all connected devices including thermostats, switches, sensors, and other appliances. Includes current readings, capabilities, and operational states.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool returns (comprehensive device information including states, sensors, capabilities) and implies it's a read operation ('Retrieve'), but doesn't mention potential limitations like rate limits, authentication requirements, or data freshness. The description adds useful context about scope but lacks operational details.

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 efficiently structured in two sentences that each add value: the first states the core action and scope, the second elaborates on the comprehensiveness of returned data. It's appropriately front-loaded with the main purpose. Minor improvement could be made by combining related concepts more tightly.

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 zero-parameter read tool with no annotations and no output schema, the description provides adequate coverage of what the tool does and returns. However, it could be more complete by mentioning the format of returned data, whether it includes pagination for large device sets, or any prerequisites for successful execution.

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 has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters since none exist, maintaining focus on what the tool does rather than what inputs it accepts.

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 the tool's purpose with specific verbs ('Retrieve', 'Returns') and resources ('Plugwise devices', 'current states, sensors, and capabilities'). It distinguishes from siblings by specifying it returns comprehensive information for all connected devices, unlike more specific tools like get_temperature or get_all_temperatures.

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?

The description implies usage context by stating it retrieves 'all Plugwise devices' with 'comprehensive information', suggesting it should be used when broad device overview is needed rather than specific data points. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools.

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

get_temperatureA

Get current room temperature and setpoint for a specific thermostat or zone. Returns both the measured temperature and the target setpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesID of the device/zone to read temperature from

TDQS

A4/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 the return values (measured temperature and target setpoint), which is useful, but does not mention behavioral traits like error handling, rate limits, or authentication needs. The description adds some context but lacks comprehensive behavioral details.

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 two sentences, front-loaded with the core purpose and followed by return details. Every sentence earns its place with zero waste, making it appropriately sized and efficient.

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 no annotations, no output schema, and a simple input schema, the description is mostly complete for a read-only tool. It covers purpose and returns, but could improve by addressing potential errors or usage nuances. It's adequate but has minor 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 description coverage is 100%, so the schema already documents the 'device_id' parameter. The description adds no additional meaning beyond what the schema provides, such as examples or constraints. Baseline 3 is appropriate when the schema does the heavy lifting.

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 the action ('Get'), the resource ('current room temperature and setpoint'), and the target ('for a specific thermostat or zone'). It distinguishes from siblings like 'get_all_temperatures' (which lacks specificity) and 'set_temperature' (which is a write operation).

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?

The description implies usage when needing temperature data for a specific device/zone, but does not explicitly state when not to use it or name alternatives. It provides clear context but lacks exclusions like 'use get_all_temperatures for bulk reads'.

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

get_temperature_offsetB

Get the temperature offset (calibration) for a thermostat device. The offset is used to calibrate the temperature sensor if it reads incorrectly. Returns the current offset value and its valid range.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesID of the thermostat device to query

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns the current offset value and its valid range, which is useful context beyond basic purpose. However, it doesn't cover other important aspects like whether this is a read-only operation, potential rate limits, authentication needs, or error conditions, leaving gaps for a mutation-free query tool.

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 concise and well-structured in two sentences: the first states the purpose, and the second explains the return value. There's no wasted text, and information is front-loaded. It could be slightly improved by integrating usage hints, but it's efficient as is.

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 low complexity (single parameter, no output schema, no annotations), the description is moderately complete. It covers the purpose and return values adequately, but lacks usage guidelines and full behavioral context. For a simple query tool, this is acceptable but not comprehensive, aligning with a minimum viable score.

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?

The input schema has 100% description coverage, with the single parameter 'device_id' clearly documented. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. According to the rules, with high schema coverage, the baseline is 3, which is appropriate here.

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?

The description clearly states the tool's purpose: 'Get the temperature offset (calibration) for a thermostat device.' It specifies the verb ('Get'), resource ('temperature offset'), and clarifies that this is for calibration. However, it doesn't explicitly differentiate from sibling tools like 'get_temperature' or 'get_all_temperatures,' which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives. It mentions the offset is for calibration if the sensor reads incorrectly, but doesn't specify prerequisites, when to avoid it, or compare it to related tools like 'set_temperature_offset' or 'get_temperature.' This leaves the agent with insufficient context for optimal selection.

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

list_hubsA

List all registered Plugwise hubs from the /hubs folder and in-memory registry. Returns hub information including name, IP address, model, and firmware version for each discovered hub.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the data sources ('/hubs folder and in-memory registry') and return format ('hub information including name, IP address, model, and firmware version'), which adds useful context. However, it doesn't cover potential issues like network timeouts, authentication needs, or error handling, leaving gaps for a tool that interacts with external resources.

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, well-structured sentence that efficiently conveys the action, sources, and return data. Every part earns its place without redundancy, making it easy to parse and front-loaded with essential information.

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 low complexity (0 parameters, no output schema, no annotations), the description is moderately complete. It explains what the tool does and what it returns, but lacks details on behavioral aspects like error conditions or performance. For a read-only listing tool, this is adequate but has clear gaps in operational context.

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 input schema has 0 parameters with 100% coverage, so the schema fully documents the absence of inputs. The description adds no parameter information, which is appropriate here. A baseline of 4 is applied because no parameters exist, and the description doesn't need to compensate for any gaps.

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 the specific action ('List all registered Plugwise hubs') and the resources involved ('from the /hubs folder and in-memory registry'). It distinguishes from siblings like 'add_hub' (which creates) or 'get_devices' (which might return different data), making the purpose unambiguous and well-differentiated.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether hubs must be registered first), exclusions, or comparisons to siblings like 'get_devices' (which might list devices rather than hubs). Usage context is implied but not explicitly stated.

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

reboot_gatewayA

Reboot the Plugwise gateway. Use with caution as this will temporarily disconnect all devices and interrupt heating/cooling control. The gateway typically takes 1-2 minutes to fully restart.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's impact ('temporarily disconnect all devices', 'interrupt heating/cooling control'), timing ('1-2 minutes to fully restart'), and caution needed, providing comprehensive behavioral context beyond the basic action.

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 perfectly concise with two sentences that each serve distinct purposes: the first states the action and caution, the second provides timing information. There's no wasted language or redundancy.

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?

For a zero-parameter destructive operation with no annotations or output schema, the description provides excellent context about impacts and timing. It could slightly improve by mentioning whether user confirmation is needed or what happens after reboot completes, but it's largely complete for this tool type.

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 has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately focuses on behavioral aspects rather than repeating parameter information that doesn't exist.

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 the specific action ('reboot') and target resource ('Plugwise gateway'), distinguishing it from sibling tools like 'set_gateway_mode' or 'control_switch'. It precisely communicates the tool's function without ambiguity.

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?

The description provides clear contextual guidance ('Use with caution as this will temporarily disconnect all devices and interrupt heating/cooling control'), indicating when this tool should be used carefully. However, it doesn't explicitly mention when to choose alternatives like 'set_gateway_mode' for non-reboot adjustments.

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

set_dhw_modeA

Set the domestic hot water (DHW) heating mode for systems with hot water control. Auto mode follows the schedule, boost mode provides immediate hot water heating, comfort mode maintains higher temperature, and off mode disables DHW heating.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesDHW mode: "auto" follows schedule, "boost" for immediate heating, "comfort" for higher temperature, "off" to disable

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It describes what each mode does (e.g., 'boost mode provides immediate hot water heating'), which adds behavioral context, but doesn't disclose critical traits like required permissions, whether changes are reversible, system state effects, or error conditions. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral transparency.

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 appropriately sized and front-loaded, starting with the core purpose and then efficiently explaining each mode option in a single, well-structured sentence. Every sentence earns its place by adding specific value without redundancy or waste.

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 moderate complexity (single parameter mutation), no annotations, and no output schema, the description is partially complete. It explains the purpose and parameter semantics well, but lacks details on behavioral aspects like permissions, reversibility, or system impacts. It's adequate for basic use but has clear gaps for safe agent operation.

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?

Schema description coverage is 100%, so the schema already documents the single parameter 'mode' with enum values and descriptions. The description adds value by providing expanded semantics for each mode option (e.g., 'comfort mode maintains higher temperature'), which enhances understanding beyond the schema's basic enum descriptions. With only one parameter, the baseline is high, and the description compensates well.

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 the verb 'set' and the resource 'domestic hot water (DHW) heating mode' with specific scope 'for systems with hot water control'. It distinguishes from siblings like set_temperature or set_preset by focusing exclusively on DHW mode control.

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?

The description provides clear context by explaining when to use each mode option (e.g., 'Auto mode follows the schedule', 'boost mode provides immediate hot water heating'), but doesn't explicitly state when to use this tool versus alternatives like set_temperature or set_preset for similar heating controls. It implies usage through mode explanations but lacks explicit exclusions or comparisons.

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

set_gateway_modeA

Set the gateway mode (home, away, vacation). This is a system-wide setting that affects all zones and presets. Home mode uses normal schedules, away mode uses reduced temperatures, and vacation mode provides minimal heating/cooling.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesGateway mode: "home" for normal operation, "away" for temporary absence, "vacation" for extended absence

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 discloses key behavioral traits: it's a system-wide setting affecting all zones and presets, and it explains the operational impact of each mode (e.g., 'away mode uses reduced temperatures'). However, it doesn't mention permissions, rate limits, or reversibility.

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 purpose and followed by explanatory details. Every sentence earns its place by clarifying scope and mode behaviors without redundancy.

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 tool's complexity (system-wide setting), no annotations, and no output schema, the description is fairly completeโ€”it explains the effect of each mode. However, it lacks details on response format or error conditions, which would be helpful for a mutation tool.

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 the schema already documents the 'mode' parameter with enum values and descriptions. The description adds minimal value by restating the modes but doesn't provide additional syntax or format details beyond the schema.

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 the verb ('Set') and resource ('gateway mode'), with specific options (home, away, vacation) that distinguish it from siblings like set_temperature or set_preset. It's not a tautology of the name.

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 by explaining what each mode does (e.g., 'Home mode uses normal schedules'), but it doesn't explicitly state when to use this tool versus alternatives like set_preset or set_regulation_mode, nor does it provide exclusions or prerequisites.

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

set_presetB

Set the preset mode on a thermostat or zone (e.g., home, away, sleep, vacation). Presets apply predefined temperature settings and behaviors configured in your Plugwise system.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYesID of the location/zone to control
presetYesPreset name (e.g., home, away, sleep, vacation, no_frost)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a 'Set' operation (implying mutation) and that presets apply 'predefined temperature settings and behaviors,' but lacks critical details: required permissions, whether changes are reversible, effects on other settings, error conditions, or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps.

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 efficiently structured in two sentences: the first states the core action with examples, and the second explains what presets do. Every word earns its place, with no redundancy or fluff. It's appropriately sized for a simple tool with two parameters.

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 moderate complexity (mutation with 2 parameters), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose and parameter examples but lacks usage guidelines, behavioral details, and output information. It meets the bare minimum for understanding what the tool does but leaves the agent guessing about practical application.

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 the schema fully documents both parameters (location_id and preset). The description adds minimal value beyond the schema: it provides examples of preset values ('home, away, sleep, vacation') and clarifies that location_id targets 'a thermostat or zone,' but doesn't explain parameter interactions or constraints. Baseline 3 is appropriate when 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?

The description clearly states the action ('Set the preset mode') and target resource ('on a thermostat or zone'), with examples of preset values. It distinguishes the tool's purpose from siblings like set_temperature or set_dhw_mode by focusing on predefined behavior modes rather than direct temperature control. However, it doesn't explicitly contrast with all siblings, missing some differentiation.

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?

The description provides no guidance on when to use this tool versus alternatives like set_temperature or set_regulation_mode. It mentions that presets apply 'predefined temperature settings and behaviors' but doesn't clarify use cases, prerequisites, or exclusions. The agent receives no help in choosing between this and other control tools.

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

set_regulation_modeB

Set the heating regulation mode. Controls the overall heating system behavior. Use "heating" for normal operation, "off" to disable heating, or bleeding modes for system maintenance.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesRegulation mode: "heating" for normal operation, "off" to disable, "bleeding_cold"/"bleeding_hot" for maintenance

TDQS

B3.4/5.0
Behavior2/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 of behavioral disclosure. It mentions that the tool 'Controls the overall heating system behavior' and describes the modes, but it does not disclose critical behavioral traits such as whether this requires specific permissions, if changes are reversible, potential side effects (e.g., system downtime during bleeding modes), or rate limits. For a mutation tool with zero annotation coverage, this is a significant gap.

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 appropriately sized and front-loaded. The first sentence states the core purpose, and the second sentence elaborates on the modes with clear examples. Every sentence adds value without redundancy, making it efficient and easy to understand.

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 (a mutation tool with one parameter but significant behavioral implications), no annotations, and no output schema, the description is partially complete. It covers the purpose and parameter semantics well, but lacks details on behavioral aspects like permissions, reversibility, or system impact. For a tool that controls heating system behavior, more context on safety or operational constraints would be beneficial.

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 description adds meaningful context beyond the input schema. The schema has 100% coverage with an enum for 'mode' and a description that mirrors the tool description. However, the tool description provides additional semantics by explaining the purpose of each mode: 'heating' for normal operation, 'off' to disable heating, and bleeding modes for maintenance. This clarifies the practical use of the parameters, compensating for the lack of detailed schema annotations.

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?

The description clearly states the tool's purpose: 'Set the heating regulation mode. Controls the overall heating system behavior.' It specifies the verb ('Set') and resource ('heating regulation mode'), but does not explicitly differentiate it from sibling tools like 'set_dhw_mode' or 'set_preset', which likely control different aspects of the heating system. This makes it clear but not fully distinguished from alternatives.

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 provides implied usage guidelines by listing the modes and their purposes: 'heating' for normal operation, 'off' to disable heating, or bleeding modes for system maintenance. However, it does not explicitly state when to use this tool versus alternatives like 'set_dhw_mode' or 'set_preset', nor does it mention any prerequisites or exclusions. The guidance is useful but not comprehensive.

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

set_temperatureA

Set the temperature setpoint on a thermostat or zone. Supports single setpoint for heating/cooling systems, or separate low/high setpoints for heat pump systems. Changes take effect immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYesID of the location/zone to control
setpointNoTemperature setpoint in Celsius for single-setpoint systems
setpoint_lowNoLow temperature setpoint (heating) in Celsius for heat pump systems
setpoint_highNoHigh temperature setpoint (cooling) in Celsius for heat pump systems

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 of behavioral disclosure. It effectively describes key traits: it's a write operation ('Set'), supports multiple system types, and specifies that 'Changes take effect immediately', which is crucial for understanding impact. However, it does not cover aspects like error conditions, permissions needed, or rate limits, leaving some gaps.

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 front-loaded with the core action and efficiently covers key details in two sentences without any wasted words. Each sentence adds value: the first specifies the tool's function and system support, and the second clarifies the immediate effect, making it appropriately sized and well-structured.

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 tool's complexity (a write operation with 4 parameters) and no annotations or output schema, the description does a good job by explaining the action, system types, and immediate effect. However, it could be more complete by addressing potential side effects, error handling, or response format, which are important for a mutation tool without structured output documentation.

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 the schema already documents all parameters thoroughly. The description adds marginal value by clarifying that setpoint is for single-setpoint systems and setpoint_low/high are for heat pump systems, but this mostly reiterates schema details without providing additional syntax, constraints, or usage examples beyond what's in the schema.

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 the verb ('Set') and resource ('temperature setpoint on a thermostat or zone'), specifying the exact action. It distinguishes from siblings like 'get_temperature' (read vs. write) and 'set_temperature_offset' (setpoint vs. offset adjustment), making the purpose specific and differentiated.

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 by mentioning support for different system types (single vs. heat pump) and that changes take effect immediately, which provides some context. However, it lacks explicit guidance on when to use this tool versus alternatives like 'set_preset' or 'set_regulation_mode', and does not state any exclusions or prerequisites.

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

set_temperature_offsetC

Set the temperature offset (calibration) for a thermostat device. This adjusts the measured temperature by a fixed offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesID of the thermostat device
offsetYesTemperature offset in ยฐC (can be positive or negative)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but lacks critical behavioral details. It mentions 'adjusts the measured temperature by a fixed offset' but doesn't disclose permissions required, whether the change is reversible, rate limits, or what happens if the device is offline. For a mutation tool with zero annotation coverage, this is insufficient.

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 two concise sentences with zero waste, front-loaded with the core action and efficiently explaining the effect. Every sentence earns its place by adding useful context.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks information on permissions, error handling, return values, and how it differs from sibling tools, leaving significant gaps for an AI agent to understand full context.

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 the schema already documents both parameters ('device_id' and 'offset'). The description adds minimal value by clarifying that the offset is for calibration and can be positive or negative, but doesn't provide additional syntax or format details beyond what the schema provides.

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?

The description clearly states the verb ('Set') and resource ('temperature offset for a thermostat device'), explaining it adjusts measured temperature by a fixed offset. However, it doesn't explicitly differentiate from sibling tools like 'set_temperature' or 'get_temperature_offset', which would require a 5.

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 guidance is provided on when to use this tool versus alternatives such as 'set_temperature' or 'get_temperature_offset'. The description only states what it does, not when it's appropriate or what prerequisites might be needed.

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. 16 tool updatesv1.0.0
    • First observedadd_hub
    • First observedconnect
    • First observedcontrol_switch
    • First observeddelete_notification
    • First observedget_all_temperatures
    • First observedget_devices
    • First observedget_temperature
    • First observedget_temperature_offset
    • First observedlist_hubs
    • First observedreboot_gateway
    • First observedset_dhw_mode
    • First observedset_gateway_mode
    • First observedset_preset
    • First observedset_regulation_mode
    • First observedset_temperature
    • First observedset_temperature_offset

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlap exists between temperature-related tools (e.g., get_all_temperatures and get_temperature, set_temperature and set_preset). The descriptions help clarify differences, but an agent might occasionally misselect between closely related temperature controls.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout (e.g., add_hub, connect, control_switch, get_all_temperatures). All tools use snake_case, and verbs are clear and appropriate, making the set predictable and easy to navigate.

Tool Count4/5

With 16 tools, the count is slightly high but reasonable for a home automation server covering hubs, devices, temperatures, and modes. It provides comprehensive control without being overwhelming, though some tools could potentially be consolidated.

Completeness5/5

The tool set offers complete coverage for Plugwise system management, including hub setup (add_hub, list_hubs), device control (control_switch, get_devices), temperature management (get/set temperatures, offsets), and system modes (gateway, preset, regulation, DHW). No obvious gaps exist for core operations.

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

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/Tommertom/plugwise-mcp'

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