arduino-claude-mcp

arduino-claude-mcp

MCP 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.

Category
Visit Server

README

arduino-claude-mcp

npm version publish docker publish

MCP 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.

Features

  • Validate an Arduino sketch folder
  • Read and write source files (defaults to main .ino)
  • List .ino/.h/.cpp/.c files
  • Compile with arduino-cli (optional)
  • REST + MCP stdio transport

Requirements

  • An Arduino sketch folder (Arduino IDE 2.0 format)
  • Node.js 18+
  • Optional: arduino-cli for builds

Installation

Global install:

npm install -g arduino-claude-mcp

Local dev:

npm install
npm run build
npm run build:mcp

Container image:

docker pull eoinedge/arduino-mcp:latest

Usage

Run the REST server

arduino-claude-mcp

Defaults to port 3080. Override with:

$env:PORT=3081
arduino-claude-mcp

Run with Docker (Pi/OpenClaw)

docker run --rm --network host \
  -e PORT=3080 \
  -e ARDUINO_FQBN=arduino:mbed_nano:nano33ble \
  -v /home/pi/pi-openclaw-mcp-stack/workspace/Arduino:/workspace \
  eoinedge/arduino-mcp:latest

Run the MCP stdio server

node build/mcp.js

If your REST server is not on the default port, set one of:

  • ARDUINO_API_URL (full URL, for example http://localhost:3081)
  • ARDUINO_API_PORT (port only, for example 3081)

MCP client config

{
  "mcpServers": {
    "arduino-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/build/mcp.js"]
    }
  }
}

Tutorial (10 minutes)

  1. Create a sketch folder whose main .ino matches the folder name.
  2. Validate it:
    • POST /validate
    • Body: { "projectRoot": "/path/to/MySketch" }
  3. Read the main sketch:
    • POST /read_source
    • Body: { "projectRoot": "/path/to/MySketch" }
  4. Write a small change:
    • POST /write_source
    • Body: { "projectRoot": "/path/to/MySketch", "content": "// your code" }
  5. Build (optional):
    • Set ARDUINO_FQBN (example arduino:avr:uno)
    • POST /build
    • Body: { "projectRoot": "/path/to/MySketch" }

Environment variables

  • PORT: REST server port (default 3080)
  • ARDUINO_API_URL: REST base URL for the MCP bridge
  • ARDUINO_API_PORT: REST port for the MCP bridge
  • ARDUINO_CLI: arduino-cli executable (default arduino-cli)
  • ARDUINO_FQBN: fully qualified board name for compile
  • ARDUINO_BUILD_TIMEOUT_MS: build timeout in ms (default 120000)

REST API

Health

  • GET /health -> { status: "ok" }

Validate

  • POST /validate body: { projectRoot: string }
  • Returns { valid, inoPath, projectRoot }

List sources

  • POST /list_sources body: { projectRoot: string }
  • Returns { files: string[] }

Read source

  • POST /read_source body: { projectRoot: string, relativePath?: string }
  • Returns { path, content }

Write source

  • POST /write_source body: { projectRoot: string, relativePath?: string, content: string }
  • Returns { success, path, bytes }

Append source

  • POST /append_source body: { projectRoot: string, relativePath?: string, content: string }
  • Returns { success, path, bytes }

Build

  • POST /build body: { projectRoot: string, timeoutMs?: number }
  • Returns { success, exitCode, stdout, stderr }
  • Requires arduino-cli and ARDUINO_FQBN

Clawdbot / Moltbot compatibility

This repo ships a skill at skills/arduino-mcp/SKILL.md.

Enable it in Moltbot:

{
  "skills": {
    "load": {
      "extraDirs": ["~/.clawdbot/skills"],
      "watch": true,
      "watchDebounceMs": 250
    },
    "entries": {
      "arduino-mcp": {
        "enabled": true,
        "env": {}
      }
    }
  }
}

Example prompts

  • "Open this Arduino sketch and add a blinking LED on pin 13."
  • "List all source files and explain what each does."
  • "Append a serial debug line and recompile for an Uno board."

Testing

npm test

Tests use a temporary sketch folder and do not require arduino-cli.

Publishing

  1. Update package.json version
  2. Build:
    npm run build
    npm run build:mcp
    
  3. Publish:
    npm publish --access public
    
  4. Tag and push to trigger .github/workflows/publish.yml

Docker publishing

Manual push:

docker login
docker buildx build --platform linux/amd64,linux/arm64 \
  -t eoinedge/arduino-mcp:latest \
  -t eoinedge/arduino-mcp:<version> \
  --push .

GitHub Actions:

  • docker-publish.yml pushes Docker images on main and version tags.
  • Required repo secrets:
    • DOCKERHUB_USERNAME
    • DOCKERHUB_TOKEN

Project structure

  • src/index.ts REST API
  • src/mcp.ts MCP stdio bridge
  • skills/arduino-mcp/SKILL.md agent skill
  • server.json MCP registry metadata

Contributing

PRs welcome. Please keep changes small and include tests where possible.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured