Skip to main content
Glama
lenvolk
by lenvolk

set_state

Control LIFX smart lights by adjusting power, color, brightness, and infrared settings for selected lights.

Instructions

Set the state of lights

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')
powerNoPower state
colorNoColor string
brightnessNoBrightness (0.0 to 1.0)
durationNoDuration in seconds
infraredNoInfrared brightness (0.0 to 1.0)
fastNoFast mode (skip confirmation)

Implementation Reference

  • The main handler logic for the 'set_state' tool. It destructures the arguments, filters out undefined state parameters (power, color, brightness, duration, infrared, fast), makes a PUT request to the LIFX API endpoint `/lights/{selector}/state` using the makeLIFXRequest helper, and returns a success message with the API response.
    case "set_state": { const { token, selector = "all", ...stateParams } = args as { token: string; selector?: string; power?: string; color?: string; brightness?: number; duration?: number; infrared?: number; fast?: boolean; }; const body = Object.fromEntries( Object.entries(stateParams).filter(([_, value]) => value !== undefined) ); const result = await makeLIFXRequest(`/lights/${selector}/state`, { method: "PUT", body, token, }); return { content: [ { type: "text", text: `State updated successfully for selector "${selector}". ${JSON.stringify(result, null, 2)}`, }, ], }; }
  • src/index.ts:154-171 (registration)
    Registration of the 'set_state' tool in the ListTools response, including its description and full inputSchema (JSON Schema) defining parameters, types, descriptions, and required fields.
    { name: "set_state", description: "Set the state of lights", inputSchema: { type: "object", properties: { token: { type: "string", description: "LIFX API token" }, selector: { type: "string", description: "Selector for filtering lights (default: 'all')" }, power: { type: "string", enum: ["on", "off"], description: "Power state" }, color: { type: "string", description: "Color string" }, brightness: { type: "number", minimum: 0, maximum: 1, description: "Brightness (0.0 to 1.0)" }, duration: { type: "number", minimum: 0, description: "Duration in seconds" }, infrared: { type: "number", minimum: 0, maximum: 1, description: "Infrared brightness (0.0 to 1.0)" }, fast: { type: "boolean", description: "Fast mode (skip confirmation)" }, }, required: ["token"], }, },
  • The input schema (JSON Schema) for the set_state tool, specifying validation rules for all parameters.
    inputSchema: { type: "object", properties: { token: { type: "string", description: "LIFX API token" }, selector: { type: "string", description: "Selector for filtering lights (default: 'all')" }, power: { type: "string", enum: ["on", "off"], description: "Power state" }, color: { type: "string", description: "Color string" }, brightness: { type: "number", minimum: 0, maximum: 1, description: "Brightness (0.0 to 1.0)" }, duration: { type: "number", minimum: 0, description: "Duration in seconds" }, infrared: { type: "number", minimum: 0, maximum: 1, description: "Infrared brightness (0.0 to 1.0)" }, fast: { type: "boolean", description: "Fast mode (skip confirmation)" }, }, required: ["token"], }, },
  • Core helper function makeLIFXRequest used by the set_state handler to perform authenticated HTTP requests to the LIFX API, handling headers, JSON body, error checking, and response parsing.
    async function makeLIFXRequest( endpoint: string, options: { method?: string; body?: any; token: string; } ): Promise<any> { const { method = "GET", body, token } = options; const url = `${LIFX_API_BASE}${endpoint}`; const headers: Record<string, string> = { "Authorization": `Bearer ${token}`, "User-Agent": USER_AGENT, }; if (body && (method === "POST" || method === "PUT")) { headers["Content-Type"] = "application/json"; } try { const response = await fetch(url, { method, headers, body: body ? JSON.stringify(body) : undefined, }); if (!response.ok) { const errorText = await response.text(); throw new Error(`LIFX API error: ${response.status} ${response.statusText} - ${errorText}`); } // Some endpoints return empty responses const contentType = response.headers.get("content-type"); if (contentType?.includes("application/json")) { return await response.json(); } return await response.text(); } catch (error) { throw new Error(`Failed to make LIFX API request: ${error instanceof Error ? error.message : String(error)}`); } }

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/lenvolk/mcp-lifx'

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