Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 flipper server's storage_read. Read-only.

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 press (+ screenshot) to select a button and fire it. ⚠️ Real IR — your own devices. Approve per call.

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 content is given it's uploaded to path (storage_write) first, then the Bad USB app is launched on that file and started (press OK). path e.g. '/ext/badusb/demo.txt'. ⚠️ This injects keystrokes into whatever the Flipper is USB-plugged into — YOUR OWN machine / authorized targets ONLY. Returns the run screen. Real action — approve per call.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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