Skip to main content

Busy Bar MCP Server

A Python MCP server written with FastMCP that wraps the busybar_python_sdk to communicate with a physical Busy Bar device over HTTP. The Busy Bar is a digital time-management display — this MCP server provides 32 tools for account retrieval, system information, time operations, BLE control, and input events, exposing its functionality through the standard Model Context Protocol so other tools and AI assistants can interact with it programmatically.

Status: 32 MCP tools are fully implemented across account retrieval, system information, time operations, device state queries, BLE control, and input events, with a complete test suite documented in this README. The project is ready to use — see the What's Next section below for planned work.

Prerequisites

  • Python ≥ 3.12 — the project pins Python 3.12+ (see .python-version)
  • uv — dependency manager and virtual environment resolver

Installation

Clone the repository and install dependencies:

uv sync

This creates a virtual environment and installs all packages declared in pyproject.toml (including busybar_python_sdk).

Configuration

Copy the example .env.example file (if present) to create your own .env at the project root with the following variables.

Variable Description Example
BUSYBAR_API_TOKEN API auth token for authenticating with the Busy Bar device my-super-secret-token
BUSYBAR_BASE_URL IP address or hostname of the Busy Bar device (no protocol prefix) 10.0.4.20
BUSYBAR_API_TOKEN=my-super-secret-token
BUSYBAR_BASE_URL=10.0.4.20

It is also possible to declare the variables before starting the server:

export BUSYBAR_API_TOKEN=my-super-secret-token && export BUSYBAR_BASE_URL=10.0.4.20 

Usage

Set the BUSYBAR_API_TOKEN and BUSYBAR_BASE_URL environment variables (or place them in a .env file in the working directory), then start the MCP server:

# One-shot run via uvx (no local install required)
BUSYBAR_API_TOKEN= BUSYBAR_BASE_URL=10.0.4.20 uvx busybar-mcp

# Or install locally and run the console script
uv sync
BUSYBAR_API_TOKEN= BUSYBAR_BASE_URL=10.0.4.20 busybar-mcp

# Development (built-in MCP dev server / inspector)
uv sync
BUSYBAR_API_TOKEN= BUSYBAR_BASE_URL=10.0.4.20 mcp dev -- uvx busybar-mcp

python -m busybar_mcp is equivalent to the console script and starts the same stdio server.

Once started, clients can connect to the server using their MCP transport.

MCP Tools

Account tools

Tool Description
get_account_info Retrieve linked account information (email, account ID) from the Busy Bar device
get_account_status Check MQTT connection state for the linked account
get_account_backend Inspect MQTT backend configuration (server URL, certificate settings)

System tools

Tool Description
get_api_version Query the API version supported by the device
get_transport Get the current network transport type (USB or Wi-Fi)
get_device_status Comprehensive health check: device, firmware, system, and power state
get_device_info Retrieve hardware identifiers and manufacturing details
get_firmware_info Get firmware version and build metadata
get_system_status Runtime system metrics (uptime, API SemVer, auto-update settings)
get_power_status Battery charge level, voltage, current, and charging state

Time tools

Tool Description
get_time Retrieve the device's real-time clock timestamp in ISO 8601 format
get_timezone Get the currently configured timezone (name, offset, abbreviation)
get_tzlist List all supported timezones available for configuration

Device Status & Configuration

Tool Description
get_ble_status Retrieve BLE module status (powered state, MAC address)
enable_ble Enable the BLE module and start advertising
disable_ble Disable the BLE module and stop advertising
remove_ble_pairing Remove the current BLE pairing so the device becomes discoverable again
get_busy_snapshot Get the current BUSY timer state including profile and timing details
get_http_access Inspect HTTP API key management mode and validity
get_device_name Get the human-readable device name
get_display_brightness Retrieve the current display brightness level
get_audio_volume Retrieve the current audio volume level
get_smart_home_pairing_status Query Matter fabric count and latest commissioning outcome
get_smart_home_switch_state Read smart home relay/output state and startup behavior
list_storage_files List files and directories on device storage (accepts optional path argument)
get_storage_status Get storage capacity details (used, free, total bytes)
get_firmware_update_status Check currently installed firmware and pending update state
get_update_changelog Retrieve release notes for a specific firmware version (accepts required version argument)
get_autoupdate_settings Get automatic update configuration (enabled, window start/end)
get_wifi_status Get Wi-Fi connection details (SSID, signal strength, channel, security)
get_wifi_networks Retrieve scanned available Wi-Fi networks in range

Input tools

Tool Description
send_input_key Send a single key-press event to the device (up, down, ok, back, start, busy, custom, off, apps, settings)

Architecture

The project follows a thin-client layering:

  1. busybar_mcp — the package and its main entry point (busybar_mcp/__init__.py): loads .env, registers all tool modules on import, and calls server.run(transport="stdio")
  2. busybar_mcp/ — modularized MCP tools organized by Busy Bar API namespace:
┌───────────────────────────────┐      MCP/stdio       ┌──────────────────┐      SDK calls     ┌──────────────┐
│           MCP Client          │ ◄──────────────────► │ busybar_mcp      │                    │ Busy Bar     │
│         (AI tool)             │   FastMCP tools      │ (pkg + entry pt) │ ◄────────────────► │ Device       │
└───────────────────────────────┘                      └──────────────────┘                    └──────────────┘
                               busybar_mcp/  (package with 10 namespace modules + utils)   HTTP (OpenAPI)
                                                                                           busybar_python_sdk
  • busybar_mcp/account.py — account retrieval tools
  • busybar_mcp/system.py — system information tools
  • busybar_mcp/time.py — time operations tools
  • busybar_mcp/ble.py — BLE module tools
  • busybar_mcp/input.py — input event tools
  • busybar_mcp/busy.py — busy timer tools
  • busybar_mcp/settings.py — device settings tools
  • busybar_mcp/smarthome.py — smart home tools
  • busybar_mcp/storage.py — storage management tools
  • busybar_mcp/updater.py — firmware update tools
  • busybar_mcp/wifi.py — Wi-Fi status tools
  • busybar_mcp/utils.py — shared utilities (_serialize, _wrap_tool_error)
  1. HTTP → Busy Bar device — the SDK communicates with the device over HTTP using the OpenAPI schema defined in openapi.yaml

Testing

A working test suite is included with the project. The convenience runner at run_tests.py invokes pytest against the tests/ directory with sensible defaults and no-header output.

Run basic tests

python run_tests.py

Run with coverage output

COVERAGE=1 python run_tests.py

Coverage is reported via pytest-cov (--cov=busybar_mcp --cov-report=term-missing).

Test Coverage Summary

  • 32 MCP tools tested — one parametrized happy-path test per tool across account, system info, time, BLE, busy timer, settings, smart home, storage, update, wifi, and input categories.
    • Per-module test files: tests/test_account.py, tests/test_system.py, tests/test_time.py, tests/test_ble.py, tests/test_busy.py, tests/test_settings.py, tests/test_smarthome.py, tests/test_storage.py, tests/test_updater.py, tests/test_wifi.py, tests/test_input.py
  • Error-path tests verify behaviour when the Busy Bar device is missing or unreachable (mocked HTTP failures).
  • Missing environment variable tests confirm that absent BUSYBAR_BASE_URL / BUSYBAR_API_TOKEN are handled gracefully.
  • conftest fixtures:
    • clear_env_vars — temporarily removes BUSYBAR_BASE_URL and BUSYBAR_API_TOKEN from os.environ (restoring originals afterward).
  • Serialization tests (tests/test_serialization.py) verify _serialize() handles SDK models, dicts, lists, scalars, and edge cases correctly.

What's Next

  • Extend with additional write/mutation tools (display messages, notifications)
  • Implement MCP resources for live device data streams
  • Configure linting and formatting toolchain

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

busybar_mcp-0.1.1.tar.gz (107.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

busybar_mcp-0.1.1-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file busybar_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: busybar_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 107.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.11

File hashes

Hashes for busybar_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3a5cce554ea0b42c7370f75c782ba24fdc810720774d57ba479226c7b985b9ea
MD5 81e96a98098ff5eb0fb83971ca257661
BLAKE2b-256 fe5ffe2824061329d790ef8c8f7b1d7cd8344d0c93f857a4959e7efef5c60640

See more details on using hashes here.

File details

Details for the file busybar_mcp-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for busybar_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 37481f3d60a23548f655d622633e5319cebe6b771178c453a5ee6a7bbcd6df1c
MD5 ed0b4474a515ab10cd78f259ccac4b97
BLAKE2b-256 c0a1aad14fbe4e0ce691d947b54d9aa8a9d208c411ec273a63f453529d032b7b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page