
Servidor MCP com IA para Flipper Zero. Controle SubGHz, NFC, RFID, IR, BLE, GPIO e muito mais via WiFi usando Claude ou qualquer cliente MCP.
Um servidor MCP (Model Context Protocol) em Rust que roda diretamente na WiFi Dev Board v1 (ESP32-S2) do Flipper Zero, permitindo que agentes de IA controlem um Flipper Zero pela rede.
Este projeto coloca um servidor MCP no próprio Flipper. Qualquer cliente de IA compatível com MCP (Claude Desktop, Claude Code, etc.) pode se conectar e usar as capacidades do Flipper como ferramentas — SubGHz, NFC, RFID, IR, GPIO, BadUSB, iButton, armazenamento de arquivos e muito mais.
Diferente de outros projetos que exigem um computador host conectado por USB, o flipper-mcp roda no módulo WiFi ESP32-S2 acoplado ao Flipper. O Flipper se torna uma ferramenta autônoma e acessível pela rede.
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
O ESP32-S2 executa um servidor HTTP que implementa o protocolo MCP. Ele traduz chamadas de ferramentas MCP em comandos CLI do Flipper Zero via UART a 115200 baud. Um servidor relay complementar possibilita acesso remoto a partir de qualquer rede.
flipper-mcp.localA qual dispositivo eu me conecto?
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
Instruções completas de configuração em 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
Crie config.txt no cartão SD do Flipper em SD:/apps_data/flipper_mcp/config.txt:
wifi_ssid=YourNetworkName
wifi_password=YourPassword
device_name=flipper-mcp
Ou configure diretamente pelo Flipper usando o FAP complementar (veja o Passo 5):
Apps → Tools → Flipper MCP → Configure WiFi
No primeiro boot sem um arquivo de configuração, o ESP32 aguarda e grava status=needs_config no arquivo de status. O FAP do Flipper exibirá isso na tela Status.
Antes de configurar um cliente de IA, confirme que o servidor está acessível com 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
Obtenha o IP do Flipper no menu Flipper MCP → Status, depois teste:
Transmissão de beacon BLE (transmitir anúncio BLE falsificado):
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"}}}'
Teclado HID BLE (emular um teclado sem fio e digitar):
# 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":{}}}'
Transmissão IR (enviar códigos de controle remoto 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}}}'
Recepção SubGHz (escutar sinais sem fio em 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}}}'
Substitua 192.168.0.58 pelo endereço IP real do seu Flipper.
Depois adicione à sua configuração do Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"flipper": {
"url": "http://flipper-mcp.local:8080/mcp"
}
}
}
Instale o app complementar Flipper MCP de flipper-app/ no Flipper Zero. Compile com ufbt e copie o .fap para SD:/apps/Tools/:
cd flipper-app && ufbt # produces flipper_mcp.fap
# Copy flipper_mcp.fap to your Flipper SD card under apps/Tools/
O app aparece em Apps → Tools → Flipper MCP e oferece:
O app se comunica via arquivos no cartão SD (sem fiação extra além do conector GPIO). Configure WiFi é o assistente de primeiro boot — sem necessidade de celular, navegador ou scripts no PC.
Auto-hospedado (execute o binário em qualquer lugar):
./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
Implantação em nuvem (AWS ou GCP, com 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
Veja RELAY.md para instruções completas.
Ferramentas personalizadas podem ser adicionadas via arquivos de configuração TOML ou instalando apps FAP no cartão SD. Veja OPERATIONS.md para comandos curl prontos para copiar e colar de cada ferramenta.
Você não precisa de uma assinatura do Claude para usar o flipper-mcp. O Open WebUI é uma interface gratuita e auto-hospedada no estilo ChatGPT que suporta nativamente MCP Streamable HTTP (v0.6.31+). Combine-o com o Ollama para controle do Flipper por IA totalmente local 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
Abra http://localhost:3000 no seu navegador.
http://flipper-mcp.local:8080/mcp (ou http://192.168.x.x:8080/mcp)https://relay.example.com/mcphttp://host.docker.internal:8080/mcp se o Flipper estiver na rede do host DockerDica: Em Workspace → Models → (seu modelo) → Advanced Parameters, defina Function Calling como Default para modelos menores. Só mude para Native em modelos com forte suporte integrado a ferramentas (Llama 3.1 8B+, Qwen 2.5, Mistral).
Depois de conectado, experimente estes no chat do Open WebUI:
Tarefas agênticas de múltiplas etapas funcionam melhor com modelos maiores (Llama 3.1 70B, Qwen 2.5 72B, ou modelos em nuvem via APIs compatíveis com OpenAI). Modelos menores lidam de forma confiável com chamadas de uma única ferramenta.
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
Veja AGENTS.md para contexto completo do projeto, especificações técnicas, arquitetura do sistema e tudo o que é necessário para continuar o desenvolvimento deste projeto.
MIT
| Etapa | Conecte-se a | Observações |
|---|
| Gravação do firmware | USB-C da WiFi Dev Board | A placa tem sua própria porta USB, separada do Flipper |
| Monitoramento serial | USB-C da WiFi Dev Board | Mesma conexão USB usada para gravação |
| Arquivos de configuração no cartão SD | Cartão SD do Flipper Zero | Insira o SD no Flipper, ou remova e monte no PC |
| Comandos de controle do servidor | Cartão SD do Flipper Zero | Crie o arquivo server.cmd em apps_data/flipper_mcp/ |
| Comunicação UART | Automática | WiFi Dev Board e Flipper se conectam pelo conector GPIO |
| Requisições HTTP MCP | WiFi Dev Board IP:8080 | Conecte-se pela sua rede WiFi |
| Tela | O que faz |
|---|
| Status | Solicita uma atualização de status do ESP32, mostra IP, SSID, estado do servidor, versão |
| Start / Stop / Restart | Controla o ciclo de vida do servidor HTTP MCP |
| Reboot Board | Reinicia a WiFi Dev Board ESP32 |
| Configure WiFi | Teclado na tela para inserir SSID + senha; grava config.txt no cartão SD |
| View Logs | Log de diagnóstico rolável gravado pelo ESP32 a cada 30 s |
| Tools List | Lista rolável de todas as ferramentas MCP atualmente registradas no ESP32 |
| Refresh Modules | Dispara nova varredura de descoberta de FAPs + recarga de modules.toml no ESP32 |
| Categoria | Ferramentas | Descrição |
|---|
| SubGHz | subghz_tx, subghz_rx, subghz_decode_raw, subghz_chat, subghz_tx_from_file | Operações de radiofrequência |
| NFC | nfc_detect, nfc_read, nfc_emulate, nfc_field | Interação com tags NFC |
| RFID | rfid_read, rfid_emulate, rfid_write | RFID de baixa frequência |
| Infravermelho | ir_tx, ir_rx | Controle remoto IR |
| GPIO | gpio_read, gpio_write, gpio_set_mode | Controle de I/O de pinos |
| BadUSB | badusb_run, badusb_list | Ataques USB HID |
| iButton | ibutton_read, ibutton_emulate | Chaveiros 1-Wire |
| Armazenamento | storage_list, storage_read, storage_write, storage_remove, storage_stat | Gerenciamento de arquivos no cartão SD |
| Sistema | system_device_info, system_power_info, system_power_reboot, system_ps, system_free, system_uptime | Gerenciamento do 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 (transmissão de beacon + emulação HID) |
| Apps | app_launch_{name} (descoberto automaticamente do cartão SD) | Gerenciamento de aplicativos |
| Prompt | O que faz |
|---|
| "Scan for NFC tags near the Flipper" | Chama nfc_detect para ler tags próximas |
| "List all files on the Flipper's SD card" | Chama storage_list em /ext |
| "Transmit this SubGHz signal on 433.92 MHz: ..." | Chama subghz_tx com a frequência informada |
| "Read any RFID card that's presented to the Flipper" | Chama rfid_read e retorna os dados da tag |
| "What apps are installed on the Flipper?" | Chama app_list para enumerar os FAPs instalados |
| "Send this IR signal to turn off the TV" | Chama ir_tx com o protocolo e os dados especificados |
| "Show me the Flipper's system info and free memory" | Chama system_info + system_free |
| "Read the NFC tag, then save its data to /ext/nfc/captured.nfc" | Multi-etapas: nfc_read → storage_write |
| "Monitor 315 MHz for 10 seconds and decode anything you hear" | Chama subghz_rx com frequência e duração |