Compatibility
Firmware — McpIot Library
Section titled “Firmware — McpIot Library”Supported Boards
Section titled “Supported Boards”| Board / Platform | Serial | WiFi TCP | Bluetooth | PWM | ADC |
|---|---|---|---|---|---|
| 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
Platform Notes
Section titled “Platform Notes”ESP32 (Full Support)
Section titled “ESP32 (Full Support)”- All 4 pin types:
digital_output,digital_input,pwm_output,adc_input - All 3 transports: Serial, WiFiClient, BluetoothSerial
pwm_writeusesanalogWrite(5 kHz default) — use custom LEDC tool for other frequencies- Up to 32 pins / 32 tools (configurable via
MCP_MAX_PINS,MCP_MAX_TOOLS)
ESP8266
Section titled “ESP8266”- Serial and WiFiClient transports ✅
- No Bluetooth ❌
analogWriteavailable, frequency fixed at ~1 kHz ⚠️- ADC: only 1 analog pin (A0) ⚠️
AVR (Uno, Mega, Nano)
Section titled “AVR (Uno, Mega, Nano)”- 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 ⚠️
Not Supported (Firmware)
Section titled “Not Supported (Firmware)”| Feature | Status | Reason |
|---|---|---|
| Async / non-blocking I/O | ❌ | Arduino loop() is single-threaded |
| I2C built-in tools | ❌ | Use custom tools with your sensor library instead |
| SPI built-in tools | ❌ | Implement as custom tools |
| UART passthrough | ❌ | Out of scope |
| OTA firmware update | ❌ | Out of scope |
| JSON Schema: arrays, nested objects | ❌ | MCU RAM constraints |
JSON Schema: $ref, anyOf, allOf | ❌ | Same reason |
| WebSocket transport | ❌ | Not in v1.0 |
| mDNS / Zeroconf discovery | ❌ | Not in v1.0 |
String IDs in JSON-RPC id field | ⚠️ | Parsed as int; string IDs truncate to 0 |
MCP Client (TypeScript)
Section titled “MCP Client (TypeScript)”Supported Node.js Versions
Section titled “Supported Node.js Versions”| Version | Status |
|---|---|
| Node 22 LTS | ✅ Recommended |
| Node 20 LTS | ✅ Supported |
| Node 18 LTS | ✅ Supported |
| Node < 18 | ❌ ES2022 + top-level await required |
Configuration Methods
Section titled “Configuration Methods”| Method | Format | Example |
|---|---|---|
SERIAL_PORT env | port path | SERIAL_PORT=/dev/ttyACM0 |
SERIAL_BAUD env | baud rate | SERIAL_BAUD=9600 (default: 115200) |
DEVICES env | id:port:baud or id:host:port:tcp | esp32:/dev/ttyUSB0:115200 |
Supported OS
Section titled “Supported OS”| OS | Serial | TCP |
|---|---|---|
| Linux | ✅ /dev/ttyUSB*, /dev/ttyACM* | ✅ |
| macOS | ✅ /dev/tty.usbserial-* | ✅ |
| Windows | ✅ COM3, COM4, … | ✅ |
Not Supported (Client)
Section titled “Not Supported (Client)”| Feature | Status | Notes |
|---|---|---|
| Auto port detection | ❌ | Explicit config required in v1.0 |
| Hot-plug reconnect | ❌ | Restart client to reconnect |
| BLE over Node.js | ❌ | Bluetooth only works over BluetoothSerial (Classic) |
| HTTP / SSE transport | ❌ | stdio only in v1.0 |
| Nested Zod schemas | ❌ | Flat schemas only (mirrors firmware constraint) |
| Parallel requests to same device | ⚠️ | Works (ID matching), but no queue |
| Bun runtime | ❌ | Use Node.js instead |