mcp-for-arduino
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARDUINO_CLI_PATH | No | Point at a non-PATH arduino-cli binary (the installer sets this to its portable copy automatically). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| board-listA | List connected Arduino boards (port, protocol, detected FQBN). Run this first to find the upload port and FQBN. |
| board-listallA | List all supported boards and their FQBNs. Optionally filter by name (e.g. 'uno', 'esp32', 'nano'). |
| board-detailsB | Show details for an FQBN: required core, board options, default programmer. |
| compileA | Compile an Arduino sketch for a board. Verifies code without needing hardware. Returns memory usage and errors. |
| uploadA | Compile (if needed) and flash a sketch to a connected board. fqbn/port can be omitted if saved with board-attach. Close Serial Monitor first — it locks the port. |
| core-listA | List installed board platforms/cores (e.g. arduino:avr) with versions. |
| core-searchC | Search available cores in Boards Manager (e.g. 'esp32', 'samd'). |
| core-installA | Install a board core, e.g. 'arduino:avr' (Uno) or 'esp32:esp32' (needs additional URL). Takes a while on first install. |
| core-upgradeA | Upgrade installed cores. Omit coreId to upgrade all. |
| lib-listB | List installed Arduino libraries. |
| lib-searchB | Search the Arduino Library Manager (e.g. 'Servo', 'DHT sensor', 'WiFi'). |
| lib-installB | Install a library from Library Manager, e.g. 'Servo' or 'DHT sensor library'. |
| lib-upgradeA | Upgrade libraries. Omit name to upgrade all. |
| lib-examplesA | List the bundled examples for installed libraries. Omit name to list examples for all libraries. Great for finding starter code for a sensor/module. |
| lib-depsA | Check the dependency status of a library (what it needs, what's missing). Run before compile when a library install seems incomplete. |
| outdatedA | Show installed cores and libraries that have upgrades available. Empty output means everything is current. Follow up with core-upgrade / lib-upgrade. |
| export-binaryA | Compile a sketch and export the firmware files (.hex/.bin/.elf) to a folder. Use for flashing with external tools, OTA updates, or archiving builds. |
| preprocessA | Print the preprocessed sketch source (macros expanded, headers resolved) instead of compiling. Useful for debugging #define / conditional-compile issues. |
| board-attachA | Save default port + FQBN (+ optional programmer) into a sketch's profile (sketch.yaml), so later compile/upload calls can omit them. With no sketchPath, shows current defaults. |
| burn-bootloaderA | Burn the bootloader onto a board using an EXTERNAL PROGRAMMER (e.g. USBasp, atmel_ice). Requires extra hardware — this is not a normal upload. Double-check fqbn + programmer before running. |
| sketch-newA | Create a new Arduino sketch (folder + .ino file with setup()/loop() boilerplate). |
| sketch-validateA | Check a sketch folder layout (/.ino) and list its files. Run before compile to catch layout mistakes. |
| sketch-archiveB | Zip a sketch (optionally including build artifacts). |
| monitor-snapshotA | Read serial output from a board for a few seconds (non-blocking snapshot). Use for Serial.println debugging. NOT a live stream — returns what arrived within timeoutMs. |
| upload-and-monitorA | Flash a sketch and immediately show its serial output — one call from new code to visible result. Uploads, waits for the board to reboot, then captures a serial snapshot. |
| doctorA | Health check for the whole Arduino setup: CLI, cores, libraries, connected boards, pending updates. Run first when anything behaves oddly. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| new-sketch | Scaffold a sketch plan: board, libraries, wiring, and code outline |
| fix-compile-error | Systematic recipe for diagnosing an arduino-cli compile failure |
| migrate-board | Checklist for moving a sketch between boards (e.g. Uno → ESP32): pins, voltage, libraries, memory |
| optimize-sram | Recipe for fixing 'not enough memory' / unstable sketches on AVR boards |
| wiring-review | Sanity-check a wiring/circuit plan before anyone powers it up |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| arduino-config | arduino-cli version + active configuration (data dir, board manager URLs) |
| arduino-boards | Currently connected boards (arduino-cli board list JSON) |
| arduino-cheatsheet | Recommended tool order for AI agents: detect → details → compile → upload → monitor |
| arduino-libraries | Libraries currently installed in the Arduino environment (lib list JSON) |
| arduino-cores | Board cores/platforms currently installed (core list JSON) |
TDQS
Scored across 26 tools
Most tools target a distinct stage of the Arduino workflow, and descriptions clarify pairs like board-listall (supported boards) vs board-list (connected boards). A few pairs remain close enough to cause occasional misselection, especially compile vs export-binary and monitor-snapshot vs upload-and-monitor, but overall boundaries are clear.
Names generally follow a predictable resource-action kebab-case pattern (core-install, lib-search, sketch-new, board-attach). However, exceptions like bare compile/upload, noun-style doctor/outdated, and the awkward board-listall vs board-list prevent a perfect score.
26 tools is above the ideal range and the server splits the workflow into many narrow endpoints, such as export-binary and preprocess alongside compile. The breadth maps to the real Arduino CLI, so it feels heavy but not bloated.
The set covers board discovery, core/library management, sketch lifecycle, compile/upload, bootloader burning, and serial diagnostics, so the main development loop is well supported. Obvious gaps are core-uninstall/lib-uninstall and managing extra Boards Manager URLs, but agents can usually work around these.