
Flipper Zero 向けの AI 搭載 MCP サーバー。Claude または任意の MCP クライアントを使用して、WiFi 経由で SubGHz、NFC、RFID、IR、BLE、GPIO などを制御できます。
Flipper ZeroのWiFi Dev Board v1(ESP32-S2)上で直接動作するRust製MCP(Model Context Protocol)サーバー。AIエージェントがネットワーク経由でFlipper Zeroを制御できるようにします。
このプロジェクトは、MCPサーバーをFlipper本体上に配置します。MCP互換のAIクライアント(Claude Desktop、Claude Codeなど)が接続し、Flipperの機能をツールとして利用できます — SubGHz、NFC、RFID、IR、GPIO、BadUSB、iButton、ファイルストレージなど。
USB接続されたホストコンピュータを必要とする他のプロジェクトとは異なり、flipper-mcpはFlipperに接続されたESP32-S2 WiFiモジュール上で動作します。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はMCPプロトコルを実装したHTTPサーバーを実行します。MCPツール呼び出しを、115200ボーのUART経由でFlipper ZeroのCLIコマンドに変換します。コンパニオンリレーサーバーにより、任意のネットワークからのリモートアクセスが可能になります。
flipper-mcp.localとしてmDNSアドバタイズどのデバイスに接続すればよいですか?
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
Flipper SDカードのSD:/apps_data/flipper_mcp/config.txtにconfig.txtを作成します:
wifi_ssid=YourNetworkName
wifi_password=YourPassword
device_name=flipper-mcp
またはコンパニオンFAPを使ってFlipperから直接設定(ステップ5参照):
Apps → Tools → Flipper MCP → Configure WiFi
設定ファイルなしで初回起動すると、ESP32は待機し、ステータスファイルにstatus=needs_configを書き込みます。Flipper FAPはこれをステータス画面に表示します。
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
Flipper MCP → StatusメニューからFlipperのIPを取得し、テストします:
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送信(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 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}}}'
192.168.0.58をFlipperの実際のIPアドレスに置き換えてください。
次に、Claude Desktopの設定(claude_desktop_config.json)に追加します:
{
"mcpServers": {
"flipper": {
"url": "http://flipper-mcp.local:8080/mcp"
}
}
}
flipper-app/からコンパニオンFlipper MCPアプリを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は初回起動ウィザードです — スマホ、ブラウザ、PCスクリプトは不要です。
セルフホスト(バイナリをどこでも実行):
./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設定ファイル経由、またはSDカードにFAPアプリをインストールすることで追加できます。すべてのツールのコピー&ペースト可能なcurlコマンドについてはOPERATIONS.mdを参照してください。
flipper-mcpを使うのにClaudeのサブスクリプションは必要ありません。Open WebUIは、MCP Streamable HTTP(v0.6.31+)をネイティブサポートする無料のセルフホスト型ChatGPT風インターフェースです。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を使用ヒント: Workspace → Models → (your model) → Advanced Parametersで、小さいモデルの場合はFunction CallingをDefaultに設定します。組み込みのツールサポートが強力なモデル(Llama 3.1 8B+、Qwen 2.5、Mistral)のみNativeに切り替えてください。
接続したら、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
| 段階 | 接続先 | 備考 |
|---|
| ファームウェアの書き込み | WiFi Dev Board USB-C | ボードにはFlipperとは別の独自のUSBポートがあります |
| シリアルモニタリング | WiFi Dev Board USB-C | 書き込みと同じUSB接続 |
| SDカード設定ファイル | Flipper Zero SDカード | SDをFlipperに挿入するか、取り外してPCにマウント |
| サーバー制御コマンド | Flipper Zero SDカード | apps_data/flipper_mcp/にserver.cmdファイルを作成 |
| UART通信 | 自動 | WiFi Dev BoardとFlipperはGPIOヘッダー経由で接続 |
| MCP HTTPリクエスト | WiFi Dev Board IP:8080 | WiFiネットワーク経由で接続 |
| 画面 | 機能 |
|---|
| Status | ESP32に最新のステータス更新を要求し、IP、SSID、サーバー状態、バージョンを表示 |
| Start / Stop / Restart | MCP HTTPサーバーのライフサイクルを制御 |
| Reboot Board | ESP32 WiFi Dev Boardを再起動 |
| Configure WiFi | SSID + パスワードを入力するオンスクリーンキーボード。config.txtをSDカードに書き込み |
| View Logs | ESP32が30秒ごとに書き込むスクロール可能な診断ログ |
| Tools List | ESP32に現在登録されているすべてのMCPツールのスクロール可能なリスト |
| Refresh Modules | ESP32でFAP検出の再スキャン + modules.tomlの再読み込みをトリガー |
| カテゴリ | ツール | 説明 |
|---|
| 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 | IRリモートコントロール |
| GPIO | gpio_read, gpio_write, gpio_set_mode | ピンI/O制御 |
| 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" | /extに対してstorage_listを呼び出す |
| "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を呼び出す |