
MCP-сервер с поддержкой ИИ для Flipper Zero. Управляйте SubGHz, NFC, RFID, IR, BLE, GPIO и многим другим по WiFi с помощью Claude или любого MCP-клиента.
Rust-сервер MCP (Model Context Protocol), работающий непосредственно на WiFi Dev Board v1 (ESP32-S2) устройства Flipper Zero, позволяющий AI-агентам управлять Flipper Zero по сети.
Этот проект размещает MCP-сервер на самом Flipper. Любой MCP-совместимый AI-клиент (Claude Desktop, Claude Code и т. д.) может подключиться и использовать возможности Flipper как инструменты — SubGHz, NFC, RFID, IR, GPIO, BadUSB, iButton, файловое хранилище и многое другое.
В отличие от других проектов, требующих подключённого по USB хост-компьютера, flipper-mcp работает на модуле ESP32-S2 WiFi, прикреплённом к Flipper. Flipper становится автономным инструментом, доступным по сети.
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
ESP32-S2 запускает HTTP-сервер, реализующий протокол MCP. Он преобразует вызовы инструментов MCP в команды CLI Flipper Zero через UART на скорости 115200 бод. Сопутствующий relay-сервер обеспечивает удалённый доступ из любой сети.
flipper-mcp.localК какому устройству подключаться?
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
Полные инструкции по настройке в 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
Создайте config.txt на SD-карте Flipper по пути SD:/apps_data/flipper_mcp/config.txt:
wifi_ssid=YourNetworkName
wifi_password=YourPassword
device_name=flipper-mcp
Или настройте прямо с Flipper с помощью сопутствующего FAP (см. Шаг 5):
Apps → Tools → Flipper MCP → Configure WiFi
При первой загрузке без конфигурационного файла ESP32 ожидает и записывает status=needs_config в файл статуса. FAP на Flipper отобразит это на экране Status.
Перед настройкой AI-клиента убедитесь, что сервер доступен, с помощью 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
Получите IP-адрес Flipper из меню Flipper MCP → Status, затем протестируйте:
Широковещательная передача BLE-маяка (передача поддельного BLE-объявления):
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-клавиатура (эмуляция беспроводной клавиатуры и ввод текста):
# 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 (отправка кодов инфракрасного пульта):
# 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 (прослушивание беспроводных сигналов на частоте 433.92 МГц):
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}}}'
Замените 192.168.0.58 на фактический IP-адрес вашего Flipper.
Затем добавьте в конфигурацию Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"flipper": {
"url": "http://flipper-mcp.local:8080/mcp"
}
}
}
Установите сопутствующее приложение Flipper MCP из flipper-app/ на Flipper Zero. Соберите с помощью ufbt и скопируйте .fap в SD:/apps/Tools/:
cd flipper-app && ufbt # produces flipper_mcp.fap
# Copy flipper_mcp.fap to your Flipper SD card under apps/Tools/
Приложение появляется в Apps → Tools → Flipper MCP и предоставляет:
Приложение взаимодействует через файлы на SD-карте (без дополнительной проводки помимо GPIO-разъёма). Configure WiFi — это мастер первой загрузки — без телефона, браузера или скриптов на ПК.
Самостоятельный хостинг (запустите бинарник где угодно):
./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
Облачное развёртывание (AWS или GCP, с 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
Полные инструкции см. в RELAY.md.
Пользовательские инструменты можно добавить через конфигурационные файлы TOML или установив FAP-приложения на SD-карту. См. OPERATIONS.md для готовых к копированию команд curl для каждого инструмента.
Вам не нужна подписка Claude для использования flipper-mcp. Open WebUI — это бесплатный, самостоятельно размещаемый интерфейс в стиле ChatGPT, который изначально поддерживает MCP Streamable HTTP (v0.6.31+). В сочетании с Ollama он обеспечивает полностью локальное, офлайн AI-управление Flipper.
# 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
Откройте http://localhost:3000 в браузере.
http://flipper-mcp.local:8080/mcp (или http://192.168.x.x:8080/mcp)https://relay.example.com/mcphttp://host.docker.internal:8080/mcp, если Flipper находится в сети хоста DockerСовет: В разделе Workspace → Models → (ваша модель) → Advanced Parameters установите Function Calling в Default для меньших моделей. Переключайтесь на Native только для моделей с сильной встроенной поддержкой инструментов (Llama 3.1 8B+, Qwen 2.5, Mistral).
После подключения попробуйте следующие запросы в чате Open WebUI:
Многошаговые агентные задачи лучше всего работают с большими моделями (Llama 3.1 70B, Qwen 2.5 72B или облачными моделями через OpenAI-совместимые API). Меньшие модели надёжно справляются с вызовами одного инструмента.
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
См. AGENTS.md для полного контекста проекта, технических спецификаций, архитектуры системы и всего необходимого для продолжения разработки этого проекта.
MIT
| Этап | Подключение к | Примечания |
|---|
| Прошивка firmware | WiFi Dev Board USB-C | У платы собственный USB-порт, отдельный от Flipper |
| Мониторинг последовательного порта | WiFi Dev Board USB-C | То же USB-подключение, что и для прошивки |
| Конфигурационные файлы на SD-карте | Flipper Zero SD card | Вставьте SD в Flipper или извлеките и подключите к ПК |
| Команды управления сервером | Flipper Zero SD card | Создайте файл server.cmd в apps_data/flipper_mcp/ |
| UART-связь | Автоматически | WiFi Dev Board и Flipper соединяются через GPIO-разъём |
| HTTP-запросы MCP | WiFi Dev Board IP:8080 | Подключение через вашу WiFi-сеть |
| Экран | Что делает |
|---|
| Status | Запрашивает свежее обновление статуса от ESP32, показывает IP, SSID, состояние сервера, версию |
| Start / Stop / Restart | Управляет жизненным циклом HTTP-сервера MCP |
| Reboot Board | Перезагружает WiFi Dev Board ESP32 |
| Configure WiFi | Экранная клавиатура для ввода SSID + пароля; записывает config.txt на SD-карту |
| View Logs | Прокручиваемый диагностический журнал, записываемый ESP32 каждые 30 с |
| Tools List | Прокручиваемый список всех инструментов MCP, зарегистрированных в данный момент на ESP32 |
| Refresh Modules | Запускает повторное сканирование обнаружения FAP + перезагрузку modules.toml на ESP32 |
| Категория | Инструменты | Описание |
|---|
| SubGHz | subghz_tx, subghz_rx, subghz_decode_raw, subghz_chat, subghz_tx_from_file | Операции с радиочастотой |
| NFC | nfc_detect, nfc_read, nfc_emulate, nfc_field | Взаимодействие с NFC-метками |
| RFID | rfid_read, rfid_emulate, rfid_write | Низкочастотный RFID |
| Infrared | ir_tx, ir_rx | Инфракрасное дистанционное управление |
| GPIO | gpio_read, gpio_write, gpio_set_mode | Управление вводом/выводом контактов |
| BadUSB | badusb_run, badusb_list | USB HID-атаки |
| iButton | ibutton_read, ibutton_emulate | Ключи 1-Wire |
| Storage | storage_list, storage_read, storage_write, storage_remove, storage_stat | Управление файлами на SD-карте |
| System | system_device_info, system_power_info, system_power_reboot, system_ps, system_free, system_uptime | Управление устройством |
| 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 (широковещательная передача маяка + эмуляция HID) |
| Apps | app_launch_{name} (автообнаружение с SD-карты) | Управление приложениями |
| Запрос | Что делает |
|---|
| "Scan for NFC tags near the Flipper" | Вызывает nfc_detect для чтения ближайших меток |
| "List all files on the Flipper's SD card" | Вызывает storage_list для /ext |
| "Transmit this SubGHz signal on 433.92 MHz: ..." | Вызывает subghz_tx с заданной частотой |
| "Read any RFID card that's presented to the Flipper" | Вызывает rfid_read и возвращает данные метки |
| "What apps are installed on the Flipper?" | Вызывает app_list для перечисления установленных FAP |
| "Send this IR signal to turn off the TV" | Вызывает ir_tx с указанным протоколом и данными |
| "Show me the Flipper's system info and free memory" | Вызывает system_info + system_free |
| "Read the NFC tag, then save its data to /ext/nfc/captured.nfc" | Многошаговый: nfc_read → storage_write |
| "Monitor 315 MHz for 10 seconds and decode anything you hear" | Вызывает subghz_rx с частотой и длительностью |