IoT MCP Server
MCP (Model Context Protocol) Server สำหรับจัดการอุปกรณ์ IoT และ Network ผ่าน Claude AI
รองรับ 135 tools สำหรับ 17 ประเภทอุปกรณ์ ผ่าน 3 protocols: SSH, REST API, Serial
Supported Devices
| Device |
Protocol |
Tools |
| Cisco Switch |
SSH CLI |
8 tools - interfaces, VLANs, MAC table, ARP, CDP, spanning-tree |
| HP Switch |
SSH CLI |
8 tools - interfaces, VLANs, MAC table, ARP, LLDP, spanning-tree |
| Fortigate |
REST API + SSH |
8 tools - firewall policies, routes, VPN, DHCP, sessions |
| Mikrotik |
REST API + SSH |
8 tools - interfaces, routes, firewall, DHCP, wireless, queues |
| ThingsBoard |
REST API (JWT) |
6 tools - devices, telemetry, attributes, RPC, alarms, dashboards |
| ESPHome |
REST API |
6 tools - devices, states, services, logs, compile |
| ESPConnect |
REST API |
4 tools - devices, status, command, OTA |
| Tuya |
Cloud API (HMAC) |
5 tools - devices, status, commands, scenes |
| Sonoff/eWeLink |
Cloud API (v2) |
4 tools - devices, toggle, power usage |
| QNAP NAS |
REST API (QTS) |
8 tools - system info, volumes, disks, shared folders, apps, logs |
| Synology NAS |
REST API (DSM) |
9 tools - system info, storage, disks, shared folders, packages, docker |
| Proxmox VE |
REST API (PVE) |
10 tools - nodes, VMs, LXC containers, storage, cluster resources |
| VMware ESXi |
REST API (vSphere) |
13 tools - VMs, power, snapshots, host, datastores, networks |
| Dahua NVR/DVR |
HTTP CGI API |
8 tools - system info, channels, storage, alarms, recording, PTZ |
| Dahua DSS |
REST API (token) |
9 tools - server info, devices, channels, alarms, organizations |
| OpenStack/MicroStack |
REST API (Keystone v3) |
12 tools - servers, flavors, hypervisors, images, networks, volumes |
| Hi-Flying Serial Server |
AT Commands (TCP) |
9 tools - device info, serial config, network, WiFi, AT command, serial data |
Plus 8 cross-device tools: list devices, status, test connection, execute command, get config, serial ports, VPN status
Architecture
src/
├── index.ts # stdio transport
├── server-sse.ts # Streamable HTTP transport
├── config.ts # env + devices.json loader
├── types.ts # shared interfaces
├── device-registry.ts # singleton device registry
├── connectors/
│ ├── base-connector.ts # abstract base class
│ ├── ssh-connector.ts # SSH base (ssh2)
│ ├── rest-connector.ts # REST base (native fetch)
│ ├── serial-connector.ts # Serial base (serialport)
│ ├── cisco-connector.ts # Cisco Switch
│ ├── hp-connector.ts # HP Switch
│ ├── fortigate-connector.ts # Fortigate (REST + SSH)
│ ├── mikrotik-connector.ts # Mikrotik (REST + SSH)
│ ├── thingsboard-connector.ts
│ ├── esphome-connector.ts
│ ├── espconnect-connector.ts
│ ├── tuya-connector.ts # Tuya Cloud (HMAC signing)
│ ├── sonoff-connector.ts # eWeLink API v2
│ ├── qnap-connector.ts # QNAP QTS API
│ ├── synology-connector.ts # Synology DSM API
│ ├── proxmox-connector.ts # Proxmox VE API
│ ├── esxi-connector.ts # VMware vSphere REST API
│ ├── dahua-nvr-connector.ts # Dahua NVR/DVR/IPC CGI API
│ ├── dahua-dss-connector.ts # Dahua DSS Pro/Express REST API
│ ├── openstack-connector.ts # OpenStack/MicroStack (Keystone v3)
│ ├── hiflying-connector.ts # Hi-Flying Serial Server (AT+TCP)
│ └── index.ts # connector factory
└── tools/
├── index.ts # 135 tool definitions + dispatcher
├── device-tools.ts # cross-device operations
├── network-switch-tools.ts # Cisco + HP
├── firewall-tools.ts # Fortigate
├── mikrotik-tools.ts # Mikrotik
├── thingsboard-tools.ts # ThingsBoard
├── esphome-tools.ts # ESPHome
├── espconnect-tools.ts # ESPConnect
├── tuya-tools.ts # Tuya
├── sonoff-tools.ts # Sonoff
├── qnap-tools.ts # QNAP
├── synology-tools.ts # Synology
├── proxmox-tools.ts # Proxmox
├── esxi-tools.ts # ESXi
├── dahua-nvr-tools.ts # Dahua NVR
├── dahua-dss-tools.ts # Dahua DSS
├── openstack-tools.ts # OpenStack
└── hiflying-tools.ts # Hi-Flying
Connector Pattern
BaseConnector (abstract)
├── SSHConnector (ssh2 with legacy algo support)
│ ├── CiscoConnector
│ └── HPConnector
├── RESTConnector (native fetch)
│ ├── FortigateConnector (+SSH helper)
│ ├── MikrotikConnector (+SSH helper)
│ ├── ThingsBoardConnector (JWT auth)
│ ├── ESPHomeConnector
│ ├── ESPConnectConnector
│ ├── TuyaConnector (HMAC-SHA256 signing)
│ ├── SonoffConnector (eWeLink v2)
│ ├── QnapConnector (QTS API)
│ ├── SynologyConnector (DSM API)
│ ├── ProxmoxConnector (PVE API)
│ ├── ESXiConnector (vSphere REST API)
│ ├── DahuaNvrConnector (HTTP CGI, Basic auth)
│ ├── DahuaDssConnector (REST API, token auth)
│ ├── OpenStackConnector (Keystone v3 + Nova/Neutron/Cinder/Glance)
│ └── HiFlyingConnector (AT commands + TCP transparent)
└── SerialConnector (serialport)
Quick Start
1. Configure devices
cp devices.json.example devices.json
cp .env.example .env
Edit devices.json with your device inventory. Passwords use ${ENV_VAR} references resolved from .env:
{
"devices": [
{
"id": "cisco-sw-core",
"name": "Cisco Core Switch",
"type": "cisco",
"transport": ["ssh"],
"host": "192.168.1.1",
"port": 22,
"username": "admin",
"password": "${CISCO_PASSWORD}",
"tags": ["core", "network"]
}
]
}
2. Docker (Recommended)
Server runs at http://localhost:3300 (MCP endpoint: /mcp, health: /health)
3. Standalone
npm install
npm run build
npm run start:sse # Streamable HTTP mode (port 3000)
npm start # stdio mode (for Claude Desktop)
4. Connect to Claude Code
.mcp.json is pre-configured:
{
"mcpServers": {
"iot": {
"url": "http://localhost:3300/mcp"
}
}
}
MCP Tools Reference
Device Management (iot_*)
| Tool |
Description |
iot_list_devices |
List all devices (filter by type/tag/search) |
iot_device_status |
Get device status (connects to check) |
iot_test_connection |
Test connectivity |
iot_all_status |
Health dashboard - all devices |
iot_execute_command |
Execute CLI command on SSH device |
iot_get_config |
Retrieve running config |
iot_serial_list_ports |
List available serial ports |
vpn_status |
Check all VPN connections status |
Network Switch (switch_*)
| Tool |
Description |
switch_show_interfaces |
Interface status/brief |
switch_show_vlans |
VLAN configuration |
switch_show_mac_table |
MAC address table (filter by VLAN) |
switch_show_arp |
ARP table |
switch_show_neighbors |
CDP (Cisco) / LLDP (HP) |
switch_show_spanning_tree |
Spanning tree status |
switch_show_port_security |
Port security |
switch_show_logs |
Log buffer |
Fortigate Firewall (fortigate_*)
| Tool |
Description |
fortigate_get_policies |
Firewall policies |
fortigate_get_routes |
Routing table |
fortigate_get_interfaces |
Interface config |
fortigate_vpn_status |
IPSec VPN tunnels |
fortigate_system_status |
CPU/memory/resource usage |
fortigate_get_dhcp_leases |
DHCP leases |
fortigate_get_sessions |
Active sessions |
fortigate_execute_cli |
FortiOS CLI via SSH |
Mikrotik Router (mikrotik_*)
| Tool |
Description |
mikrotik_get_interfaces |
Interfaces with traffic stats |
mikrotik_get_routes |
IP routing table |
mikrotik_get_firewall |
Filter + NAT rules |
mikrotik_get_dhcp_leases |
DHCP leases |
mikrotik_get_wireless |
Wireless clients |
mikrotik_get_queues |
Bandwidth queues |
mikrotik_system_resources |
CPU/memory/uptime |
mikrotik_execute_command |
RouterOS command via SSH |
ThingsBoard (tb_*)
| Tool |
Description |
tb_list_devices |
List registered devices |
tb_device_telemetry |
Latest telemetry data |
tb_device_attributes |
Device attributes |
tb_send_rpc |
Send RPC command |
tb_get_alarms |
Active alarms |
tb_get_dashboards |
List dashboards |
ESPHome (esphome_*)
| Tool |
Description |
esphome_list_devices |
List managed devices |
esphome_device_info |
Device details |
esphome_get_states |
Entity states |
esphome_call_service |
Call service (turn on/off, etc.) |
esphome_get_logs |
Device logs |
esphome_compile |
Trigger OTA compile |
ESPConnect (espconnect_*)
| Tool |
Description |
espconnect_list_devices |
List devices |
espconnect_device_status |
Device status |
espconnect_send_command |
Send command |
espconnect_ota_update |
OTA firmware update |
Tuya Cloud (tuya_*)
| Tool |
Description |
tuya_list_devices |
List cloud devices |
tuya_device_status |
Device properties |
tuya_send_commands |
Control commands |
tuya_get_scenes |
Smart scenes |
tuya_trigger_scene |
Trigger scene |
Sonoff/eWeLink (sonoff_*)
| Tool |
Description |
sonoff_list_devices |
List devices |
sonoff_device_status |
Device status |
sonoff_toggle |
On/off control |
sonoff_get_power_usage |
Power monitoring |
QNAP NAS (qnap_*)
| Tool |
Description |
qnap_system_info |
System info (model, firmware, uptime) |
qnap_get_volumes |
Storage volumes/pools (RAID, capacity) |
qnap_get_disks |
Physical disks (SMART, health, temp) |
qnap_get_shared_folders |
Shared folders |
qnap_get_network |
Network interfaces |
qnap_get_apps |
Running applications/packages |
qnap_get_logs |
System logs |
qnap_resource_usage |
CPU/memory/disk usage |
Synology NAS (synology_*)
| Tool |
Description |
synology_system_info |
System info (model, DSM version, uptime) |
synology_get_storage |
Storage volumes/pools (RAID, capacity) |
synology_get_disks |
Physical disks (SMART, health, temp) |
synology_get_shared_folders |
Shared folders |
synology_get_network |
Network interfaces |
synology_get_packages |
Installed packages |
synology_system_utilization |
CPU/memory/network/disk utilization |
synology_get_logs |
System logs |
synology_get_docker |
Docker containers |
Proxmox VE (proxmox_*)
| Tool |
Description |
proxmox_get_nodes |
List cluster nodes |
proxmox_node_status |
Node status (CPU, memory, uptime) |
proxmox_list_vms |
List QEMU VMs on a node |
proxmox_vm_status |
VM status details |
proxmox_list_containers |
List LXC containers on a node |
proxmox_container_status |
LXC container status details |
proxmox_get_storage |
Storage pools on a node |
proxmox_get_network |
Network configuration |
proxmox_cluster_resources |
Cluster-wide resource overview |
proxmox_get_tasks |
Recent tasks/operations |
VMware ESXi (esxi_*)
| Tool |
Description |
esxi_list_vms |
List all VMs with power state |
esxi_get_vm |
VM details (by ID or name) |
esxi_power_on |
Power on VM |
esxi_power_off |
Power off VM (graceful/force) |
esxi_restart_vm |
Restart VM |
esxi_suspend_vm |
Suspend VM |
esxi_host_info |
Host info (CPU, memory, version) |
esxi_list_datastores |
Datastores with capacity/usage |
esxi_list_networks |
Networks and port groups |
esxi_list_snapshots |
VM snapshots |
esxi_create_snapshot |
Create VM snapshot |
esxi_delete_snapshot |
Delete VM snapshot |
esxi_revert_snapshot |
Revert VM to snapshot |
Dahua NVR/DVR/IPC (dahua_nvr_*)
| Tool |
Description |
dahua_nvr_system_info |
System info (model, firmware, serial number) |
dahua_nvr_get_channels |
Camera channels list |
dahua_nvr_channel_status |
Video input status |
dahua_nvr_storage_info |
HDD/storage info |
dahua_nvr_network |
Network configuration |
dahua_nvr_alarms |
Alarm/event history |
dahua_nvr_recording_status |
Recording mode/status |
dahua_nvr_ptz |
PTZ camera control (pan, tilt, zoom, preset) |
Dahua DSS Pro/Express (dss_*)
| Tool |
Description |
dss_server_info |
DSS server information |
dss_list_devices |
List managed devices |
dss_device_info |
Device details by code |
dss_list_channels |
Video channels (all or by device) |
dss_channel_status |
Channel online/offline status |
dss_list_alarms |
Alarm events (with time filter) |
dss_list_organizations |
Organization groups |
dss_record_status |
Channel recording status |
dss_device_online_status |
Device online/offline check |
OpenStack / MicroStack (openstack_*)
| Tool |
Description |
openstack_list_servers |
List compute instances (VMs) |
openstack_server_detail |
Server/instance details |
openstack_server_action |
Start/stop/reboot/pause/suspend/resume server |
openstack_list_flavors |
Available VM flavors (sizes) |
openstack_list_hypervisors |
Hypervisors with resource stats |
openstack_list_images |
Available images (Glance) |
openstack_list_networks |
Networks (Neutron) |
openstack_list_subnets |
Subnets (Neutron) |
openstack_list_routers |
Routers (Neutron) |
openstack_list_floating_ips |
Floating IPs (Neutron) |
openstack_list_volumes |
Block storage volumes (Cinder) |
openstack_list_projects |
Projects/tenants (Keystone) |
Hi-Flying Serial Server (hf_*)
| Tool |
Description |
hf_device_info |
Device info (firmware, MAC address) |
hf_get_serial_config |
Serial port settings (baud, parity) |
hf_set_serial_config |
Change serial port parameters |
hf_get_network |
Network config (IP, gateway, TCP port) |
hf_get_wifi |
WiFi SSID and security (WiFi models) |
hf_tcp_status |
TCP link status |
hf_at_command |
Send raw AT command |
hf_serial_send |
Send data through serial port (TCP transparent) |
hf_reboot |
Reboot device |
VPN Support
Container รองรับ 5 VPN protocols เพื่อเข้าถึงอุปกรณ์ที่อยู่หลัง VPN:
| VPN |
Config Location |
Auto-connect |
| OpenVPN |
vpn/openvpn/*.ovpn |
ทุก .ovpn file |
| WireGuard |
vpn/wireguard/*.conf |
ทุก .conf file |
| Tailscale |
TS_AUTHKEY in .env |
เมื่อมี authkey |
| Cloudflare Tunnel |
CF_TUNNEL_TOKEN in .env |
เมื่อมี token |
| ZeroTier |
ZT_NETWORKS in .env |
เมื่อมี network IDs |
Setup OpenVPN
วาง .ovpn config files ไว้ใน vpn/openvpn/:
cp your-vpn-config.ovpn vpn/openvpn/
Setup WireGuard
วาง WireGuard config ไว้ใน vpn/wireguard/:
cp wg0.conf vpn/wireguard/
Setup Tailscale
สร้าง auth key จาก https://login.tailscale.com/admin/settings/keys แล้วใส่ใน .env:
TS_AUTHKEY=tskey-auth-xxxxxxxxxxxxx
Setup ZeroTier
สร้าง network ที่ my.zerotier.com แล้วใส่ network ID ใน .env (หลาย network คั่นด้วย comma):
ZT_NETWORKS=af78bf9436abcdef
อย่าลืม authorize member ใน ZeroTier Central หลัง container join แล้ว
Setup Cloudflare Tunnel
สร้าง Tunnel จาก Cloudflare Zero Trust Dashboard -> Networks -> Tunnels แล้วคัดลอก token ใส่ .env:
CF_TUNNEL_TOKEN=eyJhIjoixxxxxxx...
กำหนด Private Network routes ใน Cloudflare Dashboard เพื่อให้ tunnel route traffic ไปยัง subnet ของอุปกรณ์
Device VPN Annotation
ระบุ VPN ที่อุปกรณ์ใช้ใน devices.json ด้วย field vpn (optional, ช่วยให้ Claude รู้ว่าอุปกรณ์อยู่หลัง VPN ไหน):
{
"id": "cisco-remote",
"name": "Cisco Remote Switch",
"type": "cisco",
"host": "10.8.0.100",
"vpn": "openvpn",
"tags": ["remote"]
}
Check VPN Status
ใช้ tool vpn_status เพื่อดูสถานะ VPN interfaces ทั้งหมด
Configuration
Device Types
| Type |
Required Fields |
cisco, hp |
host, username, password |
fortigate |
host, apiUrl, apiKey (REST) + username, password (SSH) |
mikrotik |
host, apiUrl, username, password |
thingsboard |
apiUrl, username, password |
esphome |
apiUrl, optional apiKey |
espconnect |
apiUrl, optional apiKey |
tuya |
apiUrl, extra.clientId, extra.clientSecret |
sonoff |
apiUrl, extra.appId, extra.appSecret, username, password |
qnap |
apiUrl, username, password |
synology |
apiUrl, username, password |
proxmox |
apiUrl, username, password (or apiKey for API token) |
esxi |
host, username, password (vSphere REST API, ESXi 6.5+) |
dahua-nvr |
apiUrl, username, password (HTTP CGI API, Basic auth) |
dahua-dss |
apiUrl, username, password (REST API, token auth) |
openstack |
apiUrl (Keystone), username, password, extra.project, extra.domain |
hiflying |
host, apiUrl, username, password, extra.atPort (49000), extra.serialPort (8899) |
Docker Serial Port
Uncomment in docker-compose.yml for serial device access:
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
Environment Variables
| Variable |
Default |
Description |
SSE_HOST |
0.0.0.0 |
SSE server bind address |
SSE_PORT |
3000 |
SSE server port (internal) |
DEVICES_FILE |
./devices.json |
Path to device inventory |
NODE_TLS_REJECT_UNAUTHORIZED |
- |
Set to 0 for self-signed certs |
TS_AUTHKEY |
- |
Tailscale auth key (auto-connect) |
CF_TUNNEL_TOKEN |
- |
Cloudflare Tunnel token (auto-connect) |
ZT_NETWORKS |
- |
ZeroTier network IDs (comma-separated) |
Tech Stack
- Runtime: Node.js 22 (ES2022)
- Language: TypeScript (NodeNext modules)
- MCP SDK: @modelcontextprotocol/sdk ^1.0.0
- SSH: ssh2 (pure JS, legacy algorithm support)
- Serial: serialport (native bindings)
- HTTP: Native fetch (Node 22 built-in)
- Docker: node:22-slim multi-stage build
- VPN: OpenVPN, WireGuard, Tailscale, Cloudflare Tunnel, ZeroTier (built into container)