arduino-mcp-server
This server gives an AI assistant full control over Arduino hardware through natural language, wrapping arduino-cli as MCP tools.
Detect connected boards, serial ports, and infer FQBNs
Check, install, and configure Arduino CLI
Install board cores automatically
Compile sketches for target board FQBNs
Upload sketches to boards, optionally waiting for a device-ready serial signal
Open, read, write, expect, list, and close stateful serial monitor sessions
Capture one-shot serial snapshots
Run electrical safety preflights covering power, wiring, battery charge rate, battery polarity, and ESP32-family pin risks
Get detailed board metadata and pin/capability references
List and search board reference data
Trigger safe, guardrailed hardware workflows while allowing explicit risk overrides
Allows AI assistants to control Arduino hardware: detect boards, compile and upload sketches, monitor serial, and run safety checks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@arduino-mcp-servercompile and upload Blink to Arduino Uno"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
arduino-mcp-server
Give your AI assistant full control over Arduino — compile, upload, monitor serial, and verify wiring safety, all through natural language.
Part of the HardwareMCP ecosystem — open-source MCP servers that bridge AI to physical hardware.
What this does
AI assistants can control Jira, GitHub, and databases. They can't talk to a microcontroller — until now.
arduino-mcp-server wraps arduino-cli into an MCP server so your AI can:
Detect connected boards and ports automatically
Compile and upload sketches without touching the terminal
Monitor serial output with stateful sessions (open, read, expect, write, close)
Run electrical safety checks before sending commands to hardware
Manage dependencies — cores, libraries, and CLI installation
Related MCP server: MCP Arduino Server
Quick Start
Install:
npm install -g arduino-mcp-serverAdd to Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"arduino": {
"command": "npx",
"args": ["-y", "arduino-mcp-server"],
"env": {
"ARDUINO_CLI_PATH": "arduino-cli",
"ARDUINO_SKETCH_ROOT": "/path/to/your/sketches"
}
}
}
}Requires arduino-cli on your PATH, or let the server install it for you.
What you can say
Bootstrap from scratch:
"Check if Arduino CLI is installed and set everything up for an Arduino Uno."
Compile and upload:
"Compile my Blink sketch and upload it to the Uno on COM6."
Serial monitoring:
"Open serial on COM6 at 115200 and wait until the device prints READY."
Safety-first workflows:
"Run a safety preflight for an Arduino Uno with 5V on pin 13 at 25mA before I send commands."
Tools
Tool | What it does |
| Check Arduino CLI installation and version |
| Guide through arduino-cli installation |
| Detect connected boards and infer FQBNs |
| List all connected Arduino boards |
| List available serial ports |
| Check/install board cores |
| Compile a sketch for a target board |
| Upload compiled sketch to a board |
| Upload and wait for device ready signal |
| Open a stateful serial session |
| Read buffered serial data |
| Wait for a pattern in serial output |
| Send data over serial |
| Close a serial session |
| List active serial sessions |
| Quick one-shot serial read |
| Electrical safety check before hardware ops |
| Get pin/capability details for a board |
| List all boards arduino-cli supports |
| Browse board pin reference |
| Search board reference by keyword |
Resources:
arduino://boards/reference— structured board pin/capability reference
Prompts:
arduino-cli-bootstrap-policy— policy for arduino-cli setup behaviorarduino-setup-assistant— guided Arduino environment setup
Safety preflight guardrails
safety_preflight (and the safetyContext passed to upload_sketch, upload_and_wait_ready, and serial_write) now also covers battery and ESP32-family pin footguns, driven by small, extensible data tables rather than hardcoded to any one board:
Battery charge-rate (C-rate) check — pass a battery object (capacityMah, chargeCurrentMa, chemistry) and the check computes chargeCurrentMa / batteryCapacityMah and flags it:
BATTERY_CRATE_UNSAFE(hard, blocking) above 1CBATTERY_CRATE_CAUTION(soft, non-blocking) above 0.5C
Generic small LiPo cells are commonly rated for roughly a 0.5–1C safe charge current, so the message spells out the math, e.g. "380mA into a 100mAh cell is a 3.8C rate — well above the ~0.5-1C safe range for typical small LiPo cells; verify your cell's actual rated charge current before proceeding." If chargeCurrentMa is omitted, it's inferred from a small board → onboard-charge-IC lookup table (currently seeded with Seeed XIAO ESP32S3, XIAO ESP32S3 Sense, and XIAO ESP32C3 — see data/battery-charge-ic-reference.json, easy to extend with more boards). These are approximate, manufacturer-published figures — verify against the live datasheet/wiki for your exact board revision before trusting them in a production workflow.
Battery polarity confirmation — when battery.connecting: true (or any battery field is set) but battery.polarityConfirmed isn't explicitly true, the preflight blocks with BATTERY_POLARITY_UNCONFIRMED and a reminder to never assume BAT+/BAT- from wire color. On Seeed XIAO boards it cites the official convention: the negative pad is closest to the USB-C port, positive is farthest from it.
ESP32-family pin safety (table-driven per board via data/board-reference.json):
SPI-flash pins (GPIO6-11 on classic ESP32 WROOM/WROVER modules) — hard error (
SPI_FLASH_PIN_USED); wiring these prevents boot.Boot-strapping pins (GPIO0/2/12/15 on classic ESP32) — caution; usable at runtime but risky if externally held during boot/reset (existing check).
Input-only pins with no internal pull resistor (GPIO34-39 on classic ESP32) — caution (
NO_INTERNAL_PULL_PIN); add an external pull-up/pull-down if using them as buttons/switches.Seeed XIAO ESP32S3 — modeled with its 11 usable GPIO (D0-D10), default I2C on D4/D5, and an informational note surfaced whenever D6/D7 are wired: they're hardware UART1 TX/RX by default, but enabling "USB CDC on Boot" frees them as plain GPIO.
Board data for all of the above lives in JSON, keyed by board id/FQBN, so more boards can be added without touching guardrail logic.
Configuration
Variable | Default | Description |
|
| Path to arduino-cli binary |
| (none) | Restrict sketch paths to this directory |
Development
git clone https://github.com/hardware-mcp/arduino-mcp-server
cd arduino-mcp-server
npm install
npm run typecheck
npm test
npm run build
npm run devPart of HardwareMCP
This server is part of the HardwareMCP ecosystem — a collection of MCP servers that give AI assistants real control over physical hardware.
License
MIT — see LICENSE.
Support
Available Tools
21 toolsarduino_cli_doctorArduino CLI DoctorARead-only
Check whether arduino-cli is available and return OS-specific installation instructions if missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; the description adds the conditional behavior of returning installation instructions if missing, which is transparent and consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single clear sentence with no wasted words, perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of an output schema, the description is complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description adds no param info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks arduino-cli availability and provides installation instructions if missing, a specific verb+resource that distinguishes it from siblings like install_arduino_cli.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before other Arduino operations, but does not explicitly state when to use this tool vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_sketchCompile SketchBDestructiveIdempotent
Compile an Arduino sketch with a specific board FQBN.
| Name | Required | Description | Default |
|---|---|---|---|
| sketchPath | Yes | Path to sketch folder or .ino file. | |
| fqbn | Yes | Board FQBN, e.g. arduino:avr:uno. | |
| exportBinaries | No | If true, export binaries into sketch folder. | |
| clean | No | If true, clean build cache before compile. | |
| buildPath | No | Optional build output directory. | |
| warnings | No | ||
| autoInstallCore | No | If true (default), auto-install missing board core before compile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint and idempotentHint. The description adds no further behavioral context, such as the fact that compilation may export binaries or modify build directories. It does not contradict annotations, but adds minimal value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and to the point. It contains no unnecessary words or information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters and an output schema, the description is minimal. It does not explain prerequisites (e.g., core installation), output behavior, or response format. The output schema may compensate, but for a complex tool like compilation, more context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for most parameters (86% coverage). The description does not add any additional meaning beyond what is in the schema, such as clarifying the format of sketchPath or the meaning of enums like warnings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles an Arduino sketch with a specific board FQBN. It uses a specific verb and resource, making the purpose clear. However, it does not explicitly differentiate from sibling tools like upload_sketch, which also involve compilation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives or when not to use it. For example, it does not mention that the board core must be installed beforehand or that upload_sketch is needed for flashing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_hardwareDetect HardwareARead-only
Detect connected Arduino-compatible hardware, infer board/FQBN candidates, and generate next compile/upload commands.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Optional exact port filter, e.g. COM6 or /dev/ttyACM0. | |
| includeBoardDetails | No | If true, query `arduino-cli board details` for selected FQBN candidates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by explaining that it infers board/FQBN and generates commands. There is no contradiction, and the description provides additional context about the tool's behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 14-word sentence that is front-loaded with the core action. Every word contributes meaning, and there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (mentioned in context) and the description covering the main purpose (detect, infer, generate commands), the description is complete for this tool's complexity. It adequately differentiates from numerous siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions in the input schema. The description does not add new meaning beyond the schema; it focuses on the tool's overall function rather than parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs 'detect', 'infer', 'generate' and clearly states the resource (Arduino-compatible hardware) and outcomes (board/FQBN candidates, next compile/upload commands). It effectively distinguishes from sibling tools like 'list_connected_boards' and 'get_board_details' by emphasizing inference and command generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before compile/upload by saying 'generate next compile/upload commands', but does not explicitly state when to use over alternatives like 'list_connected_boards' or 'get_board_details'. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ensure_core_installedEnsure Core InstalledADestructiveIdempotent
Ensure the Arduino core required by a board FQBN is installed. Can auto-install via arduino-cli core install.
| Name | Required | Description | Default |
|---|---|---|---|
| fqbn | No | Board FQBN, e.g. arduino:avr:uno. | |
| coreId | No | Core ID, e.g. arduino:avr. | |
| autoInstall | No | If true (default), install missing core automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, covering the core behavioral traits. The description adds the command used (arduino-cli core install) but does not elaborate on failure modes or prerequisites like network access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the core purpose, and contains no unnecessary words. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of annotations, full schema coverage, and an output schema, the description is largely complete. It explains the tool's operation and the auto-install mechanism, though it could be slightly more explicit about error handling or invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not detail individual parameters beyond mentioning FQBN and auto-install. The schema itself provides clear descriptions, so the description adds little additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: ensuring the Arduino core for a board FQBN is installed, with auto-install capability. It uniquely identifies this as a core management tool distinct from sibling tools like compile_sketch or install_arduino_cli.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a core is required for a board, but provides no explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, though siblings include other installation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_board_detailsGet Board DetailsARead-only
Get detailed board metadata from arduino-cli for a specific FQBN.
| Name | Required | Description | Default |
|---|---|---|---|
| fqbn | Yes | Board FQBN, e.g. arduino:avr:uno. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description's mention of 'Get' is consistent. No additional behavioral context (e.g., authentication, caching) beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler. Efficient and front-loaded with key action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with 1 param, output schema present. Description is adequate but could mention prerequisites (e.g., core installed) for completeness. Safe to use with read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description repeats the schema's example (arduino:avr:uno). No additional semantics provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Get', resource 'detailed board metadata', and scope 'for a specific FQBN'. Distinguishes from siblings like list_supported_boards by focusing on a single board query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage (when you have an FQBN), but no explicit guidance on when to use versus alternatives like search_board_reference or list_supported_boards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_arduino_cliInstall Arduino CLIADestructiveIdempotent
Attempt to install arduino-cli for the current OS using available package managers, then verify and configure CLI path.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Install method. Default `auto` tries OS-relevant methods in order. | |
| setCliPathInProcess | No | If true (default), set ARDUINO_CLI_PATH in this MCP process after install. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint, idempotentHint, openWorldHint. The description adds that it 'attempts' install and configures CLI path, but does not elaborate on side effects, idempotency details, or failure behavior beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (one sentence, 20 words) and front-loaded with the key action. It could be more informative about 'configure CLI path' but remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an installation tool with multiple methods and output schema, the description is adequate but lacks details on system modifications, prerequisites, or expected runtime. The output schema exists but is not referenced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with clear descriptions and enums. The tool description does not add any parameter-specific meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action: install arduino-cli, using package managers, then verify and configure. This clearly distinguishes it from sibling tools like compile_sketch or upload_sketch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when arduino-cli needs to be installed, but does not explicitly state when to use versus alternatives like compile_sketch. No exclusion or prerequisite guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_board_referenceList Board ReferenceARead-only
List local board reference entries with pin/spec metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is clear. The description adds scope ('local') and content ('pin/spec metadata'), providing useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the purpose. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, full annotations, and the presence of an output schema, the description sufficiently covers the tool's functionality. It states what it lists and adds relevant output details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. The description does not need to add parameter details, and it does not, but it hints at the output content ('pin/spec metadata').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'List' and the resource 'local board reference entries' with added detail 'with pin/spec metadata'. This clearly distinguishes it from the sibling tool 'search_board_reference', which implies a search operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing all local board references, but does not explicitly state when to use this tool over alternatives like 'search_board_reference'. No exclusion criteria or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connected_boardsList Connected BoardsARead-only
List connected boards and serial ports detected by arduino-cli.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the safety profile is clear. The description adds the specific function (listing connected boards/ports) but does not elaborate on other behavioral traits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists, annotations present), the description fully covers what the tool does. No additional detail is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100% trivially. The description adds context about what is listed (boards and serial ports) beyond the empty schema, justifying a baseline 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('connected boards and serial ports'), clearly distinguishing it from siblings like list_serial_ports (likely only ports) and list_supported_boards (all known boards).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as list_serial_ports or list_supported_boards. No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serial_portsList Serial PortsARead-only
List serial ports and any detected board metadata using arduino-cli. Works on Windows/macOS/Linux.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds that the tool uses arduino-cli and is cross-platform, which are minor behavioral traits. No additional details about side effects, permissions, or error conditions are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences—and front-loads the core purpose. Every sentence adds value: the first states the action and result, the second confirms platform compatibility. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is largely complete for a simple list operation. It covers the action, tool dependency, and platform support. However, it does not hint at what the output schema contains (e.g., fields like port name, board type).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100%, so the description does not need to add parameter details. The baseline for no parameters is 4, and the description adequately covers the tool's general functionality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'serial ports', specifying that it also retrieves detected board metadata using arduino-cli. This effectively distinguishes it from sibling tools like list_connected_boards which list boards, not ports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description notes cross-platform support (Windows/macOS/Linux), it does not provide guidance on when to use this tool versus alternatives such as list_connected_boards or serial-related tools. The context of platform compatibility is helpful but insufficient for distinguishing usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_boardsList Supported BoardsARead-only
List supported/installable boards from the local arduino-cli index.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Optional case-insensitive filter for name/FQBN. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds value by specifying 'from the local arduino-cli index', indicating it does not perform network fetches. This clarifies the deterministic nature beyond the annotation. No behavioral contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the tool's purpose without any extraneous words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no nested objects, output schema exists), the description adequately covers the need to know that it lists boards from a local index. It does not explain return value structure (handled by output schema) or filtering behavior beyond the search parameter, but the context is sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single optional parameter 'search', so the baseline of 3 applies. The description does not add any additional semantic information about the parameter beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list') and the resource ('supported/installable boards') along with the source ('local arduino-cli index'), making the purpose specific and distinct from siblings like list_connected_boards. However, it does not explicitly differentiate itself from list_board_reference or search_board_reference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., search_board_reference, list_board_reference, get_board_details). There is no mention of prerequisites or context that would help an agent decide which tool to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_serial_snapshotRead Serial SnapshotARead-only
Capture serial output for a bounded duration from a given port.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | Serial port path, e.g. COM6 or /dev/ttyACM0. | |
| baudRate | No | Baud rate. Default: 9600. | |
| durationMs | No | Capture duration in ms. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds the 'bounded duration' constraint. However, it does not explain what happens after capture (e.g., session handling, return format) or any side effects. With annotations covering the read-only nature, the description provides some added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no wasted words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (not shown) for return values. The description is brief but covers the core action. Given the context of many sibling tools, a bit more differentiation would be beneficial, but it is still complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add extra meaning beyond what the schema provides (port, baudRate, durationMs). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Capture), resource (serial output), and scoping (bounded duration, from a given port). This distinguishes it from sibling tools like serial_read (which reads available data) or serial_open_session (which opens a persistent session).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., serial_read for continuous reading, serial_expect for pattern matching). No mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safety_preflightSafety PreflightARead-only
Run electrical preflight checks (voltage/current/pin risks) before upload or serial write operations.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | Board name/id (preferred when known). | |
| fqbn | No | Board FQBN when known. | |
| port | No | Optional port for automatic board inference. | |
| wiring | No | ||
| power | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'readOnlyHint': true already indicates this is a safe, read-only operation, and the description's 'Run electrical preflight checks' is consistent with that. The description adds behavioral context by specifying the checks involve 'voltage/current/pin risks', which goes beyond the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and timing. Every word is necessary; there is no filler. It is easy to read and efficiently conveys the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (none required), nested objects, and an output schema, the description captures the core purpose and when to use it. It does not explain the return value, but the output schema exists to handle that. The description is sufficiently complete for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters (board, fqbn, port, wiring, power) with decent detail, achieving about 60% coverage. The description adds no additional parameter-level information, so it does not improve understanding beyond the schema. This is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run', the resource 'electrical preflight checks', and the scope 'voltage/current/pin risks'. It also specifies the timing 'before upload or serial write operations', making it distinct from sibling tools like 'compile_sketch' or 'upload_sketch'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'before upload or serial write operations', providing clear context for when to use this tool. While it does not list when not to use it or alternatives, the context is sufficient for an agent to differentiate it from sibling tools, which are about other operations like compilation or serial monitoring.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_board_referenceSearch Board ReferenceARead-only
Search local board reference by board name, alias, id, or FQBN.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds 'local' context but does not elaborate on search behavior (e.g., case-sensitivity, partial matching, empty results). Not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no fluff, front-loaded with verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, return value explanation is not needed. The description covers the core functionality for a simple search tool with one parameter. Missing error/empty result handling, but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains that the query parameter can be a board name, alias, id, or FQBN, adding significant meaning beyond the schema's string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches local board reference and specifies searchable fields (name, alias, id, FQBN). It distinguishes from siblings like list_board_reference (lists all) and get_board_details (details for one), though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_board_reference or get_board_details, nor any exclusions or context prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_close_sessionSerial Close SessionBDestructiveIdempotent
Close a serial session and release its port lock.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true. Description adds 'release its port lock' but omits error behavior (e.g., invalid session).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 10 words, no redundancy. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists but not shown; description omits parameter explanation. For a one-param tool, missing param info is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter sessionId is undocumented in both schema (0% coverage) and description. Agent gets no clue about its meaning or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'close' on resource 'serial session' and the effect 'release its port lock'. It distinguishes from sibling tools like serial_open_session and serial_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use or when not to use. Lacks prerequisites (e.g., session must be open) or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_expectSerial ExpectARead-only
Wait for a string pattern in a serial session buffer with timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | ||
| pattern | Yes | ||
| timeoutMs | No | ||
| caseSensitive | No | ||
| fromOffset | No | Optional explicit cursor offset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds timeout behavior but does not mention whether the buffer is consumed or side effects; no contradiction, but limited disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing details on behavior upon timeout, pattern matching semantics (regex/literal), or return format; despite output schema, description is too sparse for a tool with 5 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (20%) and the description adds no extra meaning to parameters like pattern or timeoutMs beyond their names; fails to compensate for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'wait', resource 'serial session buffer', and condition 'with timeout', distinguishing it from siblings like serial_read and serial_write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like read_serial_snapshot; the description implies usage when expecting a pattern, but lacks exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_list_sessionsSerial List SessionsARead-only
List active serial sessions and current port lock state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond readOnlyHint by specifying both sessions and lock state, but does not detail behaviors like scope or prerequisites; annotations already cover read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no excess verbiage, front-loaded with the key action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of output schema, the description adequately defines the tool's purpose, though it could briefly mention expected output format or use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage is 100%, so the description need not add parameter info; baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists active serial sessions and port lock state, distinguishing it from siblings that open, close, read, or write sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives; context from name and siblings implies usage for listing, but lacks when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_open_sessionSerial Open SessionBDestructive
Open a stateful serial monitor session with port lock ownership.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | Serial port path, e.g. COM6 or /dev/ttyACM0. | |
| baudRate | No | Baud rate. Default: 9600. | |
| ttlMs | No | Session lease TTL in ms. | |
| maxBufferBytes | No | Max in-memory receive buffer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true. The description adds 'stateful' and 'port lock ownership', which clarifies side effects. However, it omits details like session lifetime, exclusivity, or error states. It adds some value beyond annotations but is still minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler. Every word contributes to meaning. It is efficiently front-loaded with the core action and key attributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and 4 parameters, the description does not explain how the tool fits into a workflow (e.g., opening a session for subsequent read/write/close operations). Given the many sibling tools, more context is needed to guide the agent's tool selection sequence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description does not add extra meaning beyond 'port lock ownership', which is not a parameter. No compensation needed, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (open), resource (serial monitor session), and distinctive attributes (stateful, port lock ownership). This distinguishes it from siblings like read_serial_snapshot and serial_read, which operate differently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention prerequisites, context (e.g., use before serial_read/write), or when not to use. Sibling tools like serial_list_sessions and serial_close_session are relevant but not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_readSerial ReadARead-only
Read buffered bytes from an open serial session.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | ||
| fromOffset | No | Read offset cursor. Defaults to current buffer start. | |
| maxBytes | No | Maximum bytes to return. | |
| encoding | No | Output encoding. Default: utf8. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, which the description reinforces. It does not disclose additional behavioral traits such as blocking behavior, how buffering works, or what happens when no bytes are available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. It efficiently conveys the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with robust annotations and an output schema, the description adequately covers the tool's purpose and prerequisite. It lacks details like blocking behavior but remains sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 75% of parameters with descriptions; the tool description adds no further parameter details. For a high schema coverage scenario, this baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the action (Read), the resource (buffered bytes), and the prerequisite (open serial session), clearly distinguishing it from siblings like serial_write, serial_open_session, and read_serial_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as read_serial_snapshot or other session tools. The description does not specify prerequisites beyond 'open serial session' or indicate suitable scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_writeSerial WriteBDestructive
Write bytes to an open serial session. Safety preflight is enforced unless explicitly skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | ||
| data | Yes | Payload to send. | |
| encoding | No | Payload encoding. Default: utf8. | |
| lineEnding | No | Optional line ending append. | |
| unsafeSkipPreflight | No | If true, bypasses safety_preflight checks. Use only with explicit user acceptance. | |
| safetyContext | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds 'Safety preflight is enforced unless explicitly skipped,' which provides context about safety checks but does not disclose other behaviors like session validity requirements or blocking nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficient with no wasted words. However, it could be slightly expanded to include more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, a nested safetyContext object, and an output schema (not shown), the description lacks details about return values, error handling, and usage sequence relative to other serial tools. It is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, meaning sessionId and safetyContext lack descriptions in the schema. The description does not add any parameter-specific information to compensate for these gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Write bytes to an open serial session,' which is a specific verb+resource combination. It distinguishes from siblings like serial_read (read) or serial_open_session (open), so purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after opening a session but does not explicitly state when to use this tool versus alternatives like serial_write vs serial_expect. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_and_wait_readyUpload And Wait ReadyADestructive
Upload a sketch and wait for a serial readiness pattern, handling post-upload reset/re-enumeration windows.
| Name | Required | Description | Default |
|---|---|---|---|
| sketchPath | Yes | Path to sketch folder or .ino file. | |
| port | Yes | Serial port path, e.g. COM6 or /dev/ttyACM0. | |
| fqbn | No | Optional board FQBN when auto-detect is insufficient. | |
| verify | No | Verify uploaded binary when supported. | |
| autoInstallCore | No | If true (default), auto-install missing board core when fqbn is provided. | |
| readyPattern | No | Optional serial text pattern to wait for after upload. | |
| readyTimeoutMs | No | How long to wait for readyPattern. | |
| readyBaudRate | No | Baud rate for readiness check. Default 115200. | |
| readyCaseSensitive | No | If true, readiness matching is case-sensitive. | |
| unsafeSkipPreflight | No | If true, bypasses safety_preflight checks. Use only when user explicitly accepts risk. | |
| safetyContext | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive hint (true). The description adds context about handling post-upload reset and re-enumeration windows, which is valuable beyond the annotation. However, it does not mention safety preflight or other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant words, efficiently conveying the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, destructive, output schema exists), the description covers the essential upload-wait behavior and reset handling. It does not mention error conditions or prerequisites, but output schema likely covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 91%, so parameters are already well-described. The description does not add meaning beyond the schema's own descriptions, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool uploads a sketch and waits for a serial readiness pattern, highlighting its unique combination of actions. This distinguishes it from siblings like upload_sketch (upload only) and serial_expect (wait only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a readiness pattern is needed after upload, but does not explicitly state when to use alternatives like upload_sketch without waiting. No exclusions or when-not scenarios are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_sketchUpload SketchBDestructiveIdempotent
Upload a compiled sketch to a connected board/port.
| Name | Required | Description | Default |
|---|---|---|---|
| sketchPath | Yes | Path to sketch folder or .ino file. | |
| port | Yes | Serial port path, e.g. COM6 or /dev/ttyACM0. | |
| fqbn | No | Optional board FQBN when auto-detect is insufficient. | |
| verify | No | Verify uploaded binary when supported. | |
| autoInstallCore | No | If true (default), auto-install missing board core when fqbn is provided. | |
| unsafeSkipPreflight | No | If true, bypasses safety_preflight checks. Use only when user explicitly accepts risk. | |
| safetyContext | No | Optional electrical context for preflight checks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | |
| command | No | |
| data | No | |
| raw | No | |
| rawTail | No | |
| stage | No | |
| errorCode | No | |
| retryable | No | |
| reasonCodes | No | |
| nextActions | No | |
| note | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate destructive and idempotent behavior, the description adds no further behavioral context. It does not mention that uploading overwrites the board's firmware, may cause a reset, or that safety checks (like preflight) are bypassed by unsafeSkipPreflight. With destructiveHint already present, the description should add context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no waste. It is front-loaded and efficient. However, it could be slightly expanded without losing conciseness (e.g., adding a brief note about prerequisites). Still, it earns a 4 for avoiding unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, safety implications), the description is too minimal. It does not explain the tool's role in the workflow (e.g., after compilation), when to use unsafeSkipPreflight, or how safetyContext interacts. The output schema exists, so return values are covered, but the description still lacks essential context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions). The description adds no additional meaning beyond what the schema provides. For example, it does not explain that safetyContext is used for preflight checks or that autoInstallCore automates core installation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (upload), the resource (compiled sketch), and the target (connected board/port). It distinguishes from sibling tools like compile_sketch (compilation vs upload) and read_serial_snapshot (different purpose).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives, no prerequisites, and no exclusion criteria. For example, it does not mention that compile_sketch should be run first, or that safety_preflight is recommended.
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. Dates show when Glama detected each change.
21 tool updates
v0.2.8- First observed
arduino_cli_doctor - First observed
compile_sketch - First observed
detect_hardware - First observed
ensure_core_installed - First observed
get_board_details - First observed
install_arduino_cli - First observed
list_board_reference - First observed
list_connected_boards - First observed
list_serial_ports - First observed
list_supported_boards - First observed
read_serial_snapshot - First observed
safety_preflight - First observed
search_board_reference - First observed
serial_close_session - First observed
serial_expect - First observed
serial_list_sessions - First observed
serial_open_session - First observed
serial_read - First observed
serial_write - First observed
upload_and_wait_ready - First observed
upload_sketch
TDQS
Each tool targets a distinct aspect of the Arduino workflow: installation, board info, compilation, upload, serial operations, and safety checks. Even seemingly overlapping tools like list_connected_boards and list_serial_ports have different purposes (board detection vs port listing). No ambiguity.
Most tools follow verb_noun pattern using underscores (e.g., compile_sketch, detect_hardware). However, a few tools like arduino_cli_doctor and safety_preflight break the pattern by starting with a server-specific prefix or using a verb+noun without underscore. Overall consistent but with minor deviations.
21 tools cover the full Arduino development lifecycle—installation, board management, compilation, upload, serial monitoring, and safety checks. Each tool has a clear role, and the count is appropriate for the domain without being excessive.
The tool surface covers core Arduino CLI operations: installation, board detection, compilation, upload, and serial communication. Minor gaps exist, such as library management (install/list libraries) and core updates, but these are secondary to the main workflow. No critical dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.
Production-readiness for your AI coding agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants like Claude to control Arduino boards in real-time, allowing users to turn LEDs on and off through natural language commands using the Model Context Protocol and Firmata.11-
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Arduino development through arduino-cli, allowing sketch management, code compilation and uploading, library and board operations, serial monitoring, and AI-powered circuit diagram generation using WireViz.10-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Arduino boards for compiling, uploading sketches, and serial communication.6MIT
- AlicenseAqualityDmaintenanceAutomates Arduino CLI workflows including dependency checks, compile/upload, serial monitoring, and safety preflight checks, all running locally on your machine.211223MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hardware-mcp/arduino-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server