Skip to main content
Glama
caseman72

Switchr MCP Server

by caseman72

Switchr MCP Server

A Node.js MCP (Model Context Protocol) server that exposes SwitchBot temperature sensors for monitoring via Claude Desktop or Home Assistant.

Features

  • Device Discovery: Automatically discovers all SwitchBot devices (Meter, MeterPlus, WoIOSensor, Plug Mini, Bot)

  • Temperature Monitoring: Read temperature and humidity from any sensor

  • Energy Monitoring: Read power, voltage, and current from Plug Mini devices (UPS/load monitoring)

  • Switching: Turn plugs on/off, press Bot finger simulators

  • Flexible Units: Support for both Fahrenheit and Celsius

  • Device Lookup: Find devices by ID or nickname (case-insensitive)

  • Dual Transport: Supports both stdio (Claude Desktop) and HTTP/SSE (Home Assistant)

  • Request Logging: Optional logging of all tool calls for debugging

Related MCP server: Homey MCP Server

Installation

cd switchr-mcp
npm install

Configuration

SwitchBot Credentials

SwitchBot API credentials are managed by @caseman72/switchr-api via .env.local. The file is searched in:

  1. Current working directory

  2. ~/.config/switchr-api/.env.local

  3. ~/.switchbot.env.local

Create a .env.local file with your SwitchBot credentials:

SWITCHBOT_TOKEN=your-switchbot-token
SWITCHBOT_SECRET=your-switchbot-secret

Visit the SwitchBot Developer Portal to obtain your API credentials.

Server Configuration (Optional)

Copy config.example.json to config.json to customize server settings:

{
  "server": {
    "transport": "stdio",
    "httpPort": 8001,
    "httpHost": "127.0.0.1"
  },
  "devices": {
    "refreshIntervalMinutes": 60
  },
  "monitoring": {
    "enabled": false,
    "logFile": "./switchr-mcp-requests.log"
  }
}

Usage

stdio Transport (Claude Desktop)

node src/index.js

HTTP Transport (Home Assistant)

The HA custom component requires the MCP server to be exposed over HTTP/SSE. Use mcp-proxy to bridge the stdio server.

Install mcp-proxy

brew install mcp-proxy

Start the proxy

# Binds to all interfaces so Docker can reach it
mcp-proxy --port 8082 --host 0.0.0.0 -- node /path/to/switchr-mcp/src/index.js

Home Assistant Integration

  1. Copy the custom component to your HA config directory:

    cp -r custom_components/switchr_mcp ~/.home-assistant/custom_components/
  2. Restart Home Assistant

  3. Add the integration: Settings → Devices & Services → Add Integration → "Switchr MCP"

  4. Enter connection details:

    • Host: host.docker.internal (for Docker) or your Mac's IP

    • Port: 8082

Entities created

  • Temperature sensors (Meter, MeterPlus, WoIOSensor): one combined entity per device with temperature as the native value and humidity/battery as attributes.

  • Plug Mini: four sensors plus a switch — <name> Power (W), <name> Voltage (V), <name> Current (mA), <name> Energy (kWh), and switch.<name> (on/off control). The Energy entity integrates instantaneous power between polls and persists across HA restarts via RestoreEntity, so it can be used directly in the HA Energy dashboard with no Riemann helper.

  • Bot (finger simulator): button.<name>_press — sends a momentary press (extend then retract). Suitable for pressMode Bots.

Auto-start mcp-proxy with launchd

Create ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.switchr.mcp-proxy</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/mcp-proxy</string>
        <string>--port</string>
        <string>8082</string>
        <string>--host</string>
        <string>0.0.0.0</string>
        <string>--</string>
        <string>/opt/homebrew/bin/node</string>
        <string>/path/to/switchr-mcp/src/index.js</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/path/to/switchr-mcp</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/switchr-mcp-proxy.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/switchr-mcp-proxy.err</string>
</dict>
</plist>

Then load it:

launchctl load ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist

To stop/unload:

launchctl unload ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist

Managing the service

# Check status
launchctl list | grep switchr

# View logs
tail -f /tmp/switchr-mcp-proxy.err

# Restart
launchctl unload ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist
launchctl load ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist

# Stop
launchctl unload ~/Library/LaunchAgents/com.switchr.mcp-proxy.plist

Claude Desktop Integration

Add to ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "switchr": {
      "command": "node",
      "args": ["/path/to/switchr-mcp/src/index.js"],
      "env": {}
    }
  }
}

MCP Tools

list_devices

List all discovered SwitchBot devices. Optionally filter to show only temperature sensors.

Parameters:

  • sensorsOnly (optional): If true, only return temperature sensors (Meter, MeterPlus, WoIOSensor)

  • refresh (optional): Force refresh device list from SwitchBot API

get_device_status

Get detailed status of any SwitchBot device. Returns device-specific properties like power state, battery level, etc.

Parameters:

  • deviceId: Device ID or device name

get_temperature

Get temperature and humidity reading from a specific SwitchBot temperature sensor.

Parameters:

  • deviceId: Device ID or device name of the temperature sensor

  • unit (optional): Temperature unit - F for Fahrenheit (default), C for Celsius

Response includes:

  • temperature: Current temperature in requested unit

  • humidity: Current humidity percentage

  • battery: Battery level percentage

get_all_temperatures

Get temperature and humidity readings from all SwitchBot temperature sensors at once.

Parameters:

  • unit (optional): Temperature unit - F for Fahrenheit (default), C for Celsius

get_plug_status

Get power state and energy data from a SwitchBot Plug Mini. Use for UPS/energy monitoring.

Parameters:

  • deviceId: Device ID or device name of the plug

Response includes:

  • power: "on" or "off"

  • voltage: Volts

  • watts: Instantaneous power draw (W)

  • currentMilliamps: Current draw (mA)

  • electricityOfDay: Today's on-time accumulator from the device

get_all_plugs

Get power and energy readings from all SwitchBot Plug Mini devices at once.

turn_on / turn_off

Turn a SwitchBot Plug Mini (or a Bot in switch mode) on/off.

Parameters:

  • deviceId: Device ID or device name

press_bot

Send a momentary press to a SwitchBot Bot (finger simulator). The finger extends then retracts.

Parameters:

  • deviceId: Device ID or device name of the Bot

get_api_status

Get SwitchBot API rate limit status. Returns remaining calls, reset time, and cache info.

Response includes:

  • rate_limit.remaining: API calls remaining

  • rate_limit.reset_by: When the rate limit resets

  • cache.last_refresh: When devices were last refreshed

  • cache.device_count: Total devices discovered

  • cache.sensor_count: Temperature sensors discovered

Request Monitoring

Enable request logging in config.json:

{
  "monitoring": {
    "enabled": true,
    "logFile": "./switchr-mcp-requests.log"
  }
}

Logs are written in JSON Lines format with timestamps, tool names, parameters, and results.

License

MIT

Available Tools

10 tools
get_all_plugsA

Get power and energy readings from all SwitchBot Plug Mini devices at once.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 carry the behavioral disclosure burden. It does add useful behavioral context: the tool aggregates readings across all Plug Mini devices in one call. But it does not mention potential side effects, authentication requirements, rate limits, error behavior, or what happens if no plugs are present. The read-only nature is reasonably implied by 'Get', and the description is not contradictory.

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, compact sentence that front-loads the action and resource. Every word earns its place, and 'at once' is the key disambiguating detail that separates it from a single-plug query.

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 zero-parameter, read-only batch retrieval tool, this description is largely complete: it states exactly what data is returned and from what scope. It does not specify the output format, units, or data structure, but given the simplicity of the tool and absence of an output schema, the core selection and invocation context is sufficient.

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, and the schema already fully covers this with an empty properties object. The description adds meaning by clarifying what readings are returned, so no parameter-level compensation is needed. Baseline 4 is appropriate for a zero-parameter tool.

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 names a specific verb ('Get'), a concrete resource ('power and energy readings'), and a clear target scope ('all SwitchBot Plug Mini devices at once'). It clearly differs from sibling tools like get_plug_status, which implies a single device, and get_all_temperatures, which targets temperatures instead of plug power/energy.

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

Usage Guidelines4/5

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

The phrase 'from all SwitchBot Plug Mini devices at once' clearly communicates the bulk-collection use case, implying you should choose this over a single-device status tool. However, it does not explicitly name an alternative or state when not to use it, so it stops short of full exclusion guidance.

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

get_all_temperaturesA

Get temperature and humidity readings from all SwitchBot temperature sensors at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoTemperature unit: "F" for Fahrenheit (default), "C" for Celsius

TDQS

A3.9/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 disclose behavioral traits. It states the action (getting temperature and humidity) and the scope (all sensors), but does not mention potential failure modes (e.g., if some sensors are offline), response format, or any side effects. For a read-only operation, the absence of destructive hints is acceptable, but the description does not go beyond the obvious action, leaving some ambiguity for an agent about what to expect in the return.

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, concise sentence that immediately states the action and scope. It front-loads the most critical information (getting readings from all sensors) without any filler. There is no redundancy, and the sentence earns its place by being both informative and efficient.

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

Completeness5/5

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

Given the simplicity of the tool (one optional parameter, no output schema), the description fully covers what an agent needs to know: it retrieves temperature and humidity from all sensors in one call. The parameter is documented in the schema, and the absence of an output schema is offset by the description implying the return will contain the readings. The tool is straightforward enough that no further details are missing for correct invocation.

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 covers the only parameter 'unit' with a full description and enum values, giving 100% coverage. The tool description does not add any extra meaning beyond that, such as examples or clarification of the default. Since the schema already handles the parameter semantics adequately, a baseline of 3 is appropriate – the description adds no additional value.

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 ('Get'), a clear resource ('temperature and humidity readings'), and a distinct scope ('from all SwitchBot temperature sensors at once'). This clearly distinguishes it from the sibling tool get_temperature (which targets a single sensor) and get_all_plugs (which targets plugs). The 'all at once' phrasing explicitly signals a batch operation, so an agent can confidently select this tool when a comprehensive sweep is needed.

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 batch usage ('all at once') but does not explicitly state when to prefer this tool over get_temperature or provide any exclusions or alternatives. There is no mention of use cases like 'use this when you need readings from every sensor' or 'use get_temperature for a single sensor'. The context is present but only implicit, failing to meet the bar for clear guidance.

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

get_api_statusA

Get SwitchBot API rate limit status. Returns remaining calls and reset time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly identifies a read-only status query and specifies the return contents (remaining calls and reset time), making side effects predictable. Minor gaps like reset-time format or whether checking status consumes quota are not disclosed, but the core behavior is transparent.

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 short sentences with no redundant filler. The action and resource are front-loaded, and the second sentence adds valuable information about the response without over-explaining.

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 zero-parameter status endpoint with no output schema, the description is largely complete: it states the operation, the target, and the return values. The only notable gap is explicit routing guidance against sibling tools, but this is a minor omission given the self-evident purpose and low complexity.

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 and the input schema already shows no properties, so the description does not need to document parameter semantics. The baseline for no-parameter tools is 4, and no additional parameter detail is required.

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 action and resource: 'Get SwitchBot API rate limit status.' It is clearly distinct from sibling device/control tools like get_device_status or turn_on because it targets API rate limits, not device state or actions. The added detail about remaining calls and reset time makes the 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?

The description gives no guidance about when to use this tool versus alternatives, nor does it mention exclusions or preference over sibling tools. Usage is only implied from the tool name and context signals, not explicitly stated.

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

get_device_statusB

Get detailed status of any SwitchBot device. Returns device-specific properties like power state, battery level, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesDevice ID or device name

TDQS

B3.3/5.0
Behavior3/5

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

There are no annotations, so this description carries the behavioral burden. It does communicate that the operation returns device-specific data and implies a read operation, but it does not mention error behavior, offline devices, or whether the deviceId must be an ID vs a name.

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?

Two sentences with no filler, front-loading the core operation and following with the expected return data. The 'etc.' is slightly vague but acceptable at this length.

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?

For a one-parameter status tool with no output schema, the description is mostly adequate: it states the operation and the kind of returned properties. It is less complete on sibling differentiation and exact supported device properties, which would help an agent choose correctly.

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 schema already explains that deviceId can be an ID or name. The description adds little beyond the schema's parameter documentation apart from implying the device must exist in the account.

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 uses a specific verb and resource ('Get detailed status of any SwitchBot device') and indicates the return shape ('device-specific properties like power state, battery level'). It is clear, though it does not explicitly distinguish itself from get_plug_status or get_temperature.

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 when-to-use or when-not-to-use guidance is provided. With siblings like get_plug_status, get_temperature, and list_devices, the description leaves it to the agent to infer when the generic detailed-status tool should be preferred.

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

get_plug_statusA

Get power state and energy data (voltage, watts, current) from a SwitchBot Plug Mini. Use for UPS/energy monitoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesDevice ID or device name of the plug

TDQS

A4/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It clarifies that this is a read operation by using 'Get' and lists the returned data types, but it does not explicitly state that the tool makes no state changes or mention any other behavioral constraints. 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?

Two short, focused sentences with no wasted words. The core action and data scope are front-loaded, and the intended use case is a natural second sentence.

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 one-parameter read tool with no output schema, the description is largely complete: it names the device type, the specific data returned, and a use case. It could be slightly more complete by noting units or explicitly stating read-only behavior, but nothing critical 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% and the single deviceId parameter is already described as accepting a device ID or device name. The description adds no additional parameter-specific meaning beyond what the schema provides, so the baseline score of 3 applies.

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 and resource: it states the tool gets power state and energy data (voltage, watts, current) from a SwitchBot Plug Mini. This clearly differentiates it from generic siblings like get_device_status and get_all_plugs.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'Use for UPS/energy monitoring.' It does not explicitly mention alternatives or exclusions, but the stated purpose is enough to guide an agent toward when this tool is relevant.

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

get_temperatureA

Get temperature and humidity reading from a specific SwitchBot temperature sensor.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoTemperature unit: "F" for Fahrenheit (default), "C" for Celsius
deviceIdYesDevice ID or device name of the temperature sensor

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It clearly signals a read-only operation by using 'Get' and usefully states that both temperature and humidity are returned, adding value beyond the input schema. It does not cover errors or offline behavior, but for a simple read tool this is adequate.

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 focused sentence with no filler. It front-loads the action and resource and earns its place without redundancy.

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 2-parameter read tool with no output schema, the description plus complete schema coverage is mostly sufficient. It tells the agent what data to expect (temperature and humidity) and that the target is a specific sensor, though it leaves return formatting and error behavior implicit.

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 deviceId and unit, including the F/C enum and default. The description does not add additional parameter-level meaning beyond confirming the reading comes from a specific sensor.

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 and resource: 'Get temperature and humidity reading from a specific SwitchBot temperature sensor.' It clearly differentiates from sibling get_all_temperatures by scoping to a single sensor.

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

Usage Guidelines4/5

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

The phrase 'specific sensor' implies use when a single sensor's reading is needed, and the sibling get_all_temperatures provides the aggregate alternative. However, it does not explicitly exclude cases such as getting general device status via get_device_status.

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

list_devicesB

List all discovered SwitchBot devices. Optionally filter to show only temperature sensors.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoForce refresh device list from SwitchBot API
sensorsOnlyNoIf true, only return temperature sensors (Meter, MeterPlus, WoIOSensor)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It implies read-only listing but does not mention that refresh forces an API call, whether authentication is required, or what the return structure looks like. The refresh behavior is only documented in the schema, not the description.

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 concise sentence with the main action front-loaded and the optional filter appended. Every word earns its place, with no filler or redundant details.

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?

For a simple two-optional-boolean listing tool, the description plus schema is adequate. However, no annotations or output schema exist, and the description omits the cache-vs-refresh behavioral nuance and any high-level return shape information, leaving some 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 both parameters are already documented in the schema. The description's 'Optionally filter to show only temperature sensors' reinforces sensorsOnly but adds no new meaning beyond the schema. Baseline 3 applies.

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 'List' with the resource 'all discovered SwitchBot devices', clearly stating what the tool does. The optional temperature-sensor filter adds precise scope, and this clearly distinguishes it from sibling tools focused on status, temperature, and control.

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 like get_device_status, get_all_temperatures, or get_api_status. The optional filter is parameter-level guidance, not tool-selection guidance, and there is no explicit when-not or alternative mentioned.

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

press_botA

Send a momentary press to a SwitchBot Bot (finger simulator). The finger extends then retracts.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesDevice ID or device name of the Bot

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It provides key transient behavior by stating that the finger extends then retracts, making clear that this is a momentary action rather than a toggle or sustained activation. It does not cover errors or prerequisites, but those are less critical for such a simple command.

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 sentence with no filler. It leads with the action, describes the resource, and adds the mechanical consequence of the press in as few words as possible.

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 one-parameter, simple action tool, the description plus schema adequately explains what the tool does, what it acts on, and what physical behavior occurs. It is sufficient for selecting and invoking the tool, though it does not mention the return value or behavior when the device is unavailable.

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 deviceId as 'Device ID or device name of the Bot' with 100% coverage. The tool description adds no parameter-specific meaning beyond referring to the Bot, so the schema carries the semantic weight and the score remains at the baseline.

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 identifies a specific action ('Send a momentary press') and a specific resource ('SwitchBot Bot (finger simulator)'), and clarifies the physical result ('finger extends then retracts'). It clearly differentiates the tool from sibling tools such as turn_on, turn_off, and the various status/read 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 phrase 'momentary press' implies the right use case: a short, self-reverting button activation rather than a sustained on/off state change. However, the description does not explicitly state when to prefer this tool over alternatives or mention exclusions, so the usage guidance is only implied.

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

turn_offA

Turn off a SwitchBot Plug Mini or a Bot in switch mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesDevice ID or device name

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It names the supported device types, which is useful, but it does not reveal consequences like idempotency, error behavior, or what happens when the device is already off.

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 with no wasted words. It efficiently conveys the action and the target devices.

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?

This is a minimal command tool with one parameter and no output schema, so a short description is somewhat acceptable. However, it lacks information about return values, failure modes, or the expected outcome when the command cannot be executed.

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 schema already defines deviceId as 'Device ID or device name'. The description adds no parameter semantics beyond what the schema provides, so the baseline 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 states a specific action ('Turn off') and identifies the exact resources ('SwitchBot Plug Mini' or 'Bot in switch mode'). This clearly distinguishes it from siblings like turn_on and press_bot.

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 explicit guidance is given about when to use this tool instead of alternatives such as turn_on or press_bot. The supported device types are implied, but no exclusions or prerequisites like device status are mentioned.

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

turn_onA

Turn on a SwitchBot Plug Mini or a Bot in switch mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesDevice ID or device name

TDQS

A3.8/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 behavioral disclosure burden. It clearly indicates a state-changing action and constrains the target to switch-mode bots, but it does not disclose behavior when the device is already on, error cases, or response details. This is adequate but has gaps.

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 with no filler or redundant information. It front-loads the action and identifies valid device types efficiently.

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 one-parameter control action with no output schema, the description covers the essential purpose and device scope. It does not mention edge cases or return behavior, but the simplicity of the operation means this is nearly complete.

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% coverage for the single deviceId parameter, with the description 'Device ID or device name.' The tool description adds no extra parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.

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 clear action ('Turn on') and a specific resource ('a SwitchBot Plug Mini or a Bot in switch mode'), and the scope distinguishes it from sibling tools like turn_off and press_bot. This is precise enough for an agent to understand exactly what the tool does.

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 usage for switch-mode devices and differentiates from press_bot by mentioning switch mode, but it does not explicitly state when to use this tool versus alternatives or exclude non-switch-mode bots. The usage guidance is inferable rather than explicit.

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. Dates show when Glama detected each change.

  1. 10 tool updatesv1.2.2
    • First observedget_all_plugs
    • First observedget_all_temperatures
    • First observedget_api_status
    • First observedget_device_status
    • First observedget_plug_status
    • First observedget_temperature
    • First observedlist_devices
    • First observedpress_bot
    • First observedturn_off
    • First observedturn_on

TDQS

A4/5.0
Disambiguation4/5

Most tools are clearly tied to distinct resources and actions, such as discovery, individual status, batch reads, and control. The only minor overlap is between get_device_status and the specialized get_temperature/get_plug_status tools, but the descriptions make the specialized use cases clear.

Naming Consistency5/5

All tools follow a predictable lowercase snake_case verb_noun pattern: list_*, get_*, turn_on/_off, press_bot, and get_ap_i_status. There are no mixed conventions or vague verbs, making the naming highly consistent.

Tool Count5/5

Ten tools is well-scoped for a smart home device server. Each tool serves a clear purpose without unnecessary bloat or a thin surface.

Completeness5/5

The tool set covers device discovery, detailed status, specialized temperature and plug readings, on/off control, Bot pressing, and API rate-limit checks. No critical workflows for the advertised SwitchBot device types are missing.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/caseman72/switchr-mcp'

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