esp-idf mcp监测仪
ESP-IDF MCP服务器的串行监控工具。直接替换 tools/idf_py_actions/mcp_ext.py 这为添加了交互式监视器支持 idf.py mcp-server.
上游公关: esp idf#18385
问题
ESP-IDF v6.0引入了MCP服务器(idf.py mcp-server)使用工具 build, flash, set-target,以及 clean但是,AI代理无法读取设备的串行输出——没有启动日志,没有错误消息,也没有运行时诊断。
代理可以将固件推送到板上,但看不到接下来会发生什么。
两个技术障碍阻碍了简单的包装 idf.py monitor:
- TTY要求 —
idf_monitor.py检查sys.stdin.isatty()并且拒绝在没有真实终端的情况下启动 - 工艺树清理 —
idf.py生成idf_monitor.py作为一个孩子;只杀死父母,让孩子保持串行端口打开
这增加了什么
五个新的MCP工具,全部使用PTY包装 idf.py monitor:
| 工具 | 目的 |
|---|---|
monitor_boot | 一键:重置板,捕获启动日志,返回。支持 wait_for 在模式匹配中提前停止。 |
monitor_start | 通过板重置启动持久后台监视器会话。 |
monitor_send | 向设备发送命令(仅写)。 |
monitor_read | 轮询缓冲输出。支持 timeout 和 wait_for 等待回应。 |
monitor_stop | 结束会话并清理。 |
现有工具(build_project, set_target, flash_project, clean_project)没有变化。
其他改进
_idf_cmd()helper消除了重复的命令构造并进行了验证IDF_PATH- 通过以下方式禁用PTY回声
termios防止捕获的输出中出现命令反射 - ANSI转义剥离,使代理获得干净的文本
- 进程组杀戮(
os.killpg)防止僵尸idf_monitor.py过程 - 谨慎的
pty/select/termios导入--现有工具仍在Windows上工作
安装
将文件复制到原始文件上:
cp mcp_ext.py $IDF_PATH/tools/idf_py_actions/mcp_ext.py当MCP服务器启动时,五个监控工具将与现有工具一起出现。
使用Claude代码
首次设置:
claude mcp add --transport stdio esp-idf -- idf.py mcp-server已连接但需要重新加载(例如在更新文件后):
在Claude Code中,键入 /mcp → 选择 esp-idf → 重新连接。
用法
快速启动日志捕获
monitor_boot(capture_duration=20)重置电路板,捕获20秒的输出,返回所有内容。
在模式上尽早停止
monitor_boot(wait_for="Sensor scan:", capture_duration=30)一旦出现“传感器扫描:”,即返回,而不是等待整整30秒。可用于单元测试结果、碰撞检测或特定初始化标记。
交互式会话
monitor_start()
monitor_read(timeout=5) # read boot log
monitor_send("STATUS")
monitor_read(wait_for="OK", timeout=3) # wait for response
monitor_stop()示例:AI代理调试
阅读我的博客:我让克劳德访问ESP-IDF监视器——它调试了我的PCB
兼容性
- ESP-IDF: v6.0+(需要MCP服务器支持)
- 平台: 监控工具需要类Unix PTY支持(macOS、Linux)。构建/闪存/清理工具适用于所有平台。
- 测试时间: macOS通过USB CDC连接ESP32-S3
许可证
Apache-2.0(与ESP-IDF相同)
