Task-shaped Zabbix access for AI agents: problems, host triage, metrics, maintenance windows.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
zabbix-ai-cli-mcp is a Zabbix MCP server and command-line client in one Go
binary. It gives Claude Code, Claude Desktop, Codex, Cursor and any other
Model Context Protocol client task-shaped access to Zabbix β what is broken
right now, why a host is silent, why an alert never arrived β with bounded
output, a stable JSON contract, and no change to Zabbix without a person's
approval.
It is for the people who get paged: SRE and DevOps teams running Zabbix who want an agent to triage an incident without handing it the whole API.
Requires Zabbix 6.4 or newer. Bearer-token authentication arrived in 6.4 and is the only scheme implemented; earlier versions expect the token in the request body instead.
It never contacts a language model. The AI decides, this program executes, Zabbix monitors.
Wrapping host.get, problem.get and history.get hands the agent the API's
sharp edges along with its power. On a current Zabbix 7.4 server:
problem.get has no selectHosts, so a problem list arrives without hosts.history.get defaults to the numeric-unsigned table and returns nothing for
a float item β silently, with no error.item.lastvalue and item.lastclock still exist and have returned a constant
"0" for several major releases.host.available was removed in 5.4; availability lives on the interface.event.acknowledge takes a bitmask whose own documentation contradicts itself.searchWildcardsEnabled: true disables implicit substring matching, turning
a name fragment into an exact match that quietly finds nothing.Every one of those produces a confident, wrong answer rather than an error. This tool absorbs them behind commands that describe the task instead of the endpoint.
| Command | Answers |
|---|---|
problems list | What is broken now β including suppressed problems, with the maintenance window that hides them named |
host investigate | One call: host state, active problems, recent events, silent and unsupported items, maintenance |
host status | A handful of fields instead of twelve thousand characters of configuration |
alert why | Why a notification did or did not arrive β suppression, delivery attempts, actions, media types, per-recipient severity filters |
resolve | Turns a notification pasted out of chat into event, host and trigger identifiers |
unreachable | Monitored hosts Zabbix cannot poll, with the error it recorded |
metrics latest / history | Values with the right history type, human units and min/avg/max |
maintenance | Open, extend, end or remove windows, with host patterns like ms* |
api call | The escape hatch, under the same rules |
Read operations always run immediately. Whether anything else does is one
setting, allow_write, and it is on by default.
If you are not sure, set allow_write = false. It costs one command per
change and it is the right default for an installation you cannot afford to
have an agent surprise you in. A profile override beats the file-wide setting,
and ZABBIX_AI_CLI_MCP_ALLOW_WRITE beats both β that is how a container is
told, without owning the config file.
| Caller | allow_write = true | allow_write = false |
|---|---|---|
| CLI, a person at a terminal | --apply makes the change | plan, then approve |
| MCP, an agent | zabbix_write makes the change | plan, then approve at a terminal |
With writes off, no tool and no flag applies anything: a change is described,
and a person runs zabbix-ai-cli-mcp approve <plan-id> in their own terminal.
A confirmation an agent could send would be a confirmation prompt injection
could send, so none is offered β the approval lives outside the model's context.
With writes on, the agent applies the change itself and every change lands in
an audit log with the profile, the parameters, the objects touched and whether
a person or a model asked for it. zabbix-ai-cli-mcp mcp --read-only refuses
both paths regardless of the setting, and an HTTP endpoint that can write
refuses to start without a bearer token.
Everything else holds either way: a profile's scopes still bound what it may
touch, the risk registry still refuses methods that hand out credentials or run
code, and a plan is still re-checked against live Zabbix before it executes.
Before a plan runs, its parameters are re-hashed, its deadline checked and its preconditions re-read from Zabbix. A window that has been replaced since the plan was made is refused, not deleted. Every applied change is appended to an audit log.
This matters more than a refusal would. When the tool this replaces blocked a write, the work was done anyway with a token copied out of a container β losing the audit trail without preventing anything. A permitted path that is recorded beats a refusal that gets routed around.
Prebuilt archives and the
ghcr.ioimage are published with each tagged release. Until the first tag lands, build from source with either method below.
For a host-native binary, use Go 1.25 or newer:
The Make targets are container-first and do not require Go on the host:
It asks for the URL and the API token, verifies the token against the server, and stores it. The token is never accepted as a flag, because flag values are visible in shell history and in the process list; pipe it in instead:
A profile that names no scopes may do anything the write setting allows. Naming any scope narrows it to exactly those:
See docs/authentication.md for the resolution order and the headless and container cases.
The MCP client never sees the Zabbix token. It is resolved inside the server process from the profile you configured, so the credential never enters a model's context or a client's configuration file.
claude_desktop_config.json:
Any client that speaks stdio takes the same two fields β command
zabbix-ai-cli-mcp, arguments ["mcp", "--profile", "prod"]. For a client that
wants HTTP instead:
A server that can write refuses to start on HTTP without a bearer token, even on
loopback: without one, every process on the machine could change Zabbix through
it. It refuses a routable address unless you pass --allow-remote together with a
bearer token, because an unauthenticated MCP endpoint is an unauthenticated
route into Zabbix. See docs/mcp.md.
Fifteen tools, not two hundred. A large tool surface costs an agent context before it has done anything, and most of it is never called.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/zabbix-ai-cli-mcp)<a href="https://allmcps.com/mcp/zabbix-ai-cli-mcp"><img src="https://allmcps.com/api/badge/zabbix-ai-cli-mcp?style=directory" alt="Zabbix AI CLI MCP on AllMCPs" /></a>