Skip to main content
Glama
blame-me

mcp-for-arduino

by blame-me

mcp-for-arduino

CI Release License

MCP server that lets AI clients (Claude Desktop, VS Code, Cursor, OpenCode) do real Arduino work: compile sketches, flash boards, manage platforms/libraries, scaffold sketches, and read serial output. Built on TypeScript + MCP SDK v2, wrapping arduino-cli (the engine inside Arduino IDE 2.x) over stdio.

No Node.js, no manual config. Pick your download from the latest release:

  • Windows: mcp-for-arduino-windows-x64.zip → unzip, double-click mcp-for-arduino.exe.

  • Mac Apple Silicon (M1/M2/M3/M4): mcp-for-arduino-macos-arm64.zip → unzip, double-click Install.command.

  • Mac Intel: mcp-for-arduino-macos-x64.zip → unzip, double-click Install.command. (Not sure which Mac? Logo → About This Mac → Chip. No Terminal typing needed — macOS opens Terminal itself. If it says "unidentified developer": right-click Install.command → Open → Open, once.)

The app sets itself up: fetches arduino-cli, installs Uno/Mega/Nano board support, and registers itself in Claude Desktop. Then restart Claude Desktop and ask: "list my Arduino boards".

Setup is idempotent — run it again any time to repair or update things.

Mac notes: board ports look like /dev/cu.usbmodemXXXXboard-list finds them. Clone boards may need the vendor USB driver (WCH CH340 / Silicon Labs CP210x) before they appear.

Related MCP server: Arduino MCP Server (Simple)

Manual setup (developers)

Prerequisites

  1. Node.js 20+

  2. arduino-cli (verified with v1.5.1):

    # Windows
    winget install --exact --id ArduinoSA.CLI
    arduino-cli config init
    arduino-cli core update-index
    arduino-cli core install arduino:avr   # Uno / Mega / Nano support

    macOS: brew install arduino-cli · Linux: see arduino-cli install docs.

Build & run

cd path\to\arduino-mcp   # wherever you cloned / unzipped the repo
npm install
npm run build     # tsc -> build/
npm run dev       # dev: tsx src/index.ts (stdio)

To rebuild the standalone exe yourself:

powershell -ExecutionPolicy Bypass -File scripts/build.ps1
# -> mcp-for-arduino.exe + mcp-for-arduino-windows-x64.zip at the root
#    (needs Node 20+ with SEA support to build,
#     but the resulting exe runs anywhere with no Node installed)

Smoke-test the exe (no hardware needed):

powershell -ExecutionPolicy Bypass -File scripts/test.ps1

Connect a client

All clients spawn the server locally over stdio. Easiest: point at the exe (this is exactly what the built-in setup writes for Claude Desktop):

Claude Desktop (%APPDATA%\Claude\claude_desktop_config.json):

{ "mcpServers": { "arduino": { "command": "C:\\path\\to\\mcp-for-arduino.exe" } } }

VS Code / Cursor (.vscode/mcp.json or ~/.cursor/mcp.json):

{ "servers": { "arduino": { "type": "stdio", "command": "C:\\path\\to\\mcp-for-arduino.exe" } } }

OpenCode (opencode.json):

{ "mcp": { "arduino": { "type": "local", "command": ["C:\\path\\to\\mcp-for-arduino.exe"] } } }

Optional env: ARDUINO_CLI_PATH to point at a non-PATH arduino-cli binary (the installer sets this to its portable copy automatically). Developers running from source can use node + build/index.js instead of the exe.

Folder layout (dev checkout)

mcp-for-arduino.exe   <- Windows server. Double-click it to install/update everything.
mcp-for-arduino-macos(-arm64|-x64).zip <- Mac downloads (built by scripts/build-mac.ps1)
arduino-mcp/          <- everything else (source, scripts, this readme)
  src/                <- TypeScript source (server + built-in setup)
  scripts/            <- build.ps1, build-mac.ps1, test.ps1, inject-sea.mjs, sea-config.json, mac-install.sh

Tools (26)

Tool

What it does

board-list

Detect connected boards (port + FQBN). Start here.

board-listall [query]

All supported boards + FQBNs, filterable

board-details --fqbn

Required core, options, programmer for an FQBN

board-attach

Save default port/FQBN into a sketch profile (sketch.yaml)

compile

Verify a sketch (no hardware needed). Returns flash/RAM usage or errors

upload

Flash a sketch to --port. Close Serial Monitor first (port lock)

upload-and-monitor

Flash, then instantly show the board's serial output — new code to visible result in one call

doctor

Health check: CLI, cores, libraries, boards, pending updates

export-binary

Compile + export firmware files (.hex/.bin/.elf) to a folder

preprocess

Print preprocessed sketch source (debug macros/conditional compiles)

burn-bootloader

Burn bootloader via external programmer (needs extra hardware)

core-list / core-search / core-install / core-upgrade

Board platforms, e.g. arduino:avr, esp32:esp32

lib-list / lib-search / lib-install / lib-upgrade

Library Manager

lib-examples [name]

Bundled examples for libraries (starter code for sensors/modules)

lib-deps

Dependency status of a library

outdated

Cores + libraries with upgrades available

sketch-new / sketch-validate / sketch-archive

Scaffold, layout-check (<name>/<name>.ino), zip

monitor-snapshot

Non-blocking serial read (--port --baudrate --timeoutMs, max 15s)

Tip: run board-attach once per sketch — afterwards compile, upload, upload-and-monitor, export-binary and preprocess no longer need fqbn/port passed every time.

Resources: arduino://config, arduino://boards, arduino://libraries, arduino://cores, arduino://cheatsheet, plus sketch://{name} (read-only source of sketches in your Arduino folder). Prompts: new-sketch, fix-compile-error, migrate-board, optimize-sram, wiring-review.

The exe also checks GitHub releases for updates every time you run setup.

Typical agent workflow

  1. board-list → port + FQBN (or board-listall uno to look it up)

  2. board-attach → save them to the sketch once, skip passing them afterwards

  3. sketch-validate → fix <name>/<name>.ino layout mismatches

  4. compile → iterate until ✅

  5. upload-and-monitor → flash + instantly see serial output (or upload, then monitor-snapshot)

  6. doctor → run whenever anything behaves oddly

Common FQBNs: Uno arduino:avr:uno, Mega arduino:avr:mega, Nano arduino:avr:nano (old bootloader: --boardOptions cpu=atmega328old), ESP32 esp32:esp32:esp32 (requires --additionalUrls ["https://dl.espressif.com/dl/package_esp32_index.json"]).

Troubleshooting

  • arduino-cli not found → install it (above) or set ARDUINO_CLI_PATH.

  • port busy / access denied → close IDE Serial Monitor; only one holder per COM port.

  • No boards detected → USB cable (charge-only cables fool everyone), drivers (CH340/CP210x for clones), Device Manager COM check.

  • Compile layout error → folder and .ino names must match exactly.

  • First ESP32 compile is slow (5–10 min toolchain download); timeouts are set generously (up to 10 min for core install).

Available Tools

26 tools
board-attachA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoDefault FQBN, e.g. 'arduino:avr:uno'
portNoDefault port, e.g. 'COM3'
programmerNoDefault programmer, e.g. 'atmel_ice'
sketchPathNoPath to sketch folder. Omit to just show defaults.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description doesn't need to restate mutability. It adds useful context beyond annotations: the write target (sketch.yaml) and the read-mode fallback when sketchPath is omitted. It doesn't detail error handling or overwrite behavior, but the key behavioral trait (dual read/write mode) is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences. The primary purpose is front-loaded, and the secondary read-mode is appended without superfluous words. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no output schema, the description adequately covers what it does, why, and the two modes. The lack of output schema means a hint about what 'shows current defaults' returns would help, but the core is complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter with examples. The description adds meaning by explaining the consequence of each: fqbn/port/programmer become saved defaults, and omitting sketchPath switches to a display mode. That is value beyond the schema's per-field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save) and resource (default port + FQBN + optional programmer into a sketch's profile), and explicitly ties it to the downstream effect (later compile/upload calls can omit them). It's clearly distinguishable from siblings like board-list or board-details, which are read-only board queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies the two modes: with sketchPath it saves defaults, and 'With no sketchPath, shows current defaults.' This gives clear usage context. It doesn't name an explicit alternative tool for viewing defaults, but the mode distinction is sufficient for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

board-detailsB

Show details for an FQBN: required core, board options, default programmer.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnYesFully Qualified Board Name, e.g. 'arduino:avr:uno'

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It reveals the read-only nature and the fields returned, but doesn't state whether the FQBN must already be installed or resolved, or what happens on an unknown FQBN. For a lookup tool with zero annotation coverage this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource front-loaded and no filler. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a single-param lookup tool, but with no annotations and no output schema, the description could have carried more behavioral context (failure modes, resolution behavior). It covers the minimum viable surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% – the single 'fqbn' parameter is fully documented in the schema with an example. The description repeats 'for an FQBN' without adding format or resolution semantics beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Show details') and resource (a board identified by FQBN), and lists the exact fields returned (required core, board options, default programmer). It is distinguishable from siblings like board-listall or board-list, though it doesn't name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus board-list or board-listall, and no prerequisites stated. Usage is only implied by the FQBN requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

board-listA

List connected Arduino boards (port, protocol, detected FQBN). Run this first to find the upload port and FQBN.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. 'List' implicitly signals a read-only operation, and the output fields are stated. But it lacks explicit safety statements (e.g., non-destructive, no side effects) or any mention of error conditions, timeouts, or prerequisites. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first states what it does and what it outputs; the second gives usage guidance (run first to discover upload port and FQBN). Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool, this is complete. It tells the agent what it returns (port, protocol, FQBN) and how to use it in a workflow (run first to get upload info). Nothing else is needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is empty. The description correctly avoids adding parameter details. According to the rubric, a 0-parameter tool gets a baseline of 4, and the description adds no noise here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('connected Arduino boards'), and clearly states what it returns (port, protocol, detected FQBN). It distinguishes itself from the sibling 'board-listall' by the word 'connected', implying a subset of boards.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear, actionable context: 'Run this first to find the upload port and FQBN.' This tells the agent when to invoke it and for what purpose. However, it does not explicitly mention when not to use it or name alternatives like board-listall, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

board-listallA

List all supported boards and their FQBNs. Optionally filter by name (e.g. 'uno', 'esp32', 'nano').

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSubstring to filter board names, e.g. 'uno' or 'mkr'

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that results include FQBNs, which is useful return-content context, but says nothing about pagination, ordering, or whether the list is cached/installed-vs-supported only. For a simple read-only list this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero waste, with the core action front-loaded and the optional filter second. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter list tool with no output schema, the description covers what is listed and that FQBNs are included, which is enough to invoke correctly. The only gap is failure to clarify its role versus the sibling board-list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already documents the substring filter in the schema. The description's filter examples ('uno', 'esp32', 'nano') mostly duplicate the schema examples, adding little beyond it. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (boards), and adds that FQBNs are returned. The 'all supported' qualifier hints at breadth but never explicitly distinguishes it from the sibling board-list, so an agent must still guess which listing tool is intended.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes an optional name filter and gives examples, which implies the common usage. However, it gives no when-to-use guidance relative to board-list or board-details, leaving sibling selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

burn-bootloaderA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnYesBoard FQBN, e.g. 'arduino:avr:uno'
portNoProgrammer port, e.g. 'COM4' (if the programmer needs one)
programmerYesProgrammer ID, e.g. 'usbasp', 'atmel_ice', 'arduinoasisp'

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, so the safety profile is covered. The description adds non-redundant context: it requires physical hardware and warns to double-check fqbn + programmer, which is exactly the failure mode for this irreversible operation. It omits what actually happens to the existing bootloader/flash contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and mechanism, then the hardware caveat, then the verification warning. No filler and no repetition of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the tool's contract is simple and annotations carry the safety profile, so the description's coverage of prerequisite hardware and pre-flight verification is largely sufficient. It could note the consequences of a mismatched fqbn/programmer to be fully complete for an irreversible operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of fqbn, port, and programmer documented in the schema itself. The description only echoes 'fqbn + programmer' as things to verify and adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (burn) and resource (bootloader) plus the required mechanism (external programmer), which cleanly separates it from the sibling `upload` tool. The examples (USBasp, atmel_ice) pin down the resource unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly signals when this applies: only with extra programming hardware, explicitly 'not a normal upload', which implicitly routes agents to `upload` otherwise. It stops short of naming the alternative tool or stating prerequisites like the board being disconnected from the normal port.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compileA
Read-onlyIdempotent

Compile an Arduino sketch for a board. Verifies code without needing hardware. Returns memory usage and errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoBoard FQBN, e.g. 'arduino:avr:uno'. Omit if set via board-attach.
verboseNoVerbose compiler output (default false)
librariesNoExtra library root paths to include
sketchPathYesPath to sketch folder or .ino file, e.g. '/path/to/Arduino/Blink'
boardOptionsNoBoard options, e.g. 'cpu=atmega328old' for Nano
additionalUrlsNoExtra board-manager URLs (ESP32 etc.)
buildPropertiesNoExtra -D flags, e.g. ['build.extra_flags=-DDEBUG=1']

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description usefully adds that it returns memory usage and errors, but says nothing about build failures timing, dependency/board-attach requirements, or rate/latency behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the hardware-free benefit, then the return contents. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the brief mention of memory usage and errors covers the return shape adequately, and 100% schema coverage handles parameters. The main remaining gap is routing guidance relative to sketch-validate and preprocess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters (fqbn, verbose, libraries, sketchPath, boardOptions, additionalUrls, buildProperties) are already documented with examples in the schema. The description adds no parameter meaning beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Compile an Arduino sketch for a board') that clearly conveys the action. However, it does not distinguish itself from the sibling sketch-validate, which an agent may confuse with a hardware-free code check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Verifies code without needing hardware' implies the build-without-upload scenario, but no explicit when-to-use or when-not-to-use guidance is given, and no alternative (e.g. sketch-validate, upload, preprocess) is named or contrasted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

core-installA
Idempotent

Install a board core, e.g. 'arduino:avr' (Uno) or 'esp32:esp32' (needs additional URL). Takes a while on first install.

ParametersJSON Schema
NameRequiredDescriptionDefault
coreIdYesCore ID, e.g. 'arduino:avr' or 'esp32:esp32'
versionNoPinned version, e.g. '2.0.17'. Omit for latest.
additionalUrlsNoBoard-manager URLs, e.g. ESP32 index JSON URL

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: installation is slow on first run, and certain cores (esp32) need a board-manager URL. It does not cover permissions or output, but for this tool the timing caveat is the key operational fact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core purpose first and the operational caveat second; no filler, every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, no-output-schema install tool with annotations covering safety, the description plus schema gives an agent enough to call it correctly, including the slow first-install expectation. It could say a bit more about prerequisites (e.g., needing the board index URL configured) but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so coreId, version, and additionalUrls are all documented in the schema, including the 'omit for latest' convention. The description's example IDs and the esp32-needs-URL note reinforce rather than extend that, so it sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Install a board core') and illustrates the resource with concrete IDs ('arduino:avr', 'esp32:esp32'). This clearly separates it from siblings like core-upgrade, core-search, and lib-install without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by naming the operation and giving examples, and it usefully notes that esp32 requires an additional URL. However, it never states when to prefer this over core-upgrade, nor any preconditions for installing a core.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

core-listA

List installed board platforms/cores (e.g. arduino:avr) with versions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It conveys that this is a non-mutating enumeration and hints at the shape (platforms with versions), but says nothing about ordering, format, or whether results are cached/refreshed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb and resource and nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, side-effect-free list with no output schema, the description covers what is enumerated and roughly what comes back ('with versions'). Only the exact result shape/ordering is left implicit, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no argument meaning to document; the baseline for a parameterless tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('List') plus resource ('installed board platforms/cores'), with an example format (arduino:avr) and the returned payload ('with versions'). The word 'installed' implicitly separates it from core-search, but no sibling is named, so an agent must infer that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'installed' suggests reaching for this rather than core-search or core-install, but there is no explicit when-to-use statement, no prerequisites, and no named alternative. Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

core-upgradeA
Idempotent

Upgrade installed cores. Omit coreId to upgrade all.

ParametersJSON Schema
NameRequiredDescriptionDefault
coreIdNoCore ID to upgrade, e.g. 'arduino:avr'. Omit for all.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the key traits: not read-only, idempotent, non-destructive. The description adds the bulk scope behavior (omitting coreId upgrades everything), which is useful operational context, but says nothing about network access, failure behavior on individual cores, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with zero filler; the primary action comes first and the conditional modifier second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool whose annotations cover the safety profile and with no output schema to explain, the description is nearly sufficient. Only minor gaps remain around network/prerequisite expectations for a mutation operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents coreId including the omit-for-all semantics and an example value. The description merely restates that same rule without adding format or edge-case detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Upgrade) and resource (installed cores), which implicitly distinguishes it from the similarly named lib-upgrade sibling by resource type. It is clear enough to select correctly, though it never names or contrasts the alternative to remove ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Omit coreId to upgrade all" gives conditional behavior for the two modes but frames it as parameter usage rather than when-to-use guidance. It never says when to prefer this over core-install or lib-upgrade, so usage must be inferred from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

doctorA
Read-onlyIdempotent

Health check for the whole Arduino setup: CLI, cores, libraries, connected boards, pending updates. Run first when anything behaves oddly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context by enumerating what gets inspected (CLI, cores, libraries, boards, updates), which is more than the annotations convey, though it says nothing about output or how failures are reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the scope of the check followed by the usage trigger. No filler or redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only diagnostic with no output schema, the description covers what is checked and when to run it, which is sufficient for correct invocation. A brief note on the shape of the result or follow-up tools would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies since the schema is empty and complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (health check) and resource (whole Arduino setup), then enumerates the diagnostic surface: CLI, cores, libraries, boards, pending updates. This clearly distinguishes it from the sibling list/install/compile tools, which each operate on one narrow resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Run first when anything behaves oddly" gives a clear trigger condition for invoking the tool. It does not name alternatives or exclusions, but the diagnostic-first framing is unambiguous enough that an agent knows when to reach for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export-binaryA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoBoard FQBN, e.g. 'arduino:avr:uno'. Omit if set via board-attach.
outputDirNoExport folder. Defaults to '<sketch>/firmware'.
sketchPathYesPath to sketch folder or .ino file
boardOptionsNoBoard options, e.g. 'cpu=atmega328old'
additionalUrlsNoExtra board-manager URLs (ESP32 etc.)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false. The description adds useful context that it compiles a sketch and writes firmware artifacts into a folder, but does not disclose build duration, auth/toolchain prerequisites, or whether it overwrites existing files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two economical sentences: the action and artifacts come first, followed by the use cases. No filler, front-loaded correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a build-and-export tool with no output schema, the description adequately conveys what it produces and why an agent would pick it. It omits edge cases such as output collision or failure modes, but is otherwise sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are documented in the schema itself. The description only alludes to the folder destination and does not add format or syntax detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific compound verb (compile + export) with clear resource (firmware files .hex/.bin/.elf) and destination (a folder). The agent can distinguish this from the sibling 'compile' tool, which builds but does not necessarily emit exportable artifacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use contexts: flashing with external tools, OTA updates, archiving builds. However, it does not explicitly contrast with the sibling 'compile' or 'upload' or state when-not to use it, leaving the boundary to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lib-depsA
Read-onlyIdempotent

Check the dependency status of a library (what it needs, what's missing). Run before compile when a library install seems incomplete.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLibrary name, optionally pinned: 'AudioZero' or 'AudioZero@1.0.0'

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that it reports needs and gaps, which is useful diagnostic context, but says nothing about output format or failure behavior beyond that. With annotations carrying the burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the primary purpose front-loaded and the usage cue trailing. No filler, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter diagnostic tool with an output schema absent but a described result shape, the description covers enough to invoke it correctly. It could mention what a 'missing' result looks like, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'name' parameter already documents the optional pinning syntax ('AudioZero@1.0.0'). The description adds no parameter detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Check) and resource (dependency status of a library) with a parenthetical clarifying the output (what it needs, what's missing). This clearly separates it from siblings like lib-list, lib-search, and lib-install, though it doesn't name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger: 'Run before compile when a library install seems incomplete.' That is a clear use context. It stops short of naming alternatives (e.g., lib-install) or stating when-not-to-use, so it's strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lib-examplesA
Read-onlyIdempotent

List the bundled examples for installed libraries. Omit name to list examples for all libraries. Great for finding starter code for a sensor/module.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLibrary name, e.g. 'Servo'. Omit for all libraries.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds a use-case hint but no behavioral traits like filtering, sorting, or return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the core action, then parameter guidance, then a use-case tip. Zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter and full schema coverage, the description is complete enough. It could mention output format or whether examples are paths, but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter is well-documented in the schema. The description adds an example ('Servo') in the schema but not in the description itself. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (bundled examples for installed libraries) with clear scope. Does not explicitly differentiate from siblings like lib-search or lib-list, but the 'bundled examples' resource is distinctive enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear usage context: 'Omit name to list examples for all libraries' and 'Great for finding starter code for a sensor/module' indicates when to use. No explicit alternatives or exclusions, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lib-installB
Idempotent

Install a library from Library Manager, e.g. 'Servo' or 'DHT sensor library'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLibrary name, e.g. 'Servo'
noDepsNoSkip installing dependencies (default false)
versionNoPinned version. Omit for latest.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation/idempotency profile is covered. The description adds only the install source ('Library Manager'), which is modest extra context but no detail on side effects like dependency installation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. The examples duplicate the schema's own example, which is the only slight redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter install tool with no output schema, the description is minimally adequate but omits useful context such as whether dependencies are pulled in by default (partly covered by noDeps) or what a successful install returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, noDeps and version are already documented with their own descriptions. The description's examples of library names add marginal value beyond the schema and nothing about version or dependency semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Install a library from Library Manager') and gives concrete examples, which distinguishes it from lib-list/lib-search/lib-upgrade. It does not explicitly name a sibling, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus lib-search or lib-upgrade, nor any prerequisite about resolving a library name first. Usage is only implied by the name and verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lib-listB

List installed Arduino libraries.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoFilter to libraries compatible with this FQBN

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It only states the tool's purpose and omits any details about read-only nature, permissions, output format, or side effects. The word 'installed' hints that it queries local state, but that is minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. For a simple list tool, it is appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with one optional parameter and no output schema. The description states the purpose but does not describe the return value or the effect of the fqbn filter. With no annotations and no output schema, it could provide slightly more context to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single fqbn parameter is fully documented in the schema. The description adds no extra meaning about the parameter or its filtering behavior, which is acceptable given the schema baseline but not value-adding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('installed Arduino libraries'), and the scope word 'installed' distinguishes it from sibling lib-search, which likely searches available libraries. However, it does not explicitly name or contrast with any alternative, so it falls short of the highest clarity tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like lib-search or lib-deps. The sentence implies the basic use case, but it does not state conditions, exclusions, or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lib-upgradeA
Idempotent

Upgrade libraries. Omit name to upgrade all.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLibrary to upgrade. Omit for all.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description does not contradict them. It adds the useful behavioral detail that omitting name upgrades all libraries, but it does not disclose side effects like version replacement or dependency changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very brief and front-loaded: two short sentences convey the action and the key scope rule. It is appropriately sized for a tool with one optional parameter, though it sacrifices some contextual richness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one optional parameter, complete schema coverage, and annotations covering idempotency and destructiveness, the description is largely sufficient. It lacks only explicit routing guidance relative to sibling tools and any note about the result of an upgrade.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'name' has 100% schema description coverage, and the description merely restates the same 'Omit for all' guidance. The description adds no meaning beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Upgrade') and resource ('libraries'), and the additional 'Omit name to upgrade all' clarifies scope. It is clearly distinguishable from sibling tools like lib-install or core-upgrade because the resource and action are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use lib-upgrade versus alternatives such as lib-install or core-upgrade. The only usage hint, 'Omit name to upgrade all,' addresses an invocation detail rather than selecting among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

monitor-snapshotA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoSerial port, e.g. 'COM3'. Omit if the sketch has a board-attach profile (then pass sketchPath).
baudrateNoBaud rate (default 9600). Must match Serial.begin() in the sketch.
timeoutMsNoHow long to listen in ms (default 3000, max 15000)
sketchPathNoSketch folder — used to find the board-attach port when port is omitted.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, but the description adds meaningful behavioral context: it is a bounded snapshot, non-blocking, and returns only what arrived within timeoutMs. This goes beyond the structured annotations, though it could still clarify empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, and every sentence earns its place: the action, the intended use, and the key limitation. No filler or redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple snapshot tool with read-only, idempotent annotations and a fully described optional parameter set, the description is nearly complete. It explains the return concept ('what arrived within timeoutMs') despite there being no output schema, though it doesn't address edge cases like no serial data arriving or connection failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented. The description references timeoutMs but adds little beyond what the schema states; baseline 3 is appropriate since the schema carries the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Read serial output from a board for a few seconds (non-blocking snapshot).' It also explicitly distinguishes itself from a live stream, which is the key sibling alternative, so an agent can tell it apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear use case ('Use for Serial.println debugging') and an explicit when-not: 'NOT a live stream.' It does not name the sibling tool (e.g., upload-and-monitor) as the alternative, so it falls just short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

outdatedA
Read-onlyIdempotent

Show installed cores and libraries that have upgrades available. Empty output means everything is current. Follow up with core-upgrade / lib-upgrade.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe read-only, idempotent operation, so safety is covered. The description adds meaningful output semantics beyond the annotations: 'Empty output means everything is current,' which is valuable given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose and immediately followed by the output interpretation and next step. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param read tool with no output schema, the description supplies the key missing piece (empty = current) and points at the upgrade follow-ups. It could note version/detail granularity of the output, but nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage there is nothing for the description to explain; a 4 baseline applies. No parameter-related gaps exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Show') and resource ('installed cores and libraries that have upgrades available'), so an agent immediately knows it surfaces outdated items. It does not explicitly distinguish itself from siblings like core-list or lib-list, which also enumerate installed items, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the follow-up tools (core-upgrade / lib-upgrade) and the condition that triggers them, giving a usable workflow context. It stops short of stating when NOT to use it versus core-list/lib-list, so no explicit exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preprocessA
Read-onlyIdempotent

Print the preprocessed sketch source (macros expanded, headers resolved) instead of compiling. Useful for debugging #define / conditional-compile issues.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoBoard FQBN, e.g. 'arduino:avr:uno'. Omit if set via board-attach.
sketchPathYesPath to sketch folder or .ino file
additionalUrlsNoExtra board-manager URLs
buildPropertiesNoExtra -D flags

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully explains the output content (preprocessed source) rather than just repeating that it's a read, but says nothing about permissions or how this relates to the compile pipeline beyond 'instead of compiling.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first front-loads what the tool does, the second gives the use case. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only operation, the description covers purpose, output, and use case, and annotations carry the safety profile. The lack of an output schema is mitigated by the description stating that the preprocessed source is printed, though it could note whether output is streamed or returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no parameter-level meaning (e.g., how fqbn or buildProperties affect preprocessing), so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Print') and resource ('the preprocessed sketch source') and clarifies the transformation (macros expanded, headers resolved). It implicitly contrasts with 'compile' via 'instead of compiling,' though it doesn't name the sibling tool directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use case: 'debugging #define / conditional-compile issues.' This tells the agent when the tool is valuable, but offers no explicit exclusions or named alternatives for other debugging scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sketch-archiveB
Idempotent

Zip a sketch (optionally including build artifacts).

ParametersJSON Schema
NameRequiredDescriptionDefault
outputNoOutput .zip path. Defaults to <sketch>.zip next to the sketch.
sketchPathYesPath to sketch folder
includeBuildArtifactsNoInclude build folder in the zip

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), idempotent, and non-destructive, so the safety profile is covered. The description adds only 'optionally including build artifacts', which merely restates the includeBuildArtifacts parameter and says nothing about overwrite behavior for an existing output zip or what happens on failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action first and the optional scope second. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter tool whose schema is fully documented, most of what an agent needs is present, and no output schema means return values need no explanation. However, the total absence of usage or prerequisite context leaves a gap for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the three parameters documented including the output default, so the baseline is 3. The description contributes no additional parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (zip) and resource (sketch), with the scope qualifier that build artifacts may be included. It does not differentiate from adjacent siblings like export-binary or preprocess, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites (e.g., must the sketch be valid first?), and no mention of alternatives such as export-binary. The agent must infer when archiving is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sketch-newA

Create a new Arduino sketch (folder + .ino file with setup()/loop() boilerplate).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFull path of the new sketch folder, e.g. '/path/to/Arduino/MyBlink'

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered by structured data. The description usefully adds what actually gets created (folder plus boilerplate .ino), but says nothing about behavior when the path already exists or where the path is created relative to.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the resource and its side effects are packed efficiently into one line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter creation tool with annotations covering the safety profile and no output schema to explain, the description is nearly complete. The only gap is error/conflict behavior when the target path is occupied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, including a concrete example path, so the schema does the heavy lifting. The description adds nothing about the path format or constraints beyond what the schema already states, which fits the baseline 3 for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new Arduino sketch') and enumerates the concrete artifacts produced (folder + .ino file with setup()/loop() boilerplate). This clearly distinguishes it from read/validate/archive siblings like sketch-validate and sketch-archive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never states when to use this tool versus alternatives such as sketch-archive or compile, nor any prerequisites like whether an existing sketch folder would conflict. Usage is only inferable from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sketch-validateA
Read-onlyIdempotent

Check a sketch folder layout (/.ino) and list its files. Run before compile to catch layout mistakes.

ParametersJSON Schema
NameRequiredDescriptionDefault
sketchPathYesPath to sketch folder or .ino file

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that it lists files and what it validates, but says nothing about the return format or failure behavior; with this annotation coverage, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action and the validated convention front-loaded, and the usage timing second. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param read-only validator with no output schema, the description covers what it checks, what it lists, and when to run it. Only a note on what a failed validation reports (or return shape) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single param already documents 'Path to sketch folder or .ino file'. The description's mention of the '<name>/<name>.ino' layout adds context but not new parameter syntax beyond the schema, so baseline 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Check') and resource ('sketch folder layout') and even names the exact convention it validates ('<name>/<name>.ino') plus the side effect of listing files. This is clearly distinguishable from siblings like compile, preprocess, and sketch-new.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to run it ('Run before compile to catch layout mistakes'), which is strong contextual guidance. It stops short of naming alternatives or when-not-to-use conditions, so it isn't a full routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uploadA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoBoard FQBN, e.g. 'arduino:avr:uno'. Omit if set via board-attach.
portNoUpload port, e.g. 'COM3'. Omit if set via board-attach.
verifyNoVerify flash after upload (default false)
verboseNoVerbose uploader output
sketchPathYesPath to sketch folder or .ino file
boardOptionsNoBoard options, e.g. 'cpu=atmega328old'
additionalUrlsNoExtra board-manager URLs

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, so the safety profile is already covered. The description adds real value beyond that: it discloses the implicit compile step, the board-attach dependency for omitted params, and the port-contention failure mode with Serial Monitor. It doesn't describe post-flash board reset behavior or return output, but that's a minor gap against the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the core action, the parameter-omission rule, and the critical precondition. Front-loaded with the primary action and no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema, the description covers the main preconditions, the implicit compile behavior, and parameter defaults. Residual gaps are small: no explicit statement about board reset after flash or the relationship to 'upload-and-monitor', but annotations carry the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters, including the note that fqbn/port can be omitted if set via board-attach. The description's mention of that same omission rule adds an explanation of why (saved via board-attach), but no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs and resources: compile-if-needed and flash a sketch to a connected board. This is clearly distinguishable from the sibling 'compile' (compile only) and implies a superset operation. It doesn't explicitly name 'upload-and-monitor' as the alternative, so sibling routing is only partially spelled out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context: fqbn/port may be omitted when previously set via board-attach, and a hard precondition that Serial Monitor must be closed because it holds the port lock. It stops short of an explicit when-to-use-this-vs-'upload-and-monitor' comparison, which is the nearest ambiguous alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload-and-monitorA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqbnNoBoard FQBN, e.g. 'arduino:avr:uno'. Omit if set via board-attach.
portNoUpload/monitor port, e.g. 'COM3'. Omit if set via board-attach.
verifyNoVerify flash after upload (default false)
baudrateNoMonitor baud rate (default 9600). Must match Serial.begin().
monitorMsNoHow long to listen after upload in ms (default 4000, max 15000)
sketchPathYesPath to sketch folder or .ino file
boardOptionsNoBoard options, e.g. 'cpu=atmega328old'
additionalUrlsNoExtra board-manager URLs

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/destructive/idempotent profile, so the description only needs to add process detail — and it does, disclosing the ordered sequence (upload, wait for reboot, then serial capture). It does not mention permission/auth needs or that existing firmware is overwritten, which the destructiveHint largely covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the value proposition before the mechanics. Every clause earns its place with no repetition of schema data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter composite tool with no output schema, the description conveys the full flow and result type (serial output) succinctly. It could be slightly richer about what the returned snapshot looks like or failure/timeout behavior, but nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (including baudrate requirements, monitorMs bounds, and board-attach fallback for port/fqbn) are fully documented in the schema. The description adds only the general notion of a serial snapshot and no extra parameter syntax or defaults, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb+resource pair ('Flash a sketch', 'captures a serial snapshot') and states the composite scope ('Uploads, waits for the board to reboot, then captures'). This implicitly separates it from the sibling pair 'upload' + 'monitor-snapshot', though neither alternative is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context via 'one call from new code to visible result', telling the agent this is the shortcut when a serial reading is wanted right after flashing. It stops short of explicit when-not guidance (e.g., 'use plain upload when you don't need serial output').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 26 tool updatesv1.3.1
    • First observedboard-attach
    • First observedboard-details
    • First observedboard-list
    • First observedboard-listall
    • First observedburn-bootloader
    • First observedcompile
    • First observedcore-install
    • First observedcore-list
    • First observedcore-search
    • First observedcore-upgrade
    • First observeddoctor
    • First observedexport-binary
    • First observedlib-deps
    • First observedlib-examples
    • First observedlib-install
    • First observedlib-list
    • First observedlib-search
    • First observedlib-upgrade
    • First observedmonitor-snapshot
    • First observedoutdated
    • First observedpreprocess
    • First observedsketch-archive
    • First observedsketch-new
    • First observedsketch-validate
    • First observedupload
    • First observedupload-and-monitor

TDQS

A3.5/5.0

Scored across 26 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers