Skip to main content
Glama

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 handler for the 'set_state' tool. Parses arguments, builds request body excluding undefined values, sends PUT request to LIFX /lights/{selector}/state endpoint, and returns success message with 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-172 (registration)
    Registration of the 'set_state' tool in the list_tools response, including name, description, and input schema definition.
    { 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"], }, }, {
  • Helper function used by the set_state handler (and others) to make authenticated HTTP requests to the LIFX API.
    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