echonetlite-mcp
Enables control of ECHONETLite home automation devices like air conditioners and sensors via MCP, supporting HVAC management and real-time monitoring.
README
echonetlite-mcp
An MCP (Model Context Protocol) server for ECHONETLite home automation ā control air conditioners, discover devices, and read sensors via the Model Context Protocol.
ECHONETLite is a Japanese IoT protocol widely used in smart home devices, particularly HVAC systems by major manufacturers like Daikin, Panasonic, Mitsubishi Electric, and Toshiba.
Features
- š”ļø Real-time HVAC monitoring ā temperature, humidity, operating status
- āļø Full climate control ā mode, fan speed, airflow direction, swing
- š Network device discovery ā find ECHONETLite devices via multicast UDP
- š¬ Node Profile probing ā discover manufacturer, product code, UID, and all EOJ instances on any device
- ā” Real-time notifications ā async updates from device multicast listeners
- š MRA enrichment ā Machine Readable Index integration for property names, descriptions, and value decoding
- š¬ EPC introspection ā query property maps (STATMAP/SETMAP/GETMAP) with MRA-based names
- š·ļø Human-readable values ā raw EPC values decoded to human-friendly format using MRA definitions
- šÆ Multi-EPC queries ā query multiple EPC codes in a single request
- š§ Generic EOJ support ā set/query any ECHONETLite object by group/class/instance codes
- š¦ TypeScript-first ā full type definitions included
- š MCP compatible ā works with any MCP client (Claude Desktop, LM Studio, VS Code extensions, etc.)
Prerequisites
- Node.js 18+
- An ECHONETLite-compatible device on the same local network
Installation
npm install echonetlite-mcp
Or use it as an MCP server directly:
git clone https://github.com/scottyphillips/echonetlite-mcp.git
cd echonetlite-mcp
npm install
npm run build
Configuration
The server defaults to communicating with a device at 192.168.1.6 on UDP port 3610, using multicast address 224.0.23.0:3610 for discovery and notifications.
Setting the Default Device IP
Option A: Environment variable (recommended)
# Windows CMD
set ECHONET_DEFAULT_HOST=192.168.1.10 && node dist/index.js
# PowerShell
$env:ECHONET_DEFAULT_HOST="192.168.1.10"; node dist/index.js
# Linux/macOS
ECHONET_DEFAULT_HOST=192.168.1.10 node dist/index.js
Option B: Edit config.ts
export const DEFAULT_HOST = '192.168.1.10'; // Change to your device IP
Per-Tool Override
Every tool accepts an optional host parameter to override the default for that specific call:
{ "name": "get_device_status", "arguments": { "host": "192.168.1.20" } }
Running the Server
# Build first
npm run build
# Run (stdio transport)
node dist/index.js
The server communicates via stdio, making it compatible with any MCP client.
Integration with AI Clients
Claude Desktop
Add to your Claude Desktop MCP configuration (claude_desktop_config.json):
{
"mcpServers": {
"echonetlite": {
"command": "node",
"args": ["/path/to/echonetlite-mcp/dist/index.js"],
"env": {
"ECHONET_DEFAULT_HOST": "192.168.1.6"
}
}
}
}
LM Studio
LM Studio supports MCP servers via stdio transport. Create or edit the MCP config file:
Windows: %APPDATA%\lm-studio\mcp_config.json
macOS/Linux: ~/.config/lm-studio/mcp_config.json
{
"mcpServers": {
"echonetlite-mcp": {
"command": "node",
"args": ["C:\\path\\to\\echonetlite-mcp\\dist/index.js"],
"env": {
"ECHONET_DEFAULT_HOST": "192.168.1.6"
}
}
}
}
VS Code MCP Extension
Configure in your VS Code MCP extension settings:
{
"mcp.servers": [
{
"name": "echonetlite",
"command": "node",
"args": ["/path/to/echonetlite-mcp/dist/index.js"],
"env": {
"ECHONET_DEFAULT_HOST": "192.168.1.6"
}
}
]
}
Available Tools
Device Discovery
| Tool | Description | Parameters |
|---|---|---|
discover_devices |
Discover all ECHONETLite devices on the local network via multicast | timeout (optional) - Discovery timeout in ms (default: 3000) |
discover_nodes |
Active Node Profile probing of a specific device ā discovers manufacturer, product code, UID, and all EOJ instances with MRA enrichment | host (required), timeout (optional) |
HVAC Control
| Tool | Description | Parameters |
|---|---|---|
get_device_status |
Get full status of the HVAC device | host (optional) - IP address |
set_operation |
Turn HVAC ON or OFF | host, operation ("on" / "off") |
set_operating_mode |
Set operating mode | host, mode ("auto" / "cool" / "heat" / "dry" / "fan_only") |
set_temperature |
Set target temperature | host, temperature (0-50°C) |
set_fan_speed |
Set air flow rate | host, speed ("auto" / "level1"-"level8") |
set_airflow_vertical |
Set vertical vane position | host, position ("upper" / "upper-central" / "central" / "lower-central" / "lower") |
set_airflow_horizontal |
Set horizontal vane position | host, position (28 positions: rc-right, left-lc, lc-center-rc, ...) |
set_swing_mode |
Set swing mode function | host, mode ("not-used" / "vert" / "horiz" / "vert-horiz") |
set_auto_direction |
Set automatic direction mode | host, mode ("auto" / "non-auto" / "auto-vert" / "auto-horiz") |
set_silent_mode |
Set silent operation mode | host, mode ("normal" / "high-speed" / "silent") |
set_power_saving |
Set power-saving mode | host, state ("saving" / "normal") |
Sensor Readings
| Tool | Description | Parameters |
|---|---|---|
get_temperatures |
Get room + outdoor temperatures | host (optional) - IP address |
get_humidity |
Get room humidity | host (optional) - IP address |
EPC Introspection & MRA Lookup
| Tool | Description | Parameters |
|---|---|---|
get_property_maps |
Query STATMAP/SETMAP/GETMAP with MRA-based property names and descriptions | host, eojgc, eojcc, eojInstance (all optional) |
query_epc |
Query one or more EPC codes from device, returns raw + human-readable decoded values | epcs (required), host, eojgc, eojcc, eojInstance (all optional) |
get_epc_definition |
Get MRA definition for EPC codes without querying the device ā includes enum values, bitmaps, level ranges, $ref-resolved definitions | epcs (required), host, eojgc, eojcc, eojInstance (all optional) |
set_epc |
Generic EPC setter ā set any writable property on any EOJ instance by hex value | host, eojgc, eojcc, eojInstance, epc, value |
Device Configuration
| Tool | Description | Parameters |
|---|---|---|
set_swing_mode |
Set air swing/swing mode function | host, mode ("not-used" / "vert" / "horiz" / "vert-horiz") |
set_auto_direction |
Set automatic airflow direction mode | host, mode ("auto" / "non-auto" / "auto-vert" / "auto-horiz") |
set_silent_mode |
Set silent operation mode | host, mode ("normal" / "high-speed" / "silent") |
set_power_saving |
Set power-saving mode | host, state ("saving" / "normal") |
Available Resources
| Resource URI | Description |
|---|---|
device://status |
Current HVAC status (updated via async notifications from multicast listener) |
device://capabilities |
Device property map (GETMAP, SETMAP, NTFMAP) |
EPC Reference Table
| EPC | Property | Access | Values |
|---|---|---|---|
| 0x80 | Operation status | Set/Get | 0x30=ON, 0x31=OFF |
| 0x8F | Power-saving operation | Set/Get | Saving/Normal |
| 0xA0 | Air flow rate (fan speed) | Set/Get | Auto=0x41, Levels=0x31-0x38 |
| 0xA1 | Automatic airflow direction | Set/Get | Auto/Non-auto/Auto-vert/Auto-horiz |
| 0xA3 | Air swing mode | Set/Get | Not-used/Vert/Horiz/Vert-horiz |
| 0xA4 | Airflow direction (vertical) | Set/Get | Upper/Upper-central/Central/Lower-central/Lower |
| 0xA5 | Airflow direction (horizontal) | Set/Get | 28 positions (rc-right, left-lc, center, etc.) |
| 0xB0 | Operation mode | Set/Get | Auto=0x41, Cool=0x42, Heat=0x43, Dry=0x44, Fan-only=0x45 |
| 0xB1 | Automatic temperature control | Set/Get | ā |
| 0xB2 | Normal/High-speed/Silent operation | Set/Get | ā |
| 0xB3 | Set temperature | Set/Get | 0-50°C (signed int) |
| 0xB4 | Set humidity in dehumidifying mode | Set/Get | ā |
| 0xBA | Room relative humidity | Get | Percentage |
| 0xBB | Room temperature | Get | -127 to 125°C (signed int) |
| 0xBE | Outdoor air temperature | Get | Signed int |
| 0xC0 | Ventilation function | Set/Get | ā |
| 0xC1 | Humidifier function | Set/Get | ā |
| 0xCC | Special function setting | Set/Get | Clothes dryer, Mite/mold control, etc. |
| 0xCF | Air purification mode | Set/Get | ā |
| 0x9D | STATMAP (access capability) | Get | Property access map |
| 0x9E | SETMAP (settable properties) | Get | Settable property map |
| 0x9F | GETMAP (readable properties) | Get | Readable property map |
Example Prompts
Try these natural language prompts with your MCP client:
"Turn on my air conditioner"ā callsset_operationwithoperation="on""Set temperature to 23 degrees"ā callsset_temperaturewithtemperature=23"Switch to cooling mode"ā callsset_operating_modewithmode="cool""What are the current temperatures?"ā callsget_temperatures"Find all ECHONET devices on my network"ā callsdiscover_devices"Set fan speed to level 3"ā callsset_fan_speedwithspeed="level3""What EPC codes can I query on this device?"ā callsget_property_maps"Get the current operation status and target temperature"ā callsquery_epcwithepcs=["0x80", "0xB3"]"What settings are available for operating mode?"ā callsget_epc_definitionwithepcs=["0xB0"]"Discover all nodes on 192.168.1.6"ā callsdiscover_nodeswith full MRA enrichment
Project Structure
echonetlite-mcp/
āāā src/
ā āāā index.ts # MCP server entry point & tool definitions (~1150 lines)
ā āāā echonetlite.ts # ECHONETLite client wrapper (UDP communication)
ā āāā mra.ts # MRA (Machine Readable Index) data loader & decoders
ā āāā devices/
ā ā āāā homeAirConditioner.ts # HVAC device handler (status, controls, notifications)
ā āāā types.ts # TypeScript type definitions
ā āāā config.ts # Configuration constants
āāā mra/
ā āāā mraData/ # MRA JSON definition files
ā āāā COPYRIGHT.txt # MRA copyright information
ā āāā ReleaseNote_en.md # MRA release notes
āāā package.json
āāā tsconfig.json
āāā LICENSE
āāā README.md
Development
# Clone and install dependencies
git clone https://github.com/scottyphillips/echonetlite-mcp.git
cd echonetlite-mcp
npm install
# Build TypeScript
npm run build
# Watch mode for development
npm run dev
# Run the server
node dist/index.js
MRA Integration
This server includes full MRA (Machine Readable Index) data integration:
- Property names & descriptions ā human-readable labels for each EPC code from MRA definitions
- Value decoding ā raw hex values decoded to meaningful strings/numbers using MRA type schemas
- Enum/bitmap support ā full enumeration of possible values with $ref resolution
- Level ranges & number formats ā signed/unsigned integers, fixed-point decimals
- $ref resolution ā external definition references from definitions.json resolved automatically
- MRA enrichment in all tools ā
query_epc,get_property_maps,get_epc_definitionreturn enriched responses
The MRA data enables intelligent discovery of what settings are available for any EPC code without needing to query the device first.
References
License
MIT License ā see LICENSE for details.
Support
For issues, questions, or contributions, please open an issue on GitHub.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
