Dr. Dabber Switch 2 MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dr. Dabber Switch 2 MCP Discover nearby Switch 2 devices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dr. Dabber Switch 2 MCP
A Model Context Protocol (MCP) server for controlling a Dr. Dabber Switch 2 vaporizer over Bluetooth LE. It exposes every safe user-facing control as a typed MCP tool, so any MCP-connected LLM or automation can discover, connect, and operate the device without touching the official app.
Problem it solves
The Switch 2 ships with a mobile/web Bluetooth app. This server bridges the device into the MCP ecosystem so you can drive it from Claude, Codex, or any other MCP client on your laptop or over a Raspberry Pi BLE proxy, keeping the device always reachable even when your phone app is not connected.
Related MCP server: discord-mcp
Install
Option A: run from GitHub (no clone needed)
npx -y github:nidamen/drdabber-switch2-mcpOption B: local clone
git clone https://github.com/nidamen/drdabber-switch2-mcp.git
cd drdabber-switch2-mcp
npm install
npm run buildNode 20+ is required.
MCP client configuration
Direct BLE (laptop)
The server opens its own Bluetooth connection. The Switch 2 must be on, nearby, and not connected to another client.
Claude Desktop / claude_desktop_config.json:
{
"mcpServers": {
"drdabber-switch2": {
"command": "npx",
"args": ["-y", "github:nidamen/drdabber-switch2-mcp"],
"env": {
"DRDABBER_SWITCH2_TARGET": "My Switch 2"
}
}
}
}Or with a local build:
{
"mcpServers": {
"drdabber-switch2": {
"command": "node",
"args": ["/path/to/drdabber-switch2-mcp/dist/src/index.js"],
"env": {
"DRDABBER_SWITCH2_TARGET": "My Switch 2"
}
}
}
}Pi BLE proxy (always-on headless path)
When DRDABBER_PROXY_URL is set, the MCP forwards every command to the web control running on the Pi instead of opening its own BLE link. The Pi becomes the single BLE owner and multiple clients can share it without GATT contention.
{
"mcpServers": {
"drdabber-switch2": {
"command": "node",
"args": ["/path/to/drdabber-switch2-mcp/dist/src/index.js"],
"env": {
"DRDABBER_PROXY_URL": "http://192.168.1.44:4477"
}
}
}
}TOML style (Codex / Autohand):
[mcp_servers.drdabber-switch2]
command = "node"
args = ["/path/to/drdabber-switch2-mcp/dist/src/index.js"]
env = { DRDABBER_SWITCH2_TARGET = "My Switch 2" }Environment variables
Variable | Required | Description |
| No | BLE id or exact advertised name to prefer during scan. Omit to connect to the first Switch 2 found. |
| No | Base URL of the Pi web control (e.g. |
Transport
The server uses stdio MCP transport. It does not open any network ports itself. BLE communication runs via @abandonware/noble on the host machine, or via HTTP POST to the Pi proxy when DRDABBER_PROXY_URL is set.
Complete tool reference
Connection
Tool | Purpose | Parameters | Returns |
| Scan for nearby Switch 2 devices advertising the |
| Array of |
| Connect to the Switch 2 and read device information |
|
|
| Disconnect from the current Switch 2 | none |
|
Device state
Tool | Purpose | Parameters | Returns |
| Return cached model, serial, firmware, and manufacturer info | none |
|
| Sync clock, request analytics, and return decoded device status |
| Full |
| Return cached presets for all 5 vapor profiles | none | Array of |
Preset configuration
Tool | Purpose | Parameters | Returns |
| Switch the active vapor profile |
|
|
| Set a preset's target temperature |
| Updated |
| Set a preset's hold time |
| Updated |
| Set a preset's heating curve |
| Updated |
Session control
Tool | Purpose | Parameters | Returns |
| Start the active heating session | none |
|
| Stop the active heating session | none |
|
| Set the session extension value |
|
|
Device settings
Tool | Purpose | Parameters | Returns |
| Set the LED pattern |
|
|
| Set LED brightness |
|
|
| Set displayed temperature unit |
|
|
| Enable or disable haptic feedback |
|
|
| Set idle auto-shutoff timer. Use 0 to disable. |
|
|
| Rename the Switch 2 (persisted on device) |
|
|
Cleaning
Tool | Purpose | Parameters | Returns |
| Start the cleaning assist cycle | none |
|
| Stop the cleaning assist cycle | none |
|
Total: 21 tools.
Quick usage examples
Check device state and battery:
"Connect to my Switch 2 and tell me the battery level, current temperature, and active preset." The LLM calls
connect_switch2thenget_statusand reports back.
Change light and set temperature:
"Set preset 3 to 480F and switch the light to Purple Haze." The LLM calls
set_preset_temperaturewith{ preset: 3, tempF: 480 }andset_light_modewith{ lightMode: 11 }.
Automated session:
"Start a session on preset 2, then stop it after I say done." The LLM calls
set_active_presetwith{ preset: 2 }, thenstart_session, and waits for the next instruction to callstop_session.
Desktop control panel
A local web control panel is included under app/. It reuses Switch2Controller directly (no MCP layer) and serves a single-page UI at http://localhost:4477 over HTTP + Server-Sent Events. Controls mirror the official app: live temperature dial, preset editor, light mode and brightness, session start/stop/extend, cleaning assist, device rename, and all device settings.
# Real device
npm run app
# open http://localhost:4477
# Mock device (no hardware needed)
npm run app:mockBLE protocol notes
Primary control surface:
Purpose | UUID |
Demo service |
|
Write characteristic |
|
Notify characteristic |
|
Device information service |
|
Intentionally excluded UUIDs:
Purpose | UUID |
OTA service |
|
OTA write |
|
OTA notify |
|
Safety boundaries
This server intentionally does NOT expose:
Firmware update or OTA writes
Factory reset
Arbitrary raw BLE writes
All state-changing tools validate input ranges before writing to the device. These boundaries are permanent design decisions, not omissions.
Verified device
Live verified on May 29, 2026:
Field | Value |
BLE name |
|
Advertised service |
|
Model |
|
Serial |
|
Hardware |
|
Firmware |
|
Manufacturer |
|
Development
npm test # unit tests (21 tests)
npm run build # compile TypeScript
npm run qa # build + test
npm run probe # BLE scan (requires hardware)
npm run live:status -- "My Switch 2" # read-only live statusLicense
MIT
Available Tools
21 toolsconnect_switch2Connect Dr Dabber Switch 2C
Connect to a Switch 2 and read device information.
Inputs: target.
disconnect_switch2Disconnect Dr Dabber Switch 2B
Disconnect from the current Switch 2.
Inputs: no named parameters.
discover_switch2Discover Dr Dabber Switch 2B
Scan for nearby Switch 2 devices advertising the fee7 BLE service.
Inputs: timeoutMs.
extend_sessionExtend SessionC
Set session extension value from 0 to 9.
Inputs: minutes (required).
get_device_infoGet Switch 2 Device InfoA
Return cached model, serial, firmware, and manufacturer information.
Inputs: no named parameters.
get_presetsGet Switch 2 PresetsA
Return cached preset temperatures, hold times, heating profiles, and custom points.
Inputs: no named parameters.
get_statusGet Switch 2 StatusB
Refresh and return current device status including battery, temperature, light mode, preset, and session state.
Inputs: waitMs.
set_active_presetSet Active PresetB
Set the active vapor profile preset from 1 to 5.
Inputs: preset (required).
set_auto_shutoffSet Auto ShutoffA
Set the device idle auto-shutoff timer in minutes from 0 to 60. Use 0 to disable auto-shutoff.
Inputs: minutes (required).
set_device_nameSet Device NameA
Rename the Switch 2. Accepts 1 to 29 printable ASCII characters (0x20-0x7E).
Inputs: name (required).
set_haptic_feedbackSet Haptic FeedbackC
Enable or disable haptic feedback.
Inputs: enabled (required).
set_heating_profileSet Heating ProfileC
Set preset heating profile. Values: 161 Steady, 177 Ascent, 193 Descent, 209 Valley, 225 Hill, 241 Custom.
Inputs: preset (required), heatingProfile (required).
set_light_brightnessSet Light BrightnessC
Set light brightness from 0 to 100.
Inputs: brightness (required).
set_light_modeSet Light ModeB
Set the active light mode from 0 to 17.
Inputs: lightMode (required).
set_preset_hold_timeSet Preset Hold TimeC
Set a preset hold time in seconds.
Inputs: preset (required), holdTime (required).
set_preset_temperatureSet Preset TemperatureC
Set a preset temperature. Provide either tempF or tempC.
Inputs: preset (required), tempC, tempF.
set_temp_unitSet Temperature UnitC
Set displayed temperature unit.
Inputs: tempUnit (required).
start_cleaning_assistStart Cleaning AssistD
Start cleaning assist.
Inputs: no named parameters.
start_sessionStart SessionC
Start the active heating session.
Inputs: no named parameters.
stop_cleaning_assistStop Cleaning AssistC
Stop cleaning assist.
Inputs: no named parameters.
stop_sessionStop SessionA
Stop the active heating session.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Most tools have clearly distinct purposes. However, set_active_preset, set_heating_profile, set_preset_hold_time, and set_preset_temperature all modify presets, potentially causing confusion about which preset is being affected and whether heating profile applies to active or specific preset.
All tools follow a consistent verb_noun pattern in snake_case (e.g., connect_switch2, get_device_info, set_light_mode). Naming is uniform and predictable across the entire set.
With 21 tools, the count is slightly above the typical 3-15 range, but each tool corresponds to a distinct device feature or operation, so it is reasonable for a feature-rich device controller.
The tool surface covers connection, presets, sessions, lighting, cleaning, and various settings. Minor gaps like a factory reset or firmware update might exist, but the set is largely comprehensive for day-to-day device control.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Klever blockchain smart contract development.
A Model Context Protocol server for Wix AI tools
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn educational implementation of a Model Context Protocol server that demonstrates how to build a functional MCP server for integrating with various LLM clients like Claude Desktop.1161MIT
- AlicenseNot gradedqualityBmaintenanceA Model Context Protocol (MCP) server for the Discord integration with MCP-compatible applications like Claude Desktop.605MIT
- AlicenseBqualityDmaintenanceAn educational implementation of a Model Context Protocol server that demonstrates how to build a functional MCP server integrating with various LLM clients.2MIT
- AlicenseNot gradedqualityDmaintenanceAn implementation of the Model Context Protocol (MCP) server that enables multiple clients to connect simultaneously and handles basic context management and messaging with an extendable architecture.MIT