公共汽车海盗mcp
MCP服务器用于BusPirate 6硬件安全测试。显示UART、SPI、I2C、1-Wire、电源、GPIO和逻辑分析仪操作 模型上下文协议 工具通过stdio传输。跨4种总线协议的33个工具+逻辑分析仪。
专为与Claude Code一起使用而构建,但适用于任何MCP客户端。
它的作用
- UART探测: 检测波特率,捕获串行输出,与调试控制台交互
- SPI闪存: 探针JEDEC ID,读/转储/写SPI闪存芯片(W25Q系列,SOIC-8夹)
- I2C总线: 扫描设备、读/写寄存器、转储EEPROM内容
- 1-Wire: 枚举设备,读取ROM代码(DS18B20、iButton)
- 电源控制: 具有安全等级的电压/电流管理
- GPIO控制: 用于引导加载程序入口的拨动引脚(ESP32、ESP8266等)
- 闪光提取: 通过esptool通过UART桥转储固件
- 逻辑分析仪: 在所有8个IO引脚上以75 MHz的频率进行后续捕获,并带有协议标识
- 参与度记录: 每个协议日志(UART文本、SPI/I2C/1-Wire JSONL)、每个参与文件夹
需求
- Python 3.11+
- 启用BPIO2二进制模式的BusPirate 6
- 用户在
dialout串行访问组(sudo usermod -aG dialout $USER)
安装
git clone --recurse-submodules https://github.com/mplogas/buspirate-mcp.git
cd buspirate-mcp
pip install -e ".[dev]"MCP客户端配置
复制示例配置并调整计算机的路径:
cp .mcp.json.example .mcp.json
# Edit .mcp.json with the absolute path to your venv's python这 .mcp.json 由于路径是特定于机器的,因此被忽略。配置示例:
{
"mcpServers": {
"buspirate": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "buspirate_mcp"]
}
}
}集 PIDEV_ENGAGEMENTS_DIR 环境变量,用于控制参与日志的写入位置。默认为 ./engagements/ 相对于包根。
工具
| 工具 | 安全级别 | 描述 |
|---|---|---|
list_devices | 只读 | 在USB上查找BusPirate设备 |
verify_connection | 只读 | 检查引脚上的信号活动 |
scan_baud | 只读 | 自动检测波特率 |
read_output | 只读 | 从目标读取UART数据 |
open_uart | 允许写入 | 打开带有日志记录的持久UART会话 |
send_command | 允许写入 | 发送命令并捕获响应 |
close_uart | 允许写入 | 关闭会话,完成日志 |
enter_download_mode | 允许写入 | GPIO切换引导加载程序条目 |
read_flash | 允许写入 | 通过UART桥通过esptool转储闪存 |
set_voltage | 审批写入 | 设置PSU电压(需要确认) |
set_power | 审批写入 | 启用/禁用PSU(需要确认) |
| 串行外设接口 | ||
open_spi | 允许写入 | 配置SPI模式,创建会话 |
spi_probe | 只读 | 读取JEDEC ID+状态寄存器,解码芯片 |
spi_read | 只读 | 从SPI闪存地址读取N个字节 |
spi_dump | 只读 | 将完整闪存转储为二进制文件 |
spi_write | 批准写入 | 擦除+程序+验证SPI闪存(需要确认) |
spi_transfer | 只读 | 原始SPI传输(十六进制输入/输出) |
close_spi | 允许写入 | 关闭SPI会话,重置模式 |
| 二线制 | ||
open_i2c | 允许写入 | 配置I2C模式,创建会话 |
i2c_scan | 只读 | 设备扫描总线(0x00-0x7F) |
i2c_read | 只读 | 从设备+寄存器读取字节 |
i2c_write | 批准写入 | 将字节写入设备+寄存器(需要确认) |
i2c_dump | 只读 | 将EEPROM内容转储到文件 |
close_i2c | 允许写入 | 关闭I2C会话,重置模式 |
| 单总线 | ||
open_1wire | 允许写入 | 配置1-Wire模式,创建会话 |
onewire_search | 只读 | 重置总线,读取ROM,解码家族代码 |
onewire_read | 只读 | 原始1-Wire事务 |
close_1wire | 允许写入 | 关闭1-Wire会话,重置模式 |
| 逻辑分析仪 | ||
la_prepare | 允许写入 | 切换到FALA模式,输入总线协议进行捕获 |
la_command | 只读 | 执行总线命令并捕获信号数据 |
la_analyze | 只读 | 分析信号特征的捕获 |
la_identify | 只读 | 从捕获中自动识别总线协议 |
la_cleanup | 允许写入 | 恢复BPIO2模式 |
安全模型
在MCP服务器边界强制执行三层:
- 只读: 完全自主,无副作用
- 允许写入: 自主执行,记录所有调用
- 批准书: 直到人类确认为止
_confirmed参数。错误的电压会炸掉芯片。SPI闪存写入和I2C写入不可逆地覆盖数据。
BusPirate 6设置
启用BPIO2二进制模式
连接到BP6终端端口(ACM0)并运行:
binmode -> select 2 (BPIO2 flatbuffer interface) -> y to save这种情况在重新启动后仍然存在。
引脚映射
UART模式使用IO4(TX->)和IO5(RX\ACM2)。服务器自动检测。
测试
pytest # 203 tests, no hardware needed
pytest -m hardware # integration tests, BP6 must be connected许可证
麻省理工学院
