BusyBar MCP
Provides GitHub integration for checking a repository's latest CI run and surfacing PRs and issues needing attention, such as PRs to review, your PRs, and your issues.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BusyBar MCPput 'In a meeting' on my Bar"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
busybar-mcp
Unofficial community project, not affiliated with Flipper Devices / BUSY.
Let Claude and Codex draw and play sounds on your BUSY Bar: text, pixel art, pictures, animations, melodies, GitHub status and the weather.
Just ask: "put 'In a meeting' on the Bar", "draw a cat on the back screen", "play a fanfare".
Display orchestration
BusyBar MCP connects directly to the Bar over USB by default. Drawing, sound, and device diagnostics work with the direct connection.
For shared display orchestration, point BusyBar MCP at busybar-wm.
AI client → BusyBar MCP → busybar-wm → BUSY BarWhen connected through the WM, display commands use its proxy. The WM
arbitrates display ownership and keeps each app's latest frame. Temporary messages and countdowns are drawn as a layer
over the app selected by the WM, so app ownership and input routing continue
underneath. When the overlay expires, the WM removes it and reveals the current
app's frame. Use bar_clear to dismiss it sooner. Each display can hold one
overlay at a time, and a new overlay on that display replaces the previous one.
Read-only diagnostics report hardware, battery, firmware, available updates, Wi-Fi, Bluetooth Low Energy, and the Bar's USB or Wi-Fi transport. Through the WM, these requests are forwarded to the device without claiming the display. The diagnostic tools report which readings the device could provide.
Related MCP server: streamdeck-mcp
Install
Claude Code: type this in Claude Code.
/plugin install busybar --marketplace viirtualp1/busybar-mcpClaude Desktop: download busybar.mcpb,
double-click it, press Install.
Codex:
npx busybar-mcp install --yesConnect directly
Plug the Bar in over USB and leave the address blank to use 10.0.4.20.
On Wi-Fi, tell your assistant the Bar's address, for example "my Bar is at
192.168.1.50". You can also use the BUSY cloud endpoint with a token.
To use both USB and LAN, leave the main address at the USB default and enter
the LAN fallback address for the same Bar. The MCP checks USB before each
operation and uses LAN when it can't reach USB. It checks USB again on the
next operation, so reconnecting the cable restores USB preference. In Codex,
run npx busybar-mcp install --yes --addr 10.0.4.20 --lan-addr 192.168.1.50.
Optional busybar-wm setup
Start busybar-wm 2.1.0 or later.
Configure the device address and credentials in
the WM, then set the MCP's BUSY_ADDR to the WM's HTTP address, normally
http://127.0.0.1:4111. With the Codex installer, pass --addr <WM URL>.
If the WM has a WM_API_TOKEN, enter the same token in the MCP client settings
or pass --wm-token <token> to the installer. The WM requires a token for
control requests from another machine.
On macOS, allow the app under System Settings → Privacy & Security → Local Network, or it won't reach the Bar.
Updating
When a new version is out, Claude or Codex tells you in the next conversation, with what to run:
Claude Code:
/plugin update busybarClaude Desktop: download the new
busybar.mcpband double-click itCodex:
npx busybar-mcp@latest update
What changed is in the changelog. To hear about releases on GitHub: Watch → Custom → Releases.
What it can do
Tool | |
| WM connection and active app, plus hardware, power, uptime, and firmware update status |
| Wi-Fi details, BLE status and address, and USB or Wi-Fi transport |
| WM · list manifest apps and see which have a frame ready |
| WM · pin a ready app by name |
| WM · show a temporary message for 1–300 seconds |
| WM · show a countdown for 1–86,400 seconds |
| WM · release the app pin and resume automatic scheduling |
| WM · route an OK or START tap, or an encoder step, to a subscribed WM app |
| one or two lines of text |
| pixel art |
| a progress bar |
| a picture from a file, a URL or the Bar's stock |
| a built-in animation |
| a built-in sound, an audio file, or a melody |
| list built-in images, animations and sounds |
| see what the screen shows |
| dismiss what the MCP drew and release its claim on the display |
| save the WM or Bar address and check reachability |
| read device status and check reachability |
| latest CI run of a repo |
| PRs to review, your PRs, your issues |
| weather for a city |
Works on both screens: the front colour strip and the back greyscale panel.
Notifications are per request. Ask your assistant to put a message on the Bar when a task finishes, or ask for a chime. Updating removes the previous BUSY Bar notification hooks and restores any earlier Codex notifier.
Settings
Set in the plugin's settings (Claude Code), the extension's (Claude Desktop), or by bar_connect and
npx busybar-mcp install in ~/.busybar-mcp/config.json. Environment variables override them.
Key | |
| Bar address (default |
| optional Wi-Fi or LAN address of the same Bar, used only when the main address is USB |
| control token, if configured on the WM |
| if the Bar's HTTP access is locked |
| cloud token, with |
| otherwise |
Development
npm install
npm run build # build/server.mjs, build/busybar.mcpb, plugin/
npm test # stdio tool tests against mocked HTTP responses
BUSYBAR_DRY_RUN=1 npm run smoke # preview smoke checks
npm run live # media tools on a real Bar
npm run live -- --wm # diagnostics, temporary message and timer on a real BarTo release: bump version, add a ## X.Y.Z section to CHANGELOG.md, npm run build, commit, tag vX.Y.Z and push.
CI publishes to npm and makes a GitHub release with busybar.mcpb and that changelog section.
License
Available Tools
22 toolsbar_animationPlay an animationA
Play one of the Bar's stock animations (names from bar_stock, e.g. coding_72x16.anim, on_air_72x16.anim, meeting_72x16.anim). The size is in the name; 72x16 ones fill the front screen. Loops by default. Custom animations are not supported (closed format).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| loop | No | ||
| name | Yes | ||
| urgent | No | Request higher draw priority. Use only when asked to interrupt. | |
| caption | No | ||
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| caption_color | No | Hex colour, #RRGGBB |
bar_clearClearB
Dismiss temporary overlays and drawings from the MCP. Both screens unless display is given.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No |
bar_connectConnect to a BarC
Save a direct USB, Wi-Fi or cloud address, or a busybar-wm address. For USB, optionally set a LAN fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| addr | Yes | ||
| token | No | Cloud token from cloud.busy.app/api-tokens | |
| lan_addr | No | Optional LAN fallback for USB. Pass an empty string to remove it. | |
| password | No | HTTP access password, if the Bar has one |
bar_imageShow a pictureA
Show a picture: a local file path or an http(s) URL (PNG; on macOS also JPEG, GIF, HEIC, WebP), or a stock image from bar_stock. It is scaled to fit max_width x max_height (the whole screen by default), uploaded, and dithered to 16 greys on the back. Pixel art in small files stays sharp when scaled up.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| stock | No | Stock image name from bar_stock, e.g. dt_apple_red.image | |
| source | No | Path or URL of the picture | |
| urgent | No | Request higher draw priority. Use only when asked to interrupt. | |
| caption | No | ||
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| max_width | No | ||
| max_height | No | ||
| caption_color | No | Hex colour, #RRGGBB |
bar_pixelsDraw pixel artA
grid is rows of single-character symbols, top to bottom; every symbol must be in palette (symbol → #RRGGBB, or "none" for transparent). Max 32 colours. Fits 72x16 on the front, 160x80 on the back (shown in grey there). Optionally add a caption to the right of the art. Look at the returned image and iterate if it looks wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| grid | Yes | ||
| urgent | No | Request higher draw priority. Use only when asked to interrupt. | |
| caption | No | ||
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| palette | Yes | ||
| caption_color | No | Hex colour, #RRGGBB |
bar_progressShow progressC
Show a labelled progress bar (0..1).
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Hex colour, #RRGGBB | |
| label | Yes | ||
| value | Yes | ||
| urgent | No | Request higher draw priority. Use only when asked to interrupt. | |
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
bar_screenshotScreenshotB
Grab what a BUSY Bar screen shows right now, as an image.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
bar_soundPlay a soundA
Play exactly one of: a stock sound (bar_stock), an audio file path or URL (WAV; MP3/M4A/AIFF too on macOS or with ffmpeg), or a melody you write. Melody: space-separated NOTE:ms tokens, e.g. "C5:150 E5:150 G5:150 C6:400", R for a rest, chords with + ("C4+E4+G4:500"). Up to 15s.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Path or URL of an audio file | |
| wave | No | Timbre for melody: square is chiptune, sine is soft | square |
| stock | No | ||
| melody | No |
bar_statusBar statusB
Which Bar the server talks to, and its system status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
bar_stockList stock mediaB
Images, animations and sounds built into the Bar, for bar_image, bar_animation and bar_sound.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No |
bar_textShow textA
Show a short status on the BUSY Bar, ASCII only. Front: 72x16, ~17 characters per line. Back: 160x80, ~37 characters per line. One or two lines; a long first line scrolls. Returns an image of the result.
| Name | Required | Description | Default |
|---|---|---|---|
| logo | No | Show the Claude or Codex logo at the left, e.g. for "Claude is working on…" | |
| color | No | Hex colour, #RRGGBB | |
| line1 | Yes | ||
| line2 | No | ||
| accent | No | Draws a 3px coloured band on the left | |
| urgent | No | Request higher draw priority. Use only when asked to interrupt. | |
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| led_color | No | Blink the status LED in this colour | |
| line2_color | No | Hex colour, #RRGGBB |
busybar_get_connectivityARead-only
Read Wi-Fi, Bluetooth Low Energy, and USB or Wi-Fi transport status from the Bar.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
busybar_get_statusARead-only
Read WM connection and active app, plus device, power, uptime, firmware and update status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
busybar_list_appsARead-only
List apps in the window manager manifest, including which are running and ready to show.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
busybar_return_to_autoA
Release the current WM app pin and resume automatic display scheduling.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
busybar_send_inputB
Route an OK or START tap, or an encoder step, to an app listening through the WM. Supply delta only for the encoder.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| delta | No |
busybar_show_messageC
Show a temporary WM overlay and automatically reveal the app underneath when it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| message | Yes | ||
| durationSeconds | No |
busybar_start_timerC
Start a countdown overlay on the Bar. The WM removes it when time runs out.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| display | No | front: 72x16 colour LED strip facing others. back: 160x80 greyscale (16 levels) OLED facing you. | front |
| durationSeconds | Yes |
busybar_switch_appB
Pin a ready app by its exact name from busybar_list_apps.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
github_ciGitHub CI statusB
Latest GitHub Actions run for a repo branch (default branch if omitted). Shows it on the Bar unless show=false.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | owner/name | |
| show | No | ||
| branch | No |
github_inboxGitHub inboxA
Counts of PRs awaiting your review, your open PRs, and issues assigned to you. Shows them on the Bar unless show=false.
| Name | Required | Description | Default |
|---|---|---|---|
| show | No |
weatherWeatherB
Current weather for a city (Open-Meteo). Shows it on the Bar with an icon unless show=false.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| show | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v0.10.0- First observed
bar_animation - First observed
bar_clear - First observed
bar_connect - First observed
bar_image - First observed
bar_pixels - First observed
bar_progress - First observed
bar_screenshot - First observed
bar_sound - First observed
bar_status - First observed
bar_stock - First observed
bar_text - First observed
busybar_get_connectivity - First observed
busybar_get_status - First observed
busybar_list_apps - First observed
busybar_return_to_auto - First observed
busybar_send_input - First observed
busybar_show_message - First observed
busybar_start_timer - First observed
busybar_switch_app - First observed
github_ci - First observed
github_inbox - First observed
weather
TDQS
Scored across 22 tools
Most tools target clearly distinct actions (show text, show pixels, play sound, screenshot, connect), so selection is generally unambiguous. However, bar_status, busybar_get_status, and busybar_get_connectivity overlap around device/connection state, and bar_clear versus the WM overlay lifecycle (show_message, start_timer, return_to_auto) leaves some uncertainty about which tool owns cleanup.
Two near-identical prefixes, bar_ and busybar_, refer to the same physical device, and the GitHub/weather integrations are unprefixed, creating a mixed namespace. Within each prefix patterns differ too: bar_text/bar_pixels are noun-only while busybar_get_status/list_apps follow verb_noun, so naming is readable but not predictable.
At 22 tools the surface is heavy for a single device-control server, sitting in the borderline 16-25 range. The display and WM operations justify most tools, but the three status readers and bundled GitHub/weather integrations inflate the count and could likely be consolidated.
Coverage is strong across display modes (text, pixels, progress, image, animation, sound, screenshot) and WM app control (list, switch, overlays, input, auto-return). Minor gaps remain: no explicit stop/cancel for a playing animation, sound, or active timer, and no brightness or volume control, though bar_clear and return_to_auto cover some cleanup.
Maintenance
Related MCP Connectors
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Your AI apps as one team: hand work to Codex or Claude Code on your Mac, with a shared logbook.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI tools like Claude Code and Codex CLI to read and write serial port data, facilitating embedded development workflows such as coding, flashing, and debugging.24 npmMIT
- AlicenseAqualityDmaintenanceControl your Elgato Stream Deck from Claude Code with high-quality icons, full profile management, and task context aggregation from Slack, Notion, and GitHub.10MIT
- AlicenseAqualityBmaintenanceTalk to your Flipper Zero from Claude Code — or any MCP client. Storage, app deployment, screen capture, button automation, JavaScript execution on the device, and honest answers about what is nearby.66MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Code to see and drive Bambu Lab 3D printers over the local network via MQTT, providing status, file management, print control, filament, maintenance, and diagnosis without any cloud dependency.MIT