mcpField
A
Arduino MCP Server

Arduino MCP Server

本地服务
github.com开发工具2410 周前更新

关于 Arduino MCP Server

arduino-mcp-server 是基于 arduino-cli 的 MCP 服务,让 AI 助手通过自然语言完成 Arduino 的板卡检测、编译上传、串口监控和接线安全检查。它面向希望用 AI 操作硬件的开发者,并属于 HardwareMCP 开源项目的一部分。

主要功能

  1. 01自动检测已连接的板卡和端口
  2. 02编译并上传草图
  3. 03有状态的串口会话管理
  4. 04上传前执行电气安全预检
  5. 05提供板卡引脚参考资料

适用场景

  1. 01让 AI 助手编译草图并上传到 Arduino Uno
  2. 02通过串口等待设备输出特定信号后继续操作
  3. 03在向硬件发送命令前检查引脚电压与电流是否安全

MCP 相关

该项目是 MCP 服务,向 MCP 客户端提供板卡、串口、编译上传及安全检查等工具,还提供板卡引脚参考资源和提示词。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"hardware-mcp-arduino": {
"command": "npx",
"args": [
"-y",
"arduino-mcp-server"
],
"env": {
"ARDUINO_CLI_PATH": "<ARDUINO_CLI_PATH>",
"ARDUINO_SKETCH_ROOT": "<ARDUINO_SKETCH_ROOT>"
}
}
}
}
启动命令npx -y arduino-mcp-server
需要配置的环境变量
ARDUINO_CLI_PATHOptional path to arduino-cli binary. Defaults to arduino-cli on PATH.
ARDUINO_SKETCH_ROOTOptional absolute path restricting sketch operations to this directory.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmarduino-mcp-server0.2.8

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

arduino-mcp-server

npm version License: MIT Node.js 20+

通过自然语言,让 AI 助手全面控制 Arduino——编译、上传、监控串口,并验证接线安全性。

它是 HardwareMCP 生态系统的一部分,该生态系统包含连接 AI 与实体硬件的开源 MCP 服务。


功能介绍

AI 助手可以控制 Jira、GitHub 和数据库,却无法与微控制器通信——现在这一切成为可能。

arduino-mcp-server 将 arduino-cli 封装为 MCP 服务,让 AI 能够:

  • 自动检测已连接的开发板和端口
  • 编译并上传草图,无需操作终端
  • 监控串口输出,并通过有状态会话进行操作(打开、读取、等待、写入、关闭)
  • 运行电气安全检查,再向硬件发送命令
  • 管理依赖项——核心包、库和 CLI 安装

快速开始

安装:

npm install -g arduino-mcp-server

添加到 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"
      }
    }
  }
}

需要在 PATH 中安装 arduino-cli,也可以让此服务为你安装。


你可以这样说

从头开始配置:

“检查是否已安装 Arduino CLI,并为 Arduino Uno 完成所有设置。”

编译并上传:

“编译我的 Blink 草图,并将它上传到 COM6 上的 Uno。”

串口监控:

“在 COM6 上以 115200 波特率打开串口,并等待设备打印 READY。”

安全优先的工作流:

“在我发送命令前,先对一个引脚 13 接入 5V、25mA 的 Arduino Uno 执行安全预检。”


工具

工具功能
arduino_cli_doctor检查 Arduino CLI 的安装情况和版本
install_arduino_cli指引完成 arduino-cli 安装
detect_hardware检测已连接的开发板并推断 FQBN
list_connected_boards列出所有已连接的 Arduino 开发板
list_serial_ports列出可用串口
ensure_core_installed检查/安装开发板核心包
compile_sketch为目标开发板编译草图
upload_sketch将已编译的草图上传到开发板
upload_and_wait_ready上传并等待设备就绪信号
serial_open_session打开有状态的串口会话
serial_read读取缓冲的串口数据
serial_expect等待串口输出中出现指定模式
serial_write通过串口发送数据
serial_close_session关闭串口会话
serial_list_sessions列出活动的串口会话
read_serial_snapshot快速读取一次串口数据
safety_preflight执行硬件操作前的电气安全检查
get_board_details获取开发板的引脚/功能详情
list_supported_boards列出 arduino-cli 支持的所有开发板
list_board_reference浏览开发板引脚参考资料
search_board_reference按关键词搜索开发板参考资料

资源:

  • arduino://boards/reference — 结构化的开发板引脚/功能参考资料

提示词:

  • arduino-cli-bootstrap-policy — arduino-cli 设置行为策略
  • arduino-setup-assistant — 引导完成 Arduino 环境设置

安全预检防护措施

safety_preflight(以及传递给 upload_sketch、upload_and_wait_ready 和 serial_write 的 safetyContext)现在还会检查电池和 ESP32 系列引脚的常见隐患。检查由小型且易于扩展的数据表驱动,不会硬编码为仅适用于某一块开发板:

电池充电倍率(C-rate)检查 — 传入 battery 对象(包含 capacityMah、chargeCurrentMa、chemistry),检查会计算 chargeCurrentMa / batteryCapacityMah 并根据结果发出提示:

  • 高于 1C 时,发出 BATTERY_CRATE_UNSAFE(严重,阻止操作)
  • 高于 0.5C 时,发出 BATTERY_CRATE_CAUTION(轻微,不阻止操作)

常见的小型 LiPo 电芯的安全充电电流额定值通常约为 0.5–1C,因此提示会详细说明计算过程,例如 “向 100mAh 电芯充入 380mA,充电倍率为 3.8C,远高于典型小型 LiPo 电芯约 0.5-1C 的安全范围;继续操作前,请核实电芯实际的额定充电电流。” 如果省略 chargeCurrentMa,系统会根据小型开发板 → 板载充电 IC 查找表推断该值(目前已收录 Seeed XIAO ESP32S3、XIAO ESP32S3 Sense 和 XIAO ESP32C3;参见 data/battery-charge-ic-reference.json,可轻松添加更多开发板)。这些数值是制造商公布的近似值——在生产工作流中采用前,请对照适用于确切开发板修订版本的最新数据手册或 Wiki 核实。

电池极性确认 — 当 battery.connecting: true(或设置了任何电池字段),但 battery.polarityConfirmed 未明确设为 true 时,预检会通过 BATTERY_POLARITY_UNCONFIRMED 阻止操作,并提醒不要根据导线颜色推断 BAT+/BAT-。对于 Seeed XIAO 开发板,提示会注明官方规范:负极焊盘距离 USB-C 端口最近,正极焊盘距离最远。

ESP32 系列引脚安全(通过 data/board-reference.json 按开发板配置数据):

  • SPI 闪存引脚(经典 ESP32 WROOM/WROVER 模块上的 GPIO6-11)— 严重错误(SPI_FLASH_PIN_USED);连接这些引脚会导致无法启动。
  • 启动绑带引脚(经典 ESP32 上的 GPIO0/2/12/15)— 警告;运行时可用,但如果在启动或复位期间被外部电路拉住,则存在风险(现有检查)。
  • 无内部上拉电阻的仅输入引脚(经典 ESP32 上的 GPIO34-39)— 警告(NO_INTERNAL_PULL_PIN);将这些引脚用作按钮或开关时,请添加外部上拉或下拉电阻。
  • Seeed XIAO ESP32S3 — 将其 11 个可用 GPIO(D0-D10)及默认 I2C 引脚 D4/D5 纳入数据模型;每当 D6/D7 接线时,都会显示一条提示信息:它们默认是硬件 UART1 TX/RX,但启用“USB CDC on Boot”后,就能作为普通 GPIO 使用。

以上所有开发板数据均存储在 JSON 中,并以开发板 ID/FQBN 为键,因此无需修改防护逻辑即可添加更多开发板。


配置

变量默认值说明
ARDUINO_CLI_PATHarduino-cliarduino-cli 二进制文件的路径
ARDUINO_SKETCH_ROOT(无)将草图路径限制在此目录中

开发

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 dev

属于 HardwareMCP

此服务属于 HardwareMCP 生态系统 — 该生态系统由一系列 MCP 服务组成,可让 AI 助手真正控制物理硬件。


许可证

MIT — 参见 LICENSE。

支持

提交问题

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。