NodeMCU MCP Service

by amanasmuei
Verified
# NodeMCU MCP (Model Context Protocol) Service <p align="center"> <img src="assets/nodemcu-logo.svg" alt="NodeMCU MCP Logo" width="200" /> </p> A Model Context Protocol (MCP) service for managing NodeMCU devices. This service provides both a standard RESTful API/WebSocket interface and implements the [Model Context Protocol](https://modelcontextprotocol.io) for integration with AI tools like Claude Desktop. [![GitHub license](https://img.shields.io/github/license/amanasmuei/nodemcu-mcp)](https://github.com/amanasmuei/nodemcu-mcp/blob/main/LICENSE) [![npm version](https://badge.fury.io/js/nodemcu-mcp.svg)](https://badge.fury.io/js/nodemcu-mcp) ## Overview NodeMCU MCP provides a management solution for ESP8266/NodeMCU IoT devices with these key capabilities: - Monitor device status and telemetry - Send commands to devices remotely - Update device configurations - Integration with AI assistants through MCP protocol ## Visualizations <p align="center"> <img src="assets/architecture-diagram.svg" alt="NodeMCU MCP Architecture" width="600" /> <br><em>System Architecture Overview</em> </p> <p align="center"> <img src="assets/dataflow-diagram.svg" alt="NodeMCU MCP Data Flow" width="600" /> <br><em>Data Flow Between Components</em> </p> <p align="center"> <img src="assets/mcp-workflow.svg" alt="Claude + NodeMCU MCP Workflow" width="600" /> <br><em>How Claude Desktop Interacts with NodeMCU Devices</em> </p> ## Features - 🔌 **Device Management**: Register, monitor, and control NodeMCU devices - 📊 **Real-time Communication**: WebSocket interface for real-time updates - ⚙️ **Configuration Management**: Update device settings remotely - 🔄 **Command Execution**: Send restart, update, status commands remotely - 📡 **Telemetry Collection**: Gather sensor data and device metrics - 🔐 **Authentication**: Secure API access with JWT authentication - 🧠 **AI Integration**: Work with Claude Desktop and other MCP-compatible AI tools ## Quick Start ### Prerequisites - Node.js 16.x or higher - npm or yarn - For the NodeMCU client: Arduino IDE with ESP8266 support ### Installation #### From npm (once published) ```bash # Global installation (recommended for MCP integration) npm install -g nodemcu-mcp # Local installation npm install nodemcu-mcp ``` #### From source ```bash # Clone the repository git clone https://github.com/amanasmuei/nodemcu-mcp.git cd nodemcu-mcp # Install dependencies npm install # Optional: Install globally for MCP integration npm install -g . ``` ### Configuration 1. Create a `.env` file based on the example: ``` cp .env.example .env ``` 2. Update the `.env` file with your settings: ``` # Server Configuration PORT=3000 HOST=localhost # Security JWT_SECRET=your_strong_random_secret_key # Log Level (error, warn, info, debug) LOG_LEVEL=info ``` ## Usage ### Running as API Server Development mode with auto-restart: ```bash npm run dev ``` Production mode: ```bash npm start ``` ### Running as MCP Server For integration with Claude Desktop or other MCP clients: ```bash npm run mcp ``` If installed globally: ```bash nodemcu-mcp --mode=mcp ``` ### Command Line Options ``` Usage: nodemcu-mcp [options] Options: -m, --mode Run mode (mcp, api, both) [string] [default: "both"] -p, --port Port for API server [number] [default: 3000] -h, --help Show help [boolean] --version Show version number [boolean] ``` ## MCP Integration This project now uses the official Model Context Protocol (MCP) TypeScript SDK to provide integration with Claude for Desktop and other MCP clients. ### MCP Tools The following tools are available through the MCP interface: - **list-devices**: List all registered NodeMCU devices and their status - **get-device**: Get detailed information about a specific NodeMCU device - **send-command**: Send a command to a NodeMCU device - **update-config**: Update the configuration of a NodeMCU device ### Using with Claude for Desktop To use this server with Claude for Desktop: 1. Install Claude for Desktop from [https://claude.ai/desktop](https://claude.ai/desktop) 2. Configure Claude for Desktop by editing `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "nodemcu": { "command": "node", "args": [ "/ABSOLUTE/PATH/TO/YOUR/PROJECT/mcp_server_sdk.js" ] } } } ``` 3. Restart Claude for Desktop 4. You should now see the NodeMCU tools in the Claude for Desktop interface ### Running the MCP Server Standalone To run the MCP server directly: ```bash npm run mcp ``` Or using the CLI: ```bash ./bin/cli.js --mode=mcp ``` ## API Documentation ### Authentication - **POST /api/auth/login** - Login and get JWT token ```json { "username": "admin", "password": "admin123" } ``` Response: ```json { "message": "Login successful", "token": "your.jwt.token", "user": { "id": 1, "username": "admin", "role": "admin" } } ``` - **POST /api/auth/validate** - Validate JWT token ```json { "token": "your.jwt.token" } ``` ### Devices API All device endpoints require authentication with a JWT token: ``` Authorization: Bearer your.jwt.token ``` #### List Devices ``` GET /api/devices ``` Response: ```json { "count": 1, "devices": [ { "id": "nodemcu-001", "name": "Living Room Sensor", "type": "ESP8266", "status": "online", "ip": "192.168.1.100", "firmware": "1.0.0", "lastSeen": "2023-05-15T14:30:45.123Z" } ] } ``` #### Get Device Details ``` GET /api/devices/:id ``` Response: ```json { "id": "nodemcu-001", "name": "Living Room Sensor", "type": "ESP8266", "status": "online", "ip": "192.168.1.100", "firmware": "1.0.0", "lastSeen": "2023-05-15T14:30:45.123Z", "config": { "reportInterval": 30, "debugMode": false, "ledEnabled": true }, "lastTelemetry": { "temperature": 23.5, "humidity": 48.2, "uptime": 3600, "heap": 35280, "rssi": -68 } } ``` #### Send Command to Device ``` POST /api/devices/:id/command ``` Request: ```json { "command": "restart", "params": {} } ``` Response: ```json { "message": "Command sent to device", "command": "restart", "params": {}, "response": { "success": true, "message": "Device restarting" } } ``` ## WebSocket Protocol The WebSocket server is available at the root path: `ws://your-server:3000/` For details on the WebSocket protocol messages, refer to the code or the examples directory. ## NodeMCU Client Setup Refer to the Arduino sketch in the `examples` directory for a complete client implementation. ### Key Steps 1. Install required libraries in Arduino IDE: - ESP8266WiFi - WebSocketsClient - ArduinoJson 2. Configure the sketch with your WiFi and server settings: ```cpp // WiFi credentials const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASSWORD"; // MCP Server settings const char* mcpHost = "your-server-ip"; const int mcpPort = 3000; ``` 3. Upload the sketch to your NodeMCU device ## Development ### Project Structure ``` nodemcu-mcp/ ├── assets/ # Logo and other static assets ├── bin/ # CLI scripts ├── examples/ # Example client code ├── middleware/ # Express middleware ├── routes/ # API routes ├── services/ # Business logic ├── .env.example # Environment variables example ├── index.js # API server entry point ├── mcp_server.js # MCP protocol implementation ├── mcp-manifest.json # MCP manifest └── package.json # Project configuration ``` ### Contributing Contributions are welcome! Please feel free to submit a Pull Request. 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. MIT License is a permissive license that allows you to: - Use the software commercially - Modify the software - Distribute the software - Use and modify the software privately The only requirement is that the license and copyright notice must be included with the software. ## Acknowledgments - [Model Context Protocol](https://modelcontextprotocol.io) for the integration specification - [NodeMCU](https://nodemcu.com) for the amazing IoT platform - [Anthropic](https://anthropic.com) for Claude Desktop