MCP server to control a Dr. Dabber Switch 2 over Bluetooth LE.
  • TypeScript 94%
  • Shell 3.2%
  • JavaScript 2.8%
Find a file
2026-06-08 06:18:17 -07:00
.github/workflows Initial public release 2026-06-08 06:18:17 -07:00
docs/clients Initial public release 2026-06-08 06:18:17 -07:00
hooks Initial public release 2026-06-08 06:18:17 -07:00
src Initial public release 2026-06-08 06:18:17 -07:00
tests Initial public release 2026-06-08 06:18:17 -07:00
.env.example Initial public release 2026-06-08 06:18:17 -07:00
.gitignore Initial public release 2026-06-08 06:18:17 -07:00
.sanity-patterns.json Initial public release 2026-06-08 06:18:17 -07:00
LICENSE Initial public release 2026-06-08 06:18:17 -07:00
manifest.json Initial public release 2026-06-08 06:18:17 -07:00
package-lock.json Initial public release 2026-06-08 06:18:17 -07:00
package.json Initial public release 2026-06-08 06:18:17 -07:00
README.md Initial public release 2026-06-08 06:18:17 -07:00
tsconfig.json Initial public release 2026-06-08 06:18:17 -07:00
WHITEPAPER.md Initial public release 2026-06-08 06:18:17 -07:00

Dr. Dabber MCP

Control a Dr. Dabber Switch 2 over Bluetooth LE from any MCP client. Your device stays on your machine.

An MCP server that exposes the Dr. Dabber Switch 2 to any MCP-capable client (Claude Desktop, Claude Code, Cursor, ChatGPT, and more). Credentials and device info stay on your machine, in your own OS keychain or .env. Nothing is ever sent to the author of this repo.


60-second quickstart

Pick whichever install path fits your client. All four end up at the same place: a running drdabber-mcp server wired into your tool.

1. npx one-liner (Claude Code)

claude mcp add drdabber -- npx -y github:nidamen/drdabber-mcp

That's it. Restart Claude Code and the drdabber tools appear. Run the init wizard (path 3) to set up your device target first.

2. Desktop Extension (.mcpb double-click)

  1. Download drdabber-mcp.mcpb from the latest release.
  2. Double-click it. Claude Desktop opens an install dialog.
  3. Fill in the config fields (the same env vars listed below) and click Install.

No terminal required. The extension bundles the server and prompts you for the device name.

3. Guided wizard

npx github:nidamen/drdabber-mcp init

The wizard scans nearby BLE devices, lets you pick your Switch 2, stores the target securely (macOS Keychain via security add-generic-password, or a local .env elsewhere), prints the exact config line for your client, and runs a connection check so you know it works before you wire it in.

4. Proxy mode (optional)

If an always-on process already owns the BLE connection (e.g. a Raspberry Pi running a web control server), point the MCP at it instead:

DRDABBER_PROXY_URL=http://192.168.1.100:4477 npx -y github:nidamen/drdabber-mcp

Tools

Tool Description Mutates?
discover_switch2 Scan for nearby Switch 2 devices advertising the fee7 BLE service. no
connect_switch2 Connect to a Switch 2 and read device information. no
disconnect_switch2 Disconnect from the current Switch 2. no
get_device_info Return cached model, serial, firmware, and manufacturer information. no
get_status Refresh and return current device status (battery, temp, light mode, preset, session). no
get_presets Return cached preset temperatures, hold times, heating profiles, and custom points. no
set_active_preset Set the active vapor profile preset from 1 to 5. yes
set_preset_temperature Set a preset temperature (tempF or tempC). yes
set_preset_hold_time Set a preset hold time in seconds. yes
set_heating_profile Set preset heating profile (Steady/Ascent/Descent/Valley/Hill/Custom). yes
set_light_mode Set the active light mode from 0 to 17. yes
set_light_brightness Set light brightness from 0 to 100. yes
set_temp_unit Set displayed temperature unit (F or C). yes
start_session Start the active heating session. yes
stop_session Stop the active heating session. yes
extend_session Set session extension value from 0 to 9. yes
set_haptic_feedback Enable or disable haptic feedback. yes
set_auto_shutoff Set idle auto-shutoff timer in minutes (0 to disable). yes
set_device_name Rename the Switch 2 (1 to 29 printable ASCII characters). yes
start_cleaning_assist Start cleaning assist. yes
stop_cleaning_assist Stop cleaning assist. yes

OTA firmware updates, factory reset, and raw BLE writes are intentionally not exposed.

Configuration

These are read from your environment (or from the keychain entry the wizard creates). Never commit real values.

Variable Required Description
DRDABBER_SWITCH2_TARGET no The BLE advertised name or hardware id of your Switch 2 (e.g. My Switch 2). If unset the server auto-connects to the first Switch 2 it finds.
DRDABBER_PROXY_URL no Base URL of an always-on web control process (e.g. http://localhost:4477). When set, commands are forwarded via HTTP instead of opening a local BLE connection.
DRDABBER_KEYCHAIN_ACCOUNT no macOS Keychain account name for the stored device target. Defaults to $USER.

The device target is resolved at startup in this order: DRDABBER_SWITCH2_TARGET env var, then macOS Keychain (service drdabber-switch2-target, account $USER), then local .env. The init wizard stores it in the Keychain (macOS) or a local gitignored .env.


Per-client setup

Exact config snippets for each client:

Requirements

  • Node.js >= 20
  • Bluetooth LE adapter (macOS built-in, or USB dongle on Linux/Windows)
  • macOS: grant the node process Bluetooth permission in System Settings > Privacy > Bluetooth on first use

Security

Device info lives only on your machine, in your OS keychain or a local .env you control. This server talks directly from your machine to the Switch 2 over BLE. The author of this repo never receives your device information. See WHITEPAPER.md for the full security and threat model.

License

MIT