esp-mcp

Un servidor MCP para flujos de trabajo de ESP-IDF, que permite compilaciones de proyectos, flasheo de firmware y resolución automatizada de problemas a partir de registros de compilación.

Documentación

MseeP.ai Security Assessment Badge

Objetivo

El objetivo de este MCP es:

  • Consolidar los comandos de ESP-IDF y proyectos relacionados en un solo lugar.
  • Simplificar el inicio usando únicamente comunicación con LLM.

Cómo contribuir al proyecto

¡Simplemente encuentra un comando que falte en este MCP y crea un PR para él!

Si quieres que alguien te ayude con esta implementación, solo abre un issue.

Aviso

Este proyecto es actualmente una Prueba de Concepto (PoC) para un servidor MCP adaptado a los flujos de trabajo de ESP-IDF.

Capacidades actuales:

Características principales:

  • run_esp_idf_install: Instala las dependencias y el toolchain de ESP-IDF mediante install.sh.
  • create_esp_project: Crea un nuevo proyecto ESP-IDF.
  • setup_project_esp_target: Establece el chip objetivo para proyectos ESP-IDF (esp32, esp32c3, esp32s3, etc.).
  • build_esp_project: Compila proyectos ESP-IDF con soporte de compilación incremental.
  • list_esp_serial_ports: Lista los puertos serie disponibles para dispositivos ESP.
  • flash_esp_project: Flashea el firmware compilado a dispositivos ESP conectados.
  • run_pytest: Ejecuta pruebas pytest con soporte pytest-embedded para proyectos ESP-IDF.

Características adicionales:

  • Gestión flexible de rutas de ESP-IDF: soporta versiones de ESP-IDF por proyecto mediante el parámetro idf_path.
  • Gestión de configuración del SDK: soporta archivos sdkconfig_defaults personalizados para la configuración de compilación (se pueden especificar varios archivos separados por punto y coma).
  • Seguimiento del tiempo de compilación para monitoreo de rendimiento.
  • Especificación opcional del puerto para operaciones de flasheo.
  • Incluye soporte experimental para la corrección automática de problemas basada en los registros de compilación.

Visión y trabajo futuro: La visión a largo plazo es expandir este MCP hasta convertirlo en un kit de herramientas integral para interactuar con dispositivos embebidos, con la posible integración con plataformas de home assistant, y agilizar el acceso a la documentación de ESP-IDF y tecnologías relacionadas.

Imaginamos características como:

  • Soporte más amplio de comandos ESP-IDF (por ejemplo, interacción con monitor, menuconfig si es factible).
  • Gestión de dispositivos y recuperación de información.
  • Integración con otras herramientas y plataformas de desarrollo embebido.

¡Tus ideas y contribuciones son bienvenidas! No dudes en discutirlas abriendo un issue.

Instalación

Primero, clona este repositorio MCP:

git clone git@github.com:horw/esp-mcp.git

Luego, configúralo en tu chatbot.

El fragmento JSON a continuación es un ejemplo de cómo podrías configurar este servidor esp-mcp dentro de un chatbot o un sistema de agente que soporte el Protocolo de Contexto de Modelo (MCP). Los pasos y el formato de configuración exactos pueden variar según el sistema de chatbot específico que estés usando. Consulta la documentación de tu chatbot para obtener detalles sobre cómo integrar servidores MCP.

{
    "mcpServers": {
        "esp-run": { // "esp-run" is an arbitrary name you can assign to this server configuration.
            "command": "<path_to_uv_or_python_executable>",
            "args": [
                "--directory",
                "<path_to_cloned_esp-mcp_repository>", // e.g., /path/to/your/cloned/esp-mcp
                "run",
                "main.py" // If using python directly, this might be just "main.py" and `command` would be your python interpreter
            ],
            "env": {
                "IDF_PATH": "<path_to_your_esp-idf_directory>" // e.g., ~/esp/esp-idf or C:\\Espressif\\frameworks\\esp-idf
            }
        }
    }
}

Algunas notas sobre la configuración:

  • command: Esta debe ser la ruta completa a tu ejecutable uv si lo estás usando, o tu intérprete de Python (por ejemplo, /usr/bin/python3 o C:\\Python39\\python.exe) si planeas ejecutar main.py directamente.
  • args:
    • El primer argumento para --directory debe ser la ruta absoluta donde clonaste el repositorio esp-mcp.
    • Si estás usando uv, los argumentos run main.py son apropiados. Si estás usando Python directamente, es posible que solo necesites main.py en la lista args, y asegúrate de que tu command apunte al ejecutable de Python.
  • IDF_PATH: (Opcional) Esta variable de entorno puede apuntar al directorio raíz de tu instalación de ESP-IDF. ESP-IDF es el Framework oficial de Desarrollo IoT de Espressif. Si no lo has instalado, consulta la documentación oficial de ESP-IDF para obtener instrucciones de instalación. Nota: Todas las herramientas soportan un parámetro idf_path que se puede especificar manualmente al llamar a la herramienta, lo que te permite usar diferentes versiones de ESP-IDF para diferentes proyectos sin configurar la variable de entorno. Si idf_path no se proporciona, la herramienta usará la variable de entorno IDF_PATH si está disponible.

Uso

Una vez que el servidor esp-mcp esté configurado y en ejecución, tu LLM o chatbot puede interactuar con él usando las herramientas definidas en este MCP. Por ejemplo, podrías pedirle a tu chatbot que:

  • "Instala las dependencias de ESP-IDF para la instalación de ESP-IDF en /path/to/esp-idf."
  • "Establece el chip objetivo a esp32s3 para el proyecto en /path/to/my/esp-project."
  • "Compila el proyecto ubicado en /path/to/my/esp-project usando el esp-mcp."
  • "Compila el proyecto con valores predeterminados de sdkconfig personalizados: sdkconfig.defaults;sdkconfig.ci.release."
  • "Ejecuta pruebas pytest para el proyecto en /path/to/my/esp-project con objetivo esp32c3."
  • "Flashea el firmware a mi dispositivo ESP32 conectado para el proyecto en my_app."

El servidor MCP ejecutará entonces los comandos ESP-IDF correspondientes (como idf.py build, idf.py set-target, idf.py flash, pytest) según las herramientas implementadas en main.py.

El result.gif a continuación muestra un ejemplo de interacción:

Result

Ejemplos

  1. Compilar y Flashear

Historial de Estrellas

Star History Chart