
KI-gestützter MCP-Server für Flipper Zero. Steuere SubGHz, NFC, RFID, IR, BLE, GPIO und mehr über WiFi mit Claude oder einem beliebigen MCP-Client.
Ein Rust-MCP-Server (Model Context Protocol), der direkt auf dem WiFi Dev Board v1 (ESP32-S2) des Flipper Zero läuft und es KI-Agenten ermöglicht, einen Flipper Zero über das Netzwerk zu steuern.
Dieses Projekt platziert einen MCP-Server auf dem Flipper selbst. Jeder MCP-kompatible KI-Client (Claude Desktop, Claude Code usw.) kann sich verbinden und die Fähigkeiten des Flipper als Tools nutzen — SubGHz, NFC, RFID, IR, GPIO, BadUSB, iButton, Dateispeicher und mehr.
Anders als andere Projekte, die einen USB-verbundenen Host-Computer erfordern, läuft flipper-mcp auf dem ESP32-S2-WiFi-Modul, das am Flipper angebracht ist. Der Flipper wird zu einem eigenständigen, netzwerkzugänglichen Werkzeug.
LOCAL (same network):
MCP Client ──HTTP──► flipper-mcp.local:8080 (ESP32-S2) ──UART──► Flipper Zero
REMOTE (cross-network):
MCP Client ──HTTP──► Relay Server ◄──WebSocket── ESP32-S2 ──UART──► Flipper Zero
Der ESP32-S2 betreibt einen HTTP-Server, der das MCP-Protokoll implementiert. Er übersetzt MCP-Tool-Aufrufe in Flipper Zero CLI-Befehle über UART mit 115200 Baud. Ein begleitender Relay-Server ermöglicht den Fernzugriff aus jedem Netzwerk.
flipper-mcp.localMit welchem Gerät verbinde ich mich?
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install espup
espup install
source ~/export-esp.sh # Run this in every new terminal
cargo install espflash
cargo install ldproxy
sudo apt install -y git curl gcc build-essential pkg-config libudev-dev libssl-dev python3 python3-venv cmake ninja-build
Vollständige Einrichtungsanleitung in docs/SETUP.md
source ~/export-esp.sh
cd firmware
cargo build --release --target xtensa-esp32s2-espidf
espflash flash --monitor target/xtensa-esp32s2-espidf/release/flipper-mcp
Erstelle config.txt auf der Flipper-SD-Karte unter SD:/apps_data/flipper_mcp/config.txt:
wifi_ssid=YourNetworkName
wifi_password=YourPassword
device_name=flipper-mcp
Oder direkt vom Flipper aus konfigurieren mit der begleitenden FAP (siehe Schritt 5):
Apps → Tools → Flipper MCP → Configure WiFi
Beim ersten Start ohne Konfigurationsdatei wartet der ESP32 und schreibt status=needs_config in die Statusdatei. Die Flipper-FAP zeigt dies auf dem Status-Bildschirm an.
Bevor du einen KI-Client konfigurierst, bestätige mit curl, dass der Server erreichbar ist:
# Quick health check
curl http://flipper-mcp.local:8080/health
# Full verification — initialize + list all available tools
./scripts/test-connection.sh
# If mDNS isn't resolving on your OS, pass the IP directly:
./scripts/test-connection.sh 192.168.x.xxx
Hole die IP des Flipper aus dem Menü Flipper MCP → Status und teste dann:
BLE-Beacon-Broadcast (gefoppte BLE-Werbung senden):
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ble_beacon","arguments":{"data":"020106"}}}'
BLE-HID-Tastatur (eine drahtlose Tastatur emulieren und tippen):
# Start HID emulation
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ble_hid_start","arguments":{}}}'
# Type a message
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ble_hid_type","arguments":{"text":"Hello from Flipper!"}}}'
# Stop HID emulation
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ble_hid_stop","arguments":{}}}'
IR-Senden (IR-Fernbedienungscodes senden):
# NEC protocol IR code (generic TV power button)
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ir_tx","arguments":{"protocol":"NEC","address":"00","command":"01","repeat":0}}}'
SubGHz-Empfang (auf Funksignale bei 433,92 MHz hören):
curl -X POST http://192.168.0.58:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"subghz_rx","arguments":{"frequency":433920000,"duration":5000}}}'
Ersetze 192.168.0.58 durch die tatsächliche IP-Adresse deines Flipper.
Füge dann Folgendes zu deiner Claude-Desktop-Konfiguration (claude_desktop_config.json) hinzu:
{
"mcpServers": {
"flipper": {
"url": "http://flipper-mcp.local:8080/mcp"
}
}
}
Installiere die begleitende Flipper MCP-App aus flipper-app/ auf dem Flipper Zero. Baue sie mit ufbt und kopiere die .fap nach SD:/apps/Tools/:
cd flipper-app && ufbt # produces flipper_mcp.fap
# Copy flipper_mcp.fap to your Flipper SD card under apps/Tools/
Die App erscheint unter Apps → Tools → Flipper MCP und bietet:
Die App kommuniziert über SD-Kartendateien (keine zusätzliche Verkabelung über den GPIO-Header hinaus). Configure WiFi ist der Erststart-Assistent — kein Telefon, Browser oder PC-Skripte erforderlich.
Selbst gehostet (die Binary überall ausführen):
./scripts/build-relay.sh
./target/release/flipper-mcp-relay --listen 0.0.0.0:9090
# Then add relay_url to config.txt on the Flipper SD card:
# relay_url=ws://your-server:9090/tunnel
Cloud-Bereitstellung (AWS oder GCP, mit TLS + DNS):
# Bootstrap state storage, then deploy
./infra/bootstrap/aws.sh # or ./infra/bootstrap/gcp.sh
cd infra/aws && cp terraform.tfvars.example terraform.tfvars
tofu init && tofu apply
# Outputs the relay URL and a ready-to-paste wifi-config.sh command
Vollständige Anweisungen findest du in RELAY.md.
Benutzerdefinierte Tools können über TOML-Konfigurationsdateien oder durch Installieren von FAP-Apps auf der SD-Karte hinzugefügt werden. Siehe OPERATIONS.md für Copy-Paste-curl-Befehle für jedes Tool.
Du brauchst kein Claude-Abonnement, um flipper-mcp zu nutzen. Open WebUI ist eine kostenlose, selbst gehostete ChatGPT-ähnliche Oberfläche, die MCP Streamable HTTP nativ unterstützt (v0.6.31+). Kombiniere sie mit Ollama für vollständig lokale, offline KI-gesteuerte Flipper-Steuerung.
# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Pull a model with tool-calling support
ollama pull llama3.1 # 8B — good balance of speed and capability
# or: ollama pull qwen2.5 # strong tool-calling, good at structured output
# or: ollama pull mistral # lightweight, fast tool use
# Docker (recommended) — connects to Ollama on localhost automatically
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-e WEBUI_AUTH=False \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
# Or without Docker:
pip install open-webui
open-webui serve
Öffne http://localhost:3000 in deinem Browser.
http://flipper-mcp.local:8080/mcp (oder http://192.168.x.x:8080/mcp)https://relay.example.com/mcphttp://host.docker.internal:8080/mcp, wenn der Flipper im Netzwerk des Docker-Hosts istTipp: Stelle unter Workspace → Models → (dein Modell) → Advanced Parameters die Function Calling auf Default für kleinere Modelle. Wechsle nur dann zu Native, wenn Modelle eine starke integrierte Tool-Unterstützung haben (Llama 3.1 8B+, Qwen 2.5, Mistral).
Sobald verbunden, probiere diese im Open WebUI-Chat aus:
Mehrstufige agentische Aufgaben funktionieren am besten mit größeren Modellen (Llama 3.1 70B, Qwen 2.5 72B oder Cloud-Modelle über OpenAI-kompatible APIs). Kleinere Modelle bewältigen Einzel-Tool-Aufrufe zuverlässig.
flipper-mcp/
├── firmware/ # ESP32-S2 firmware (Rust, esp-idf-svc)
├── relay/ # Companion relay server (Rust, tokio/axum)
├── flipper-app/ # Flipper Zero FAP — in-device management UI (C, ufbt)
├── infra/ # OpenTofu IaC — cloud relay deployment (AWS + GCP)
├── config/ # Example module configurations
├── scripts/ # Build, flash, and setup helper scripts
└── docs/ # Architecture, setup, API, troubleshooting
Siehe AGENTS.md für vollständigen Projektkontext, technische Spezifikationen, Systemarchitektur und alles, was für die Weiterentwicklung dieses Projekts benötigt wird.
MIT
| Stage | Connect to | Notes |
|---|
| Flashing firmware | WiFi Dev Board USB-C | Board has its own USB port, separate from Flipper |
| Serial monitoring | WiFi Dev Board USB-C | Same USB connection as flashing |
| SD card config files | Flipper Zero SD card | Insert SD into Flipper, or remove and mount on PC |
| Server control commands | Flipper Zero SD card | Create server.cmd file in apps_data/flipper_mcp/ |
| UART communication | Automatic | WiFi Dev Board and Flipper connect via GPIO header |
| MCP HTTP requests | WiFi Dev Board IP:8080 | Connect over your WiFi network |
| Screen | What it does |
|---|
| Status | Requests a fresh status update from the ESP32, shows IP, SSID, server state, version |
| Start / Stop / Restart | Controls the MCP HTTP server lifecycle |
| Reboot Board | Restarts the ESP32 WiFi Dev Board |
| Configure WiFi | On-screen keyboard to enter SSID + password; writes config.txt to SD card |
| View Logs | Scrollable diagnostic log written by the ESP32 every 30 s |
| Tools List | Scrollable list of all MCP tools currently registered on the ESP32 |
| Refresh Modules | Triggers FAP discovery rescan + modules.toml reload on the ESP32 |
| Category | Tools | Description |
|---|
| SubGHz | subghz_tx, subghz_rx, subghz_decode_raw, subghz_chat, subghz_tx_from_file | Radio frequency operations |
| NFC | nfc_detect, nfc_read, nfc_emulate, nfc_field | NFC tag interaction |
| RFID | rfid_read, rfid_emulate, rfid_write | Low-frequency RFID |
| Infrared | ir_tx, ir_rx | IR remote control |
| GPIO | gpio_read, gpio_write, gpio_set_mode | Pin I/O control |
| BadUSB | badusb_run, badusb_list | USB HID attacks |
| iButton | ibutton_read, ibutton_emulate | 1-Wire key fobs |
| Storage | storage_list, storage_read, storage_write, storage_remove, storage_stat | SD card file management |
| System | system_device_info, system_power_info, system_power_reboot, system_ps, system_free, system_uptime | Device management |
| BLE | ble_info, ble_beacon, ble_beacon_stop, ble_hid_start, ble_hid_type, ble_hid_press, ble_hid_mouse, ble_hid_stop | Bluetooth Low Energy (beacon broadcast + HID emulation) |
| Apps | app_launch_{name} (auto-discovered from SD card) | Application management |
| Prompt | What it does |
|---|
| "Scan for NFC tags near the Flipper" | Calls nfc_detect to read nearby tags |
| "List all files on the Flipper's SD card" | Calls storage_list on /ext |
| "Transmit this SubGHz signal on 433.92 MHz: ..." | Calls subghz_tx with the given frequency |
| "Read any RFID card that's presented to the Flipper" | Calls rfid_read and returns tag data |
| "What apps are installed on the Flipper?" | Calls app_list to enumerate installed FAPs |
| "Send this IR signal to turn off the TV" | Calls ir_tx with the specified protocol and data |
| "Show me the Flipper's system info and free memory" | Calls system_info + system_free |
| "Read the NFC tag, then save its data to /ext/nfc/captured.nfc" | Multi-step: nfc_read → storage_write |
| "Monitor 315 MHz for 10 seconds and decode anything you hear" | Calls subghz_rx with frequency and duration |