simonguest/microbit-mcp
If you are the rightful owner of microbit-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
An MCP (Model Context Protocol) server for the micro:bit that enables LLMs to interact with micro:bit devices.
microbit-mcp
An MCP (Model Context Protocol) server for the micro:bit that enables LLMs to interact with micro:bit devices.
Features
Tools
- display_message: Display text messages on the micro:bit LED matrix
- display_image: Display custom images on the micro:bit LED matrix using a 5x5 grid format
- wait_for_button_press: Wait for a button press on the micro:bit with optional button selection and timeout
- get_temperature: Return the real-time reading from the micro:bit's built-in temperature sensor
Setup
- Flash the
src/microbit/main.py
program to your micro:bit - Connect the micro:bit via USB
- Run the MCP server:
uv run microbit-mcp
- Configure your MCP client to connect to this server
Command Line Options
The MCP server supports several command-line options for configuration:
# Use default port (recommended for most users)
uv run microbit-mcp
# Specify a custom serial port
uv run microbit-mcp --port /dev/tty.usbmodem1234
uv run microbit-mcp -p COM3 # Windows example
# List available serial ports to find your micro:bit
uv run microbit-mcp --list-ports
# Show help and usage information
uv run microbit-mcp --help
Finding Your micro:bit Port
If you're unsure which port your micro:bit is using, run:
uv run microbit-mcp --list-ports
This will show all available serial ports and highlight likely micro:bit devices. The output will look something like:
Available Serial Ports:
Likely micro:bit devices:
/dev/cu.usbmodem2114202 - "BBC micro:bit CMSIS-DAP"
Hardware ID: USB VID:PID=0D28:0204
All serial ports (3 found):
/dev/cu.usbmodem2114202 - "BBC micro:bit CMSIS-DAP" ā
/dev/cu.Bluetooth-Incoming-Port - Bluetooth-Incoming-Port
/dev/cu.usbserial-A1B2C3D4 - USB Serial Device
Recommended: Use /dev/cu.usbmodem2114202 for your micro:bit
The ā symbol indicates ports that are likely micro:bit devices.
Button Press Tool
The wait_for_button_press
tool allows you to wait for button presses on the micro:bit with flexible configuration options.
Parameters (all optional)
- button (optional): Which specific button to wait for
"a"
- Wait only for button A"b"
- Wait only for button B- If not specified, waits for any button press
- timeout (optional): Maximum time to wait in seconds (default: 10.0)
Usage Examples
Wait for any button with default timeout:
{}
Wait for any button with custom timeout:
{
"timeout": 5.0
}
Wait for specific button A:
{
"button": "a"
}
Wait for button B with custom timeout:
{
"button": "b",
"timeout": 3.0
}
Response Format
Success response:
{
"button_pressed": "a",
"timeout": false,
"timestamp": 12345,
"waited_for": "any"
}
Timeout response:
{
"button_pressed": null,
"timeout": true,
"timestamp": null,
"waited_for": "any",
"timeout_duration": 10.0
}
Communication Protocol
The server communicates with the micro:bit using simple text commands over serial:
MESSAGE:<text>
- Display text messageIMAGE:<pattern>
- Display image pattern (e.g., "00300:03630:36963:03630:00300")TEMP:
- Request temperature readingWAIT_BUTTON:<button>:<timeout>
- Wait for button press (e.g., "WAIT_BUTTON:a:10" or "WAIT_BUTTON:any:5")
The micro:bit responds with status events and data in the format:
STATUS|<message>|<timestamp>
- General status updatesTEMP|<celsius>|<timestamp>
- Temperature responseBUTTON|<button>|<action>|<timestamp>
- Button press event (e.g., "BUTTON|a|pressed|12345")BUTTON_TIMEOUT|<waited_for>|<timeout_duration>
- Button wait timeout
Using the MCP Inspector
To test/debug the server, you can also use the MCP Inspector. To launch the inspector:
- Run
npx @modelcontextprotocol/inspector
(recommend LTS-version of Node) - The inspector will launch in a new browser window.
- Set transport type to STDIO, command is the full path to your uv binary (e.g.,
/Users/yourname/.local/bin/uv
), arguments is--directory /full-path-to-the-mcp-server run microbit-mcp
- Click on the Connect button to connect and inspect the MCP server.
Project Structure
The project is organized as follows:
microbit-mcp/
āāā src/
ā āāā mcp_server/ # Main MCP server package
ā ā āāā server.py # Main server entry point
ā ā āāā microbit_client.py # Serial communication with micro:bit
ā ā āāā protocol.py # Command/response protocol definitions
ā ā āāā tools/ # MCP tools organized by category
ā ā āāā display.py # Display-related tools
ā ā āāā sensors.py # Sensor-related tools
ā ā āāā input.py # Input-related tools
ā āāā microbit/ # Micro:bit firmware
ā ā āāā main.py # Firmware to flash to micro:bit
ā ā āāā README.md # Micro:bit setup instructions
ā āāā examples/ # Usage examples
āāā README.md # This file