内容
# mcp-lava
`mcp-lava` 是一个 **MCP(模型上下文协议)服务器**,它允许大型语言模型(LLM)与 [Linaro LAVA](https://gitlab.com/lava/lava) 进行交互,通过封装官方的 `lavacli` 命令行工具。
与重新实现 LAVA 的 XML-RPC API 不同,该服务器在本地执行 `lavacli` 并以适合工具的方式将结果返回给 LLM。
## 为什么需要 LAVA 的 MCP 服务器?
LAVA 功能强大,但日常工作流程中通常涉及许多重复的 CLI 操作:
- 检查设备可用性和健康状况
- 查找合适的作业定义
- 提交作业和监控状态
- 拉取失败作业的日志和工件
- 跨多次运行关联故障
- 重新运行作业以重现或确认修复
大型语言模型可以帮助完成这些工作流程 **前提是** 它可以可靠地调用正确的命令并解析输出。`mcp-lava` 提供了这一桥梁:
- **重用 `lavacli` 子命令和输出格式**(许多支持 `--json` / `--yaml`)。
- **保持服务器逻辑最小**(无重复的 API 客户端)。
- **使自动化更具对话性**: "查找此设备类型的最后一次失败运行并总结故障", "在日志中显示第一个内核恐慌" 等。
## 示例场景
使用大型语言模型 + `mcp-lava` 可以完成以下几件事:
1. **快速排查故障**
- 列出项目的最近作业
- 检测故障,获取日志,总结疑似根本原因
- 提取错误模式的首次出现(例如 *内核恐慌*, *超时*, *SSH 失败*)
2. **实验室状态概览**
- 列出设备并筛选为离线/已退休/忙碌
- 显示哪些工作器超载
- 根据最近的作业结果识别最不稳定的设备类型
3. **作业提交协助**
- 验证设备类型是否存在
- 提交作业定义
- 跟踪作业直到完成,然后下载工件
4. **重新运行 / 重现 / 确认修复("重跑" 工作流程)**
- 重新运行相同的作业定义以按需重现故障
- 在不同的设备(或不同的设备类型)上重新运行,以区分实验室的不稳定性与实际回归
- 在更改一个变量(新内核,新 rootfs,不同的测试计划)后重新运行并比较结果
- 比较原始运行和重跑的日志/工件以发现变化
5. **例行报告**
- "总结过去 24 小时内所有失败的作业,按设备类型分组"
- "显示前 3 种故障签名并链接到相关日志"
## 安装
创建/激活虚拟环境,然后安装:
```bash
python -m venv .venv
# 激活虚拟环境(命令取决于您的 shell)
python -m pip install -U pip
pip install mcp-lava
```
或者,您也可以使用 `uvx mcp-lava` 直接运行它,而无需安装到系统 Python 中。
## 配置(必需)
`mcp-lava` 通过在启动时创建/刷新 **lavacli 身份**,然后使用该身份运行所有后续命令来验证 LAVA。
设置以下环境变量:
- `LAVA_URL` - 基 URL 或 RPC 端点。如果它不以 `/RPC2` 结尾,服务器会追加它。
- `LAVA_USERNAME` - LAVA 用户名。
- `LAVA_AUTHENTICATION_TOKEN` - LAVA 令牌。
可选:
- `LAVA_IDENTITY` - 要使用的身份名称(默认:`mcp`)。
- `LAVA_SSL_VERIFY` - `true`/`false`(默认:`true`)。
表示变量的最小方式(使用您首选的方法设置它们):
```text
LAVA_URL=https://lava.example.com
LAVA_USERNAME=your.user
LAVA_AUTHENTICATION_TOKEN=<your-token>
```
## 运行 MCP 服务器
该服务器使用 **stdio 传输**(MCP 服务器的典型方式)。
```bash
mcp-lava
```
等效:
```bash
python -m mcp_lava.server
```
## 工具
### `lava_run`
运行 *任意* `lavacli` 命令。
- `args` 必须是一个 **argv 标记列表**(字符串列表):与 `lavacli` 后面输入的内容完全相同。
示例:
- `lavacli devices list` -> `args=["devices", "list"]`
- `lavacli devices show qemu0` -> `args=["devices", "show", "qemu0"]`
- `lavacli devices list --json` -> `args=["devices", "list", "--json"]`
不要传递单个空格分隔的字符串,如 `args=["devices list"]`。
### `lava_help`
获取 `lavacli --help` 或特定命令组的帮助。
### `lava_command_tree`
检查已安装的 `lavacli` Python 包并返回其命令/子命令树。