
ESP32 MCP
STREAMABLE HTTPWebSocket-based MCP server for ESP32 enabling resource discovery and monitoring
WebSocket-based MCP server for ESP32 enabling resource discovery and monitoring
A Model Context Protocol (MCP) implementation for ESP32 microcontrollers, providing a WebSocket-based interface for resource discovery and monitoring.
Created with Claude 3.5 Sonet on the commit date (with minor obvioud fixes with automatic formating, etc.)
flowchart TD Start[Start Application] --> Setup[Setup] Setup -->|Initialize Filesystem| InitFS[Initialize LittleFS] Setup -->|Start Network| StartNetwork[Initialize Network Manager] Setup -->|Create Tasks| CreateTasks[Create and Assign Tasks] subgraph Network StartNetwork --> APCheck[Check AP or Connect Mode] APCheck -->|Credentials Exist| Connect[Connect to WiFi] APCheck -->|No Credentials| StartAP[Start Access Point] Connect --> NetworkReady[Network Ready] StartAP --> NetworkReady end subgraph MCP_Server MCP[Start MCP Server] --> HandleClient[Handle Client Connections] HandleClient --> HandleRequest[Handle Requests] HandleRequest -->|WebSocket Events| WebSocket[Handle WebSocket] HandleRequest -->|HTTP Endpoints| HTTP[Process HTTP Requests] end subgraph Metrics self[Start Metrics System] --> InitMetrics[Initialize System Metrics] InitMetrics --> CollectMetrics[Collect Metrics Periodically] CollectMetrics --> SaveMetrics[Save Metrics to Filesystem] end subgraph Logger self[Start uLogger] --> LogMetrics[Log Metrics Data] LogMetrics --> CompactLogs[Compact Logs if Necessary] CompactLogs -->|Rotates Logs| LogRotation end CreateTasks -->|Network Task| NetworkTask[Run Network Task on Core] CreateTasks -->|MCP Task| MCPTask[Run MCP Server Task on Core] NetworkTask --> Network MCPTask --> MCP_Server MCP_Server --> Metrics Metrics --> Logger
git clone https://github.com/yourusername/esp32-mcp-server.git cd esp32-mcp-server
pio pkg install
pio run -t uploadfs
pio run -t upload
Connect to the MCP server using WebSocket on port 9000:
const ws = new WebSocket('ws://YOUR_ESP32_IP:9000'); // Initialize connection ws.send(JSON.stringify({ jsonrpc: "2.0", method: "initialize", id: 1 })); // List available resources ws.send(JSON.stringify({ jsonrpc: "2.0", method: "resources/list", id: 2 }));
Run the test suite:
# Run all tests pio test -e native # Run specific test pio test -e native -f test_request_queue # Run with coverage pio test -e native --coverage
git checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.