Dependency changes: - fastmcp >=2.12.4 → >=3.0.2,<4 - Drop asyncio-mqtt (dead dependency, never imported) - Align pydantic, click, rich with FastMCP 3.x - Bump version to 2026.02.23 Docs site (docs-site/): - Astro Starlight with Tailwind v4 teal theme - 28 pages following Diataxis: 3 tutorials, 7 how-to guides, 13 reference pages, 4 explanation pages - Docker infrastructure (Caddy prod, Node HMR dev) - Configured for mcesptool.warehack.ing
mcesptool
FastMCP server for ESP32/ESP8266 development workflows via Model Context Protocol.
Features
- Chip Control: Advanced ESP device detection, connection, and control
- Flash Operations: Comprehensive flash memory management with safety features
- Security Management: ESP security features including secure boot and flash encryption
- Production Tools: Factory programming and batch operations
- Middleware System: Universal CLI tool integration with bidirectional MCP communication
- ESP-IDF Integration: Host application support for hardware-free development
- QEMU Emulation: Virtual ESP32 devices for testing without physical hardware
Quick Start
Installation
# Install with uvx (recommended)
uvx mcesptool
# Or install in project
uv add mcesptool
Claude Code Integration
# Add to Claude Code
claude mcp add mcesptool "uvx mcesptool"
Development Setup
# Clone and setup
git clone <repository>
cd mcp-esptool
make dev
# Run development server
make run-debug
# Run tests
make test
Architecture
The server implements a component-based architecture with middleware for CLI tool integration:
- Components: Specialized modules for different ESP development workflows
- Middleware: Universal pattern for intercepting and redirecting CLI tool output to MCP context
- Configuration: Environment-based configuration with auto-detection
- Production Ready: Docker support with development and production modes
Components
ChipControl: Device detection, connection management, reset operationsFlashManager: Flash operations with verification and backupPartitionManager: Partition table management and OTA supportSecurityManager: Security features and eFuse managementFirmwareBuilder: ESP-IDF integration and binary operationsOTAManager: Over-the-air update workflowsProductionTools: Factory programming and quality controlDiagnostics: Memory dumps and performance profilingQemuManager: QEMU-based ESP32 emulation with download mode, efuse, and flash support
Flash Operations
Advanced flash management tools for efficient firmware deployment:
| Tool | Description |
|---|---|
esp_flash_firmware |
Flash a single binary to device |
esp_flash_multi |
Flash multiple binaries at different addresses in one operation |
esp_verify_flash |
Verify flash contents match a file without re-flashing |
esp_flash_read |
Read flash memory to a file |
esp_flash_erase |
Erase flash regions |
esp_flash_backup |
Create complete flash backup |
Multi-File Flashing
Flash bootloader, partition table, and app in a single operation:
esp_flash_multi(
files=[
{"address": "0x0", "path": "bootloader.bin"},
{"address": "0x8000", "path": "partitions.bin"},
{"address": "0x10000", "path": "app.bin"}
],
port="/dev/ttyUSB0",
verify=True
)
RAM Loading (Development Iteration)
Test firmware changes without wearing out flash:
| Tool | Description |
|---|---|
esp_elf_to_ram_binary |
Convert ELF to RAM-loadable binary |
esp_load_ram |
Load and execute binary in RAM |
esp_serial_monitor |
Capture serial output from device |
Workflow
# 1. Build your ESP-IDF project
idf.py build
# 2. Convert ELF to RAM binary
esp_elf_to_ram_binary(elf_path="build/my_app.elf", chip="esp32s3")
# 3. Load to RAM and execute (no flash wear!)
esp_load_ram(binary_path="my_app-ram.bin", port="/dev/ttyUSB0")
# 4. Capture output
esp_serial_monitor(port="/dev/ttyUSB0", duration_seconds=10)
Note: RAM loading requires ELFs built without secure boot (CONFIG_SECURE_BOOT=n). Some PlatformIO defaults may be incompatible.
QEMU Emulation
Run virtual ESP32 devices without physical hardware. Requires Espressif's QEMU fork:
# Install via ESP-IDF tools
source /path/to/esp-idf/export.sh
python3 $IDF_PATH/tools/idf_tools.py install qemu-xtensa qemu-riscv32
The server auto-detects QEMU binaries from ~/.espressif/tools/. Once available, five tools are exposed:
| Tool | Description |
|---|---|
esp_qemu_start |
Launch a virtual ESP device (supports esp32, esp32s3, esp32c3) |
esp_qemu_stop |
Stop a running instance |
esp_qemu_list |
List all running instances |
esp_qemu_status |
Detailed instance info |
esp_qemu_flash |
Write firmware to a virtual device's flash |
Virtual devices appear in esp_scan_ports alongside physical hardware, connected via socket://localhost:<port>.
Configuration
Configure via environment variables or .env file:
ESPTOOL_PATH=esptool
ESP_DEFAULT_BAUD_RATE=460800
ESP_IDF_PATH=/path/to/esp-idf
MCP_ENABLE_PROGRESS=true
PRODUCTION_MODE=false
Docker
# Development with hot reload
make docker-up
# Production deployment
DOCKER_TARGET=production make docker-up
License
MIT License - see LICENSE file for details.