Arduino MCP Server
Provides tools for interacting with Arduino CLI, enabling AI agents to manage boards, install cores and libraries, create, compile, and upload sketches, monitor serial output, and convert images to C arrays for displays.
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 Serverlist connected boards"
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
A comprehensive Model Context Protocol (MCP) server for Arduino CLI interactions, built with FastMCP. This server enables AI agents to seamlessly interact with Arduino CLI for development, debugging, code verification, and more.
Features
π οΈ Tools (All 3 MCP Pillars)
CLI Management: Check installation, get help for commands
Board Detection: List connected boards, find Arduino ports, auto-detect best port
Core Management: Search, install, and list Arduino cores
Library Management: Search, install, and list Arduino libraries
Sketch Operations: Create, compile, and upload sketches
Enhanced Serial Monitor: Bidirectional communication, buffering, file export
Image Conversion: Convert images to C arrays for display applications (requires ImageMagick)
Configuration: Initialize config, clean cache
π Resources
sketch://{path}- Read Arduino sketch files (.ino, .cpp, .h)arduino-config://main- Access Arduino CLI configurationboard-info://{fqbn}- Get detailed board information
π‘ Prompts
Blink LED Example: Basic LED blinking sketch template
Sensor Reading Example: Analog sensor reading template
Sketch Project Workflow: IDE-like experience with board attach
Full Development Workflow: Complete Arduino development guide
Troubleshooting Guide: Common issues and solutions
π Advanced Features
Logging: Comprehensive logging with info, warning, error levels (source)
Progress Reporting: Real-time progress updates for long operations (source)
Context Integration: Full MCP context support for enhanced interactions (source)
Annotations: Proper tool annotations for better UX (readOnly, destructive, openWorld hints)
Related MCP server: FastMCP Server
Prerequisites
Python 3.10+
uv (Python package manager)
ImageMagick (optional, for image conversion)
Environment Variables
Customize the server behavior with these optional environment variables:
Variable | Default | Description |
|
| Path to Arduino CLI executable |
| OS-specific* | Override default sketch directory |
|
| Serial buffer size in MB |
| Auto-detected | Custom Arduino CLI config file path |
*Default sketch directories:
Windows:
%DOCUMENTS%\ArduinomacOS:
~/Documents/ArduinoLinux:
~/Arduino
Installation
Clone this repository:
git clone <your-repo-url>
cd arduino-mcpInstall dependencies with uv:
uv syncInstall Arduino CLI:
# Windows (using winget)
winget install ArduinoSA.CLI
# macOS
brew install arduino-cli
# Linux
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | shUsage
Running the Server
Using uv:
uv run python -m arduino_mcp.serverUsing FastMCP CLI:
uv run fastmcp run arduino_mcp/server.py:mcpFor HTTP transport:
uv run fastmcp run arduino_mcp/server.py:mcp --transport http --port 8000Configuration for MCP Clients
For Cursor IDE
The project includes .cursor/mcp.json configuration. Cursor will automatically detect it when you open the project.
Alternatively, add to your global Cursor settings:
{
"mcpServers": {
"arduino": {
"command": "uvx",
"args": ["arduino-mcp"]
}
}
}For Claude Desktop
Add to your MCP configuration file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"arduino": {
"command": "uvx",
"args": ["arduino-mcp"]
}
}
}Testing
To verify the Arduino MCP server is working:
# Test import
uv run python -c "from arduino_mcp import mcp; print('Server imports successfully')"
# Start the server
uv run fastmcp run arduino_mcp/server.py:mcpOnce running in Cursor IDE, you can test the tools directly in the chat interface.
Example Workflows
1. Project-Based Workflow with Board Attach (Recommended)
# Find your connected board
list_connected_boards()
# Create a new sketch
create_new_sketch("MyProject")
# Attach board settings to sketch (IDE-like experience!)
arduino_cli_command("board attach -p COM3 -b arduino:avr:uno MyProject")
# This creates sketch.yaml with your board settings
# Now compile and upload without repeating FQBN/port
compile_sketch("MyProject", "") # Reads from sketch.yaml
upload_sketch("MyProject", "", "") # Reads from sketch.yaml
# Monitor serial output with bidirectional communication
serial_monitor(
port="COM3",
baudrate=115200,
duration=30,
send_commands="LED ON\nLED OFF", # Send commands to device
save_to_file="output.log" # Save buffer to file
)Why use board attach?
Settings persist per-sketch (not globally)
No need to repeat FQBN and port every time
Team-friendly (sketch.yaml can be version controlled)
Works exactly like Arduino IDE 2.x
2. Basic Setup and Blink LED
# Check if Arduino CLI is installed
check_arduino_cli_installed()
# Find connected Arduino boards
list_connected_boards()
find_arduino_ports()
get_best_port()
# Create a new sketch
create_new_sketch("BlinkLED", "./sketches")
# Use the blink_led_example prompt for code template
# Compile the sketch
compile_sketch("./sketches/BlinkLED", "arduino:avr:uno")
# Upload to board
upload_sketch("./sketches/BlinkLED", "arduino:avr:uno", "COM3")2. Basic Setup and Blink LED
# Check if Arduino CLI is installed
arduino_cli_command("version")
# Find connected Arduino boards
list_connected_boards()
list_ports(arduino_only=True)
# Create a new sketch
create_new_sketch("BlinkLED", "./sketches")
# Use the blink_led_example prompt for code template
# Compile the sketch
compile_sketch("./sketches/BlinkLED", "arduino:avr:uno")
# Upload to board
upload_sketch("./sketches/BlinkLED", "arduino:avr:uno", "COM3")
# Monitor output
serial_monitor("COM3", baudrate=115200, duration=20)3. Library Installation and Usage
# Search for a library
search_libraries("Adafruit SSD1306")
# Install the library
install_library("Adafruit SSD1306")
# List installed libraries
list_installed_libraries()4. Enhanced Serial Monitor Features
# Basic monitoring (115200 is now the default)
serial_monitor("COM3", duration=30)
# Send commands while monitoring (bidirectional)
serial_monitor(
port="COM3",
baudrate=115200,
duration=30,
send_commands="GET_STATUS\nSET_LED 1"
)
# Save buffer to file for analysis
serial_monitor(
port="COM3",
baudrate=115200,
duration=60,
save_to_file="sensor_data.log"
)
# Combined: send commands and save output
serial_monitor(
port="COM3",
baudrate=115200,
duration=45,
send_commands="START_LOGGING",
save_to_file="experiment_results.txt"
)Buffer Features:
Circular buffer (10MB default, configurable via env var)
Memory-safe (won't crash on long-running captures)
Thread-safe operation
Automatic statistics (lines captured, buffer usage)
5. Image to C Array Conversion
# Check ImageMagick installation
check_imagemagick_installed()
# Convert image to C array for Arduino displays
convert_image_to_c_array(
"logo.png",
width=128,
height=64,
var_name="logo_bitmap",
output_file="logo.h"
)6. Resource Access
# Read a sketch file
read_resource("sketch://./BlinkLED/BlinkLED.ino")
# Get Arduino configuration
read_resource("arduino-config://main")
# Get board details
read_resource("board-info://arduino:avr:uno")Tools Reference
Board & Port Detection
check_arduino_cli_installed()- Verify Arduino CLI installationlist_connected_boards()- List all connected Arduino boardslist_serial_ports()- List all serial portsfind_arduino_ports()- Find Arduino-specific portsget_best_port()- Auto-detect best port candidateverify_port(port)- Verify if a port is accessible
Core Management
list_installed_cores()- List installed Arduino coressearch_cores(query)- Search for Arduino coresinstall_core(core)- Install an Arduino core
Library Management
search_libraries(query)- Search for Arduino librariesinstall_library(library)- Install an Arduino librarylist_installed_libraries()- List installed libraries
Sketch Operations
create_new_sketch(name, path)- Create a new Arduino sketchcompile_sketch(path, fqbn)- Compile an Arduino sketchupload_sketch(path, fqbn, port)- Upload sketch to board
Utilities
get_arduino_help(command)- Get help for Arduino CLI commandsinitialize_config()- Initialize Arduino CLI configurationclean_cache()- Clean Arduino CLI cachecheck_imagemagick_installed()- Check ImageMagick installationconvert_image_to_c_array(...)- Convert images to C arrays
Common FQBNs
Arduino Uno:
arduino:avr:unoArduino Mega 2560:
arduino:avr:megaArduino Nano:
arduino:avr:nanoArduino Leonardo:
arduino:avr:leonardoESP32:
esp32:esp32:esp32ESP8266:
esp8266:esp8266:generic
Architecture
arduino-mcp/
βββ arduino_mcp/
β βββ __init__.py # Package initialization
β βββ server.py # Main MCP server with tools, resources, prompts
β βββ cli_wrapper.py # Arduino CLI wrapper
β βββ port_detector.py # Serial port detection utilities
β βββ image_converter.py # ImageMagick image conversion
β βββ platform_utils.py # Cross-platform OS detection & handling
βββ pyproject.toml # Project configuration
βββ README.md # This fileCross-Platform Design
platform_utils.py: Centralized OS detection and platform-specific behavior
Automatic detection: Windows (COM*), macOS (/dev/tty.), Linux (/dev/ttyUSB, /dev/ttyACM*)
Serial keywords: Platform-specific Arduino device identification
Error handling: PermissionError for Linux, graceful fallbacks
Path handling: OS-appropriate path separators and formats
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
References
License
MIT License
Available Tools
16 toolsarduino_cli_commandExecute Raw Arduino CLI CommandD
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_cacheD
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_sketchCompile Arduino SketchA
Compile an Arduino sketch.
TIP: If you used arduino-cli board attach on this sketch, FQBN is optional!
The board settings will be read from sketch.yaml automatically.
For project-based workflows, use board attach first: arduino_cli_command("board attach -p COM3 -b arduino:avr:uno MySketch")
Then compile without specifying FQBN each time. See the sketch_project_workflow prompt for details.
| Name | Required | Description | Default |
|---|---|---|---|
| sketch_path | Yes | ||
| fqbn | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, suggesting modification. Description adds detail about FQBN optionality but lacks disclosure on output, side effects, or error conditions 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?
Concise with clear TIP section. Every sentence adds value, but slightly verbose with the board attach example.
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?
Lacks explanation of return values or typical output despite having an output schema. Missing details on parameter formats. Adequate but could be more 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 0% and description only mentions FQBN optionality, not defining either parameter's format or meaning. 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?
Clearly states 'Compile an Arduino sketch' using a specific verb and resource. Differentiates from sibling tools like upload_sketch or serial_monitor.
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?
Provides TIP about FQBN optionality and alternative workflow using board attach, giving clear context for when to use the tool. Does not explicitly list alternatives but sibling tools are provided separately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_image_to_c_arrayConvert Image to C Array for Hardware DisplaysA
Convert images to C arrays for hardware displays (OLED, E-Paper, TFT, LEDs)
Supports: monochrome (1-bit), grayscale_2bit (4-level), grayscale_4bit (16-level), grayscale (8-bit), rgb565 (16-bit color), rgb888 (24-bit color)
Parameters:
rotation: 0, 90, 180, or 270 degrees (test all to find correct orientation)
threshold: Black/white cutoff for monochrome (e.g., "50%", "60%", "70%")
keep_aspect: True to maintain proportions, False to force exact size
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | ||
| width | Yes | ||
| height | Yes | ||
| var_name | Yes | ||
| format_type | No | monochrome | |
| output_file | No | ||
| invert | No | ||
| rotation | No | ||
| threshold | No | ||
| keep_aspect | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and openWorldHint=true. The description reveals behavioral details like rotation options and threshold for monochrome, but does not disclose potential side effects (e.g., writing output files, required permissions) or error conditions. Some value beyond annotations is added, but gaps remain.
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 relatively concise, using a bullet-like list for format types and parameter notes. It avoids unnecessary detail but could be streamlined further. The format is scannable, though the parameter list duplicates some info from the schema.
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?
With an output schema present, return values need not be explained, but the description still must cover all parameters and operational context. With 10 parameters, only 3 are partially described, leaving significant gaps. The tool's behavior for required fields like image_path and var_name is not addressed, making the description incomplete for effective 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 0% description coverage, placing full burden on the description. However, the description only explains 3 of 10 parameters (rotation, threshold, keep_aspect) with brief notes. Key parameters like image_path, width, height, var_name, and format_type remain unexplained, providing insufficient semantic context.
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 title and description clearly state the tool converts images to C arrays for hardware displays, listing supported color formats. It distinctly differs from sibling tools which are Arduino CLI commands and development utilities, leaving no ambiguity about its 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 specifies the tool is for hardware displays (OLED, E-Paper, TFT, LEDs), providing clear context. While it does not explicitly mention when not to use it or name alternatives, the sibling set contains no other image conversion tools, making the usage scope unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_new_sketchD
| Name | Required | Description | Default |
|---|---|---|---|
| sketch_name | Yes | ||
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_coreInstall Arduino CoreD
| Name | Required | Description | Default |
|---|---|---|---|
| core | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_libraryInstall Arduino LibraryD
| Name | Required | Description | Default |
|---|---|---|---|
| library | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_arduino_projectLint Arduino ProjectBRead-only
Lint Arduino project for compliance and best practices.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | Path to sketch, library, or platform | |
| compliance | No | "permissive", "specification", or "strict" | specification |
| library_manager | No | None, "submit", or "update" for Library Manager checks |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds 'lint' as a behavioral trait but no further details on what checks are performed or side effects.
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 with no wasted words. It is front-loaded, though it could benefit from slight expansion.
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, the description fails to mention what the tool returns, leaving the agent uninformed about the result format or content.
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 all parameters documented. The description does not add extra meaning beyond what is in the schema, achieving the baseline.
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 lints Arduino projects for compliance and best practices, which is specific. However, it does not differentiate from sibling tools, but none are similar, so it remains effective.
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. The description lacks context about prerequisites or scenarios, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connected_boardsDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installed_coresDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installed_librariesDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_portsList Serial PortsDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| arduino_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch Arduino PackagesARead-only
Search for Arduino cores or libraries.
Note: Library searches return only latest version details to reduce output size. Use more specific search terms to narrow results (e.g., "Adafruit_SSD1306" instead of "display").
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| package_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds value by noting the limitation on library version data and the advice on narrowing results. No contradictions 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?
Two concise sentences with front-loaded key information. No redundant or unnecessary content. Efficient and clear.
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 output schema and annotations, the description adequately covers the main behaviors and limitations. Could mention pagination or error handling but acceptable for a search 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?
Schema has 0% description coverage, so description must compensate. It implies package_type relates to 'cores or libraries' but does not explicitly define valid values or explain query. Insufficient guidance beyond the tool's purpose.
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 it searches for Arduino cores or libraries, which is a specific verb and resource. While it distinguishes from siblings like install_core or list_installed_libraries, it does not explicitly differentiate from any potential other search tools, but none exist in sibling list.
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?
Provides explicit guidance that library searches return only latest version details and advises using specific search terms. However, it does not mention when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_monitorEnhanced Serial Monitor with Bidirectional CommunicationD
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| duration | No | ||
| baudrate | No | ||
| send_commands | No | ||
| save_to_file | No | ||
| reset_board | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_sketchUpload Sketch to BoardADestructive
Upload a compiled sketch to an Arduino board.
TIP: If you used arduino-cli board attach on this sketch, FQBN and port are optional!
The settings will be read from sketch.yaml automatically.
For project-based workflows, use board attach first: arduino_cli_command("board attach -p COM3 -b arduino:avr:uno MySketch")
Then upload without specifying FQBN/port each time. See the sketch_project_workflow prompt for details.
| Name | Required | Description | Default |
|---|---|---|---|
| sketch_path | Yes | ||
| fqbn | Yes | ||
| port | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but description adds context: uploading modifies board state, optional parameters if board attached, and links to board attach workflow. 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?
First sentence states purpose directly. TIP and example are front-loaded but the description is somewhat lengthy. Could be more concise while retaining essential guidance.
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?
With 3 parameters, annotations, and output schema present, the description covers optional parameters and workflow adequately. Lacks explicit return value explanation but schema handles it.
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%, so description must carry burden. It implicitly explains fqbn and port as optional via board attach and mentions sketch_path in example, but does not explicitly define each parameter's meaning or format.
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?
First sentence clearly states 'Upload a compiled sketch to an Arduino board.' Verb 'upload' and resource 'sketch to Arduino board' are specific. Distinguishes from siblings like compile_sketch and list_connected_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?
Provides TIP about optional parameters when board attach is used, references sketch_project_workflow prompt, and gives example of using board attach first. Explicitly tells when to omit FQBN/port.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_portDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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.
16 tool updates
v0.1.3- First observed
arduino_cli_command - First observed
clean_cache - First observed
compile_sketch - First observed
convert_image_to_c_array - First observed
create_new_sketch - First observed
install_core - First observed
install_library - First observed
lint_arduino_project - First observed
list_connected_boards - First observed
list_installed_cores - First observed
list_installed_libraries - First observed
list_ports - First observed
search - First observed
serial_monitor - First observed
upload_sketch - First observed
verify_port
TDQS
Scored across 16 tools
Many tools lack descriptions, and 'arduino_cli_command' is overly generic, potentially overlapping with other tools. Several tools like 'clean_cache' are ambiguous, making it hard for agents to distinguish purposes.
Most tools follow a verb_noun pattern with snake_case, but 'arduino_cli_command' is noun_noun and 'search' is just a verb, causing minor inconsistency.
16 tools cover a wide range of Arduino operations without being overwhelming. Each tool serves a distinct aspect of the development workflow.
Core CRUD and lifecycle operations for sketches, libraries, cores, boards, and serial monitoring are present. Missing explicit delete or update tools, but the generic 'arduino_cli_command' can cover gaps.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoβ¦
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Eβ¦
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Nifty's MCP server β exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Arduino IDE 2.0 sketches. It exposes a small REST API plus an MCP stdio bridge so agents can read and write the main .ino file, list sources, and optionally compile with arduino-cli.18MIT
- AlicenseNot gradedqualityBmaintenanceA high-performance personal Model Context Protocol (MCP) server built with the FastMCP Python framework.MIT
- FlicenseNot gradedqualityAmaintenanceA fully local MCP server for Mixly that lets AI clients discover boards, scan blocks, build/validate/open projects, generate code, and compile via Arduino CLIβall without uploading source or relying on a remote server.2-
- FlicenseAqualityCmaintenanceA local stdio MCP server wrapping arduino-cli to let agents detect boards, manage cores/libraries, compile and upload sketches, and communicate over serial, enabling hardware control without shell gymnastics.17-
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/niradler/arduino-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server