Zabbix MCP Server
Zabbix AI CLI — AI 에이전트용 Zabbix MCP 서버 및 CLI
zabbix-ai-cli는 하나의 Go 바이너리로 제공되는 Zabbix MCP 서버이자 명령줄 클라이언트입니다. Claude Code, Claude Desktop, Codex, Cursor 및 기타 모든 Model Context Protocol 클라이언트에 Zabbix에 대한 작업 지향적 접근을 제공합니다 — 지금 무엇이 고장났는지, 호스트가 왜 조용한지, 알림이 왜 도착하지 않았는지 — 출력을 제한하고, 안정적인 JSON 계약을 유지하며, 사람의 승인 없이는 Zabbix를 변경하지 않습니다.
페이지를 받는 사람들을 위한 것입니다: Zabbix를 운영하는 SRE 및 DevOps 팀이 전체 API를 넘겨주지 않고 에이전트가 인시던트를 분류하도록 하려는 경우입니다.
Zabbix 6.4 이상이 필요합니다. Bearer 토큰 인증은 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의 강력함과 함께 날카로운 모서리를 넘겨줍니다. 현재 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
기능
명령 | 답변 |
| 지금 무엇이 고장났는지 — 억제된 문제를 포함하며, 이를 숨기는 유지보수 창 이름도 표시합니다. |
| 한 번의 호출: 호스트 상태, 활성 문제, 최근 이벤트, 침묵 및 지원되지 않는 항목, 유지보수 |
| 12,000자 구성 대신 몇 개의 필드 |
| 알림이 도착했거나 도착하지 않은 이유 — 억제, 전달 시도, 작업, 미디어 유형, 수신자별 심각도 필터 |
| 채팅에서 붙여넣은 알림을 이벤트, 호스트 및 트리거 식별자로 변환 |
| 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 prodURL과 API 토큰을 묻고, 서버에 대해 토큰을 확인한 후 저장합니다. 토큰은 플래그로 절대 허용되지 않습니다. 플래그 값은 셸 기록과 프로세스 목록에 표시되기 때문입니다. 대신 파이프로 전달하세요:
printf %s "$TOKEN" | zabbix-ai-cli login --profile prod --url https://zabbix.example.com --token-stdin프로필에 쓰기 범위가 부여될 때까지 쓰기는 꺼져 있습니다:
zabbix-ai-cli profile scopes prod --add maintenance해석 순서와 헤드리스 및 컨테이너 사례는 docs/authentication.md를 참조하세요.
AI 클라이언트에 Zabbix MCP 서버 추가
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 도구
14개의 도구, 200개가 아닙니다. 큰 도구 표면은 에이전트가 아무것도 하기 전에 컨텍스트를 소비하며, 대부분은 호출되지 않습니다.
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는 CLI가 구축된 동일한 레지스트리에서 생성된 operation 열거형을 사용하므로 작업이 추가되어도 도구 표면이 커지지 않습니다.
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를 참조하세요.
문서
FAQ
Zabbix MCP 서버란 무엇인가요?
MCP 서버는 Model Context Protocol을 통해 AI 클라이언트에 시스템을 노출하는 작은 프로그램입니다. Zabbix MCP 서버는 Claude, Codex, Cursor 및 유사한 클라이언트가 JSON-RPC API에 대한 curl 호출을 추측하는 대신 문제, 호스트, 항목, 이벤트, 유지보수와 같은 Zabbix를 도구로 쿼리할 수 있게 합니다.
AI 에이전트가 이 도구를 통해 내 Zabbix를 변경할 수 있나요?
스스로는 불가능합니다. 읽기 작업은 즉시 실행됩니다. 모든 쓰기는 계획을 생성하고 중지합니다. 해당 계획을 적용하는 것은 사람이 자신의 터미널에서 실행하는 명령입니다: zabbix-ai-cli approve <plan-id>. 무엇이든 적용하는 MCP 매개변수는 없으며, 하나라도 추가되면 빌드가 실패하는 테스트가 있습니다.
모니터링 데이터를 AI 제공업체에 보내나요?
아니요. 이 프로그램은 언어 모델에 절대 접촉하지 않습니다. Zabbix와 통신하고 JSON을 출력합니다. MCP 클라이언트가 해당 출력으로 무엇을 하는지는 귀하와 클라이언트 간의 문제입니다.
어떤 Zabbix 버전을 지원하나요?
Zabbix 6.4 이상입니다. bearer 토큰 인증이 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. 이러한 것들은 오류 대신 자신만만한 잘못된 답변을 생성합니다. 이 도구는 "무엇이 고장났는지", "이 알림이 왜 도착하지 않았는지"와 같은 질문에 답하고 그 뒤의 함정을 흡수합니다. 또한 200개가 아닌 14개의 도구를 제공합니다. 큰 도구 표면은 에이전트가 작업을 수행하기 전에 컨텍스트를 소비하기 때문입니다.
원시 Zabbix API를 여전히 호출할 수 있나요?
예, api call을 통해 동일한 승인 규칙 아래에서 가능합니다. 자격 증명을 제공하거나 코드를 실행하는 메서드는 완전히 거부됩니다 — 스크립트를 만들고 작업이 실행하도록 하는 것과 같은 우회 경로도 포함됩니다.
AI 클라이언트 없이도 작동하나요?
예. 사람이 읽을 수 있는 테이블, JSON 출력 및 문서화된 종료 코드를 가진 일반 CLI이므로 셸이나 CI 작업에서 동일하게 사용할 수 있습니다.
호환성
Zabbix 6.4 이상. Bearer 토큰 인증은 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.
1Connect, 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.-