mcpField
M
mcp-zuul

mcp-zuul

本地服务
github.com/imatza-rh云与基础设施213 天前更新

关于 mcp-zuul

mcp-zuul 是一个面向 Zuul CI 的 MCP 服务,用于通过自然语言查询来诊断构建失败、搜索日志、查看流水线状态和作业配置。它面向需要排查 CI 故障的开发者和运维人员,可直接输出结构化的失败信息。项目提供 48 个工具、5 个提示词和 3 个资源。

主要功能

  1. 01结构化的任务级构建失败分析
  2. 02支持正则与上下文行的日志搜索
  3. 03实时流水线状态与预计完成时间
  4. 04不稳定作业检测与耗时趋势
  5. 05默认只读,可选启用流水线写操作
  6. 06支持 Kerberos/SPNEGO 认证

适用场景

  1. 01快速定位 CI 构建中失败的 Ansible 任务
  2. 02在流水线中检查变更的作业进度
  3. 03统计作业历史成功率以识别间歇性失败

MCP 相关

mcp-zuul 以 MCP 服务形式向客户端暴露 Zuul 的构建、日志、流水线、作业和基础设施数据,共 48 个工具。它支持 stdio、SSE 和 streamable-http 传输方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"imatza-rh-mcp-zuul": {
"command": "uvx",
"args": [
"mcp-zuul"
],
"env": {
"ZUUL_URL": "<ZUUL_URL>",
"ZUUL_DEFAULT_TENANT": "<ZUUL_DEFAULT_TENANT>",
"ZUUL_AUTH_TOKEN": "<ZUUL_AUTH_TOKEN>",
"ZUUL_USE_KERBEROS": "<ZUUL_USE_KERBEROS>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"ZUUL_ENABLED_TOOLS": "<ZUUL_ENABLED_TOOLS>",
"ZUUL_DISABLED_TOOLS": "<ZUUL_DISABLED_TOOLS>"
}
}
}
}
启动命令uvx mcp-zuul
需要配置的环境变量
ZUUL_URLZuul base URL (e.g. https://softwarefactory-project.io/zuul)
ZUUL_DEFAULT_TENANTDefault tenant name
ZUUL_AUTH_TOKEN密钥Bearer token for authenticated instances
ZUUL_USE_KERBEROSEnable Kerberos/SPNEGO authentication (true/false)
MCP_TRANSPORTTransport mode: stdio, sse, or streamable-http (default: stdio)
ZUUL_ENABLED_TOOLSComma-separated list of tools to enable (disables all others)
ZUUL_DISABLED_TOOLSComma-separated list of tools to disable

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-zuul0.11.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-zuul

PyPI Python License CI MCP Downloads codecov 已收录于 AiList

无需点击浏览器网页,只需提问即可调试构建失败。这是一款适用于 Zuul CI 的 MCP 服务。

mcp-zuul 正在诊断构建失败

如果 mcp-zuul 帮你省下了一次调试的时间,点个 ⭐ 星标 就能帮助其他人发现它。

一条命令,无需安装:

claude mcp add zuul -e ZUUL_URL=https://your-zuul.example.com -- uvx mcp-zuul

48 个工具、5 个提示词、3 个资源,涵盖构建、日志、流水线、作业、基础设施和实时状态。支持 Claude Code、Claude Desktop、Cursor、Codex、Windsurf,以及任何兼容 MCP 的客户端。

为什么选择 mcp-zuul?

mcp-zuulZuul 原始 APIZuul 网页界面
失败分析结构化信息——任务、主机、错误、rc原始 JSON,需要自行解析逐页点击查看日志
日志搜索正则表达式 + 上下文行 + 行范围不支持浏览器 Ctrl+F
不稳定测试检测自动统计通过/失败情况手动查询并计算不支持
测试结果解析 JUnit XML 并提供失败详情不支持外部链接
异常检测通过 LogJuicer 实现,基于 ML不支持不支持
实时状态作业进度、预计完成时间、失败前提醒轮询 API手动刷新
多实例每个 Zuul 配置一条配置项使用不同的基础 URL使用不同的浏览器标签页

快速开始

uvx(无需安装,推荐):

claude mcp add zuul \
               -e ZUUL_URL=https://softwarefactory-project.io/zuul \
               -e ZUUL_DEFAULT_TENANT=rdoproject.org \
               -- uvx mcp-zuul

pip:

pip install mcp-zuul

Docker:

docker build -t mcp-zuul .

LobeHub — 将以下内容发送给你的 AI Agent:

Read https://lobehub.com/mcp/imatza-rh-mcp-zuul/skill.md and follow the instructions to install the MCP server.

完整配置选项(包括 Kerberos 和多实例)请参阅设置。

功能

结构化失败分析 — get_build_failures 会解析 Zuul 的 job-output.json,并准确返回失败的 Ansible 任务、所在主机、错误消息、返回码和 stderr。无需滚动查看日志。

读取任意日志文件 — get_build_log 不局限于 job-output.txt。传入 log_name 即可读取构建日志目录中的任意文件(ci_script 日志、ansible.log、部署日志),并完整支持 grep、tail 和行范围查询。

精准定位日志 — 使用 start_line/end_line 跳转到确切的行范围。在第 6148 行找到错误后,可以直接读取第 6130–6160 行,而不必在 200 行一组的日志块中滚动查找。

智能 grep — 支持带上下文行的正则搜索。会自动将常见的 shell grep \| 语法转换为 Python 正则表达式 |,因此 error\|failed\|timeout 这样的模式可以直接使用。

实时流水线状态 — get_change_status 会返回实时作业进度、已用时间、预计完成时间和失败预检结果(pre_fail 字段)。如果变更不在流水线中,则会自动获取最新的已完成构建集。

工具筛选 — 使用 ZUUL_ENABLED_TOOLS 或 ZUUL_DISABLED_TOOLS 减少大模型选择工具时的干扰。只公开工作流所需的工具,其余工具会从服务中彻底移除。

基于 URL 的输入 — 直接粘贴 Zuul 构建 URL。工具会自动从 https://zuul.example.com/t/tenant/build/abc123 这样的 URL 中解析租户和 UUID,无需手动提取。

不稳定作业检测 — find_flaky_jobs 会分析近期构建历史并计算通过/失败统计数据,自动识别间歇性故障。

作业依赖关系图 — get_freeze_jobs 会返回流水线/项目/分支的完整解析作业图,展示继承关系解析后的所有作业及其依赖项。

Kerberos/SPNEGO 身份验证 — 原生支持位于 OIDC + Kerberos 后的 Zuul 实例。可自动完成完整的 SPNEGO 重定向链。会话 Cookie 会持久保存,并在过期时透明地重新进行身份验证。

Streamable HTTP 传输 — 使用 MCP_TRANSPORT=streamable-http 以持久 HTTP 服务的形式运行,适用于远程/共享部署。支持 stdio(默认)、SSE 和 streamable-http。

写入操作 — 将变更加入/移出队列、提升变更优先级,以及重新加入构建集。默认禁用会影响流水线的工具(ZUUL_READ_ONLY=true),并从服务中彻底移除,因此大模型甚至看不到这些工具。自保持管理(创建/删除)始终可用,因为它不会影响正在运行的流水线。

LogJuicer 集成 — get_build_anomalies 使用基于 ML 的日志分析,将失败日志与成功基线进行比较,以查找异常行。此功能可选,需要设置 LOGJUICER_URL。

节省令牌的输出 — 所有响应都会剔除 None 值,并使用紧凑格式化器。tail_build_log 仅返回最后 N 行,是检查构建失败原因的最快方式。

错误处理 — 所有工具均以 JSON 格式返回结果,包括错误。网络故障、身份验证问题和无效参数会生成 {"error": "descriptive message"}。工具绝不会抛出未处理的异常。

工具

构建与失败
工具功能
list_builds按项目、流水线、作业、变更、结果搜索构建。包含用于交叉引用的 buildset_uuid。
get_build完整的构建详情 — 节点集、日志 URL、制品、错误详情。接受 url 或 uuid。
get_build_failures排查失败时从这里开始。 从 job-output.json 获取结构化的任务级数据 — 失败的 play、任务、主机、msg、rc、stderr/stdout。接受 url 或 uuid。
diagnose_build一次调用即可诊断失败。 将 job-output.json 中的结构化失败信息与针对性的日志上下文(来自 job-output.txt 的 fatal/FAILED 行及其周边内容)结合起来。建议使用此工具,而不是分别调用 get_build_failures 和 get_build_log。接受 url 或 uuid。
get_build_log读取和搜索日志文件。模式:summary(末尾内容 + 错误行)、full(分页)、grep(正则表达式 + 上下文)、start_line/end_line(精确范围)。支持使用 log_name 指定任意文件。接受 url 或 uuid。
tail_build_log最快的失败检查方式。 获取日志最后 N 行(默认 50 行,最多 500 行)。比 get_build_log 的摘要模式更节省令牌。接受 url 或 uuid。
browse_build_logs列出日志目录内容或获取特定文件(清单、制品、must-gather)。每个文件最大 512KB。接受 url 或 uuid。
stream_build_console获取正在运行的构建的实时控制台。 连接到 Zuul WebSocket,返回最后 N 行(末尾内容)。对于已完成的构建,请使用 tail_build_log。可选 — 需要 pip install mcp-zuul[console]。
构建集
工具功能
list_buildsets搜索构建集。使用 include_builds=true 可内嵌完整构建详情(减少往返调用)。
get_buildset包含所有构建和事件的完整构建集信息。接受 url 或 uuid。
流水线与状态
工具功能
get_status实时流水线状态 — 查看排队和运行中的任务,以及作业进度和预计完成时间。可按流水线和项目筛选。
get_change_status查看变更/PR/MR 的状态。在流水线中:显示正在运行的作业及已用时间。不在流水线中:自动获取最新的已完成构建集。接受 url 或 change。
list_pipelines列出所有流水线及其触发类型。
作业与项目
工具功能
list_tenants列出所有租户及其项目数量。
list_jobs列出作业,可选按名称筛选。
get_job作业配置 — 父级、节点集、超时、变体、源项目。
get_project查看为项目配置了哪些流水线和作业。
list_projects列出租户中的所有项目,可选按名称筛选。
get_config_errors作业未运行时请检查此项。 查看配置错误、缺失的引用和损坏的配置。可按项目筛选。
get_freeze_jobs获取流水线/项目/分支的已解析作业依赖图。显示应用继承关系解析后将运行的确切作业。
get_freeze_job继承关系解析后的作业配置。 查看特定作业最终合并后的节点集、playbook、变量和超时时间。回答“此作业实际会执行什么?”
find_flaky_jobs分析近期构建历史中的间歇性失败。计算通过/失败率,并将作业标记为不稳定(失败率 >20% 且结果不一致)。
get_build_times查看构建时长趋势及平均值/最小值/最大值统计。用于检测性能回归或容易超时的作业。
get_job_durations一次调用即可批量获取多个作业的平均值/最小值/最大值时长。适用于监控整个流水线链,无需分别调用 N 次。
check_health检查 API 连通性、身份验证状态和配置。如果 Kerberos 会话已过期,会自动触发重新验证。
get_tenant_info查看租户功能 — 身份验证域、作业历史支持情况、websocket URL。
基础设施
工具功能
list_nodes列出 Nodepool 节点及其状态(就绪、使用中、构建中)、提供商和标签。包含状态摘要。
list_labels列出可用的 Nodepool 标签,即作业可以请求的节点类型。
list_semaphores列出资源锁及其当前持有者和最大容量。作业出现意外等待时可查看。
list_autoholds列出活动的 autohold 请求,即失败后为调试而保留的节点。
get_autohold获取特定 autohold 请求的完整详情,包括保留的节点、时间、项目和作业。
list_providers列出 Nodepool 云提供商及其规格(VM 大小)、镜像和标签。
list_images列出 Nodepool 磁盘镜像及其构建状态和提供商上传状态。
list_system_events列出系统事件,包括配置更新、重新配置和流水线变更。可用于排查“为什么我的作业不再运行?”
get_badge获取项目的 CI 状态徽章 URL(SVG),并提供可嵌入 README 的 Markdown 片段。
get_connections列出已配置的源连接,包括 Gerrit、GitHub、GitLab 实例及其驱动和主机名。
get_components列出系统组件,包括调度器、执行器、合并器、Web 服务器及其状态和版本。
写操作

会影响流水线的操作——默认禁用(ZUUL_READ_ONLY=true)。设置 ZUUL_READ_ONLY=false 以启用。需要身份验证令牌或 Kerberos。autohold 管理(创建/删除)始终可用,因为它不会影响正在运行的流水线。

工具功能
enqueue将变更或引用加入流水线。支持基于变更(check/gate)和基于引用(periodic)的入队。
promote将变更提升至流水线队列的顶部。gate 队列较长时,可用于处理紧急修复。
reenqueue_buildset重新将一个 buildset 入队——从之前的 buildset 中读取项目/流水线/引用,然后再次将其入队。
dequeue从流水线中移除变更或引用。具有破坏性。
autohold_create创建 autohold 请求——失败后保留节点以供调试。不受 ZUUL_READ_ONLY 限制。
autohold_delete删除 autohold 请求。不受 ZUUL_READ_ONLY 限制。
测试结果与日志分析
工具功能
get_build_test_results解析 JUnit XML 测试结果。 通过 zuul-manifest.json 查找测试文件,并返回包含失败详情的结构化通过/失败/跳过计数。适用于 tempest、tobiko 以及任何 JUnit XML 输出。
get_build_anomalies通过 LogJuicer 进行基于 ML 的日志异常检测。将失败日志与成功基线进行比较。需要 LOGJUICER_URL。

提示词

预先构建的提示词模板,可预加载上下文并引导分析:

提示词功能
debug_build获取构建详情和结构化失败信息,检查近期历史中是否有不稳定信号,然后引导进行根因分析。
compare_builds并排加载两个构建及内联失败数据,以便进行差异分析——“为什么它从这里开始失败了?”
check_change确定变更在当前流水线中的状态,或获取其最新结果,并给出相应的后续步骤。
tenant_health评估租户整体健康状况,在一个视图中展示组件、配置错误和节点池状态。
diagnose_queue_delay诊断作业排队或延迟的原因——检查节点、信号量和系统状态。

资源

客户端无需调用工具即可附加到对话中的可浏览上下文:

资源URI 模式
构建详情zuul://{tenant}/build/{uuid}
作业配置zuul://{tenant}/job/{name}
项目配置zuul://{tenant}/project/{org}/{repo}

设置

MCP 客户端配置

所有客户端都使用相同的 JSON 结构。将以下内容添加到客户端的 MCP 配置文件中:

Claude Code(~/.claude.json → mcpServers):

{
  "mcpServers": {
    "zuul": {
      "command": "uvx",
      "args": ["mcp-zuul"],
      "env": {
        "ZUUL_URL": "https://softwarefactory-project.io/zuul",
        "ZUUL_DEFAULT_TENANT": "rdoproject.org"
      }
    }
  }
}

Claude Desktop(claude_desktop_config.json)、Cursor(.cursor/mcp.json)及其他 MCP 客户端使用相同格式。基于 GUI 的客户端不会继承 Shell 的 PATH,请使用 uvx 的完整路径(运行 which uvx 查找路径)。

也可以通过命令行配置:

claude mcp add zuul \
               -e ZUUL_URL=https://softwarefactory-project.io/zuul \
               -e ZUUL_DEFAULT_TENANT=rdoproject.org \
               -- uvx mcp-zuul
环境变量
变量必需默认值说明
ZUUL_URL是—Zuul 基础 URL(例如,https://softwarefactory-project.io/zuul)
ZUUL_DEFAULT_TENANT否—默认租户(无需在每次调用时传入 tenant)
ZUUL_AUTH_TOKEN否—用于需要身份验证的实例的 Bearer 令牌
ZUUL_USE_KERBEROS否false启用 Kerberos/SPNEGO 身份验证
ZUUL_TIMEOUT否30HTTP 超时时间(秒)
ZUUL_VERIFY_SSL否trueSSL 证书验证
MCP_TRANSPORT否stdio传输方式:stdio、sse 或 streamable-http
MCP_HOST否127.0.0.1HTTP 服务绑定地址(非 stdio 传输方式)
MCP_PORT否8000HTTP 服务端口(非 stdio 传输方式)
ZUUL_ENABLED_TOOLS否—要启用的工具列表,以逗号分隔(禁用所有其他工具)
ZUUL_DISABLED_TOOLS否—要禁用的工具列表,以逗号分隔(不能与上面的变量同时使用)
ZUUL_READ_ONLY否true设置为 false 以启用会影响流水线的写操作(enqueue、promote、dequeue、reenqueue_buildset)。Autohold 管理(创建/删除)始终可用。
LOGJUICER_URL否—用于基于 ML 的日志异常检测的 LogJuicer 基础 URL
令牌身份验证

通过宿主环境传入 ZUUL_AUTH_TOKEN——切勿在配置文件中硬编码令牌(令牌会显示在 ps 输出中):

export ZUUL_AUTH_TOKEN=<your-token>

对于 Docker,不指定值即可转发并继承宿主环境中的变量:

"args": ["run", "-i", "--rm", "-e", "ZUUL_AUTH_TOKEN", "mcp-zuul"]
Kerberos / SPNEGO

适用于位于 OIDC + Kerberos 后面的 Zuul。需要有效的 Kerberos 票证(kinit)和 gssapi 包。

Linux 先决条件——gssapi 没有预构建的 Linux wheel,必须从源代码编译:

# Fedora/RHEL/CentOS
sudo dnf install krb5-devel python3-devel gcc

# Debian/Ubuntu
sudo apt install libkrb5-dev python3-dev gcc

macOS 和 Windows 有预构建的 wheel,无需安装额外的包。

然后安装 Kerberos 支持:

pip install mcp-zuul[kerberos]    # or: uvx --with "mcp-zuul[kerberos]" mcp-zuul

通过命令行:

claude mcp add -s user zuul-internal \
               -e ZUUL_URL=https://internal-zuul.example.com/zuul \
               -e ZUUL_DEFAULT_TENANT=my-tenant \
               -e ZUUL_USE_KERBEROS=true \
               -e ZUUL_VERIFY_SSL=false \
               -- uvx --with "mcp-zuul[kerberos]" mcp-zuul

或通过 JSON 配置:

{
  "zuul-internal": {
    "command": "uvx",
    "args": ["--with", "mcp-zuul[kerberos]", "mcp-zuul"],
    "env": {
      "ZUUL_URL": "https://internal-zuul.example.com/zuul",
      "ZUUL_USE_KERBEROS": "true",
      "ZUUL_VERIFY_SSL": "false"
    }
  }
}

对于 Docker,请挂载 Kerberos 票证缓存:

docker run -i --rm \
  -v /etc/krb5.conf:/etc/krb5.conf:ro \
  -v /tmp/krb5cc_$(id -u):/tmp/krb5cc_$(id -u):ro \
  -e KRB5CCNAME=/tmp/krb5cc_$(id -u) \
  -e ZUUL_URL=https://internal-zuul.example.com/zuul \
  -e ZUUL_USE_KERBEROS=true \
  mcp-zuul
多个实例

为每个 Zuul 实例添加单独的条目:

{
  "mcpServers": {
    "zuul-rdo": {
      "command": "uvx", "args": ["mcp-zuul"],
      "env": { "ZUUL_URL": "https://softwarefactory-project.io/zuul", "ZUUL_DEFAULT_TENANT": "rdoproject.org" }
    },
    "zuul-internal": {
      "command": "mcp-zuul",
      "env": { "ZUUL_URL": "https://internal.example.com/zuul", "ZUUL_USE_KERBEROS": "true" }
    }
  }
}

故障排除

在 Linux 上安装 mcp-zuul[kerberos] 时出现 krb5-config: not found 或 Python.h: No such file:

gssapi 没有预构建的 Linux wheel,需要从源代码编译。请先安装系统包:

# Fedora/RHEL/CentOS
sudo dnf install krb5-devel python3-devel gcc

# Debian/Ubuntu
sudo apt install libkrb5-dev python3-dev gcc

在 Cursor 或 Claude Desktop 中出现 uvx: command not found:

基于 GUI 的 MCP 客户端不会继承 Shell 的 PATH。请使用 uvx 的完整路径:

which uvx    # find the path, e.g. /usr/bin/uvx or ~/.local/bin/uvx

然后在 MCP 配置中将该绝对路径用作 command:

"command": "/usr/bin/uvx"

~/.local/share/uv/ 出现 权限错误:

如果之前使用 sudo 运行过 uv,缓存目录可能归 root 所有:

sudo chown -R $(whoami) ~/.local/share/uv/

使用示例

调试构建失败
"Why did the latest build of my-project fail?"

→ list_builds(project="my-project", result="FAILURE", limit=1) → get_build_failures(uuid="...") → 获取根本原因,包括任务名称、错误和返回码。

深入查看日志
"The structured data says 'non-zero return code' but no error detail.
 Check the ci_script logs."

→ browse_build_logs(uuid="...", path="controller/ci-framework-data/logs/") → 找到 ci_script_008_run.log → get_build_log(uuid="...", log_name="controller/ci-framework-data/logs/ci_script_008_run.log", grep="error|timed out|Error 1", context=2) → 获取包含上下文的确切错误。

定位特定错误
"Show me lines 6478-6484 of the job output"

→ get_build_log(uuid="...", start_line=6478, end_line=6484) → 精确获取这 7 行。

检查实时流水线状态
"Is change 54321 in any pipeline?"

→ get_change_status(change="54321") → 获取包含已运行时间和预计剩余时间的实时作业,或在更改不在流水线中时获取最新的已完成构建集。

比较流水线中的构建结果
"Show me all builds from the latest buildset"

→ 使用 list_builds 获取 buildset_uuid → 使用 get_buildset(uuid="...") → 查看所有同级构建的结果和耗时。

直接粘贴 Zuul URL
"What went wrong with this build?
 https://zuul.example.com/t/tenant/build/abc123def"

→ 使用 get_build_failures(url="https://zuul.example.com/t/tenant/build/abc123def") → 自动提取租户和 UUID。

调试作业为何没有运行
"My project's check pipeline seems broken — jobs aren't triggering"

→ 使用 get_config_errors(project="org/my-project") → 查看配置错误、缺失的引用或仓库访问问题。

检查节点可用性
"Jobs are stuck in queue — are there nodes available?"

→ 使用 list_nodes() → 查看节点状态及按状态汇总 → 使用 list_labels() → 查看可用的节点类型。

检测不稳定的作业
"Is this job flaky? It keeps failing intermittently"

→ 使用 find_flaky_jobs(job_name="my-deploy-job", limit=30) → 查看通过/失败统计、失败率以及 flaky=true/false。

查看项目会运行哪些作业
"What jobs are configured for openstack-operator in the check pipeline?"

→ 使用 get_freeze_jobs(pipeline="check", project="openstack-k8s-operators/openstack-operator") → 查看解析后的作业图及其依赖项。

快速查看日志尾部
"Show me the last 30 lines of the build log"

→ 使用 tail_build_log(uuid="...", lines=30) → 仅查看日志尾部,最大限度减少 token 用量。

继承完成后,我的作业会使用什么 nodeset?
"What nodeset and playbooks will deploy-job actually use?"

→ 使用 get_freeze_job(pipeline="check", project="org/repo", job_name="deploy-job") → 查看完成所有父级继承后的解析结果,包括 nodeset、playbook、变量和超时设置。

开发

git clone https://github.com/imatza-rh/mcp-zuul.git
cd mcp-zuul
uv sync --extra dev

# Run locally
ZUUL_URL=https://softwarefactory-project.io/zuul uv run mcp-zuul

# Run tests
uv run pytest tests/ -v

# Lint and format
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/

# Type check
uv run mypy src/mcp_zuul/

# Build Docker image
docker build -t mcp-zuul .
架构
MCP Client (Claude Code, Cursor, etc.)
    │
    ▼
┌──────────────────────────────────────────────────┐
│  src/mcp_zuul/                                   │
│                                                  │
│  server.py       MCPServer instance               │
│  config.py       env vars, transport, filtering  │
│  auth.py         Kerberos/SPNEGO + OIDC          │
│  errors.py       @handle_errors decorator        │
├──────────────────────────────────────────────────┤
│  tools/          48 tools across 8 submodules    │
│  prompts.py      5 prompt templates              │
│  resources.py    3 zuul:// resources             │
├──────────────────────────────────────────────────┤
│  helpers.py      API client, URL parsing         │
│  formatters.py   token-efficient output          │
│  parsers.py      Ansible/JUnit/log parsing       │
│  classifier.py   failure classification          │
├──────────────────────────────────────────────────┤
│  httpx clients   API (auth) + logs (no auth)     │
└────────┬─────────────────────────┬───────────────┘
         ▼                         ▼
    Zuul REST API           Log file hosts

完整的架构详情请参阅 CLAUDE.md。

收录目录

mcp-zuul MCP 服务

贡献

欢迎贡献。对于重大变更,请先创建 issue 进行讨论。

# Fork, clone, and install dev dependencies
uv sync --extra dev

# Make changes, then verify
uv run pytest tests/ -v
uv run ruff check src/ tests/
uv run ruff format src/ tests/
uv run mypy src/mcp_zuul/

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。