run_esp_idf_installLABSCO SUMMARY
A proof of concept that covers the loop you actually repeat.
Set target, build, flash, test is the cycle that eats an embedded day, and all four are here as tools with the ESP-IDF path selectable per call — which matters because embedded projects routinely pin different IDF versions. The project is upfront that it is a PoC and invites PRs for missing commands, so treat gaps as expected rather than as bugs.
What it is
An MCP server that consolidates ESP-IDF and related project commands so an LLM can drive an embedded workflow end to end. The project describes itself as a proof of concept for ESP-IDF workflows.
What you get
- Toolchain setup through ESP-IDF's own
install.sh—run_esp_idf_install - New project creation and target chip selection across esp32, esp32c3, esp32s3 and the rest —
create_esp_project,setup_project_esp_target - Incremental builds with build-time tracking, and support for custom
sdkconfig_defaultsfiles, several separated by semicolons —build_esp_project - Serial port discovery and flashing to a connected device, with the port optional —
list_esp_serial_ports,flash_esp_project - Tests run with pytest-embedded support against a chosen target —
run_pytest - Per-project ESP-IDF versions: every tool takes an
idf_pathparameter, so different projects can use different installations without changing the environment - Experimental automatic issue fixing based on build logs
Requirements
Clone the repository — there is no published package — and point your client at it with uv or a Python interpreter, running main.py from the cloned directory. IDF_PATH is optional: set it to your ESP-IDF root and it becomes the default, or pass idf_path per call. ESP-IDF itself must be installed separately if you are not using the install tool; the project links Espressif's own getting-started guide. Flashing needs a physically connected ESP device.
Setup effort
Build from source
USE CASES
Getting a new board building
Create the project, set the target chip, and build — three calls instead of three remembered command lines.
Flashing without hunting for the port
List the serial ports, then flash the built firmware to the device that appears.
Building one project against a different IDF version
Pass idf_path on the call rather than changing the environment variable your other projects depend on.
Running the embedded test suite
Invoke pytest with pytest-embedded against the chosen target chip and read the result in the same session.
Building a release variant
Pass several sdkconfig defaults files, separated by semicolons, to the build.
7 tools
Listed in project docs. Your client may show a different list.
create_esp_projectsetup_project_esp_targetbuild_esp_projectlist_esp_serial_portsflash_esp_projectrun_pytestBEFORE YOU INSTALL
What to know first
Tools you get
7 tools named in the project's documentation.
Requires
ESP-IDF
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/horw/esp-mcp.gitMCP Clients
Any MCP client
{
"mcpServers": {
"esp-run": {
"command": "<YOUR_PATH_TO_UV_EXECUTABLE>",
"args": [
"--directory",
"<YOUR_PATH_TO_CLONED_ESP_MCP_REPOSITORY>",
"run",
"main.py"
],
"env": {
"IDF_PATH": "<YOUR_IDF_PATH>"
}
}
}
}<YOUR_PATH_TO_CLONED_ESP_MCP_REPOSITORY> is the absolute path of your clone, and <YOUR_IDF_PATH> your ESP-IDF directory. These args are uv's: to run main.py with Python instead, the command is your Python interpreter and args is just main.py.