arduino-claude-mcp
v0.1.2
Published
MCP server for Arduino IDE 2.0 sketches (REST + stdio).
Downloads
14
Maintainers
Readme
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.
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-clifor builds
Installation
Global install:
npm install -g arduino-claude-mcpLocal dev:
npm install
npm run build
npm run build:mcpUsage
Run the REST server
arduino-claude-mcpDefaults to port 3080. Override with:
$env:PORT=3081
arduino-claude-mcpRun the MCP stdio server
node build/mcp.jsIf your REST server is not on the default port, set one of:
ARDUINO_API_URL(full URL, for examplehttp://localhost:3081)ARDUINO_API_PORT(port only, for example3081)
MCP client config
{
"mcpServers": {
"arduino-mcp": {
"command": "node",
"args": ["/absolute/path/to/build/mcp.js"]
}
}
}Tutorial (10 minutes)
- Create a sketch folder whose main
.inomatches the folder name. - Validate it:
POST /validate- Body:
{ "projectRoot": "/path/to/MySketch" }
- Read the main sketch:
POST /read_source- Body:
{ "projectRoot": "/path/to/MySketch" }
- Write a small change:
POST /write_source- Body:
{ "projectRoot": "/path/to/MySketch", "content": "// your code" }
- Build (optional):
- Set
ARDUINO_FQBN(examplearduino:avr:uno) POST /build- Body:
{ "projectRoot": "/path/to/MySketch" }
- Set
Environment variables
PORT: REST server port (default3080)ARDUINO_API_URL: REST base URL for the MCP bridgeARDUINO_API_PORT: REST port for the MCP bridgeARDUINO_CLI: arduino-cli executable (defaultarduino-cli)ARDUINO_FQBN: fully qualified board name for compileARDUINO_BUILD_TIMEOUT_MS: build timeout in ms (default120000)
REST API
Health
GET /health->{ status: "ok" }
Validate
POST /validatebody:{ projectRoot: string }- Returns
{ valid, inoPath, projectRoot }
List sources
POST /list_sourcesbody:{ projectRoot: string }- Returns
{ files: string[] }
Read source
POST /read_sourcebody:{ projectRoot: string, relativePath?: string }- Returns
{ path, content }
Write source
POST /write_sourcebody:{ projectRoot: string, relativePath?: string, content: string }- Returns
{ success, path, bytes }
Append source
POST /append_sourcebody:{ projectRoot: string, relativePath?: string, content: string }- Returns
{ success, path, bytes }
Build
POST /buildbody:{ projectRoot: string, timeoutMs?: number }- Returns
{ success, exitCode, stdout, stderr } - Requires
arduino-cliandARDUINO_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 testTests use a temporary sketch folder and do not require arduino-cli.
Publishing
- Update
package.jsonversion - Build:
npm run build npm run build:mcp - Publish:
npm publish --access public - Tag and push to trigger
.github/workflows/publish.yml
Project structure
src/index.tsREST APIsrc/mcp.tsMCP stdio bridgeskills/arduino-mcp/SKILL.mdagent skillserver.jsonMCP registry metadata
Contributing
PRs welcome. Please keep changes small and include tests where possible.
License
MIT
