# Arduino MCP Server (npm · arduino-mcp-server)

Arduino MCP server for CLI setup, board detection, compile/upload, serial monitoring, and pin refs.

- Trust score: 69/100 (medium)
- Change this week: +17
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `arduino-mcp-server`: 69/100 (this document), [markdown](https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server.md), [page](https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `arduino-mcp-server`
- Version: `0.2.8`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 148 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1535 tokens (~69/item across 22 items; 21 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 79% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add hardware-mcp-arduino-mcp-server -- npx -y arduino-mcp-server
```

### Codex

```bash
codex mcp add hardware-mcp-arduino-mcp-server -- npx -y arduino-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hardware-mcp-arduino-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "arduino-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add hardware-mcp-arduino-mcp-server --command npx --arg -y --arg arduino-mcp-server
```

### Hermes

```yaml
mcp_servers:
  hardware-mcp-arduino-mcp-server:
    command: "npx"
    args: ["-y", "arduino-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "hardware-mcp-arduino-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "arduino-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 69, +43)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] Schema quality: unverified → good
- [functional] Licence: MIT

### 2026-07-31 (score 26, −8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 34, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 52)

First indexed and scored.

## MCP tools (21)

### `list_connected_boards` (~22 tokens)

List Connected Boards

List connected boards and serial ports detected by arduino-cli.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `arduino_cli_doctor` (~27 tokens)

Arduino CLI Doctor

Check whether arduino-cli is available and return OS-specific installation instructions if missing.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `install_arduino_cli` (~83 tokens)

Install Arduino CLI

Attempt to install arduino-cli for the current OS using available package managers, then verify and configure CLI path.

Input parameters:

- `method` (string): Install method. Default `auto` tries OS-relevant methods in order.
- `setCliPathInProcess` (boolean): If true (default), set ARDUINO_CLI_PATH in this MCP process after install.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `list_supported_boards` (~40 tokens)

List Supported Boards

List supported/installable boards from the local arduino-cli index.

Input parameters:

- `search` (string): Optional case-insensitive filter for name/FQBN.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `ensure_core_installed` (~92 tokens)

Ensure Core Installed

Ensure the Arduino core required by a board FQBN is installed. Can auto-install via `arduino-cli core install`.

Input parameters:

- `autoInstall` (boolean): If true (default), install missing core automatically.
- `coreId` (string): Core ID, e.g. arduino:avr.
- `fqbn` (string): Board FQBN, e.g. arduino:avr:uno.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `detect_hardware` (~80 tokens)

Detect Hardware

Detect connected Arduino-compatible hardware, infer board/FQBN candidates, and generate next compile/upload commands.

Input parameters:

- `includeBoardDetails` (boolean): If true, query `arduino-cli board details` for selected FQBN candidates.
- `port` (string): Optional exact port filter, e.g. COM6 or /dev/ttyACM0.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `list_serial_ports` (~29 tokens)

List Serial Ports

List serial ports and any detected board metadata using arduino-cli. Works on Windows/macOS/Linux.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `compile_sketch` (~131 tokens)

Compile Sketch

Compile an Arduino sketch with a specific board FQBN.

Input parameters:

- `autoInstallCore` (boolean): If true (default), auto-install missing board core before compile.
- `buildPath` (string): Optional build output directory.
- `clean` (boolean): If true, clean build cache before compile.
- `exportBinaries` (boolean): If true, export binaries into sketch folder.
- `fqbn` (string, required): Board FQBN, e.g. arduino:avr:uno.
- `sketchPath` (string, required): Path to sketch folder or .ino file.
- `warnings` (string)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `upload_sketch` (~157 tokens)

Upload Sketch

Upload a compiled sketch to a connected board/port.

Input parameters:

- `autoInstallCore` (boolean): If true (default), auto-install missing board core when fqbn is provided.
- `fqbn` (string): Optional board FQBN when auto-detect is insufficient.
- `port` (string, required): Serial port path, e.g. COM6 or /dev/ttyACM0.
- `safetyContext` (object): Optional electrical context for preflight checks.
- `sketchPath` (string, required): Path to sketch folder or .ino file.
- `unsafeSkipPreflight` (boolean): If true, bypasses safety_preflight checks. Use only when user explicitly accepts risk.
- `verify` (boolean): Verify uploaded binary when supported.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `upload_and_wait_ready` (~231 tokens)

Upload And Wait Ready

Upload a sketch and wait for a serial readiness pattern, handling post-upload reset/re-enumeration windows.

Input parameters:

- `autoInstallCore` (boolean): If true (default), auto-install missing board core when fqbn is provided.
- `fqbn` (string): Optional board FQBN when auto-detect is insufficient.
- `port` (string, required): Serial port path, e.g. COM6 or /dev/ttyACM0.
- `readyBaudRate` (integer): Baud rate for readiness check. Default 115200.
- `readyCaseSensitive` (boolean): If true, readiness matching is case-sensitive.
- `readyPattern` (string): Optional serial text pattern to wait for after upload.
- `readyTimeoutMs` (integer): How long to wait for readyPattern.
- `safetyContext` (object)
- `sketchPath` (string, required): Path to sketch folder or .ino file.
- `unsafeSkipPreflight` (boolean): If true, bypasses safety_preflight checks. Use only when user explicitly accepts risk.
- `verify` (boolean): Verify uploaded binary when supported.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `read_serial_snapshot` (~73 tokens)

Read Serial Snapshot

Capture serial output for a bounded duration from a given port.

Input parameters:

- `baudRate` (integer): Baud rate. Default: 9600.
- `durationMs` (integer): Capture duration in ms.
- `port` (string, required): Serial port path, e.g. COM6 or /dev/ttyACM0.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `safety_preflight` (~84 tokens)

Safety Preflight

Run electrical preflight checks (voltage/current/pin risks) before upload or serial write operations.

Input parameters:

- `board` (string): Board name/id (preferred when known).
- `fqbn` (string): Board FQBN when known.
- `port` (string): Optional port for automatic board inference.
- `power` (object)
- `wiring` (array)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_open_session` (~88 tokens)

Serial Open Session

Open a stateful serial monitor session with port lock ownership.

Input parameters:

- `baudRate` (integer): Baud rate. Default: 9600.
- `maxBufferBytes` (integer): Max in-memory receive buffer.
- `port` (string, required): Serial port path, e.g. COM6 or /dev/ttyACM0.
- `ttlMs` (integer): Session lease TTL in ms.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_list_sessions` (~19 tokens)

Serial List Sessions

List active serial sessions and current port lock state.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_read` (~68 tokens)

Serial Read

Read buffered bytes from an open serial session.

Input parameters:

- `encoding` (string): Output encoding. Default: utf8.
- `fromOffset` (integer): Read offset cursor. Defaults to current buffer start.
- `maxBytes` (integer): Maximum bytes to return.
- `sessionId` (string, required)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_expect` (~64 tokens)

Serial Expect

Wait for a string pattern in a serial session buffer with timeout.

Input parameters:

- `caseSensitive` (boolean)
- `fromOffset` (integer): Optional explicit cursor offset.
- `pattern` (string, required)
- `sessionId` (string, required)
- `timeoutMs` (integer)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_write` (~103 tokens)

Serial Write

Write bytes to an open serial session. Safety preflight is enforced unless explicitly skipped.

Input parameters:

- `data` (string, required): Payload to send.
- `encoding` (string): Payload encoding. Default: utf8.
- `lineEnding` (string): Optional line ending append.
- `safetyContext` (object)
- `sessionId` (string, required)
- `unsafeSkipPreflight` (boolean): If true, bypasses safety_preflight checks. Use only with explicit user acceptance.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `serial_close_session` (~27 tokens)

Serial Close Session

Close a serial session and release its port lock.

Input parameters:

- `sessionId` (string, required)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `get_board_details` (~46 tokens)

Get Board Details

Get detailed board metadata from arduino-cli for a specific FQBN.

Input parameters:

- `fqbn` (string, required): Board FQBN, e.g. arduino:avr:uno.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `list_board_reference` (~19 tokens)

List Board Reference

List local board reference entries with pin/spec metadata.

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

### `search_board_reference` (~33 tokens)

Search Board Reference

Search local board reference by board name, alias, id, or FQBN.

Input parameters:

- `query` (string, required)

Output parameters:

- `command` (string)
- `data`
- `error` (string)
- `errorCode` (string)
- `nextActions` (array)
- `note` (string)
- `ok` (boolean)
- `raw` (object)
- `rawTail` (object)
- `reasonCodes` (array)
- `retryable` (boolean)
- `stage` (string)
- `status` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 69
- 2026-08-01: 26
- 2026-07-31: 26
- 2026-07-30: 34
- 2026-07-28: 52
- 2026-07-27: 52

## Links

- npm package: https://www.npmjs.com/package/arduino-mcp-server
- Socket report: https://socket.dev/npm/package/arduino-mcp-server
- Repository: https://github.com/hardware-mcp/arduino-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/hardware-mcp-arduino-mcp-server/arduino-mcp-server
