mcpField
Z
Zabbix API MCP

Zabbix API MCP

本地服务
github.com/shigechika云与基础设施03 天前更新

关于 Zabbix API MCP

Zabbix API MCP 为网络运维团队连接 Zabbix,查询告警、主机、监控项和维护窗口。每日简报汇总活动问题与可配置的站点类别,并提供可选写入工具和适配不同版本的认证方式。

主要功能

  1. 01问题与维护状态每日简报
  2. 02筛选并查看活动问题
  3. 03查询主机和监控项数值
  4. 04确认告警并设置维护窗口
  5. 05可配置类别与只读模式

适用场景

  1. 01在早间巡检时查看活动告警
  2. 02检查某台主机的当前监控值
  3. 03为问题添加运维备注并确认
  4. 04为指定主机开启维护窗口

MCP 相关

将 Zabbix API 查询及部分状态变更操作作为 MCP 工具提供。只读模式可从服务中移除告警确认和维护写入工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"shigechika-zapi": {
"command": "uvx",
"args": [
"zapi-mcp"
]
}
}
}
启动命令uvx zapi-mcp

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

安装包
pypizapi-mcp0.14.0

工具

还没有获取到工具列表

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

详细介绍

zapi-mcp

英语 | 日语

用于 Zabbix API 的 MCP(Model Context Protocol)服务。

专为网络运维打造:一次 daily_brief 调用即可汇总活动问题,以及特定站点的类别(DHCP 地址池使用率、SNAT 会话使用率、核心网络问题等);单独的工具则可查询问题、主机和监控项值。组织特定的标签存放在配置文件中,而非代码里,因此该服务保持通用。

自适应版本的身份验证:支持 Zabbix 6.0 LTS(user + auth 字段),并兼容未来的 6.4 / 7.0(username + Authorization: Bearer)。

文档:https://shigechika.github.io/zapi-mcp/

功能

工具描述
health_check服务版本、Zabbix 连通性和身份验证、检测到的 API 版本,以及已配置的 daily_brief 类别 — 在会话开始或超时后调用
daily_brief晨间巡检:活动问题(Warning 及以上)、当前处于维护状态的主机,以及每个已配置类别对应的一个分区
get_problems按严重性和标签筛选活动问题,按最新优先排序并显示发生时长;标题显示实际总数(达到上限时显示 showing N of TOTAL);与 Zabbix 前端一样,隐藏禁用的触发器、主机或监控项上的问题(include_disabled=True 可列出这些问题);输出包含 eventid
get_hosts按角色/标签/主机组筛选主机列表,并显示 IP 和标签
get_host_items获取主机当前的监控项值(在服务端按主机筛选)
acknowledge_problem确认问题并添加消息(不会关闭问题)
set_maintenance开启幂等的 Zabbix 维护时段,按 location 标签或精确主机名选择主机(两者必须且只能指定其一)
get_maintenance_windows列出维护时段(活动/即将开始/已过期)— 在将其他工具的告警视为新事件之前进行交叉核查

设置

# uv
uv pip install zapi-mcp

# pip
pip install zapi-mcp

或从源代码安装:

git clone https://github.com/shigechika/zapi-mcp.git
cd zapi-mcp

# uv
uv sync

# pip
pip install -e .

配置

设置以下环境变量:

变量描述默认值
ZABBIX_URLZabbix 基础 URL(例如 https://zabbix.example.com);如果 URL 中没有 /api_jsonrpc.php,则会自动追加必填
ZABBIX_API_TOKENZabbix API 令牌(Zabbix 5.4+),用于替代 ZABBIX_USER/ZABBIX_PASSWORD两者之一
ZABBIX_USERZabbix API 用户两者之一
ZABBIX_PASSWORDZabbix API 密码两者之一
ZABBIX_CATEGORIES_INIdaily_brief 类别 INI 文件的路径(可选)—
ZABBIX_BRIEF_RECENT_HOURSdaily_brief 的“近期”时间窗口(小时);超过此时长的问题会折叠为计数24
ZABBIX_BRIEF_PROBLEM_LIMIT每次调用中 daily_brief 获取的活动问题上限;超出部分将计数1000
ZABBIX_READ_ONLY设为 true(或 1/yes/on)时,不会注册 acknowledge_problem 和 set_maintenance,因此模型不会看到这些工具。其他任何非 false 值也会被视为只读,并由 health_check 报告未设置(启用写入工具)

API 用户需要对所查询的主机组拥有读取权限;如果使用 acknowledge_problem,还需拥有确认权限;如果使用 set_maintenance,则需拥有维护写入权限;使用 get_maintenance_windows 和 daily_brief 的“In Maintenance”分区则需维护读取权限(通常默认已包含)。

使用 ZABBIX_API_TOKEN 或 ZABBIX_USER + ZABBIX_PASSWORD 进行身份验证。设置令牌时,遗留的 ZABBIX_USER 会被忽略;如果同时设置令牌、ZABBIX_USER 和 ZABBIX_PASSWORD,则会产生配置错误。令牌无需登录,也无需在客户端配置中保存密码;可以设置过期时间,并可在 Zabbix 的 API 令牌页面单独撤销。

daily_brief 中的活动问题

问题按严重程度分组,并按从新到旧排列,每项都标注其发生时间(例如 3h ago)。超过近期时间窗口(ZABBIX_BRIEF_RECENT_HOURS,默认为 24h)的问题会合并为一行:… and N older (stale; oldest …)。这样一来,Zabbix 因从未自动确认恢复而持续保持活动状态的告警积压(ICMP ping down、RDP down 等),就不会掩盖刚发生的问题。分区标题会显示实际总数;如果获取数量受限,则显示 showing N of TOTAL,绝不会悄悄截断。

daily_brief 中的维护窗口

紧接“活动问题”之后,daily_brief 会列出当前处于活动维护窗口内的主机,以及今天稍后将进入维护窗口的主机,避免其他正在监视这些主机的系统将计划内停机误认为新事件。如果没有内容可显示(没有新情况就没有维护信息),则完全省略 ## In Maintenance 分区。明天或更晚开始的窗口,以及已过期的窗口,不会在此处列出;如需查看完整信息,请调用 get_maintenance_windows(可选传入 include_expired=True)。

daily_brief 的类别(可选)

daily_brief 始终会列出活动问题。要添加特定站点的分区(例如 DHCP 池耗尽、SNAT 会话使用情况、核心网络问题),请将 ZABBIX_CATEGORIES_INI 指向一个 INI 文件。每个 [section] 都是一个类别:

[dhcp]
name = DHCP Pool Usage
# Zabbix host tag identifying the group
tag = dhcp-pool-usage
# report current values for this exact item key
item_key = usage
# flag values >= this
threshold = 80

[snat]
name = SNAT Session Pool
tag = snat-pool-usage
# substring match (catches pool.node0.usage etc.)
item_key_search = .usage
threshold = 80

[core]
name = Core Network
tag = role
# the tag must equal this value
tag_value = main
# no item key -> report active problems instead
  • tag(必需):用于标识类别的主机标签。设置 tag_value 后,标签必须与其相等(Equal);不设置时,任何带有该标签的主机都会匹配(Exists)。
  • item_key / item_key_search:设置其中任一项后,该分区会按值从高到低排序,报告当前的项目值。item_key 会精确匹配键;对于包含 ID 的键,请使用 item_key_search(例如,.usage 可匹配 pool.node0.usage)。如果两者都未设置,则会报告该标签对应的活动问题。
  • threshold:可选;达到或超过该值时会标记出来。

请参阅 categories.ini.example。如果未设置该变量或文件不存在,daily_brief 只会报告活动问题。

写入操作

有两个工具会改变状态,其他工具都只读取数据。

工具Zabbix API 调用
acknowledge_problemevent.acknowledge
set_maintenancemaintenance.create

acknowledge_problem 需要 API 用户拥有确认权限;set_maintenance 需要维护写入权限。缺少任一权限时,服务器对相应工具会保持只读:调用会在 Zabbix API 处失败,而其他工具仍可正常工作。因此,可以将 API 用户交给 AI 助手用于调查,而不授予其更改 Zabbix 配置的权限。只有在工作需要通过助手确认告警或开启维护窗口时,才授予相应权限。

要彻底禁止模型使用写入工具,请设置 ZABBIX_READ_ONLY=true:这两个工具不会被注册,因此客户端看不到它们;即使被调用,它们也会拒绝执行。这样,同一个 Zabbix 用户即可同时服务于只读和启用了写入功能的 MCP 客户端。每个工具还带有 MCP 工具注解(readOnlyHint、destructiveHint、idempotentHint),客户端可据此区分读写工具。

使用方法

Claude Code(插件)

本仓库同时也是一个仅包含单个插件的市场,因此 Claude Code 可以为你安装该服务:

/plugin marketplace add shigechika/zapi-mcp
/plugin install zapi-mcp@zapi-mcp

该插件会启动 uvx zapi-mcp,并读取配置中所述的相同环境变量;请在启动 Claude Code 之前导出这些变量。ZABBIX_CATEGORIES_INI 可以不设置。

运行 Claude Code 的进程必须能在 PATH 中找到 uvx。登录 shell 通常已包含它,但通过 GUI 启动的应用可能没有;如果插件无法启动,请在系统范围内安装 uv。

Claude Code(手动配置)

添加到 .mcp.json:

{
  "mcpServers": {
    "zapi-mcp": {
      "type": "stdio",
      "command": "zapi-mcp",
      "env": {
        "ZABBIX_URL": "https://zabbix.example.com",
        "ZABBIX_USER": "api-user",
        "ZABBIX_PASSWORD": "",
        "ZABBIX_CATEGORIES_INI": "/path/to/categories.ini"
      }
    }
  }
}
Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "zapi-mcp": {
      "command": "zapi-mcp",
      "env": {
        "ZABBIX_URL": "https://zabbix.example.com",
        "ZABBIX_USER": "api-user",
        "ZABBIX_PASSWORD": ""
      }
    }
  }
}
Codex
codex mcp add zapi-mcp \
  --env ZABBIX_URL=https://zabbix.example.com \
  --env ZABBIX_USER=api-user \
  --env ZABBIX_PASSWORD=your-password \
  --env ZABBIX_CATEGORIES_INI=/path/to/categories.ini \
  -- zapi-mcp

任何其他可启动 stdio 服务的 MCP 客户端也同样适用:将 zapi-mcp 设为命令,并在其环境中设置 ZABBIX_* 变量。

直接执行
export ZABBIX_URL=https://zabbix.example.com
export ZABBIX_USER=api-user
export ZABBIX_PASSWORD=your-password
# or, instead of the user and password: export ZABBIX_API_TOKEN=your-token
zapi-mcp
CLI 选项
zapi-mcp --version   # Print version and exit
zapi-mcp --check     # Verify environment variables and authentication, then exit
zapi-mcp --brief     # Print the daily_brief to stdout and exit (handy for cron)
zapi-mcp             # Start MCP server (STDIO, default)

--check 退出码:0 表示成功,1 表示配置错误,2 表示身份验证/连接错误。

--brief 退出码:0 表示成功,1 表示某个部分失败(身份验证、活动问题获取或类别加载——请查看输出中嵌入的 Error: 行)。

开发

git clone https://github.com/shigechika/zapi-mcp.git
cd zapi-mcp

# uv
uv sync --dev
uv run pytest -v
uv run ruff check .

# pip
python3 -m venv .venv
.venv/bin/pip install -e . && .venv/bin/pip install pytest pytest-cov respx ruff
.venv/bin/pytest -v
.venv/bin/ruff check .
实时冒烟测试

pytest 会使用固定数据检查逻辑;它无法判断工具是否已停止返回真实数据。scripts/smoke_test.py 会使用配置的 Zabbix 测试每个已注册工具,并在回答为空、格式错误或包含错误时失败:

# needs the same ZABBIX_* environment variables as the server
uv run python scripts/smoke_test.py
uv run python scripts/smoke_test.py --only get_problems --traceback
  • 只读。 按名称跳过 acknowledge_problem 和 set_maintenance:确认操作对所有操作员都可见,且无法悄悄撤销;set_maintenance 则会开启真实的维护窗口并抑制告警。测试会确保这一点。报告只打印工具名称和状态,从不打印负载;服务器生成的错误文本也会被删去,因为 Zabbix 会引用被查询的主机。--traceback 仍会在操作员自己的终端上显示完整文本。
  • 可能标识真实主机、组或标签值的参数会在运行时发现,绝不会写入 scripts/smoke_probes.py。两个测试会对此进行强制检查:一个拒绝将这些参数作为字面值,另一个禁止文件中出现任何类似地址的内容(邮件地址、URL、主机名、IPv4、IPv6)。
  • 空回答在此处是有效的观察结果——监控系统没有任何异常才是我们的目标——因此探针会断言工具必须生成的封装结构,而非行数。
  • CI 会强制执行成本较低的部分:注册了工具却没有探针规范会导致构建失败(tests/test_smoke_probes.py),因此每次新增工具都会促使我们思考“如何确认它能正常工作?”。
  • scripts/smoke_harness.py 是执行引擎,不包含任何 Zabbix 知识:它在共用该引擎的服务之间保持完全一致,因此只需修复一次引擎错误,然后同步文件,而不是只修改此副本。

发布

发布通过 release-please 自动完成。将 Conventional Commits(feat:、fix:、……)合并到 main 后,会保持一个发布 PR 打开,其中包含下一个版本和变更日志。合并该 PR 后,会创建 vX.Y.Z 标签并发布 GitHub Release,其 release: published 事件会触发 release 工作流,构建并发布到 PyPI 和 MCP Registry。版本由 release-please 管理,位置在 zapi_mcp/__init__.py 和 server.json(请勿手动递增版本)。

重要

release-please 工作流应配置仓库密钥 RELEASE_PLEASE_TOKEN(一个拥有 contents: write + pull-requests: write 权限的 PAT)。 默认的 GITHUB_TOKEN 无法创建触发下游 release 工作流的 Release(GitHub 会阻止由 GITHUB_TOKEN 触发的工作流运行),因此没有 PAT 就不会发布任何内容。如果未设置该密钥,工作流会 回退到 GITHUB_TOKEN,以便分叉仓库上的 PR CI 继续正常工作。

路线图

  • 为远程/移动场景提供 Streamable HTTP 传输 + OAuth2
  • 关键指标的可视化呈现

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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