Zabbix MCP Server
Zabbix AI CLI — 面向 AI 代理的 Zabbix MCP 服务器与 CLI
zabbix-ai-cli 是一个集 Zabbix MCP 服务器与命令行客户端于一体的 Go 二进制程序。 它为 Claude Code、Claude Desktop、Codex、Cursor 以及任何其他 Model Context Protocol 客户端提供面向任务的 Zabbix 访问——当前什么出了问题、主机为何静默、告警为何从未到达——输出有界、JSON 契约稳定,并且未经人员批准不会对 Zabbix 做任何更改。
它面向那些会被呼叫的人:运行 Zabbix 的 SRE 和 DevOps 团队,他们希望代理能够对事件进行分类处理,而无需将整个 API 交给它。
需要 Zabbix 6.4 或更高版本。 Bearer-token 认证在 6.4 中引入,并且是唯一实现的方案;更早的版本则期望令牌出现在请求体中。
它从不联系语言模型。AI 做决策,本程序执行,Zabbix 负责监控。
zabbix-ai-cli login
zabbix-ai-cli problems list
zabbix-ai-cli host investigate server01
zabbix-ai-cli alert why 757474
zabbix-ai-cli mcp为什么不是又一个 Zabbix API 封装
封装 host.get、problem.get 和 history.get 在赋予代理 API 能力的同时,也把 API 的锋利边缘交给了它。在当前的 Zabbix 7.4 服务器上:
problem.get没有selectHosts,因此问题列表到达时不含主机。history.get默认使用 numeric-unsigned 表,对 float 类型的监控项返回空结果——静默地,没有任何错误。item.lastvalue和item.lastclock仍然存在,并且已经在多个大版本中返回常量"0"。host.available在 5.4 中被移除;可用性位于接口上。event.acknowledge接受一个位掩码,而其自身的文档自相矛盾。searchWildcardsEnabled: true禁用了隐式子串匹配,将名称片段变成精确匹配,从而静默地什么都找不到。
上述每一条都会产生一个自信但错误的答案,而不是报错。本工具将这些陷阱吸收到描述任务而非端点的命令背后。
Related MCP server: Zabbix MCP Server
它能做什么
命令 | 回答 |
| 当前什么出了问题——包括被抑制的问题,并指出隐藏它们的维护窗口 |
| 一次调用:主机状态、活动问题、近期事件、静默和不支持的监控项、维护 |
| 少量字段,而不是一万两千字符的配置 |
| 通知为何到达或未到达——抑制、投递尝试、动作、媒介类型、按收件人的严重级别过滤器 |
| 将从聊天中粘贴的通知转换为事件、主机和触发器标识符 |
| Zabbix 无法轮询的受监控主机,以及它记录的错误 |
| 具有正确历史类型、人类可读单位和 |
| 开启、延长、结束或移除窗口,支持 |
| 逃生舱口,遵循相同的批准规则 |
安全性
读操作立即执行。其他操作则不会。
调用方 | 读 | 写 | 破坏性 |
CLI,终端前的人 | 立即 | 先计划,再 | 先计划,再 |
MCP,代理 | 立即 | 先计划,再在终端 | 先计划,再在终端 |
没有任何 MCP 参数可以应用更改,而添加一个也无济于事:代理能发送的确认,提示注入也能发送。批准存在于终端,位于模型的上下文之外。
$ zabbix-ai-cli maintenance create "ms*" --for 2h
PLAN pl_cc89d2e87d15
Create maintenance "ms* (2h0m)" for 2h0m, 2026-08-21T05:39:00Z to 2026-08-21T07:39:00Z
Affects:
host ms1.8qw.ru
host ms10.8qw.ru
...
Risk: write
Expires: 2026-08-21T05:54:22Z
Nothing has changed yet.
To apply it: zabbix-ai-cli approve pl_cc89d2e87d15在计划运行之前,其参数会被重新哈希、截止时间会被检查、前置条件会从 Zabbix 重新读取。自计划制定以来已被替换的窗口会被拒绝,而不是被删除。每次应用的更改都会追加到审计日志中。
这比拒绝更重要。当被本工具取代的工具阻止写入时,工作仍然会通过从容器中复制出的令牌完成——丢失了审计轨迹,却什么也没阻止。一条被记录在案的允许路径,胜过一条会被绕过的拒绝。
安装
预构建的归档文件和
ghcr.io镜像随每个带标签的发布一起发布。在第一个标签落地之前,请使用以下任一方法从源码构建。
要获得主机原生二进制,请使用 Go 1.25 或更高版本:
go install github.com/stufently/zabbix-ai-cli/cmd/zabbix-ai-cli@latest
# Or build the current checkout.
mkdir -p bin
go build -trimpath -o bin/zabbix-ai-cli ./cmd/zabbix-ai-cliMake 目标以容器优先,不需要主机上安装 Go:
make build # Linux binary in ./bin, built inside Docker
make docker # Linux container image for the MCP server配置
zabbix-ai-cli login --profile prod它会询问 URL 和 API 令牌,向服务器验证令牌,然后存储它。令牌绝不允许作为标志传入,因为标志值在 shell 历史和进程列表中可见;请改用管道输入:
printf %s "$TOKEN" | zabbix-ai-cli login --profile prod --url https://zabbix.example.com --token-stdin在配置文件被授予相应作用域之前,写操作处于关闭状态:
zabbix-ai-cli profile scopes prod --add maintenance有关解析顺序以及无头(headless)和容器场景,请参阅 docs/authentication.md。
将 Zabbix MCP 服务器添加到你的 AI 客户端
MCP 客户端永远不会看到 Zabbix 令牌。它会在服务器进程内部从你配置的配置文件中解析出来,因此凭据永远不会进入模型的上下文或客户端的配置文件中。
Claude Code
claude mcp add zabbix -- zabbix-ai-cli mcp --profile prod
zabbix-ai-cli skills install claudeClaude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"zabbix": {
"command": "zabbix-ai-cli",
"args": ["mcp", "--profile", "prod"]
}
}
}Codex
# ~/.codex/config.toml
[mcp_servers.zabbix]
command = "zabbix-ai-cli"
args = ["mcp", "--profile", "prod"]zabbix-ai-cli skills install codexCursor、Windsurf、VS Code 及其他 MCP 客户端
任何支持 stdio 的客户端都接受相同的两个字段——命令 zabbix-ai-cli,参数 ["mcp", "--profile", "prod"]。对于希望改用 HTTP 的客户端:
zabbix-ai-cli mcp --http 127.0.0.1:8000除非你同时传入 --allow-remote 和 bearer 令牌,否则它会拒绝可路由的地址,因为未认证的 MCP 端点就是一条未认证的通往 Zabbix 的路径。请参阅 docs/mcp.md。
Docker
docker run --rm -i \
-e ZABBIX_AI_CLI_URL=https://zabbix.example.com \
-e ZABBIX_AI_CLI_TOKEN_FILE=/run/secrets/zabbix \
-v /path/to/token:/run/secrets/zabbix:ro \
ghcr.io/stufently/zabbix-ai-cli:latest mcpMCP 工具
十四个工具,而不是两百个。庞大的工具面在代理做任何事之前就消耗了它的上下文,而且其中大部分永远不会被调用。
zabbix_problems zabbix_metrics_latest zabbix_unreachable
zabbix_problem zabbix_metrics_history zabbix_maintenance_list
zabbix_hosts zabbix_alert_why zabbix_api_call
zabbix_host_status zabbix_resolve zabbix_plan_create
zabbix_host_investigate zabbix_plan_status写操作不会各自拥有一个工具。zabbix_plan_create 接受一个 operation 枚举,该枚举由构建 CLI 所用的同一注册表生成,因此工具面不会随着操作的增加而增长。
JSON 契约
{
"ok": true,
"data": {},
"warnings": [],
"meta": {
"returned": 50,
"total": 381,
"truncated": true,
"truncated_reason": "row_limit",
"partial": false,
"zabbix_version": "7.4.10"
}
}错误携带稳定的代码、重试是否值得,以及下一步该做什么:
{
"ok": false,
"error": {
"code": "AUTHENTICATION_FAILED",
"message": "Zabbix rejected the configured API token",
"retryable": false,
"suggestion": "run 'zabbix-ai-cli login' to configure a new token"
}
}zabbix-ai-cli schema 打印每个操作、其参数及其 JSON Schema,因此代理可以通过编程方式了解工具,而不是猜测标志。
完整细节请参阅 docs/json-output.md。
文档
常见问题
什么是 Zabbix MCP 服务器?
MCP 服务器是一个小程序,通过 Model Context Protocol 向 AI 客户端暴露系统。Zabbix MCP 服务器让 Claude、Codex、Cursor 及类似客户端将 Zabbix——问题、主机、监控项、事件、维护——作为工具来查询,而不是让模型猜测针对 JSON-RPC API 的 curl 调用。
AI 代理能通过这个更改我的 Zabbix 吗?
不能自行更改。读操作立即执行。每次写操作都会生成一个计划并停止。应用该计划是人在自己的终端中运行的命令:zabbix-ai-cli approve <plan-id>。没有任何 MCP 参数可以应用任何更改,如果添加了这样的参数,测试会使构建失败。
它会把我的监控数据发送给 AI 提供商吗?
不会。本程序从不联系语言模型。它只与 Zabbix 通信并输出 JSON。你的 MCP 客户端如何处理该输出,是你与你的客户端之间的事。
支持哪些 Zabbix 版本?
Zabbix 6.4 及更高版本,因为 bearer-token 认证在 6.4 中引入。针对 Zabbix 7.4 开发和测试。
我需要安装 Go 吗?
不需要。make build 在 Docker 内部编译,主机上除了 Docker 本身外什么都不需要。go install 用于生成主机原生二进制,每个带标签的发布都会发布带校验和的 Linux、macOS 和 Windows 归档文件,以及 ghcr.io 上的容器镜像。
这与封装 Zabbix API 的 MCP 服务器有何不同?
薄封装把 API 的锋利边缘交给了代理:没有主机的 problem.get、对 float 监控项静默返回空结果的 history.get、冻结在 "0" 的 lastvalue。这些会产生自信的错误答案而不是报错。本工具回答问题——"什么出了问题"、"为什么这个告警没有到达"——并吸收其背后的陷阱。它还提供十四个工具而不是两百个,因为庞大的工具面会在代理做任何工作之前消耗它的上下文。
我还能调用原始的 Zabbix API 吗?
可以,通过 api call,遵循相同的批准规则。分发凭据或执行代码的方法会被直接拒绝——包括迂回的方式,例如创建脚本并让动作运行它。
没有 AI 客户端也能工作吗?
可以。它是一个普通的 CLI,具有人类可读的表格、JSON 输出和文档化的退出码,因此同样可以从 shell 或 CI 任务中使用。
兼容性
Zabbix 6.4 及更高版本。Bearer-token 认证在 6.4 中引入,并且是唯一实现的方案。版本相关行为会被显式断言,因此不兼容会被报告,而不是返回空结果。
针对 Zabbix 7.4 开发和测试。
许可证
Apache-2.0。请参阅 LICENSE。
Zabbix 是 Zabbix LLC 的商标。本项目是一个独立的开源项目,与 Zabbix LLC 无关联,也未获得其认可。
Available Tools
15 toolszabbix_alert_whyARead-onlyIdempotent
Explain whether an event produced a notification, and what stood in the way.
Walks the whole chain: suppression, delivery attempts and their errors, trigger actions, media types, and each recipient's media severity filter and active period. Any one of those links can drop a notification without recording an error anywhere.
Use when the user asks why an alert did or did not arrive, or why a notification was missing. For the problem itself call zabbix_problem; to turn a pasted notification into identifiers call zabbix_resolve first.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | event identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: it explains this is a diagnostic walk of the full notification chain and warns that any single link can silently drop a notification without recording an error, which sets expectations about why the answer may be inconclusive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line purpose, then the investigative scope, then routing guidance. Every sentence carries distinct information — none of it restates the name or the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description has to carry some of that burden, and it does by listing the chain elements it inspects, which implies the structure of the answer. It stops short of describing the response shape or what an inconclusive result looks like, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, 'event', with 100% schema description coverage including an example value. The description adds no syntax, format, or identifier-source detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — explaining whether an event produced a notification and what blocked it — and then enumerates the exact chain it walks (suppression, delivery attempts, trigger actions, media types, per-recipient filters). It explicitly differentiates itself from siblings by naming zabbix_problem for the underlying issue and zabbix_resolve for identifier extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use when the user asks why an alert did or did not arrive, or why a notification was missing.' It also states when NOT to use it, routing to zabbix_problem for the problem itself and zabbix_resolve to convert a pasted notification into identifiers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_api_callARead-onlyIdempotent
Call a Zabbix API method directly.
Read methods run immediately. Write methods produce a plan and go through approval like every other change. A method that is not in the risk registry is refused rather than guessed at. Over MCP this tool is read-only.
Use when no high-level tool covers the question and a read method such as host.get is required. For problems, hosts, metrics or alert delivery call the matching zabbix tool instead. A write through this tool is refused; to make one, call zabbix_write, or zabbix_plan_create to show the operator the change first.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | API method, for example host.get | |
| params | No | method parameters as JSON |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered; the description still adds real value by disclosing the risk-registry refusal for unknown methods, the approval flow for writes, and the MCP read-only surface. Minor ambiguity remains between 'write methods produce a plan' and 'a write through this tool is refused', and it never says what the raw response looks like or whether it is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and logically ordered: what it does, how reads vs writes behave, then routing. Slight redundancy — the write refusal is stated twice ('go through approval', 'Over MCP this tool is read-only', 'A write through this tool is refused') — but each restatement disambiguates a genuinely confusing surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should ideally describe the return shape (raw Zabbix JSON), which it omits. It is otherwise complete for the routing decision an agent must make, covering read immediacy, write refusal, unknown-method refusal, and sibling alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only 2 params, so the schema already documents 'method' and 'params as JSON'. The description contributes only an inline example (host.get) and no format, pagination, or limits guidance beyond the schema — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Call a Zabbix API method directly') and positions itself precisely as the raw escape hatch against a list of high-level siblings. An agent can distinguish it from zabbix_problems, zabbix_metrics_latest, etc. without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Use when no high-level tool covers the question and a read method such as host.get is required', with a named fallback for problems/hosts/metrics/alert delivery and a redirect to zabbix_write or zabbix_plan_create for writes. When-to-use, when-not-to-use, and alternatives are all stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_host_investigateARead-onlyIdempotent
Collect a diagnostic snapshot of one host in a single call.
Gathers host state, active problems, recent events, silent and unsupported items and maintenance windows. It reports facts and draws no conclusions; interpreting them is the caller's job.
Use when the user asks what is wrong with a named host or wants one diagnostic pass instead of several queries. For a short status line call zabbix_host_status; for hosts Zabbix cannot poll at all call zabbix_unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | host name, fragment or identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds real behavioral context beyond that: the exact scope of collected data and the explicit contract that it 'reports facts and draws no conclusions; interpreting them is the caller's job,' which sets output expectations. It does not, however, mention result size, timeouts, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, then scope, then routing. The 'draws no conclusions' clause is not filler — it changes how the caller should treat the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return content, and it does so by enumerating the five data categories the snapshot includes. Combined with the explicit routing guidance and annotations covering the safety profile, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter, so the schema fully documents 'host' (name, fragment or identifier). The description never elaborates on the parameter or on how a fragment matches multiple hosts, so it adds nothing beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Collect') and resource ('diagnostic snapshot of one host'), then enumerates exactly what is gathered: host state, active problems, recent events, silent/unsupported items, maintenance windows. This is clearly distinguishable from siblings like zabbix_host_status and zabbix_unreachable, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('what is wrong with a named host' or 'one diagnostic pass instead of several queries') and names two alternatives with the conditions that select them: zabbix_host_status for a short status line, zabbix_unreachable for hosts Zabbix cannot poll. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_hostsARead-onlyIdempotent
Find hosts by name fragment, pattern or group.
Matching is a case-insensitive substring over both the technical and the visible name, and exact matches are listed first. Guessing exact names is the most common way a query comes back empty.
Use when the user is looking for a host and does not have its exact name, or wants the hosts in a group. For a short health check of one host call zabbix_host_status; for a full diagnostic snapshot call zabbix_host_investigate.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | limit to a host group | |
| limit | No | maximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated | |
| search | No | name fragment; * is allowed | |
| monitored | No | exclude hosts whose monitoring is disabled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds real behavioral context the annotations cannot: matching is a case-insensitive substring over both technical and visible name, exact matches rank first, and name-guessing is the common cause of empty results. It does not cover truncation/pagination behavior itself, leaving that to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, zero filler, with the core purpose front-loaded, matching semantics second, and routing last. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description covers purpose, usage boundaries, alternatives, and match semantics, and the truncation-reporting behavior is carried by the limit parameter's schema text. For a 4-param read tool this is nearly complete; only an explicit note on return shape or default result ordering when no search is given is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: how the search string is interpreted (case-insensitive substring across both name fields) and result ordering. It adds no detail on group, limit, or monitored beyond the schema, so it is a modest improvement over baseline rather than a full one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb (Find) and resource (hosts) plus the matching modes (name fragment, pattern, group). It is immediately distinguishable from siblings like zabbix_host_status and zabbix_host_investigate, which the description explicitly routes to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use the tool ('the user is looking for a host and does not have its exact name, or wants the hosts in a group') and names two alternatives with their selecting conditions: zabbix_host_status for a short health check of one host, zabbix_host_investigate for a full diagnostic snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_host_statusARead-onlyIdempotent
Summarise one host: availability, active problems, data freshness, maintenance.
An aggregate over several API calls, returned as a handful of fields rather than several thousand characters of configuration.
Use when the user wants a short health check of one named host: whether it is up, whether it has problems, whether data is fresh. For the full diagnostic bundle call zabbix_host_investigate; to search by a name fragment call zabbix_hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | host name, fragment or identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely useful non-structured context: it is an aggregate over several API calls and deliberately returns a handful of fields rather than thousands of characters of configuration, which tells the agent to expect a compact, possibly lossy response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and scope, then the aggregation behavior, then the routing guidance. Every sentence earns its place with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers what is returned (the four summary areas), how it is produced (aggregated over several calls), and when to choose a sibling instead. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter ('host', documented as name/fragment/identifier). The description reinforces the single-named-host scope but adds no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Summarise one host') and enumerates the exact scope of the summary: availability, active problems, data freshness, maintenance. It explicitly distinguishes itself from zabbix_host_investigate and zabbix_hosts, so an agent can pick it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete selection condition ('when the user wants a short health check of one named host') and names both alternatives with the condition that selects each: zabbix_host_investigate for the full diagnostic bundle, zabbix_hosts for name-fragment search. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_maintenance_listARead-onlyIdempotent
List maintenance windows, including expired ones.
Expired windows are shown by default: removing one that has already lapsed is a routine follow-up, and it cannot be done if the window is invisible.
Use when the user asks which maintenance windows exist, which hosts are silenced, or whether a window has expired. To open, extend, end or remove a window, call zabbix_write, or zabbix_plan_create to show the operator the change first.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | only windows covering this host | |
| limit | No | maximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated | |
| active | No | hide windows whose period has passed | |
| search | No | name fragment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context the annotations do not: expired windows are returned by default and the rationale for that default, which explains why the result set may be larger than expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, with the default-behavior justification and routing guidance following in a logical order. The explanation of why expired windows are visible is slightly more verbose than needed, but it earns its place by pre-empting a likely agent surprise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covered: purpose, filter semantics, default behavior, and sibling routing, which is sufficient for a read-only list tool with no output schema. It does not describe the truncated-result indicator mentioned in the `limit` schema, a minor omission rather than a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema, which sets the baseline at 3. The description's note that expired windows are shown by default complements the `active` parameter's semantics but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('List maintenance windows') plus a scope qualifier ('including expired ones'). It is immediately distinguishable from mutating siblings like zabbix_write and zabbix_resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger conditions ('which maintenance windows exist, which hosts are silenced, or whether a window has expired') and explicitly routes mutations to zabbix_write or zabbix_plan_create. Both the when-to-use and when-not-to-use cases are covered with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_metrics_historyARead-onlyIdempotent
Read an item's values over a time window, with min, max and average.
Windows are written the way operators write them: 30m, 2h, 24h, 7d.
Use when the user asks how a metric behaved over a period, or wants its minimum, average and maximum. For only the newest value call zabbix_metrics_latest; for whether the host itself is unreachable call zabbix_unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | host name or fragment | |
| last | No | how far back to read | 1h |
| items | No | maximum distinct items to read, 1 to 10 | |
| limit | No | maximum rows to return, 1 to 500 (default 200); the result reports whether it was truncated | |
| search | No | item name or key fragment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds value the annotations don't: the window-syntax convention operators use and the aggregation semantics (min/max/average) of the returned data. It omits mention of truncation, though the schema's limit description covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then syntax convention, then usage routing. No filler and nothing that fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing returns, and it does: min, max and average over the window. Combined with annotations covering safety and the schema covering all params, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and every parameter including defaults, bounds and examples is already documented. The description goes slightly beyond by framing the 'last' window in operator-friendly terms (30m, 2h, 24h, 7d), reinforcing how to write the value rather than just the regex.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read an item's values over a time window') plus the aggregation produced (min, max, average). It explicitly differentiates from the two nearest siblings, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ('user asks how a metric behaved over a period, or wants min/avg/max') and names both alternatives with their selecting conditions: zabbix_metrics_latest for the newest value only, zabbix_unreachable for host reachability. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_metrics_latestARead-onlyIdempotent
Show the newest value of a host's items.
Values come from history, because item.lastvalue has returned a constant zero for several releases. The history type is derived from each item automatically; querying it wrongly returns nothing rather than an error.
Use when the user wants the current value of an item, such as CPU, disk or a custom metric, on one host. For values across a time window call zabbix_metrics_history; for a host whose items stopped sending data call zabbix_host_investigate.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | host name or fragment | |
| limit | No | maximum rows to return, 1 to 500 (default 25); the result reports whether it was truncated | |
| search | No | item name or key fragment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so the bar is lower, yet the description still adds high-value behavior: values are read from history because item.lastvalue returns a constant zero, the history type is derived automatically, and a wrong query silently returns nothing rather than an error. That silent-failure warning is exactly the kind of trait an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the critical history caveat, then routing. Three short paragraphs with no filler, though the middle paragraph is dense enough that it could be trimmed slightly for a tool with only three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metrics lookup with complete schema coverage and full safety annotations, the description covers purpose, caveats and routing alternatives. With no output schema, return details are rightly left to the schema's truncation note, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so host, limit and search are already fully documented including the 1-500 range, default of 25, and truncation reporting. The description adds only the general notion of a host-and-item lookup, which does not extend the schema, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show the newest value of a host's items') and immediately scopes it to one host and one item set, which separates it from the history and investigate siblings. An agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the exact use case ('current value of an item, such as CPU, disk or a custom metric, on one host') and then gives two explicit alternatives with their selecting conditions: zabbix_metrics_history for a time window, zabbix_host_investigate for a host that stopped sending data. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_plan_createARead-only
Describe a change to Zabbix without making it. Use when the user wants to see what a change would do before anything is written. Call zabbix_write instead when the user wants the change applied now; call zabbix_plan_status to check a plan that already exists.
Returns a plan identifier and the exact command the operator must run to apply it. Nothing changes until it is applied. Use this to show the operator what a change would do; call zabbix_write to make one, or relay the approve command so the operator applies this exact plan.
Available operations: api.call — Call a Zabbix API method directly. events.acknowledge — Acknowledge an event, comment on it, close it or change its severity. maintenance.create — Open a maintenance window over hosts or host groups. maintenance.delete — Remove a maintenance window permanently. maintenance.expire — End a maintenance window now, keeping its record. maintenance.extend — Push a maintenance window's end further out. triggers.disable — Disable a trigger so it stops raising problems. triggers.enable — Re-enable a disabled trigger.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | parameters for the operation; call zabbix_plan_create with an unknown parameter to be told the accepted ones | |
| operation | Yes | the change to describe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with them by stating 'Nothing changes until it is applied.' It adds value beyond the annotations by disclosing the return shape ('a plan identifier and the exact command the operator must run to apply it') and the apply workflow. It stops short of describing rate limits or failure modes, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the key alternative, and the operation list earns its place. The second sentence re-states the zabbix_write routing already given in the first, which is mild redundancy but not bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return contract (plan identifier plus apply command) and the when/when-not guidance. Combined with 100% schema coverage and clear annotations, an agent has what it needs to call this correctly; only minor operational detail (error handling, plan expiry) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, and the operation list in the description mirrors the schema enum rather than adding new meaning. The schema itself notes an unusual discovery affordance (passing an unknown param to learn accepted ones), leaving the description little to contribute. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Describe a change to Zabbix without making it') and immediately differentiates from the two relevant siblings, zabbix_write and zabbix_plan_status. The operation enumeration further pins down scope, so an agent can identify this tool without opening its schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('before anything is written'), when-to-use-something-else ('call zabbix_write instead when the user wants the change applied now'), and how to check an existing plan ('call zabbix_plan_status'). Routing to alternatives is spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_plan_statusARead-onlyIdempotent
Check whether a stored plan is still waiting, was applied, or has expired. Use when the user asks what happened to a change they were asked to approve, or after zabbix_plan_create while you wait. Call zabbix_plan_create to describe a new change, and call zabbix_write when the user wants that change made now.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_id | Yes | identifier returned by zabbix_plan_create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds value beyond them by naming the possible result states (waiting/applied/expired), which tells the agent this is a non-blocking, pollable status check. It stops short of noting polling cadence or expiry semantics, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and state enumeration before the routing advice. Every sentence carries routing or outcome information; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the domain of return values (waiting, applied, expired), which is the key missing piece an agent would otherwise have to guess. For a single-parameter read tool with strong annotations, this is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single plan_id parameter is documented as the identifier returned by zabbix_plan_create. The description adds no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (stored plan) and enumerates the three outcomes it distinguishes: waiting, applied, expired. It also names the sibling tools it must not be confused with (zabbix_plan_create, zabbix_write), so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions: when the user asks what happened to a change they were asked to approve, or after zabbix_plan_create while waiting. It also contrasts the two alternatives by purpose (describe a change vs. make it now), which is exactly the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_problemARead-onlyIdempotent
Show one active problem by event identifier.
Use when the user gives one event identifier and wants that problem's host, severity and state. For the list of what is broken now call zabbix_problems; to learn why its notification did or did not arrive call zabbix_alert_why.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | event identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety behavior is covered. The description adds value beyond them by disclosing which fields are returned (host, severity, state) and by scoping results to *active* problems, implying resolved events are not returned. It does not say what happens when the event id is unknown or refers to a non-problem event.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The core operation is front-loaded in the first line and the routing guidance follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the returned fields, which is what an agent needs to decide whether to call it. It leaves the not-found / non-problem-event behavior unspecified, a minor gap for a single-param read tool whose annotations already carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'event' parameter, so the schema already documents it with a type and an example. The description only restates it as 'event identifier' and adds no format, encoding, or lookup constraints beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Show), resource (one active problem) and scope (by event identifier), and explicitly contrasts with the sibling zabbix_problems which returns the list. An agent can distinguish it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('the user gives one event identifier and wants that problem's host, severity and state') and names two alternatives with the condition that selects each: zabbix_problems for what is broken now, zabbix_alert_why for notification delivery questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_problemsARead-onlyIdempotent
List active Zabbix problems, newest first.
Suppressed problems are included by default and say which maintenance window hides them. Hiding them silently is how an outage goes unnoticed for weeks.
Use when the user asks what is broken right now, which problems are firing, or whether anything is in alarm. For one event identifier call zabbix_problem; to learn why a notification never arrived call zabbix_alert_why.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | limit to one host; matching is fuzzy | |
| group | No | limit to a host group | |
| limit | No | maximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated | |
| since | No | only problems that started within this window | |
| severity | No | minimum severity, as a name or 0-5 | |
| unacknowledged | No | only problems nobody has acknowledged | |
| exclude_suppressed | No | hide problems inside a maintenance window (they are shown by default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuine behavioral context beyond that: suppressed problems are returned by default and annotate which maintenance window hides them, and truncation is reported. It stops short of describing return fields or pagination, but the default-suppression disclosure is exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and ordering, then behavior, then routing. The rationale sentence ('Hiding them silently is how an outage goes unnoticed for weeks') is editorial but earns its place by justifying the default-include behavior; the only minor cost is a slightly chatty tone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Seven parameters at full schema coverage, no output schema, and the description still covers the surprising default (suppressed included) and correct sibling routing. It omits any hint of what a returned problem record looks like and nothing about pagination beyond the schema's truncation note, but for a read-only list tool that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters already carry their own meaning. The description adds only an implicit tie to exclude_suppressed via the 'included by default' statement; it offers no extra format, matching, or severity-scale detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List active Zabbix problems') plus an ordering guarantee ('newest first') that no sibling provides. It also explicitly distinguishes itself from zabbix_problem (single event identifier) and zabbix_alert_why (missing notification), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation triggers ('what is broken right now', 'which problems are firing', 'whether anything is in alarm') and names two alternative tools with the conditions that select them. Both the when-to-use and the when-to-use-something-else cases are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_resolveARead-onlyIdempotent
Turn the text of a notification into event, host and trigger identifiers.
Accepts a notification pasted out of a chat client. Without it, an instruction such as "acknowledge that one" cannot be acted on, because the identifiers only exist inside the message text.
Use when the user pastes a notification from chat and the event, host or trigger identifier is buried in that text. Once you have the event identifier, call zabbix_problem for the problem or zabbix_alert_why for the delivery chain.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the pasted notification, or a bare event identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds non-obvious context the annotations cannot: why the tool exists (identifiers only exist inside the message text, so 'acknowledge that one' is unactionable without it). It does not describe behavior on unparseable input or the shape of the extracted identifiers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs: definition first, then the rationale for the tool's existence, then the usage condition and next steps. Front-loaded and every sentence carries distinct information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only parser with no output schema, the description conveys the input contract, the reason for the tool, and the follow-on routing. The main remaining gap is that it never states what comes back when the text contains no identifiers, which matters since there is no output schema to consult.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the property description already covers the single parameter, so the baseline is 3. The description adds meaning by clarifying the tolerated input forms — a notification pasted out of a chat client, or a bare event identifier — which broadens the accepted value beyond a strict notification blob.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: turning notification text into event, host, and trigger identifiers. It also explains the distinguishing role versus siblings by naming zabbix_problem and zabbix_alert_why as the follow-on tools, so an agent can tell this is a parsing/normalization step, not a query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (user pastes a notification from chat and the identifier is buried in the text) and names the downstream tools to call once the event identifier is extracted. No when-not guidance for malformed or non-notification input, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_unreachableARead-onlyIdempotent
List monitored hosts Zabbix currently cannot poll.
Availability lives on the interface: host.available was removed in 5.4, and code still reading it sees nothing at all.
Use when the user asks which hosts Zabbix cannot poll, or which agent, SNMP, IPMI or JMX interfaces are down. A host whose interface is up but whose items went silent is not listed here: call zabbix_host_investigate for that, and zabbix_metrics_latest for the newest values.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | maximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds real value beyond that: availability is derived from the interface rather than host.available (removed in 5.4), and results exclude hosts with silent items. It does not describe the result shape or ordering, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in one line, then usage, then exclusions. Each sentence is doing work, though the 'code still reading it sees nothing at all' remark is aimed more at maintainers than at the calling agent and is slightly surplus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-filter list tool with no output schema, the description covers purpose, scope, the availability semantics, and sibling routing. It stops short of describing what each returned row contains (host, interface type, error), a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter (limit) and schema description coverage is 100%, including the truncation-reporting behavior, so the schema carries the full burden. The description adds no parameter-level detail, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource ('List monitored hosts Zabbix currently cannot poll') and the scope is unambiguous. The third paragraph further distinguishes it from zabbix_host_investigate and zabbix_metrics_latest by naming the condition under which those siblings apply instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('which hosts Zabbix cannot poll, or which agent, SNMP, IPMI or JMX interfaces are down') and, critically, when not to ('a host whose interface is up but whose items went silent is not listed here'), routing that case to zabbix_host_investigate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zabbix_writeADestructive
Change Zabbix in one call and record it in the audit log. Use when the user wants a permitted change applied now rather than only described. To show the operator the change before anything is written, call zabbix_plan_create instead; to check a plan that already exists, call zabbix_plan_status.
Prefer the narrowest operation that does the job and say plainly what you did. Operations marked destructive remove something Zabbix cannot restore on its own.
Available operations: api.call — Call a Zabbix API method directly. events.acknowledge — Acknowledge an event, comment on it, close it or change its severity. maintenance.create — Open a maintenance window over hosts or host groups. maintenance.delete — Remove a maintenance window permanently. (destructive) maintenance.expire — End a maintenance window now, keeping its record. maintenance.extend — Push a maintenance window's end further out. triggers.disable — Disable a trigger so it stops raising problems. (destructive) triggers.enable — Re-enable a disabled trigger.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | parameters for the operation; call zabbix_write with an unknown parameter to be told the accepted ones | |
| operation | Yes | the change to make |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the safety envelope is partly covered; the description still adds real value by stating destructive operations remove something 'Zabbix cannot restore on its own', flagging which individual operations are destructive, and disclosing the audit-log side effect. It does not discuss idempotency/retry behavior, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded routing sentence, then the operation list where every line carries distinct information and destructive markers. It is long, but the length is justified by eight operations; only minor trimming (e.g. the closing 'say plainly what you did' aside) would be possible without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation write tool with no output schema, the description covers selection, alternatives, destructive semantics, and audit behavior. It does not describe what a successful call returns or how failures are reported, a minor omission given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description goes further by enumerating all eight operations with one-line semantics, so the agent knows what each enum value actually does. It also explains the freeform 'params' escape hatch from the schema description. Marginal but genuine value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Change Zabbix in one call and record it in the audit log') and immediately separates itself from sibling tools by name (zabbix_plan_create, zabbix_plan_status). An agent can tell this is the write/execute path versus the plan/dry-run path without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('user wants a permitted change applied now rather than only described'), names the two alternatives with their own triggering conditions, and adds the routing heuristic 'prefer the narrowest operation that does the job'. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.4.5- First observed
zabbix_alert_why - First observed
zabbix_api_call - First observed
zabbix_host_investigate - First observed
zabbix_host_status - First observed
zabbix_hosts - First observed
zabbix_maintenance_list - First observed
zabbix_metrics_history - First observed
zabbix_metrics_latest - First observed
zabbix_plan_create - First observed
zabbix_plan_status - First observed
zabbix_problem - First observed
zabbix_problems - First observed
zabbix_resolve - First observed
zabbix_unreachable - First observed
zabbix_write
TDQS
Scored across 15 tools
Each tool targets a distinct resource/action, and descriptions explicitly cross-reference the alternatives (e.g. problem vs problems, host_status vs host_investigate, write vs plan_create vs api_call). The singular/plural and short/full-diagnostic distinctions are spelled out, leaving little room for misselection.
All tools consistently use a zabbix_ prefix with snake_case, which is predictable. However the internal ordering is mixed: some are bare nouns (problem, hosts, unreachable), some noun_noun (host_status, metrics_latest), and some verb or noun_verb (resolve, plan_create). Still readable and mostly uniform.
15 tools sits squarely in the well-scoped range, and each one covers a distinct slice of the monitoring domain (problems, hosts, metrics, maintenance, alerting, change planning). No obvious redundant or filler tools.
The read surface is comprehensive (problems, hosts, metrics history/latest, maintenance, unreachable, alert chain) and writes/plans are covered via zabbix_write and zabbix_plan_*, with zabbix_api_call as an escape hatch. Minor gaps like dedicated host configuration or user/dashboard management exist but are reachable through the raw API tool.
Maintenance
Related MCP Connectors
Context and control for any AI. Agent identity, scoped access, and proof across tools.
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Email inboxes, webhooks, mock APIs, 2FA codes, approvals and 170 tools for AI agents.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Related MCP Servers
- AlicenseAqualityCmaintenance🔌 Complete MCP server for Zabbix integration - Connect AI assistants to Zabbix monitoring with 40+ tools for hosts, items, triggers, templates, problems, and more. Features read-only mode and comprehensive API coverage.3260GPL 3.0
- FlicenseNot gradedqualityDmaintenanceEnables users to monitor and query Zabbix infrastructure through natural language by providing access to current problems, active triggers, and system health status via the Zabbix API.-
- AlicenseBqualityAmaintenanceOfficial initMAX MCP server exposing the Zabbix API to AI assistants for monitoring and managing hosts, problems, templates, dashboards, and multiple Zabbix instances. Includes correlated monitoring views, graphs, anomaly detection, capacity forecasts, and PDF reports, with scoped tokens, read-only modes, OAuth 2.1, and an admin portal. Supports Streamable HTTP, SSE, and stdio.86247AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceExposes Zabbix monitoring capabilities as callable tools for AI agents and MCP-compatible clients.-