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)
docker compose up -d
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)











