pico-bay
OfficialProvides tools for managing MicroPython boards over USB, including detecting connected boards, browsing and editing the filesystem, running Python files, interrupting and resetting boards, and installing MicroPython firmware on Pico boards in BOOTSEL mode.
Allows managing Raspberry Pi Pico, Pico W, Pico 2, and Pico 2 W boards over USB, including firmware installation, filesystem operations, running Python code, and resetting the board.
Click on "Install 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., "@pico-bayList the MicroPython boards connected over USB and show their firmware versions."
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.
pico-bay
pico-bay is a local Web App and MCP Server for managing MicroPython and CircuitPython boards, such as the Raspberry Pi Pico, over USB. It runs with Node.js built-in modules and needs no browser extension or runtime npm dependencies.
Quick start
Requires Node.js 20 or newer.
npx @ctrlpi/pico-bayOpen http://localhost:7426 if it does not open automatically. On a Raspberry Pi host, pico-bay does not launch a browser; open it from another device on the same network instead.
Port 7426 spells PICO on a phone keypad, a nod to the T9 years and flip-phone era.
Related MCP server: mcp-uart
Devices
Supports MicroPython and CircuitPython boards, including the Raspberry Pi Pico, Pico W, Pico 2, and Pico 2 W.
Detects multiple connected boards and follows USB hot-plug events.
Detects MicroPython or CircuitPython automatically, including whether its filesystem is read-only or writable.
Detects RP2040 and RP2350 BOOTSEL mode and installs the latest MicroPython firmware for the selected Pico model.
Shows Flash and RAM usage for each board.
Supports soft reset, hard reset, Ctrl-C interruption, and filesystem cleanup.
Files
Browses the complete filesystem as a searchable, collapsible tree.
Shows file sizes and modification times when the board provides them.
Creates, renames, moves, uploads, downloads, and recursively deletes files and folders.
Opens text files with Python and JSON highlighting.
Renders a safe Markdown preview without executing embedded HTML.
Detects binary files and offers them for download instead of displaying them as text.
Downloads and restores the complete filesystem as a standard ZIP archive.
Run and console
Runs any Python file as
__main__without replacingmain.py.Streams program and boot output to a live console.
Accepts console input and can interrupt a running program with Ctrl-C.
MCP server
pico-bay includes a dependency-free Model Context Protocol server. On macOS and other non-Pi hosts, enable MCP with --mcp-stdio or --mcp-http. Streamable HTTP MCP is enabled by default on Raspberry Pi hosts.
stdio
In Claude Desktop, open Settings → Developer → Edit Config to get to the configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, or the equivalent file on Windows or Linux), and add the server under mcpServers:
"mcpServers": {
"pico-bay": {
"command": "npx",
"args": ["-y", "@ctrlpi/pico-bay", "--mcp-stdio"]
}
}Streamable HTTP
Use HTTP when the MCP client runs on another computer or Raspberry Pi:
npx @ctrlpi/pico-bay --mcp-httpThe normal web interface remains available and MCP is served at http://HOST:7426/mcp. Configure the MCP agent to connect over HTTP, replacing PI_ADDRESS with the platform running pico-bay:
"mcpServers": {
"pico-bay": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://PI_ADDRESS:7426/mcp", "--allow-http"]
}
}--allow-http permits the connection over a trusted local network. On macOS and other non-Pi hosts, add --host 0.0.0.0 when starting pico-bay to make it reachable from another computer. A Raspberry Pi listens on the LAN by default.
No authentication or TLS: MCP tools can run code, overwrite files, reset boards, and permanently delete board files. HTTP mode is intended only for a trusted local network. Do not expose
/mcpor pico-bay’s port directly to the internet.
The server supports MCP revision 2026-07-28 and the legacy initialize flow through 2025-03-26. It uses plain JSON responses rather than SSE because it does not send server-initiated messages.
MCP tools
Tool | Purpose |
| List connected boards, stable board IDs, firmware details, and capabilities. |
| List the board filesystem and report Flash and RAM usage. |
| Read a text or binary file using UTF-8 or base64. |
| Create or overwrite a UTF-8 or base64 file, up to 8 MB decoded. |
| Create a directory. |
| Rename or move a file or directory. |
| Permanently delete a file or recursively delete a directory. |
| Run a file as |
| Send Ctrl-C to interrupt a running program. |
| Soft-reset a board or request a supported hard reset. |
| Check and install firmware on a board in BOOTSEL mode. Currently supports MicroPython. |
Call pico_boards_list first, then pass its board_id to board-specific tools. ZIP backup/restore, live console streaming, and Delete all files are intentionally not exposed through MCP.
Installing MicroPython in BOOTSEL mode
To enter BOOTSEL mode, disconnect the board, hold its BOOTSEL button, reconnect USB, then release the button. pico-bay shows the RP2040 or RP2350 boot device as a red pill. Select it and choose if this is a W model (with Wi-Fi) or not, as it is not autodetectable.
pico-bay confirms the operation, downloads the latest matching MicroPython UF2 from micropython.org, and copies it to the boot volume. Keep the board connected during installation. It reboots automatically and then appears as a normal MicroPython device.
Requirements
Node.js 20 or newer.
Raspberry Pi OS, macOS, or Linux. Windows can access pico-bay through a Raspberry Pi but cannot host it.
A USB-connected board running MicroPython or CircuitPython, or a supported Pico in BOOTSEL mode.
Permission to open the board's serial device.
Install
From GitHub:
git clone https://github.com/ctrlpi/pico-bay.git
cd pico-bay
npm startOr install the npm package locally:
npm install @ctrlpi/pico-bay
npx pico-bayOptions
pico-bay [--port PORT] [--host ADDRESS] [--hold MILLISECONDS] [--no-open] [--mcp-stdio | --mcp-http | --no-mcp] [--help] [--version]Command-line values take precedence over environment variables.
Boolean environment variables accept true or false, and 1 or 0.
Running on a Raspberry Pi
On Linux, pico-bay checks /proc/device-tree/model. When the host is a Raspberry Pi, it listens on 0.0.0.0 by default so another computer on the same network can open it. It does not try to launch a browser on the Pi itself, and Streamable HTTP MCP is enabled at /mcp by default. Start with --no-mcp to disable MCP while keeping the web interface available.
Several USB-connected boards may require a powered USB hub and a reliable Raspberry Pi power supply. MicroPython usually uses slightly less power because it exposes only serial; CircuitPython also exposes storage and HID. After an undervoltage event, pico-bay warns that USB may have stopped; fix the power issue and reboot the Pi.
Raspberry Pi OS Lite and other headless installations commonly detect CircuitPython USB storage without mounting it. When udisksctl is available, pico-bay automatically mounts unmounted VFAT partitions labeled CIRCUITPY as the current user, then matches each volume to its board through boot_out.txt. If mounting is unavailable or denied, it falls back to serial access.
BOOTSEL storage may also be detected without being mounted. pico-bay attempts to mount it with udisksctl; if Raspberry Pi OS requires permission, the installation screen shows the command to run on the Pi and a Proceed button to retry afterward.
Only expose pico-bay on a trusted network. It has no login and can modify or erase files on connected boards.
Board access
pico-bay uses the firmware's raw REPL for serial operations. A serial file or board operation briefly interrupts the running program, performs the requested work, and then soft-resets the board so its normal program resumes. Related operations share a short session controlled by --hold; use --hold 0 to release the board after every operation. Toolbar file execution and interactive console commands are available with either firmware.
Reads, writes, uploads, and downloads are binary-safe.
For CircuitPython, pico-bay matches each CIRCUITPY volume by hardware UID. It uses the mounted volume for faster file access when available and serial otherwise. The UI shows read-only only when neither route can write.
When pico-bay stops, it attempts to reset any open board so it is not left halted. Files written to Flash remain after reset; in-memory state does not.
Backups
Download ZIP creates a standard archive of all board files. Restore recreates its files and folders, overwrites matching paths, and leaves other board files untouched. Keep a separate copy of important files before restoring or using Delete all files.
Security
pico-bay can run code, overwrite files, reset a board, and erase its filesystem. It is intended for a trusted local workstation.
The server listens on
127.0.0.1by default, or0.0.0.0when the host is a Raspberry Pi.State-changing requests require the expected HTTP method and same-origin access.
Device paths reject invalid or traversing path segments.
The app has no authentication, TLS, authorization, or multi-user isolation.
Do not expose it to an untrusted network.
Troubleshooting
No board appears
Confirm that the board is running MicroPython or CircuitPython rather than bootloader mode.
Use a USB data cable and check that its serial device appears under
/dev.On Linux, check serial permissions, commonly provided by the
dialoutgroup.Close Thonny,
mpremote, screen, and other programs that may own the serial port.
A command times out
Startup code may be keeping the board busy or disabling interrupts.
Increase
--holdwhen repeated operations collide with a slowmain.pystartup.Disconnect and reconnect the board to recover an unknown raw-REPL state.
The program restarts after file access
This is expected. Raw-REPL access interrupts the program, and pico-bay resets the board afterward so main.py can resume.
Tests
Run the dependency-free test suite with:
npm testThe single test.js file covers pure parsing and ZIP helpers plus mocked HTTP behavior for both MicroPython and CircuitPython. It also checks for connected serial boards after those tests pass. With no board attached, the hardware section is skipped. MicroPython and writable CircuitPython boards get temporary file/folder write-read-delete checks; read-only CircuitPython boards get non-destructive capability and console checks.
Known limits
Windows cannot host pico-bay; access it through a Raspberry Pi or another supported host instead.
Filesystem operations temporarily stop the running application.
Uploads are limited to 8 MB; ZIP restore supports Store or Deflate with up to 512 files and 16 MB decompressed.
Concurrent file-change conflict detection is not provided.
License
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
File uploads for AI agents. Upload, list, and manage files. No signup required.
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Arduino boards for compiling, uploading sketches, and serial communication.6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to communicate with UART/serial devices, offering tools for port management, data read/write, and protocol handling.MIT
- AlicenseAqualityCmaintenanceEnables interaction with ESP32/MicroPython boards via tools for flashing firmware, running REPL code, file management, and serial capture, with support for progress notifications, cancellation, and error handling.8MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with serial port devices by sending commands, capturing output, and managing connections, with real-time browser-based terminal monitoring.MIT
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/ctrlpi/pico-bay'
If you have feedback or need assistance with the MCP directory API, please join our Discord server