flipper-ble-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| playbookA | The operating manual for driving this Flipper efficiently over BLE. CALL THIS FIRST in a fresh session before navigating the device: returns the data-first control algorithm, verified menu maps (main menu, Momentum settings, region-bypass path), app-entry recipes, input/widget conventions, and key device behaviors. Read-only, no device action. |
| scanA | Diagnostic: is the Flipper advertising over BLE right now? If not, it's most likely connected to your phone (only one BLE central at a time) or asleep. No device action. |
| device_infoA | Read the Flipper's device_info (60+ fields: firmware, hardware revision, radio stack, battery, etc.) WIRELESSLY over BLE, as a {field: value} map. Read-only. |
| screenshotA | 📷 Capture the Flipper's 128x64 screen as a PNG over BLE — the agent's eyes, wireless. Read-only/observational (safe to auto-allow). |
| pressA | Inject a UI button over BLE to drive the Flipper wirelessly. button: up|down|left|right|ok|back. kind: short|long|press|release (default short). then_screenshot (default True): capture the resulting screen in the SAME BLE connection so you SEE what changed. Real action — Claude Desktop prompts per call (the gate). |
| press_sequenceA | Inject a SEQUENCE of buttons in ONE BLE connection — efficient multi-step navigation (one connect instead of one per press). buttons: space-separated btn[:kind], e.g. 'down down ok' or 'right right ok:long'. then_screenshot (default True): capture the final screen in the same connection. Real actions — approve per call. |
| storage_listA | List a directory on the Flipper's SD/internal storage over BLE (storage_list_request). path: e.g. '/ext' (SD root), '/ext/subghz', '/ext/nfc', '/ext/infrared', '/int'. Dirs are tagged [DIR], files show their byte size. Read-only. |
| storage_readA | Read a file from the Flipper's storage over BLE (storage_read_request). Returns decoded text
for text files (.sub / .nfc / .ir / configs, capped ~8 KB), or a binary summary + local path
otherwise. path: e.g. '/ext/subghz/Tesla/foo.sub'. ⚠️ BLE times out on LARGE files (firmware
#3174) — for big ones use the USB |
| storage_infoA | Free/total space on a Flipper filesystem over BLE (storage_info_request). path: '/ext' (SD) or '/int' (internal). Read-only. |
| storage_statA | Stat a file/dir on the Flipper over BLE (storage_stat_request) — type (FILE/DIR) + size. Read-only. |
| storage_md5A | MD5 hash of a file on the Flipper over BLE (storage_md5sum_request) — integrity check. Read-only. |
| power_infoA | Detailed battery/power info over BLE (system_power_info) as a {field: value} map: voltage, current, charge %, temperature, charging state. Read-only. |
| pingA | Ping the Flipper over BLE (system_ping) — liveness + round-trip echo check. Read-only. |
| get_datetimeA | Read the Flipper's real-time clock over BLE (system_get_datetime). Read-only. |
| desktop_is_lockedB | Is the Flipper's desktop PIN-locked? over BLE (desktop_is_locked). Read-only. |
| app_lock_statusA | Is an app currently running/locking the Flipper? over BLE (app_lock_status) — a good pre-check before app_launch. Read-only. |
| app_exitA | Cleanly EXIT the app currently running on the Flipper over BLE (app_exit_request) — back to the desktop/menu. Use before app_launch if an app is already running. Real action — approve per call. |
| app_load_fileA | Open a specific saved file in its app over BLE (app_load_file_request) — e.g. load a .sub into Sub-GHz. ⚠️ The matching app must already be running (app_launch it first). Real action. |
| app_buttonA | Press a NAMED in-app button over BLE (app_button_press + release). App-specific: in the universal IR / Sub-GHz / etc. apps this triggers actions (including transmit). args = the button name/index the running app expects. ⚠️ Advanced + app-specific; YOUR OWN TARGETS ONLY. Real action. |
| set_datetimeA | Set the Flipper's clock over BLE (system_set_datetime). when='now' syncs to this Mac's time, or pass 'YYYY-MM-DD HH:MM:SS'. Real action. |
| find_my_flipperA | Make the Flipper beep + flash to locate it over BLE (system_play_audiovisual_alert) — the one 'output' reachable over BLE RPC (LED/vibro proper are CLI-only). Real action (noise + light). |
| storage_mkdirC | Create a directory on the Flipper over BLE (storage_mkdir_request). Real action. |
| storage_deleteA | ⚠️ DELETE a file/dir on the Flipper over BLE (storage_delete_request). recursive=True for a non-empty dir. Real action — irreversible. |
| storage_renameC | Rename/move a file or dir on the Flipper over BLE (storage_rename_request). Real action. |
| storage_writeA | ⚠️ WRITE/UPLOAD a file to the Flipper over BLE (chunked storage_write_request). Provide EITHER content (text, written as UTF-8) OR local_path (a file on this Mac to upload). dest = full Flipper path, e.g. '/ext/subghz/foo.sub'. Overwrites. ⚠️ BLE is slow for large files — use USB for big ones. Real action. |
| app_launchA | Launch a Flipper app BY NAME over BLE (app_start_request) — skips UI navigation. name: exact app name, e.g. 'NFC', 'Sub-GHz', '125 kHz RFID', 'Infrared', 'GPIO', 'U2F', 'iButton', 'Bad USB' (get exact names from the USB read server's app_list). args (optional): a launch argument — typically a FILE PATH to open directly (a .sub/.nfc/.ir); many apps jump straight to that file. then_screenshot (default True): capture the first screen. FAILS if an app is already running (app_exit first) or the name is unknown. Real action. |
| transmit_subghzA | ⚠️ TRANSMIT a saved Sub-GHz capture over BLE — the app-driven TX path (there is NO direct Sub-GHz TX RPC). Launches the Sub-GHz app with the file as its launch arg, which drives straight into the transmit flow. path: e.g. '/ext/subghz/Tesla/Tesla_US_AM650.sub'. The firmware's region check applies — a 'Transmission is blocked / missing region file' screen = the device's region lock (fix in Momentum settings, not here). ⚠️ Real RF — YOUR OWN TARGETS, LEGAL BANDS ONLY. Approve per call. |
| transmit_infraredA | ⚠️ Open a saved Infrared remote over BLE — the app-driven IR path. Launches the Infrared app
with the .ir file as its launch arg, showing the remote's BUTTON LIST. path: e.g.
'/ext/infrared/TV.ir'. IR is one-command-per-button, so this opens the remote; then use |
| app_get_errorA | Read the running app's last error as a HUMAN-READABLE string over BLE (app_get_error). Call this when an app_launch / app_button / transmit returns a bare status code, to get the app's own error text. Read-only. |
| desktop_unlockA | Clear the Flipper's desktop lock over BLE (desktop_unlock_request). Note: likely clears the swipe-lock only, not a numeric PIN. Real action. |
| rebootA | ⚠️ Reboot the Flipper over BLE (system_reboot). mode: OS (normal, default) | DFU (bootloader) | UPDATE. Use OS as a recovery action when the device is wedged; the BLE link drops as it restarts. Real action — do NOT use DFU/UPDATE unless you mean it. |
| gpio_readA | Read a GPIO pin over BLE (gpio_read_pin). pin: PC0|PC1|PC3|PB2|PB3|PA4|PA6|PA7. Read-only. (Corrects the earlier 'GPIO is CLI-only' note — GPIO IS in the RPC schema.) |
| gpio_writeA | Set a GPIO OUTPUT pin over BLE (gpio_write_pin). pin: PC0|PC1|PC3|PB2|PB3|PA4|PA6|PA7; value 0/1. Set the pin to OUTPUT first via gpio_set_mode. Real action. |
| gpio_set_modeA | Set a GPIO pin mode over BLE (gpio_set_pin_mode). pin: PC0|PC1|PC3|PB2|PB3|PA4|PA6|PA7; mode: output|input. Real action. |
| run_badusbA | ⚠️ Run a BadUSB (DuckyScript) payload over BLE: if |
| selftestA | Daemon self-test / diagnostics: is the daemon up, is the BLE link connected, cached-device status, ping round-trip time, idle timer. Does NOT force a connect (reports current state). Read-only — call this to debug 'is the wireless toolkit healthy?'. |
| read_latestA | Read the MOST-RECENTLY-SAVED file in a Flipper folder over BLE (newest by timestamp) — e.g. pull the NFC card / Sub-GHz capture / RFID dump you just saved on the device. folder: e.g. '/ext/nfc', '/ext/subghz', '/ext/lfrfid', '/ext/infrared'. Returns decoded text or a binary summary. Read-only. |
| healthwatchA | Manage the M5 unattended HEALTH-WATCH — a scheduled, READ-ONLY job that polls the Flipper (battery / storage / clock / firmware / reachability) and fires a macOS notification on anomalies (low/aging/hot battery, full SD, clock drift, firmware change). DEFAULT-OFF; this tool is the on/off switch. When enabled it runs 3×/day (09:00 / 15:00 / 21:00 local) via a launchd LaunchAgent. action: 'status' (default) — enabled? + the last snapshot summary (read-only, no device poll). 'on' — enable the 3×/day schedule (load the LaunchAgent). 'off' — disable it (back to default-off). 'run' — run ONE read-only health check right now and return the summary. The job is structurally incapable of transmit/write (hardcoded read-only command allowlist). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pogorelov-labs/flipper-ble-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server