Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghosttype_mcp-0.2.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ghosttype_mcp-0.2.0-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

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

Hashes for ghosttype_mcp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a31c8b6841cc76651602a1be44a4c0f4bac023d89d94a113c8391348230a5d4f
MD5 e2033170a3aa1143747c771642af9dad
BLAKE2b-256 d992f756cead8a883b792079b4e579953a6659e5152063cc1effc577f5b3031b

See more details on using hashes here.

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

Hashes for ghosttype_mcp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ef7a2ece7874de987f47f8f63786b826f77d3cb3bc1c83e244d150d10b0b1a4e
MD5 c4a4c3b15d11c62717afdb9e03b3db5b
BLAKE2b-256 66816882ffd82a4ebf86f37cdc1a8cdd24939a050ce6b8ba65a9ec734f9a6e78

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page