Skip to main content
Glama

Smart Bulb MCP Server

A Model Context Protocol (MCP) server built with Node.js and TypeScript to control smart bulbs over IP. It supports:

  • Mock/Simulated Bulb: For local testing and development without physical hardware.

  • Yeelight/Xiaomi Bulb: Uses standard TCP port 55443 (local control JSON-RPC protocol) to control real physical smart bulbs.

Features

  • Connect using IP: Dynamically connect to different bulbs on your local network.

  • Power Control: Turn the bulb on or off.

  • Brightness & Opacity: Adjust bulb brightness / intensity from 1% to 100%.

  • Color Control: Set colors using RGB coordinates or hexadecimal color codes.

  • State Queries: Fetch the current state of the bulb in real-time.


Related MCP server: Philips Hue MCP Service

Getting Started

1. Build the Server

First, install the dependencies and compile the TypeScript files:

# Install dependencies
npm install

# Compile the TypeScript files
npm run build

The compiled files will be output to the dist/ directory.

2. Run / Development

You can run the server directly via standard I/O (Stdio):

# Run the built JS
npm start

# Compile and run in development mode
npm run dev

Configuring with MCP Clients

To use this server with an MCP client (such as Claude Desktop or Cursor), add the server configuration to your configuration file.

For Claude Desktop

Edit your claude_desktop_config.json (typically located in %APPDATA%\Claude on Windows or ~/Library/Application Support/Claude on macOS):

{
  "mcpServers": {
    "smart-bulb": {
      "command": "node",
      "args": ["D:/Palwinder/mcp-server-bulb/dist/index.js"]
    }
  }
}

Note: Replace D:/Palwinder/mcp-server-bulb/dist/index.js with the absolute path to dist/index.js on your machine.


Exposed MCP Tools

Once the server is connected, the host LLM will have access to the following tools:

1. connect_bulb

Connects to a bulb at a specified IP.

  • Arguments:

    • ip (string, required): IP address (e.g. "192.168.1.15" or "127.0.0.1").

    • type (enum ["mock", "yeelight"], default: "mock"): Driver type. Use "mock" to test the server features without physical hardware, or "yeelight" for real Yeelight bulbs.

    • port (number, optional): Port to use. Defaults to 55443 for Yeelight, and 9999 for Mock.

2. disconnect_bulb

Disconnects from the currently connected bulb.

  • Arguments: None.

3. get_bulb_state

Retrieves the connection status, power state, brightness/opacity percentage, and RGB color.

  • Arguments: None.

4. set_bulb_power

Turns the light bulb ON or OFF.

  • Arguments:

    • power (boolean, required): true to turn ON, false to turn OFF.

5. set_bulb_brightness

Sets the bulb's brightness / opacity.

  • Arguments:

    • brightness (number, required): Values from 1 to 100.

6. set_bulb_color_rgb

Sets the color of the bulb using RGB values.

  • Arguments:

    • r (number, required): Red component 0 - 255.

    • g (number, required): Green component 0 - 255.

    • b (number, required): Blue component 0 - 255.

7. set_bulb_color_hex

Sets the color of the bulb using a hex color code.

  • Arguments:

    • hex (string, required): Hex code (e.g., "#FF0000" or "00FF00").


OpenAI Connection Client

We have built a client wrapper in src/openai-client.ts that allows you to feed prompts directly to OpenAI. OpenAI will then autonomously invoke the MCP tools to perform the actions on your smart bulb.

Setup and Running the Client

  1. Set your OpenAI API Key: On Windows (PowerShell):

    $env:OPENAI_API_KEY="your-actual-api-key"

    On macOS/Linux (Bash):

    export OPENAI_API_KEY="your-actual-api-key"
  2. Run the Client:

    • Interactive CLI mode:

      npm run client

      This opens a shell prompt. Try typing:

      Connect to the mock bulb, turn it on, set its brightness to 80% and color to yellow.

    • One-off command mode: Pass your prompt directly as arguments:

      npm run client -- "connect to the mock bulb, turn it on, and set color to blue"
  3. Customizing the Model (Optional): By default, it uses gpt-4o-mini. You can change it by setting the OPENAI_MODEL environment variable:

    $env:OPENAI_MODEL="gpt-4o"

Developer Details & Architecture

The project has a modular architecture:

  • src/bulb/interface.ts: Defines the common contract (ISmartBulb) and state shape (BulbState).

  • src/bulb/mock.ts: Simulated bulb instance that mimics network latency and state changes in memory.

  • src/bulb/yeelight.ts: Implements a raw TCP line-based buffer parser to send and receive JSON-RPC packets directly from physical Yeelight WiFi bulbs without any third-party SDK dependencies.

  • src/index.ts: Configures and mounts the @modelcontextprotocol/server tools, handling connection states and validation schemas.

  • src/openai-client.ts: Launches the MCP server as a subprocess, loads all its tools dynamically, exposes them as OpenAI Functions, and handles the multi-turn conversational tool execution loop.


Built by Palwinder Singh

Available Tools

7 tools
connect_bulbA

Connect to a smart bulb at a given IP address. Supports both real Yeelight bulbs and mock bulbs for testing.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesThe IP address of the smart bulb (e.g., '192.168.1.15' or '127.0.0.1')
portNoOptional TCP port. Defaults to 55443 for Yeelight and 9999 for mock.
typeNoThe bulb driver type. Use 'mock' for local simulation testing, and 'yeelight' for actual Yeelight WiFi bulbs.mock

TDQS

A3.5/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. It does not mention side effects, error handling, authentication requirements, timeouts, or whether establishing a connection is required before other operations. The only extra behavioral hint is the mock/real support, which is more about parameter semantics than behavior. This is a significant gap for a connection 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 two sentences with zero fluff. The core purpose is front-loaded, and the second sentence adds relevant context about supported bulb types. Every word earns its place.

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

Completeness3/5

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

The tool is simple (3 params, 1 required) and the schema is complete, so the description covers the basics. However, it does not mention that the connection is a prerequisite for the sibling bulb-control tools or that a disconnect_bulb exists, leaving the lifecycle unclear. Some context about the overall workflow is missing.

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% — all three parameters (ip, port, type) are fully documented with descriptions and defaults. The description adds no information beyond what the schema already provides; the mention of mock vs. real simply echoes the enum descriptions. Baseline 3 applies because the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Connect to a smart bulb at a given IP address') and the resource (smart bulb). It also mentions support for real Yeelight and mock bulbs, which distinguishes it from sibling tools that handle state, power, brightness, and color. This is a precise verb+resource statement with no ambiguity.

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

Usage Guidelines3/5

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

The description gives partial guidance by noting that mock bulbs are for testing, which helps with the type parameter, but it does not explicitly state when to use this tool versus its siblings (e.g., before get_bulb_state or set_bulb_*). The usage context is implied rather than clearly articulated.

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

disconnect_bulbA

Disconnect from the currently active smart bulb.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/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. It states the action and scope ('disconnect from the currently active smart bulb') but does not disclose edge-case behavior: what happens if no bulb is active, whether disconnecting affects the bulb's power state, or whether a reconnect is required afterward. Adequate but not rich.

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?

A single, front-loaded sentence that says exactly what is needed with zero waste. The action and target are stated in the first words, which is ideal for a simple tool. Every word earns its place.

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

Completeness4/5

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

Given the tool's low complexity — 0 parameters, no output schema, and no annotations — the description is largely sufficient for an agent to invoke it correctly. The only gaps are edge-case expectations (undefined behavior when no bulb is active, effect on bulb power), which are minor for this simple disconnection action.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The schema is trivially 100% covered since there are no parameters to document. The description adds marginal value by clarifying the implicit target ('currently active' bulb), which is the only semantic the agent needs beyond the empty schema.

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

Purpose5/5

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

The description states a specific verb ('Disconnect') and resource ('the currently active smart bulb'). It clearly distinguishes itself from siblings like connect_bulb, get_bulb_state, and the set_* family — the action and scope are unambiguous and the qualifier 'currently active' tells the agent exactly which target it acts on.

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

Usage Guidelines3/5

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

Usage is implied rather than explicit. The description conveys this is the counterpart to connect_bulb, but it does not explicitly say when to choose this over alternatives or what precondition is required (e.g., that a bulb must be active). For a simple 0-param tool the context is mostly inferable, but no exclusion or alternative guidance is provided.

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

get_bulb_stateA

Retrieve the current state (power status, brightness/opacity, color) of the connected smart bulb.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/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 disclosing behavioral traits. The verb 'Retrieve' clearly implies a read-only, side-effect-free operation, and it lists the specific state aspects returned. However, it does not explicitly state failure modes (e.g., what happens if no bulb is connected) or any additional behavioral nuances.

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?

A single, well-structured sentence that front-loads the verb and resource, and enumerates the state fields without any filler. Every word earns its place.

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

Completeness4/5

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

The tool is simple (no parameters, no output schema), and the description adequately conveys what it returns. However, it could optionally mention that the tool operates on the connected bulb, implying a connection prerequisite, and might briefly note the absence of side effects. Still, for a low-complexity getter this is nearly complete.

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

Parameters4/5

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

The tool has zero parameters, so the baseline for parameter semantics is 4. The description adds value by clarifying what 'state' means (power, brightness/opacity, color), which gives the agent context about the expected return content even though the schema has no fields to document.

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

Purpose5/5

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

The description uses the specific verb 'Retrieve' and clearly identifies the resource ('current state' of the smart bulb) and the attributes included (power status, brightness/opacity, color). This distinguishes it from sibling set_* tools and from connection tools.

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

Usage Guidelines3/5

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

The description implies it is used when one needs to know the current state of the connected bulb, but it does not explicitly contrast with the set_* tools or mention a prerequisite like being connected. The connection requirement is only inferred from the sibling connect_bulb.

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

set_bulb_brightnessA

Set the brightness (intensity/opacity) of the connected smart bulb.

ParametersJSON Schema
NameRequiredDescriptionDefault
brightnessYesBrightness percentage (1 to 100). This also controls the bulb's opacity/intensity.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral load. It only states that brightness is set, without disclosing side effects (e.g., whether it turns on the bulb if off, or requires connection). No error conditions or limitations are mentioned. Minimal behavioral disclosure.

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?

One sentence, with the action verb first. No fluff or redundant content. Highly concise and effective.

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

Completeness3/5

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

Tool is simple with a single parameter and no output schema. However, the description omits context such as requiring the bulb to be connected or whether brightness changes override power state. For a minimal setter, it's adequate but not fully complete given no annotations to compensate.

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 coverage is 100%, with the brightness parameter fully described including range and meaning. The description adds only redundant phrasing like 'intensity/opacity', which is already in the schema. No new semantic information is provided beyond schema.

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

Purpose5/5

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

States a specific verb and resource: 'Set the brightness' of the smart bulb. Distinguishes from sibling tools like set_bulb_power and set_bulb_color by focusing on brightness/intensity/opacity. Clear and unambiguous.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. The description doesn't mention that set_bulb_power handles on/off or that color tools handle color. Usage is implied by the name but not explicitly routed. Basic clarity without exclusions.

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

set_bulb_color_hexA

Set the color of the connected smart bulb using a hexadecimal color code (e.g. '#FF0000' or '00FF00').

ParametersJSON Schema
NameRequiredDescriptionDefault
hexYesHexadecimal color code, with or without leading '#'

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It states the core action ('set the color') which signals mutation, but it does not mention any prerequisites like requiring a connection, nor possible failure modes for invalid hex codes. It also omits whether the change is reversible, though that is lightly implied. The description is minimal but accurate.

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, front-loaded sentence that names the action, resource, and format without any fluff. The examples are concise and directly relevant, 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.

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers the essential action and format. However, given it is a mutation and there are sibling tools like connect_bulb, the description could note that the bulb must be connected, and it could clarify behavior on invalid hex input. These omissions are minor but would improve completeness.

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 already fully describes the hex parameter as 'Hexadecimal color code, with or without leading #', so schema coverage is 100%. The tool description repeats this information with examples, adding little beyond what the schema provides. The baseline of 3 is appropriate since the description does not enrich the parameter meaning substantially.

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

Purpose5/5

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

The description clearly states the action (Set), the resource (color of the connected smart bulb), and the method (using a hexadecimal color code) with concrete examples ('#FF0000' or '00FF00'). This immediately differentiates it from the sibling tool set_bulb_color_rgb, which likely uses RGB tuples.

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 prefer this tool over alternatives such as set_bulb_color_rgb or when it is inappropriate to use. It does not mention prerequisites (e.g., the bulb must be connected) or warn against using it with RGB values, leaving the agent to infer usage context from the sibling list.

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

set_bulb_color_rgbB

Set the color of the connected smart bulb using RGB values (0-255).

ParametersJSON Schema
NameRequiredDescriptionDefault
bYesBlue component (0-255)
gYesGreen component (0-255)
rYesRed component (0-255)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It only states the action and value range, repeating schema information. It does not disclose side effects, connection requirements, error behavior, or idempotency, leaving significant behavioral context unclear.

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, front-loaded sentence of about ten words. It states the action and key constraint without any waste, making it maximally concise and structured for quick agent parsing.

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?

The tool is simple with no output schema, but critical context is missing: the description says 'connected smart bulb' but never instructs that the bulb must be connected first (a prerequisite given sibling connect_bulb). It also omits error handling scenarios. These gaps are significant for a device-control tool.

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 fully describes each parameter (r, g, b as numbers 0-255) with 100% coverage, so the baseline is 3. The description adds only 'RGB values (0-255)', which repeats the schema range and adds no new meaning beyond what is already documented.

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

Purpose5/5

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

The description clearly states the action (set), the resource (color of the connected smart bulb), and the method (RGB values 0-255). It distinguishes from sibling set_bulb_color_hex by specifying RGB, making the tool's purpose unambiguous.

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_bulb_color_hex, nor does it mention prerequisites such as connecting the bulb first. The agent must infer usage solely from the name and context, which is insufficient.

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

set_bulb_powerB

Turn the connected smart bulb on or off.

ParametersJSON Schema
NameRequiredDescriptionDefault
powerYestrue to turn the bulb ON, false to turn it OFF

TDQS

B3.4/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 disclosing behavior. It only states the on/off action, which is already implied by the tool name and the boolean parameter. It does not mention prerequisites (e.g., bulb must be connected), side effects, error conditions, or whether it sets an absolute state vs. toggles. This is a significant gap for a state-changing 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, tight sentence that is immediately clear and front-loaded with the action. There is no redundancy or filler; every word earns its place.

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

Completeness4/5

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

Given the tool's low complexity (one boolean parameter, no output schema, no nested objects) and complete schema coverage, the description is mostly adequate. It clearly states the core function. However, it could briefly mention that the bulb must be connected or that the power is set to the absolute state, but these are minor for such a simple tool.

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%, and the parameter description in the schema already explains that `true` turns the bulb ON and `false` turns it OFF. The tool description adds no additional meaning or context beyond what the structured schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Turn') and clearly identifies the resource ('the connected smart bulb') and the action ('on or off'). It is unambiguous and distinct from sibling tools like set_bulb_brightness or set_bulb_color_rgb, even without naming them.

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 offers no guidance on when to use this tool versus alternatives. It does not state conditions like 'when you want to change the bulb's power state' or exclude cases where other setters would be more appropriate. The agent is left to infer usage from the tool name and parameter.

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. 7 tool updatesv1.0.0
    • First observedconnect_bulb
    • First observeddisconnect_bulb
    • First observedget_bulb_state
    • First observedset_bulb_brightness
    • First observedset_bulb_color_hex
    • First observedset_bulb_color_rgb
    • First observedset_bulb_power

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Tools have distinct purposes: connect, disconnect, state retrieval, and setting power, brightness, and color. The only overlap is between set_bulb_color_rgb and set_bulb_color_hex, which serve the same function with different input formats, but their descriptions clearly differentiate them, causing minimal confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., connect_bulb, get_bulb_state, set_bulb_power). The naming style is uniform with snake_case and clear action-target structure, making the API predictable and easy to navigate.

Tool Count5/5

With 7 tools, the set is well-scoped for a smart bulb control server. Each tool addresses a core operation (connection, state, power, brightness, color) without redundant or excessive entries, fitting comfortably within the ideal 3-15 range.

Completeness4/5

The server covers essential smart bulb operations: connection management, state retrieval, power, brightness, and color control. A minor gap is the lack of color temperature or scene settings, which are common on smart bulbs, but the core workflows are fully supported and no critical dead ends exist.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server for controlling LIFX smart lights, enabling AI assistants to manage power, color, brightness, effects, and scenes.
    MIT