Skip to content

Compatibility

Board / PlatformSerialWiFi TCPBluetoothPWMADC
ESP32 (all variants)✅ BLE Serial
ESP32-S2
ESP32-S3✅ BLE Serial
ESP32-C3✅ BLE Serial
ESP8266 (NodeMCU)
Arduino Uno (AVR)⚠️ limited pins
Arduino Mega (AVR)⚠️ limited pins
Arduino Nano⚠️ limited pins
RP2040 (Pico)⚠️ Pico W
STM32 (Arduino core)

Legend: ✅ Fully supported · ⚠️ Partial / limited · ❌ Not available


  • All 4 pin types: digital_output, digital_input, pwm_output, adc_input
  • All 3 transports: Serial, WiFiClient, BluetoothSerial
  • pwm_write uses analogWrite (5 kHz default) — use custom LEDC tool for other frequencies
  • Up to 32 pins / 32 tools (configurable via MCP_MAX_PINS, MCP_MAX_TOOLS)
  • Serial and WiFiClient transports ✅
  • No Bluetooth ❌
  • analogWrite available, frequency fixed at ~1 kHz ⚠️
  • ADC: only 1 analog pin (A0) ⚠️
  • Serial only ✅
  • No WiFi or Bluetooth ❌
  • PWM only on specific pins (3, 5, 6, 9, 10, 11 on Uno) ⚠️
  • Limited RAM — lower limits recommended ⚠️
#define MCP_MAX_PINS 8
#define MCP_MAX_TOOLS 8
  • ArduinoJson v7 requires at least 2KB SRAM — Uno is very tight ⚠️

FeatureStatusReason
Async / non-blocking I/OArduino loop() is single-threaded
I2C built-in toolsUse custom tools with your sensor library instead
SPI built-in toolsImplement as custom tools
UART passthroughOut of scope
OTA firmware updateOut of scope
JSON Schema: arrays, nested objectsMCU RAM constraints
JSON Schema: $ref, anyOf, allOfSame reason
WebSocket transportNot in v1.0
mDNS / Zeroconf discoveryNot in v1.0
String IDs in JSON-RPC id field⚠️Parsed as int; string IDs truncate to 0

VersionStatus
Node 22 LTS✅ Recommended
Node 20 LTS✅ Supported
Node 18 LTS✅ Supported
Node < 18❌ ES2022 + top-level await required
MethodFormatExample
SERIAL_PORT envport pathSERIAL_PORT=/dev/ttyACM0
SERIAL_BAUD envbaud rateSERIAL_BAUD=9600 (default: 115200)
DEVICES envid:port:baud or id:host:port:tcpesp32:/dev/ttyUSB0:115200
OSSerialTCP
Linux/dev/ttyUSB*, /dev/ttyACM*
macOS/dev/tty.usbserial-*
WindowsCOM3, COM4, …
FeatureStatusNotes
Auto port detectionExplicit config required in v1.0
Hot-plug reconnectRestart client to reconnect
BLE over Node.jsBluetooth only works over BluetoothSerial (Classic)
HTTP / SSE transportstdio only in v1.0
Nested Zod schemasFlat schemas only (mirrors firmware constraint)
Parallel requests to same device⚠️Works (ID matching), but no queue
Bun runtimeUse Node.js instead