
Server MCP basato su AI per Flipper Zero. Controlla SubGHz, NFC, RFID, IR, BLE, GPIO e altro ancora via WiFi utilizzando Claude o qualsiasi client MCP.
Un server MCP (Model Context Protocol) in Rust che viene eseguito direttamente sulla WiFi Dev Board v1 (ESP32-S2) del Flipper Zero, consentendo agli agenti AI di controllare un Flipper Zero attraverso la rete.
Questo progetto mette un server MCP sul Flipper stesso. Qualsiasi client AI compatibile con MCP (Claude Desktop, Claude Code, ecc.) può connettersi e utilizzare le capacità del Flipper come strumenti — SubGHz, NFC, RFID, IR, GPIO, BadUSB, iButton, archiviazione file e altro ancora.
A differenza di altri progetti che richiedono un computer host collegato via USB, flipper-mcp viene eseguito sul modulo WiFi ESP32-S2 collegato al Flipper. Il Flipper diventa uno strumento autonomo e accessibile via rete.
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
L'ESP32-S2 esegue un server HTTP che implementa il protocollo MCP. Traduce le chiamate agli strumenti MCP in comandi CLI del Flipper Zero via UART a 115200 baud. Un server relay complementare consente l'accesso remoto da qualsiasi rete.
flipper-mcp.localA quale dispositivo mi collego?
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
Istruzioni complete di configurazione 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
Crea config.txt sulla scheda SD del Flipper in SD:/apps_data/flipper_mcp/config.txt:
wifi_ssid=YourNetworkName
wifi_password=YourPassword
device_name=flipper-mcp
Oppure configura direttamente dal Flipper usando il FAP complementare (vedi Passo 5):
Apps → Tools → Flipper MCP → Configure WiFi
Al primo avvio senza un file di configurazione, l'ESP32 attende e scrive status=needs_config nel file di stato. Il FAP del Flipper lo visualizzerà nella schermata Status.
Prima di configurare un client AI, conferma che il server sia raggiungibile con curl:
# 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
Ottieni l'IP del Flipper dal menu Flipper MCP → Status, poi testa:
Trasmissione beacon BLE (trasmette un annuncio BLE falsificato):
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"}}}'
Tastiera HID BLE (emula una tastiera wireless e digita):
# 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":{}}}'
Trasmissione IR (invia codici di telecomando IR):
# 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}}}'
Ricezione SubGHz (ascolta segnali wireless su 433,92 MHz):
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}}}'
Sostituisci 192.168.0.58 con l'indirizzo IP effettivo del tuo Flipper.
Poi aggiungi alla tua configurazione di Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"flipper": {
"url": "http://flipper-mcp.local:8080/mcp"
}
}
}
Installa l'app complementare Flipper MCP da flipper-app/ sul Flipper Zero. Compila con ufbt e copia il .fap in SD:/apps/Tools/:
cd flipper-app && ufbt # produces flipper_mcp.fap
# Copy flipper_mcp.fap to your Flipper SD card under apps/Tools/
L'app appare in Apps → Tools → Flipper MCP e fornisce:
L'app comunica tramite file sulla scheda SD (nessun cablaggio aggiuntivo oltre all'header GPIO). Configure WiFi è la procedura guidata del primo avvio — nessun telefono, browser o script PC necessario.
Self-hosted (esegui il binario ovunque):
./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
Distribuzione cloud (AWS o GCP, con 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
Vedi RELAY.md per le istruzioni complete.
Strumenti personalizzati possono essere aggiunti tramite file di configurazione TOML o installando app FAP sulla scheda SD. Vedi OPERATIONS.md per comandi curl copia-incolla per ogni strumento.
Non hai bisogno di un abbonamento Claude per usare flipper-mcp. Open WebUI è un'interfaccia gratuita e self-hosted in stile ChatGPT che supporta nativamente MCP Streamable HTTP (v0.6.31+). Abbinala a Ollama per un controllo del Flipper guidato dall'AI completamente locale e offline.
# 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
Apri http://localhost:3000 nel tuo browser.
http://flipper-mcp.local:8080/mcp (o http://192.168.x.x:8080/mcp)https://relay.example.com/mcphttp://host.docker.internal:8080/mcp se il Flipper è sulla rete dell'host DockerSuggerimento: In Workspace → Models → (il tuo modello) → Advanced Parameters, imposta Function Calling su Default per i modelli più piccoli. Passa a Native solo per modelli con un forte supporto integrato agli strumenti (Llama 3.1 8B+, Qwen 2.5, Mistral).
Una volta connesso, prova questi nella chat di Open WebUI:
Le attività agentiche multi-step funzionano meglio con modelli più grandi (Llama 3.1 70B, Qwen 2.5 72B, o modelli cloud tramite API compatibili con OpenAI). I modelli più piccoli gestiscono in modo affidabile le chiamate a singolo strumento.
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
Vedi AGENTS.md per il contesto completo del progetto, le specifiche tecniche, l'architettura del sistema e tutto ciò che serve per continuare lo sviluppo di questo progetto.
MIT
| Fase | Connettersi a | Note |
|---|
| Flashing del firmware | USB-C della WiFi Dev Board | La scheda ha la propria porta USB, separata dal Flipper |
| Monitoraggio seriale | USB-C della WiFi Dev Board | Stessa connessione USB del flashing |
| File di configurazione sulla scheda SD | Scheda SD del Flipper Zero | Inserisci la SD nel Flipper, oppure rimuovila e montala sul PC |
| Comandi di controllo del server | Scheda SD del Flipper Zero | Crea il file server.cmd in apps_data/flipper_mcp/ |
| Comunicazione UART | Automatica | WiFi Dev Board e Flipper si collegano tramite header GPIO |
| Richieste HTTP MCP | IP della WiFi Dev Board:8080 | Connettiti tramite la tua rete WiFi |
| Schermata | Cosa fa |
|---|
| Status | Richiede un aggiornamento dello stato dall'ESP32, mostra IP, SSID, stato del server, versione |
| Start / Stop / Restart | Controlla il ciclo di vita del server HTTP MCP |
| Reboot Board | Riavvia la WiFi Dev Board ESP32 |
| Configure WiFi | Tastiera su schermo per inserire SSID + password; scrive config.txt sulla scheda SD |
| View Logs | Log diagnostico scorrevole scritto dall'ESP32 ogni 30 s |
| Tools List | Elenco scorrevole di tutti gli strumenti MCP attualmente registrati sull'ESP32 |
| Refresh Modules | Attiva la riscansione per la scoperta dei FAP + ricaricamento di modules.toml sull'ESP32 |
| Categoria | Strumenti | Descrizione |
|---|
| SubGHz | subghz_tx, subghz_rx, subghz_decode_raw, subghz_chat, subghz_tx_from_file | Operazioni su radiofrequenza |
| NFC | nfc_detect, nfc_read, nfc_emulate, nfc_field | Interazione con tag NFC |
| RFID | rfid_read, rfid_emulate, rfid_write | RFID a bassa frequenza |
| Infrarosso | ir_tx, ir_rx | Telecomando IR |
| GPIO | gpio_read, gpio_write, gpio_set_mode | Controllo I/O dei pin |
| BadUSB | badusb_run, badusb_list | Attacchi USB HID |
| iButton | ibutton_read, ibutton_emulate | Portachiavi 1-Wire |
| Archiviazione | storage_list, storage_read, storage_write, storage_remove, storage_stat | Gestione file su scheda SD |
| Sistema | system_device_info, system_power_info, system_power_reboot, system_ps, system_free, system_uptime | Gestione del dispositivo |
| 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 (trasmissione beacon + emulazione HID) |
| App | app_launch_{name} (rilevato automaticamente dalla scheda SD) | Gestione applicazioni |
| Prompt | Cosa fa |
|---|
| "Scansiona i tag NFC vicino al Flipper" | Chiama nfc_detect per leggere i tag vicini |
| "Elenca tutti i file sulla scheda SD del Flipper" | Chiama storage_list su /ext |
| "Trasmetti questo segnale SubGHz su 433,92 MHz: ..." | Chiama subghz_tx con la frequenza indicata |
| "Leggi qualsiasi carta RFID presentata al Flipper" | Chiama rfid_read e restituisce i dati del tag |
| "Quali app sono installate sul Flipper?" | Chiama app_list per enumerare i FAP installati |
| "Invia questo segnale IR per spegnere la TV" | Chiama ir_tx con il protocollo e i dati specificati |
| "Mostrami le informazioni di sistema del Flipper e la memoria libera" | Chiama system_info + system_free |
| "Leggi il tag NFC, poi salva i suoi dati in /ext/nfc/captured.nfc" | Multi-step: nfc_read → storage_write |
| "Monitora 315 MHz per 10 secondi e decodifica tutto ciò che senti" | Chiama subghz_rx con frequenza e durata |