vllm-ci-mcp
用于vLLM CI监控的MCP服务器。扫描Buildkite构建,提取故障,对其进行分类,并生成易于复制/粘贴的报告。
特性
- 按ID/URL扫描最新的夜间版本或特定版本
- 从pytest输出中提取测试级失败
- 将故障分类为:
- KNOWN_TRACKED -发现现有GitHub问题 - INFRA_SUSPECTED -基础架构模式(超时、OOM、网络) - FLAKY_SUSPECTED -测试指标有缺陷 - NEW_REGRESSION -需要注意的新故障 - NEEDS_HUMAN_TRIAGE -数据不足
- 从CODEOWNERS和git推断测试所有者
- 生成降价报告:
- 每日调查结果:详细分类 - 站立总结:简洁的1-3行总结
- 工具丢失时性能下降
先决条件
- Python 3.11+
- Buildkite命令行界面:
brew install buildkite/buildkite/bk - GitHub命令行界面 (可选):
brew install gh - Git (可选,用于所有者推断):通常预先安装
安装
cd /home/doug/codebase/vllm-ci-mcp
pip install -e .
# Install dev dependencies
pip install -e ".[dev]"认证
构建套件
设置您的Buildkite API令牌:
export BUILDKITE_TOKEN="your-buildkite-token"从以下位置获取令牌:https://buildkite.com/user/api-access-tokens
GitHub(可选)
验证GitHub CLI:
gh auth login回购路径(可选)
对于所有者推断,请设置本地vLLM签出的路径:
export VLLM_REPO_PATH=/path/to/vllm运行MCP服务器
本地开发
# Run directly
python -m ciwatch_mcp.server
# Or use the installed script
ciwatch-mcp克劳德代码(CLI)
推荐:使用 claude mcp add 命令:
# 1. Install the MCP server in development mode
cd /path/to/vllm-ci-mcp
pip install -e .
# 2. Navigate to this project directory and add the MCP server
cd /path/to/vllm-ci-mcp
claude mcp add --transport stdio vllm-ci-watch -- python -m ciwatch_mcp.server
# 3. Add environment variables to ~/.claude.json
# Find the vllm-ci-mcp project section and add env vars to the mcpServers entry:
# Edit manually or use:
python3 << 'EOF'
import json
config_path = "/home/doug/.claude.json"
with open(config_path) as f:
config = json.load(f)
# Update the project-specific MCP server config
project_path = "/home/hdds/480ssd/codebase/vllm-ci-mcp" # Adjust to your path
if project_path in config.get("projects", {}):
if "vllm-ci-watch" in config["projects"][project_path].get("mcpServers", {}):
config["projects"][project_path]["mcpServers"]["vllm-ci-watch"]["env"] = {
"BUILDKITE_TOKEN": "your-buildkite-token-here",
"VLLM_REPO_PATH": "/path/to/your/vllm/repo"
}
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
print("Updated env vars for vllm-ci-watch")
EOF
# 4. Restart Claude Code
# Run: /mcp
# You should see "vllm-ci-watch" listed替代方案:手动配置 ~/.claude.json:
这 claude mcp add 命令在中创建特定于项目的配置 ~/.claude.json。您也可以手动将其添加到项目的 mcpServers 章节:
{
"projects": {
"/path/to/vllm-ci-mcp": {
"mcpServers": {
"vllm-ci-watch": {
"type": "stdio",
"command": "python",
"args": ["-m", "ciwatch_mcp.server"],
"env": {
"BUILDKITE_TOKEN": "your-token-here",
"VLLM_REPO_PATH": "/path/to/vllm"
}
}
}
}
}
}测试连接:
重新启动Claude Code后,您可以通过以下方式进行测试:
- “扫描最新的vLLM夜间版本”
- “检查构建47580是否失败”
- “我们遇到了哪些CI故障?”
在克劳德桌面
添加到您的Claude Desktop MCP配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"vllm-ci-watch": {
"command": "python",
"args": ["-m", "ciwatch_mcp.server"],
"env": {
"BUILDKITE_TOKEN": "your-token-here",
"VLLM_REPO_PATH": "/path/to/vllm"
}
}
}
}用法
MCP工具
服务器提供三个MCP工具:
1. ciwatch.scan_latest_nightly
扫描最新的夜间版本。
参数:
pipeline(str,默认值:"vllm/ci"):Buildkite管道段塞branch(str,默认值:"main"):Git分支repo(str,默认值:"vllm-project/vllm"):用于问题搜索的GitHub仓库search_github(bool,默认值:true):是否在GitHub上搜索问题
退货:
{
"build_info": {...},
"total_jobs": 50,
"failed_jobs": 5,
"failures": [...],
"daily_findings_text": "# Daily Findings...",
"standup_summary_text": "Nightly build [#123]..."
}例子:
# In Claude Code or MCP client
result = await ciwatch.scan_latest_nightly()
print(result["daily_findings_text"])2. ciwatch.scan_build
按编号或URL扫描特定版本。
参数:
build_id_or_url(str,必填):内部版本号(例如。,"12345")或Buildkite URLpipeline(str,默认值:"vllm/ci")repo(str,默认值:"vllm-project/vllm")search_github(bool,默认值:true)
例子:
result = await ciwatch.scan_build(
build_id_or_url="https://buildkite.com/vllm/ci/builds/47580"
)3. ciwatch.render
以不同格式重新呈现扫描结果。
参数:
scan_result(dict,必填):结果来自scan_latest_nightly或scan_buildformat(str,默认值:"daily_findings"):"daily_findings"或"standup"
例子:
standup = await ciwatch.render(result, format="standup")输出示例
每日调查结果
# Daily Findings - 2026-01-19
## Summary
- **Build**: [47580](https://buildkite.com/vllm/ci/builds/47580)
- **Branch**: main
- **Commit**: `abc12345`
- **Total Jobs**: 50, **Failed**: 5
- **Unique Failures**: 8
## Failures by Category
### NEW_REGRESSION (3 failures)
- **tests/test_async_llm_dp.py::test_load[ray-RequestOutputKind.DELTA]** in `GPU Tests`
- Error: `AssertionError: expected 5, got 3`
- Reason: New failure with no known pattern
- Confidence: 50%
- Owner: alice@example.com (confidence: 90%)
### INFRA_SUSPECTED (2 failures)
...站立总结
Nightly build [47580](https://buildkite.com/vllm/ci/builds/47580) FAILED with 8 unique failures: 3 NEW_REGRESSION, 2 INFRA_SUSPECTED, 3 FLAKY_SUSPECTED. Key NEW_REGRESSION tests: test_load, test_async_engine, test_embedding分类逻辑
优先顺序
- KNOWN_TRACKED:测试存在GitHub问题
- 被怀疑的基础设施:日志与基础结构模式匹配:
- 超时、网络错误 - 内存不足(OOM、CUDA OOM) - 磁盘空间问题 - 进程已终止(SIGKILL)
- 可疑:检测到有缺陷的指示器:
- 测试名称中的“片状” - 日志中“重试时传递”
- 新回归:有错误详细信息,但没有已知模式
- 需求_人力_婚姻:数据不足
去重
使用以下稳定哈希值对故障进行重复数据消除:
- 作业名称(标准化)
- 测试名称
- 错误签名(异常类型+第一行)
建筑
模块
models.py:用于构建/作业/失败数据的Pydantic模式config.py:常量和默认值cli.py:子流程包装bk,gh,gitnormalize.py:Pytest日志解析和重复数据删除classify.py:分类启发式owners.py:代码所有者解析和git责备render.py:Markdown输出格式化程序server.py:FastMCP工具注册
数据流
Buildkite API (via bk CLI) → Parse builds/jobs → Fetch logs →
Extract test failures → Classify → Deduplicate → Render markdown测试
运行单元测试:
pytest tests/跑步覆盖:
pytest --cov=ciwatch_mcp tests/格式代码:
black ciwatch_mcp/ tests/故障排除
bk CLI not found
安装Buildkite命令行界面:
brew install buildkite/buildkite/bkgh CLI not found
服务器可以在没有GitHub CLI的情况下工作,但与已知问题不匹配。要启用:
brew install gh
gh auth login空结果
检查:
BUILDKITE_TOKEN已设置- 管道段塞正确(默认值:
vllm/ci) - 分支已存在(默认值:
main)
性能缓慢
- 对于包含许多作业的构建,获取日志可能很慢
- 考虑在后台运行并稍后检查结果
- GitHub问题搜索会增加延迟(每次失败约1-2s)
贡献
欢迎投稿!拜托:
- 添加新功能的测试
- 格式化代码
black - 更新README以获取新功能
许可证
看 许可证
