Skip to main content
Glama

send-command

Send commands like restart, update, or status to NodeMCU/ESP8266 IoT devices remotely via the MCP server. Specify device ID and optional parameters for efficient device management.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
commandYesThe command to send (restart, update, status, etc.)
deviceIdYesThe ID of the device to send the command to
paramsNoOptional parameters for the command

Implementation Reference

  • Core handler implementation that sends the command via WebSocket to the NodeMCU device, waits for response with timeout, and handles errors.
    async sendCommand(deviceId, command, params = {}) { const ws = this.connections.get(deviceId); if (!ws || ws.readyState !== 1) { // WebSocket.OPEN = 1 throw new Error('Device not connected'); } return new Promise((resolve, reject) => { try { // Generate unique command ID const commandId = Date.now().toString(36) + Math.random().toString(36).substr(2, 5); // Create message const message = { type: 'command', commandId, command, params }; // Set up one-time response handler const responseHandler = (event) => { try { const response = JSON.parse(event.data); if (response.type === 'commandResponse' && response.commandId === commandId) { ws.removeEventListener('message', responseHandler); resolve(response.data); } } catch (error) { // Ignore non-JSON messages } }; // Set timeout for command const timeout = setTimeout(() => { ws.removeEventListener('message', responseHandler); reject(new Error('Command timed out')); }, 5000); // Add response handler ws.addEventListener('message', responseHandler); // Send command ws.send(JSON.stringify(message)); // Notify listeners this._notifyListeners('commandSent', { deviceId, command, params, commandId }); } catch (error) { reject(error); } }); }
  • MCP SDK tool handler for 'send-command', validates inputs, calls DeviceManager.sendCommand, and formats MCP response.
    server.tool( "send-command", { deviceId: z.string().describe("The ID of the device to send the command to"), command: z.string().describe("The command to send (restart, update, status, etc.)"), params: z.record(z.any()).optional().describe("Optional parameters for the command") }, async ({ deviceId, command, params = {} }) => { try { if (!deviceId) { throw new Error('Device ID is required'); } if (!command) { throw new Error('Command is required'); } const result = await deviceManager.sendCommand(deviceId, command, params); return { content: [{ type: "text", text: JSON.stringify({ success: true, deviceId, command, result }, null, 2) }] }; } catch (error) { console.error('Error sending command:', error); throw new Error(`Failed to send command: ${error.message}`); } }
  • JSON schema definition for the send-command tool parameters.
    "send-command": { description: "Send a command to a NodeMCU device", parameters: { deviceId: { type: "string", description: "The ID of the device to send the command to" }, command: { type: "string", description: "The command to send (restart, update, status, etc.)" }, params: { type: "object", description: "Optional parameters for the command" } }
  • Custom MCP server wrapper handler for send-command tool.
    async sendCommand(deviceId, command, params) { if (!deviceId) { throw new Error('Device ID is required'); } if (!command) { throw new Error('Command is required'); } try { return await deviceManager.sendCommand(deviceId, command, params); } catch (error) { throw new Error(`Failed to send command: ${error.message}`); } }
  • mcp_server.js:65-65 (registration)
    Tool definitions (including send-command) registered during MCP initialization.
    tools: this.toolDefinitions

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/amanasmuei/mcp-server-nodemcu'

If you have feedback or need assistance with the MCP directory API, please join our Discord server