npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

arduino-app-lab-mcp

v0.1.3

Published

MCP server for Arduino Lab for MicroPython IDE — mpremote + arduino-cli REST bridge for UNO Q and MicroPython boards

Readme

arduino-app-lab-mcp

npm License: MIT node

MCP server for Arduino Lab for MicroPython — the official Arduino IDE for MicroPython boards.

Wraps mpremote and arduino-cli behind a REST/MCP API so an AI agent can list boards, run MicroPython scripts, eval/exec Python, upload/download files, manage the board filesystem, install mip packages, and compile/upload Arduino sketches (including Arduino UNO Q over the network) — all without the IDE open.

arduino-mcp (the companion package) targets the Arduino CLI and IDE 2.0 workflow and can be installed alongside this one for extended functionality. This package is the primary MCP for App Lab IDE usage and UNO Q development.

Install & run

npm install -g arduino-app-lab-mcp
arduino-app-lab-mcp
# → http://127.0.0.1:3095

Or run without installing:

npx arduino-app-lab-mcp

Requires Python + mpremote:

pip install mpremote

arduino-cli is auto-downloaded on npm install via the postinstall script — no manual setup needed.

API

All responses: { "ok": true, "requestId": "…", "action": "…", … } or { "ok": false, "error": "…" }.

MicroPython / mpremote

| Method | Path | Body / Params | Description | |--------|------|---------------|-------------| | GET | /health | — | Status: mpremote + arduino-cli versions | | GET | /actions | — | List all supported actions | | GET | /boards | — | Enumerate connected boards | | POST | /run | { "file": "main.py", "device": "auto" } | Run script from workspace on board | | POST | /exec | { "code": "print(42)", "device": "auto" } | Execute Python code on board | | POST | /eval | { "expression": "1+1", "device": "auto" } | Evaluate expression, return result | | POST | /upload | { "file": "main.py", "dest": ":main.py" } | Copy file workspace → board | | POST | /download | { "file": "main.py" } | Copy file board → workspace | | GET | /ls | ?dir=/&device=auto | List board filesystem | | DELETE | /rm | { "file": "old.py" } | Remove file from board | | POST | /reset | { "hard": false } | Soft or hard reset | | POST | /install | { "package": "aioble" } | Install mip package |

Arduino CLI (sketch workflow)

| Method | Path | Body | Description | |--------|------|------|-------------| | POST | /sketch | { "name": "Blink", "code": "…" } | Create a new .ino sketch | | GET | /sketch/:name | — | Read sketch source | | GET | /sketches | — | List all sketches in workspace | | POST | /validate | { "sketch": "Blink", "fqbn": "…" } | Syntax-check without uploading | | POST | /build | { "sketch": "Blink" } | Compile + export binaries | | POST | /upload_sketch | { "sketch": "Blink", "port": "192.168.1.63" } | Compile + upload (network OTA for UNO Q) | | POST | /reset_to_bootloader | { "port": "COM4" } | 1200-baud touch for DFU bootloader |

Device path

"device": "auto" (default) lets mpremote auto-detect the first board. Or specify explicitly:

  • Windows: "device": "COM5"
  • Linux/Pi: "device": "/dev/ttyACM0"
  • macOS: "device": "/dev/cu.usbmodem14101"

UNO Q (Arduino:Zephyr)

The default FQBN is arduino:zephyr:unoq. Upload via network IP (OTA):

curl -X POST http://127.0.0.1:3095/upload_sketch \
  -H "Content-Type: application/json" \
  -d '{"sketch":"Blink","port":"192.168.1.63"}'

Environment

| Variable | Default | Description | |----------|---------|-------------| | PORT | 3095 | HTTP port | | APPLAB_DEVICE | auto | Serial port for mpremote | | APPLAB_WORKSPACE | ./workspace | Local workspace directory | | MPREMOTE_BIN | mpremote | Path to mpremote binary | | ARDUINO_CLI_BIN | auto | Path to arduino-cli (auto-downloaded) | | ARDUINO_FQBN | arduino:zephyr:unoq | Default board FQBN | | ARDUINO_UPLOAD_PORT | — | Network IP for UNO Q OTA upload | | ARDUINO_AUTO_INSTALL_CORE | 1 | Auto-install missing arduino-cli cores | | ARDUINO_COMPILE_TIMEOUT_MS | 600000 | Compile timeout (ms) | | APPLAB_RUN_TIMEOUT_MS | 30000 | mpremote run timeout (ms) | | APPLAB_EXEC_TIMEOUT_MS | 10000 | mpremote exec/eval timeout (ms) | | LOG_REQUESTS | 0 | Set 1 to log every request |

Copy .env.example to .env to configure locally.

Docker

docker build -t arduino-app-lab-mcp:latest .
docker run --rm --network host \
  -e PORT=3095 \
  --device /dev/ttyACM0 \
  -v $(pwd)/workspace:/workspace \
  arduino-app-lab-mcp:latest

Boards supported

Arduino UNO Q (Zephyr/Linux), UNO R4 Minima/WiFi, Nano RP2040 Connect, Nano 33 BLE, Portenta H7, GIGA R1, Raspberry Pi Pico/W, ESP32, ESP8266, STM32 — any board running MicroPython that mpremote can connect to.

Related

  • arduino-app-lab-mcp-micropy — Sister package: direct serial REPL via micropython.js (no mpremote needed). More granular filesystem ops, stateful connection pool. Port 3096.
  • arduino-mcp — MCP server for Arduino CLI and IDE 2.0. Install alongside for extended CLI/IDE 2.0 functionality.

Author

Eoin Jordaneoinjordan.github.io — for more projects, related work, or suggestions.

License

MIT © Eoin Jordan