BLE-to-USB HID keyboard bridge as MCP server
Reason this release was yanked:
Package renamed. Install: pip install clawtap-mcp
Project description
GhostType MCP
BLE-to-USB HID keyboard bridge exposed as an MCP server.
Send keystrokes to any computer via Bluetooth — let AI assistants type on your machine through a hardware bridge.
Architecture
Claude / AI → MCP Server (Python) → BLE → ESP32 → UART → RP2040 → USB HID → Computer
Prerequisites
- Bluetooth adapter on the host machine (built-in or USB dongle)
- Python 3.10+
- Hardware (see below)
Install MCP Server
# Claude Code / Claude Desktop
claude mcp add ghosttype -- uvx ghosttype-mcp
# Or manually
pip install ghosttype-mcp
Hardware Setup
Components
| Component | Role | Price |
|---|---|---|
| ESP32-WROOM-32 | BLE receiver | ~$4 |
| Waveshare RP2040-Zero | USB HID keyboard | ~$3 |
| 3 DuPont wires | Connection | ~$0 |
Wiring
ESP32 RP2040-Zero
───── ───────────
GPIO17 (TX) ─────► GP1 (UART0 RX)
GND ─────────────► GND
VIN ◄──────────── 5V (VBUS)
RP2040-Zero plugs into the target computer via USB-C. ESP32 is powered from RP2040's 5V pin.
Firmware
ESP32 (BLE receiver)
# Install ESP32 core
arduino-cli core install esp32:esp32
# Compile and upload (ESP32 connected via USB)
arduino-cli compile --fqbn esp32:esp32:esp32 firmware/esp32-ble-receiver/
arduino-cli upload --fqbn esp32:esp32:esp32 --port COMx firmware/esp32-ble-receiver/
The ESP32 advertises as "GhostType" over BLE using Nordic UART Service.
RP2040-Zero (USB HID keyboard)
# Install RP2040 core
arduino-cli core install rp2040:rp2040 \
--additional-urls https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
# Compile
arduino-cli compile --fqbn rp2040:rp2040:waveshare_rp2040_zero firmware/rp2040-hid-keyboard/
# Flash: hold BOOT button, plug USB-C, copy .uf2 to RPI-RP2 drive
MCP Tools
| Tool | Description |
|---|---|
type_text |
Type ASCII text as HID keystrokes |
press_key |
Press a special key (enter, escape, f1-f12, arrows, etc.) |
combo_keys |
Press a key combination up to 5 keys (ctrl+c, alt+tab, win+r) |
health_check |
Check BLE connection status and device availability |
Troubleshooting
| Problem | Solution |
|---|---|
GhostType not found |
Ensure ESP32 is powered and not connected to another BLE client. Press RESET on ESP32. |
| Text appears as wrong characters | Switch keyboard layout on target computer (e.g. EN for English text) |
| BLE disconnects frequently | Keep ESP32 within 10m range. Check power supply stability. |
| RP2040 not recognized as keyboard | Re-flash firmware. Try different USB port. |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ghosttype_mcp-0.2.0.tar.gz.
File metadata
- Download URL: ghosttype_mcp-0.2.0.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a31c8b6841cc76651602a1be44a4c0f4bac023d89d94a113c8391348230a5d4f
|
|
| MD5 |
e2033170a3aa1143747c771642af9dad
|
|
| BLAKE2b-256 |
d992f756cead8a883b792079b4e579953a6659e5152063cc1effc577f5b3031b
|
File details
Details for the file ghosttype_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ghosttype_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef7a2ece7874de987f47f8f63786b826f77d3cb3bc1c83e244d150d10b0b1a4e
|
|
| MD5 |
c4a4c3b15d11c62717afdb9e03b3db5b
|
|
| BLAKE2b-256 |
66816882ffd82a4ebf86f37cdc1a8cdd24939a050ce6b8ba65a9ec734f9a6e78
|