Skip to main content
Glama
lenvolk
by lenvolk

LIFX MCP Server

A Model Context Protocol (MCP) server that provides tools for controlling LIFX smart lights through the LIFX HTTP API.

Features

This MCP server exposes the following LIFX API functionality as tools:

  • šŸ” list_lights - Get all lights or filter by selector

  • ⚔ set_state - Control power, color, brightness of lights

  • šŸ”„ toggle_power - Toggle lights on/off

  • 🫁 breathe_effect - Create breathing light effects

  • šŸ’« pulse_effect - Create pulsing light effects

  • šŸŽ¬ list_scenes - List all saved scenes

  • ā–¶ļø activate_scene - Activate a specific scene

  • āœ… validate_color - Validate color string formats

  • ā¹ļø effects_off - Turn off any running effects

šŸŽØ Interactive MCP App

NEW! This server includes an interactive web-based UI that provides:

  • Visual controls for all your LIFX lights

  • Real-time power, color, and brightness adjustments

  • One-click color presets

  • Visual effects (breathe & pulse) controls

  • Theme-aware design that adapts to your client

See MCP_APP_GUIDE.md for details on using the interactive UI.

Related MCP server: Philips Hue MCP Service

Prerequisites

  1. LIFX API Token: Get your token from LIFX Cloud Settings

  2. Node.js: Version 16 or higher

  3. VS Code with GitHub Copilot extension

Installation

  1. Clone this repository:

git clone https://github.com/lenvolk/mcp-lifx.git
cd mcp-lifx
  1. Install dependencies:

npm install
  1. Build the project:

npm run build

Usage

With VS Code and GitHub Copilot

The LIFX MCP server works seamlessly with VS Code's GitHub Copilot:

  1. Ensure the server is built: npm run build

  2. Set your LIFX_API_TOKEN environment variable

  3. The server will be automatically discovered by VS Code's MCP integration

  4. Open GitHub Copilot Chat and interact with your lights

Example interactions:

  • "List all my LIFX lights"

  • "Open LIFX control" - launches the interactive UI with visual controls

  • "Show LIFX app" - alternative way to open the control interface

  • "Turn on the kitchen lights"

  • "Set living room lights to blue"

  • "Launch LIFX dashboard" - opens the visual control panel

Running the Server

You can run the server directly with:

npm start

Or in development mode:

npm run serve

Example Usage

Once connected to an MCP client, you can use commands like:

Text Commands

  • "List all my LIFX lights"

  • "Turn on the kitchen lights"

  • "Set living room lights to blue"

  • "Start a breathe effect on all lights with red color"

  • "Show me all my saved scenes"

  • "Activate the movie night scene"

Interactive UI

Launch the visual control interface with any of these prompts:

  • "Open LIFX control" - Primary command to launch the UI

  • "Show LIFX app" - Alternative prompt

  • "Launch LIFX interface" - Opens the interactive controls

  • "Open LIFX dashboard" - Displays the visual UI

  • "Show me LIFX controls" - Launches the control panel

  • "Open the LIFX control panel" - Starts the interactive interface

  • "I want to control my LIFX lights visually" - Opens the UI

  • "Show LIFX remote" - Alternative way to access controls

The interactive UI provides visual controls for power, brightness, colors, and effects without needing text commands. See MCP_APP_GUIDE.md for details.

LIFX Selectors

Use selectors to target specific lights:

  • all - All lights

  • label:Kitchen - Lights labeled "Kitchen"

  • group:Living Room - Lights in "Living Room" group

  • location:Home - Lights at "Home" location

  • id:d073d5000000 - Specific light by ID

Color Formats

The server supports various color formats:

  • Named colors: red, blue, green, purple, etc.

  • RGB: rgb:255,0,0 (red)

  • HSB: hue:120 saturation:1.0 brightness:0.5

  • Kelvin: kelvin:3500 (warm white)

Development

Project Structure

mcp-lifx/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.ts          # Main MCP server implementation
│   ā”œā”€ā”€ mcp-app.tsx       # React MCP app UI
│   └── mcp-app.html      # HTML entry point for app
ā”œā”€ā”€ build/
│   ā”œā”€ā”€ index.js          # Compiled server
│   └── src/
│       └── mcp-app.html  # Bundled single-file app UI
ā”œā”€ā”€ LIFX.md               # LIFX API documentation
ā”œā”€ā”€ MCP_APP_GUIDE.md      # Interactive UI usage guide
ā”œā”€ā”€ mcp.md                # MCP tutorial reference
ā”œā”€ā”€ vite.config.ts        # Vite build configuration
ā”œā”€ā”€ package.json          # Project configuration
ā”œā”€ā”€ tsconfig.json         # TypeScript configuration
└── README.md             # This file

Available Scripts

  • npm run build - Build both the MCP app UI and server

  • npm run build:app - Build only the React UI

  • npm run build:server - Build only the TypeScript server

  • npm start - Run the compiled server

  • npm run serve - Run server in development mode (with tsx)

  • npm run dev - Build and run in one command

  • npm run clean - Remove build directory

  • npm run rebuild - Clean and rebuild everything

API Reference

All LIFX API endpoints and parameters are documented in LIFX.md.

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Test thoroughly

  5. Submit a pull request

License

ISC License

Support

For issues with this MCP server, please open an issue on GitHub. For LIFX API issues, refer to the official LIFX API documentation.


Note: This is an unofficial LIFX MCP server. LIFX is a trademark of LIFX Pty Ltd.

Available Tools

9 tools
activate_sceneC

Activate a scene

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
scene_uuidYesScene UUID
durationNoDuration in seconds
fastNoFast mode (skip confirmation)

TDQS

C2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Activate a scene' implies a write operation that changes lighting states, but it doesn't describe what activation entails (e.g., whether it overrides current settings, requires authentication, has side effects like network calls, or returns confirmation). For a mutation tool with zero annotation coverage, this lack of detail is a critical gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at three words, with no wasted text. However, this brevity borders on under-specification rather than efficient communication, as it omits necessary context. It's front-loaded but lacks substance, earning a high score for structure but not full marks due to the risk of being too minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a scene activation tool (likely involving API calls and lighting changes), no annotations, no output schema, and a sparse description, this is incomplete. The description doesn't cover what happens upon activation, error conditions, or return values, leaving the agent with significant uncertainty. It fails to provide adequate context for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all parameters documented in the input schema (token, scene_uuid, duration, fast). The description adds no meaning beyond this, as it doesn't explain parameter interactions (e.g., how duration and fast mode affect activation) or provide examples. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Activate a scene' is a tautology that merely restates the tool name without adding specificity. It doesn't explain what 'activate' means in this context (e.g., applying lighting presets, triggering effects) or distinguish this tool from siblings like 'set_state' or 'breathe_effect' that might also change lighting states. The purpose remains vague beyond the basic verb-noun pairing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing scene), exclusions (e.g., not for individual lights), or comparisons to siblings like 'set_state' for direct light control or 'list_scenes' for discovery. The agent must infer usage from the name alone, which is insufficient for informed selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

breathe_effectC

Perform a breathe effect

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')
colorYesColor to breathe
from_colorNoStarting color
periodNoDuration of one cycle in seconds
cyclesNoNumber of cycles
persistNoPersist the final color
power_onNoTurn on if off
peakNoPeak brightness (0.0 to 1.0)

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal insight. 'Perform a breathe effect' implies a mutating action on lights, but it does not detail side effects (e.g., whether it overrides other effects, requires authentication via token, or has rate limits). The description fails to compensate for the lack of annotations, leaving key behavioral traits undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence, 'Perform a breathe effect', which is front-loaded and wastes no words. While this conciseness comes at the cost of detail, it efficiently communicates the core action without redundancy or unnecessary elaboration, earning a high score for structure and brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, no annotations, no output schema), the description is inadequate. It does not explain what the tool returns, how errors are handled, or the operational context (e.g., interacting with LIFX lights). The lack of behavioral details and usage guidelines, combined with no output schema, leaves significant gaps for an agent to understand and use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, meaning all parameters are documented in the input schema itself. The description adds no additional meaning about parameters beyond what the schema provides (e.g., it does not explain how 'color' and 'from_color' interact or what 'breathe' entails). Given the high schema coverage, a baseline score of 3 is appropriate, as the description does not enhance parameter understanding but also does not detract from it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Perform a breathe effect' is a tautology that essentially restates the tool name 'breathe_effect' without specifying what the effect does or what resource it acts upon. While it implies an action ('perform'), it lacks specificity about the target (LIFX lights) or the nature of the effect (color breathing animation). This makes it vague and minimally informative compared to more descriptive alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'pulse_effect' (which might be similar) or 'set_state' (for static color changes), nor does it specify prerequisites, contexts, or exclusions for usage. This absence of comparative or contextual information leaves the agent without direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

effects_offC

Turn off any running effects

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')
power_offNoAlso turn off the lights

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether this requires specific permissions, how it interacts with other tools (e.g., if it stops effects permanently or temporarily), or potential side effects like rate limits or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words, clearly front-loading the core action. It's appropriately sized for a simple tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (a mutation tool with no annotations and no output schema), the description is insufficient. It doesn't explain what 'effects' entail in this context, what happens after turning them off (e.g., default state), or return values, leaving gaps for safe and effective use by an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (token, selector, power_off) adequately. The description adds no additional meaning beyond what the schema provides, such as explaining the relationship between turning off effects and the power_off parameter, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Turn off') and target ('any running effects'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'toggle_power' or 'set_state' which might also affect light states, leaving some ambiguity about scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'toggle_power' or 'set_state' (which could turn off lights without addressing effects). The description implies usage when effects are running but doesn't specify prerequisites, exclusions, or clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_lightsC

Get lights belonging to the authenticated account

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves lights but lacks details on response format (e.g., list structure, pagination), error handling, rate limits, or authentication requirements beyond the token parameter. This leaves significant gaps for an agent to understand operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It front-loads the core purpose ('Get lights') and is appropriately sized for a simple retrieval tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the return data looks like (e.g., light attributes, JSON structure), error cases, or authentication context beyond the token. For a tool with two parameters and no structured output, more behavioral context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters. The description doesn't add any semantic details beyond what the schema provides (e.g., it doesn't explain what 'selector' values are valid or how filtering works). Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and target resource ('lights belonging to the authenticated account'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_scenes' or 'set_state', which would require a more specific scope statement to earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication context), compare it to other listing tools like 'list_scenes', or indicate scenarios where filtering with the 'selector' parameter is necessary versus optional.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_scenesC

List all scenes available in the account

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it 'lists' scenes, implying a read-only operation, but doesn't clarify if this requires authentication (though the schema shows a token parameter), what the output format is, or if there are pagination or rate limits. This leaves significant gaps for an agent to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded and efficiently communicates the core functionality, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., a list of scene objects), any authentication requirements implied by the token, or how this tool fits into the broader context of scene management with siblings like 'activate_scene'. For a tool with no structured behavioral data, more descriptive context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'token' parameter clearly documented as a 'LIFX API token'. The description doesn't add any additional meaning beyond this, such as explaining why the token is needed or how to obtain it. Given the high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('all scenes available in the account'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_lights' or 'activate_scene' beyond the resource type, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't specify if this should be used before activating a scene with 'activate_scene' or how it relates to other listing tools like 'list_lights'. There's no mention of prerequisites or context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pulse_effectC

Perform a pulse effect

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')
colorYesColor to pulse
from_colorNoStarting color
periodNoDuration of one cycle in seconds
cyclesNoNumber of cycles
persistNoPersist the final color
power_onNoTurn on if off
peakNoPeak brightness (0.0 to 1.0)

TDQS

C2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure but only states the action ('Perform a pulse effect'). It doesn't describe what a pulse effect does (e.g., flashing lights with color transitions), whether it's destructive, requires authentication (implied by token parameter but not stated), has rate limits, or what happens on success/failure. This leaves critical behavioral traits undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While concise with only three words, the description is under-specified rather than efficiently informative. It fails to front-load essential context (e.g., that this affects LIFX lights) and doesn't use its brevity to convey meaningful guidance, making it ineffective despite its short length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters, no annotations, and no output schema, the description is severely incomplete. It doesn't explain the tool's purpose in context, behavioral implications, or usage relative to siblings, leaving the agent with inadequate information to invoke it correctly despite the well-documented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing clear documentation for all 9 parameters. The description adds no parameter semantics beyond what's in the schema, so it meets the baseline score of 3. However, it doesn't compensate for any gaps since there are none in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Perform a pulse effect' is a tautology that restates the tool name without specifying what resource is affected or what the effect entails. It doesn't distinguish this tool from sibling effects like 'breathe_effect' or clarify that it operates on LIFX lights, leaving the purpose vague beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'breathe_effect' or 'activate_scene'. The description offers no context, prerequisites, or exclusions, making it impossible for an agent to determine appropriate usage scenarios without external knowledge.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_stateC

Set the state of lights

ParametersJSON 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)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Set the state of lights' implies a mutation operation, but it does not mention permissions, side effects (e.g., whether changes are reversible), rate limits, or response behavior. This is inadequate for a tool with multiple parameters and no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words, making it easy to parse. It is front-loaded with the core action, though it could benefit from more detail given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, mutation operation) and lack of annotations and output schema, the description is incomplete. It does not address behavioral aspects, usage context, or return values, leaving significant gaps for an agent to understand how to invoke it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 8 parameters. The description adds no additional meaning beyond implying that parameters like 'power', 'color', and 'brightness' are part of the state being set. With high schema coverage, the baseline score of 3 is appropriate as the description does not compensate but does not detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Set the state of lights' clearly states the verb ('Set') and resource ('lights'), making the purpose understandable. However, it does not differentiate from sibling tools like 'toggle_power' or 'activate_scene', which also modify light states, leaving some ambiguity about when to choose this tool over others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It lacks context about prerequisites (e.g., needing a token), exclusions, or comparisons to siblings like 'toggle_power' for simple on/off or 'activate_scene' for preset configurations, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

toggle_powerC

Toggle power state of lights

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
selectorNoSelector for filtering lights (default: 'all')
durationNoDuration in seconds

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('toggle power state') but doesn't explain what 'toggle' entails (e.g., switching between on/off states), potential side effects, authentication needs (implied by 'token' parameter but not described), or rate limits. This leaves significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like what 'toggle' does operationally, error handling, or response format, leaving the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters ('token', 'selector', 'duration') with their types and basic descriptions. The description adds no additional meaning beyond what the schema provides, such as explaining 'selector' options or 'duration' implications, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('toggle') and resource ('power state of lights'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'set_state' or 'effects_off', but the specific action is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'set_state' for more granular control or 'effects_off' for stopping effects. The description lacks context about use cases, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_colorC

Validate a color string

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesLIFX API token
colorYesColor string to validate

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It doesn't disclose what validation entails (e.g., format checking, API verification), error handling, rate limits, or authentication requirements. The mention of 'color string' hints at input format but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded and appropriately sized for a simple validation tool, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and two required parameters (including an API token), the description is inadequate. It doesn't explain the validation logic, return values, error cases, or how it integrates with sibling tools, leaving significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are documented in the schema. The description adds no additional meaning beyond implying 'color' is the string to validate, which the schema already states. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('validate') and the target ('a color string'), making the purpose immediately understandable. It doesn't distinguish from siblings like 'set_state' or 'breathe_effect', but the verb+resource combination is specific enough for basic understanding.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites like needing a valid token, nor does it explain why validation might be needed before using other color-related tools like 'set_state' or 'breathe_effect'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • First observedactivate_scene
    • First observedbreathe_effect
    • First observedeffects_off
    • First observedlist_lights
    • First observedlist_scenes
    • First observedpulse_effect
    • First observedset_state
    • First observedtoggle_power
    • First observedvalidate_color

TDQS

B3/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have distinct purposes, such as list_lights vs. set_state, but breathe_effect and pulse_effect could be confused as both are light effects. The descriptions are clear, but the overlap in effect types might cause occasional misselection.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structure (e.g., activate_scene, list_lights, toggle_power). There are no deviations in naming conventions, making the set predictable and readable.

Tool Count5/5

With 9 tools, the count is well-scoped for a LIFX lighting control server. It covers core operations like listing, state management, effects, and scenes without being overwhelming or too sparse.

Completeness4/5

The toolset provides good coverage for light control, including listing, state changes, effects, and scenes. A minor gap is the lack of a dedicated tool for deleting or managing scenes beyond activation, but agents can likely work around this using existing tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to control Philips Hue smart lighting systems, including individual lights, groups, scenes, brightness, and color adjustments through natural language commands.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables control of Philips Hue lights through the Model Context Protocol, providing tools for turning lights on/off, setting brightness and color, and retrieving light status.
    1
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to control Govee smart devices, including lights, via natural language. Supports turning on/off, changing colors, adjusting brightness, and activating scenes through the Govee API or local network.
    9
    1
    MIT