串行监控工具

ESP-IDF MCP服务器的串行监控工具,提供交互式监控支持,用于捕获设备启动日志、错误消息和运行时诊断。

  • by jinw06k
  • Python
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 jinw06k/esp-idf-monitor-mcp

使用说明

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:

  1. TTY要求 — idf_monitor.py 检查 sys.stdin.isatty() 并且拒绝在没有真实终端的情况下启动
  2. 工艺树清理 — 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相同)