Skip to main content
Glama
stufently

Zabbix MCP Server

Zabbix AI CLI — Zabbix-MCP-Server und CLI für KI-Agenten

CI Go Reference License Zabbix MCP

zabbix-ai-cli ist ein Zabbix-MCP-Server und ein Kommandozeilen-Client in einer einzigen Go-Binärdatei. Es verschafft Claude Code, Claude Desktop, Codex, Cursor und jedem anderen Model Context Protocol-Client aufgabenbezogenen Zugriff auf Zabbix – was gerade gestört ist, warum ein Host still ist, warum eine Warnung nie angekommen ist – mit begrenzter Ausgabe, einem stabilen JSON-Vertrag und keiner Änderung an Zabbix ohne die Freigabe einer Person.

Es ist für die Menschen, die alarmiert werden: SRE- und DevOps-Teams, die Zabbix betreiben und einen Agenten möchten, der einen Vorfall triagiert, ohne ihm die gesamte API auszuhändigen.

Erfordert Zabbix 6.4 oder neuer. Die Bearer-Token-Authentifizierung wurde in 6.4 eingeführt und ist das einzige implementierte Verfahren; frühere Versionen erwarten das Token stattdessen im Request-Body.

Es kontaktiert niemals ein Sprachmodell. Die KI entscheidet, dieses Programm führt aus, Zabbix überwacht.

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

Warum nicht ein weiterer Zabbix-API-Wrapper

Das Kapseln von host.get, problem.get und history.get übergibt dem Agenten die scharfen Kanten der API zusammen mit ihrer Macht. Auf einem aktuellen Zabbix-7.4-Server:

  • problem.get hat kein selectHosts, daher kommt eine Problemliste ohne Hosts an.

  • history.get verwendet standardmäßig die Tabelle für numerische Werte ohne Vorzeichen und gibt für ein Float-Item nichts zurück – still, ohne Fehler.

  • item.lastvalue und item.lastclock existieren weiterhin und liefern seit mehreren Hauptversionen konstant "0" zurück.

  • host.available wurde in 5.4 entfernt; die Verfügbarkeit liegt am Interface.

  • event.acknowledge akzeptiert eine Bitmaske, deren eigene Dokumentation sich selbst widerspricht.

  • searchWildcardsEnabled: true deaktiviert die implizite Teilstring-Suche und macht aus einem Namensfragment eine exakte Übereinstimmung, die still nichts findet.

Jeder dieser Fälle erzeugt eine selbstsichere, falsche Antwort anstatt eines Fehlers. Dieses Tool fängt sie ab, indem Befehle die Aufgabe beschreiben statt des Endpunkts.

Related MCP server: Zabbix MCP Server

Was es tut

Befehl

Beantwortet

problems list

Was gerade gestört ist – einschließlich unterdrückter Probleme, mit Benennung des Wartungsfensters, das sie verbirgt

host investigate

Ein einziger Aufruf: Host-Status, aktive Probleme, letzte Ereignisse, stumme und nicht unterstützte Items, Wartung

host status

Eine Handvoll Felder statt zwölftausend Zeichen Konfiguration

alert why

Warum eine Benachrichtigung angekommen ist oder nicht – Unterdrückung, Zustellversuche, Aktionen, Medientypen, Schweregradfilter pro Empfänger

resolve

Wandelt eine aus einem Chat eingefügte Benachrichtigung in Ereignis-, Host- und Trigger-Kennungen um

unreachable

Überwachte Hosts, die Zabbix nicht abfragen kann, mit dem aufgezeichneten Fehler

metrics latest / history

Werte mit dem richtigen History-Typ, menschlichen Einheiten und min/avg/max

maintenance

Fenster öffnen, verlängern, beenden oder entfernen, mit Host-Mustern wie ms*

api call

Die Notluke, unter denselben Freigaberegeln

Sicherheit

Lesevorgänge werden sofort ausgeführt. Sonst nichts.

Aufrufer

Lesen

Schreiben

Destruktiv

CLI, eine Person am Terminal

sofort

Plan, dann --apply

Plan, dann --apply --confirm <exact name>

MCP, ein Agent

sofort

Plan, dann approve an einem Terminal

Plan, dann approve an einem Terminal

Es gibt keinen MCP-Parameter, der eine Änderung anwendet, und einen hinzuzufügen wäre nicht hilfreich: Eine Bestätigung, die ein Agent senden kann, kann auch eine Prompt-Injection senden. Die Freigabe erfolgt an einem Terminal, außerhalb des Kontexts des Modells.

$ 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

Bevor ein Plan ausgeführt wird, werden seine Parameter erneut gehasht, seine Frist geprüft und seine Vorbedingungen erneut von Zabbix gelesen. Ein Fenster, das seit der Erstellung des Plans ersetzt wurde, wird abgelehnt, nicht gelöscht. Jede angewendete Änderung wird an ein Audit-Log angehängt.

Das ist wichtiger als eine Ablehnung. Wenn das Tool, das dieses ersetzt, einen Schreibvorgang blockierte, wurde die Arbeit trotzdem mit einem Token erledigt, das aus einem Container kopiert wurde – das Audit-Trail ging verloren, ohne etwas zu verhindern. Ein erlaubter, protokollierter Weg ist besser als eine Ablehnung, die umgangen wird.

Installation

Vorgefertigte Archive und das ghcr.io-Image werden mit jedem getaggten Release veröffentlicht. Bis das erste Tag erscheint, bauen Sie aus dem Quellcode mit einer der beiden folgenden Methoden.

Für eine host-native Binärdatei verwenden Sie Go 1.25 oder neuer:

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-cli

Die Make-Targets sind container-first und benötigen kein Go auf dem Host:

make build      # Linux binary in ./bin, built inside Docker
make docker     # Linux container image for the MCP server

Konfiguration

zabbix-ai-cli login --profile prod

Es fragt nach der URL und dem API-Token, verifiziert das Token gegen den Server und speichert es. Das Token wird niemals als Flag akzeptiert, da Flag-Werte in der Shell-Historie und in der Prozessliste sichtbar sind; übergeben Sie es stattdessen per Pipe:

printf %s "$TOKEN" | zabbix-ai-cli login --profile prod --url https://zabbix.example.com --token-stdin

Schreibvorgänge sind deaktiviert, bis einem Profil der Berechtigungsumfang dafür gewährt wird:

zabbix-ai-cli profile scopes prod --add maintenance

Siehe docs/authentication.md für die Auflösungsreihenfolge sowie die Headless- und Container-Fälle.

Den Zabbix-MCP-Server zu Ihrem KI-Client hinzufügen

Der MCP-Client sieht das Zabbix-Token nie. Es wird im Serverprozess anhand des von Ihnen konfigurierten Profils aufgelöst, sodass die Zugangsdaten nie in den Kontext eines Modells oder in die Konfigurationsdatei eines Clients gelangen.

Claude Code

claude mcp add zabbix -- zabbix-ai-cli mcp --profile prod
zabbix-ai-cli skills install claude

Claude 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 codex

Cursor, Windsurf, VS Code und andere MCP-Clients

Jeder Client, der stdio spricht, akzeptiert dieselben zwei Felder – Befehl zabbix-ai-cli, Argumente ["mcp", "--profile", "prod"]. Für einen Client, der stattdessen HTTP möchte:

zabbix-ai-cli mcp --http 127.0.0.1:8000

Er verweigert eine routbare Adresse, sofern Sie nicht --allow-remote zusammen mit einem Bearer-Token übergeben, denn ein nicht authentifizierter MCP-Endpunkt ist eine nicht authentifizierte Route in Zabbix. Siehe 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 mcp

MCP-Tools

Vierzehn Tools, nicht zweihundert. Eine große Tool-Oberfläche kostet einen Agenten Kontext, bevor er irgendetwas getan hat, und der größte Teil davon wird nie aufgerufen.

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

Schreiboperationen bekommen nicht jeweils ein eigenes Tool. zabbix_plan_create akzeptiert eine operation-Enumeration, die aus derselben Registry erzeugt wird, aus der die CLI aufgebaut ist, sodass die Tool-Oberfläche nicht wächst, wenn Operationen hinzugefügt werden.

JSON-Vertrag

{
  "ok": true,
  "data": {},
  "warnings": [],
  "meta": {
    "returned": 50,
    "total": 381,
    "truncated": true,
    "truncated_reason": "row_limit",
    "partial": false,
    "zabbix_version": "7.4.10"
  }
}

Fehler tragen einen stabilen Code, die Information, ob ein erneuter Versuch sinnvoll ist, und was als Nächstes zu tun ist:

{
  "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 gibt jede Operation, ihre Parameter und ihr JSON-Schema aus, sodass ein Agent das Tool programmatisch erlernen kann, anstatt über Flags zu raten.

Alle Details in docs/json-output.md.

Dokumentation

FAQ

Was ist ein Zabbix-MCP-Server?

Ein MCP-Server ist ein kleines Programm, das ein System über das Model Context Protocol für einen KI-Client zugänglich macht. Ein Zabbix-MCP-Server ermöglicht Claude, Codex, Cursor und ähnlichen Clients, Zabbix – Probleme, Hosts, Items, Ereignisse, Wartung – als Tools abzufragen, anstatt dass das Modell bei curl-Aufrufen gegen die JSON-RPC-API rät.

Kann ein KI-Agent über dieses Tool mein Zabbix ändern?

Nicht von allein. Lesevorgänge werden sofort ausgeführt. Jeder Schreibvorgang erzeugt einen Plan und hält an. Diesen Plan anzuwenden ist ein Befehl, den eine Person in ihrem eigenen Terminal ausführt: zabbix-ai-cli approve <plan-id>. Es gibt keinen MCP-Parameter, der etwas anwendet, und ein Test lässt den Build fehlschlagen, falls je einer hinzugefügt wird.

Sendet es meine Überwachungsdaten an einen KI-Anbieter?

Nein. Dieses Programm kontaktiert niemals ein Sprachmodell. Es spricht mit Zabbix und gibt JSON aus. Was auch immer Ihr MCP-Client mit dieser Ausgabe macht, ist eine Sache zwischen Ihnen und Ihrem Client.

Welche Zabbix-Versionen werden unterstützt?

Zabbix 6.4 und neuer, weil die Bearer-Token-Authentifizierung in 6.4 eingeführt wurde. Entwickelt und getestet gegen Zabbix 7.4.

Muss ich Go installiert haben?

Nein. make build kompiliert in Docker und benötigt auf dem Host nichts außer Docker selbst. go install gibt es für eine host-native Binärdatei, und jedes getaggte Release veröffentlicht Archive für Linux, macOS und Windows mit Prüfsummen sowie ein Container-Image auf ghcr.io.

Wie unterscheidet sich das von einem MCP-Server, der die Zabbix-API kapselt?

Ein dünner Wrapper reicht dem Agenten die scharfen Kanten der API: problem.get ohne Hosts, history.get, das für Float-Items still nichts zurückgibt, lastvalue eingefroren auf "0". Diese erzeugen selbstsichere, falsche Antworten anstatt Fehler. Dieses Tool beantwortet Fragen – „was ist gestört“, „warum ist diese Warnung nicht angekommen“ – und fängt die dahinterstehenden Fallstricke ab. Es enthält außerdem vierzehn Tools statt zweihundert, denn eine große Tool-Oberfläche verbraucht den Kontext eines Agenten, bevor dieser irgendetwas getan hat.

Kann ich weiterhin die rohe Zabbix-API aufrufen?

Ja, über api call, unter denselben Freigaberegeln. Methoden, die Anmeldedaten herausgeben oder Code ausführen, werden rundweg abgelehnt – einschließlich des Umwegs, etwa ein Skript zu erstellen und eine Aktion es ausführen zu lassen.

Funktioniert es auch ganz ohne KI-Client?

Ja. Es ist eine normale CLI mit menschenlesbaren Tabellen, JSON-Ausgabe und dokumentierten Exit-Codes, sodass es gleichermaßen aus einer Shell oder einem CI-Job verwendet werden kann.

Kompatibilität

Zabbix 6.4 und neuer. Die Bearer-Token-Authentifizierung wurde in 6.4 eingeführt und ist das einzige implementierte Verfahren. Versionsabhängiges Verhalten wird explizit geprüft, sodass eine Inkompatibilität gemeldet wird, anstatt ein leeres Ergebnis zurückzugeben.

Entwickelt und getestet gegen Zabbix 7.4.

Lizenz

Apache-2.0. Siehe LICENSE.

Zabbix ist eine Marke von Zabbix LLC. Dieses Projekt ist ein unabhängiges Open-Source-Projekt und ist weder mit Zabbix LLC verbunden noch von Zabbix LLC unterstützt.

Available Tools

15 tools
zabbix_alert_whyA
Read-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.

NameRequiredDescriptionDefault
eventYesevent identifier

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_callA
Read-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.

NameRequiredDescriptionDefault
methodYesAPI method, for example host.get
paramsNomethod parameters as JSON

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_investigateA
Read-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.

NameRequiredDescriptionDefault
hostYeshost name, fragment or identifier

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_hostsA
Read-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.

NameRequiredDescriptionDefault
groupNolimit to a host group
limitNomaximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated
searchNoname fragment; * is allowed
monitoredNoexclude hosts whose monitoring is disabled

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusA
Read-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.

NameRequiredDescriptionDefault
hostYeshost name, fragment or identifier

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_listA
Read-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.

NameRequiredDescriptionDefault
hostNoonly windows covering this host
limitNomaximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated
activeNohide windows whose period has passed
searchNoname fragment

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_historyA
Read-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.

NameRequiredDescriptionDefault
hostYeshost name or fragment
lastNohow far back to read1h
itemsNomaximum distinct items to read, 1 to 10
limitNomaximum rows to return, 1 to 500 (default 200); the result reports whether it was truncated
searchNoitem name or key fragment

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_latestA
Read-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.

NameRequiredDescriptionDefault
hostYeshost name or fragment
limitNomaximum rows to return, 1 to 500 (default 25); the result reports whether it was truncated
searchNoitem name or key fragment

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_createA
Read-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.

NameRequiredDescriptionDefault
paramsNoparameters for the operation; call zabbix_plan_create with an unknown parameter to be told the accepted ones
operationYesthe change to describe

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusA
Read-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.

NameRequiredDescriptionDefault
plan_idYesidentifier returned by zabbix_plan_create

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_problemA
Read-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.

NameRequiredDescriptionDefault
eventYesevent identifier

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_problemsA
Read-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.

NameRequiredDescriptionDefault
hostNolimit to one host; matching is fuzzy
groupNolimit to a host group
limitNomaximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated
sinceNoonly problems that started within this window
severityNominimum severity, as a name or 0-5
unacknowledgedNoonly problems nobody has acknowledged
exclude_suppressedNohide problems inside a maintenance window (they are shown by default)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_resolveA
Read-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.

NameRequiredDescriptionDefault
textYesthe pasted notification, or a bare event identifier

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_unreachableA
Read-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.

NameRequiredDescriptionDefault
limitNomaximum rows to return, 1 to 500 (default 50); the result reports whether it was truncated

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_writeA
Destructive

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.

NameRequiredDescriptionDefault
paramsNoparameters for the operation; call zabbix_write with an unknown parameter to be told the accepted ones
operationYesthe change to make

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 15 tool updatesv0.4.5
    • First observedzabbix_alert_why
    • First observedzabbix_api_call
    • First observedzabbix_host_investigate
    • First observedzabbix_host_status
    • First observedzabbix_hosts
    • First observedzabbix_maintenance_list
    • First observedzabbix_metrics_history
    • First observedzabbix_metrics_latest
    • First observedzabbix_plan_create
    • First observedzabbix_plan_status
    • First observedzabbix_problem
    • First observedzabbix_problems
    • First observedzabbix_resolve
    • First observedzabbix_unreachable
    • First observedzabbix_write

TDQS

A4.4/5.0

Scored across 15 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    🔌 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.
    3
    261
    GPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    B
    quality
    A
    maintenance
    Official 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.
    86
    245
    AGPL 3.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Exposes Zabbix monitoring capabilities as callable tools for AI agents and MCP-compatible clients.
    -