by initMAX
MCP server for the complete Zabbix API - 237 tools, multi-server, OAuth 2.1 + bearer auth, PDF reports, systemd ready. Works with ChatGPT, Claude, VS Code, Codex, JetBrains and any MCP client.
# Add to your Claude Code skills
git clone https://github.com/initMAX/zabbix-mcp-serverGuides for using ai agents skills like zabbix-mcp-server.
MCP (Model Context Protocol) is an open standard that lets AI assistants (ChatGPT, Claude, VS Code Copilot, JetBrains AI, Codex, and others) use external tools. This server exposes the entire Zabbix API as MCP tools — allowing any compatible AI assistant to query hosts, check problems, manage templates, acknowledge events, and perform any other Zabbix operation.
The server runs as a standalone HTTP service. AI clients connect to it over the network.
host_status_get, hostgroup_overview_get, infrastructure_summary_get, item_history_summary_get, problem_active_get (fold 3-5 raw API calls into one round-trip). Plus graph_render (PNG export), anomaly_detect (z-score analysis), capacity_forecast (linear regression), item_threshold_search (filter items by lastvalue thresholds), report_generate (PDF reports), action_prepare/action_confirm (two-step write approval), health_check (server diagnostics) and zabbix_raw_api_call (admin escape hatch for un-wrapped methods).No comments yet. Be the first to share your thoughts!
generate-token), or config.tomlmonitoring, alerts, users, extensions, etc.) or individual API prefix to reduce the tool catalog size and stay under LLM context limits (see Token Budget below)extend for full detailszabbix_raw_api_call tool for any API method not explicitly definedgit clone https://github.com/initMAX/zabbix-mcp-server.git
cd zabbix-mcp-server
sudo ./deploy/install.sh
sudo nano /etc/zabbix-mcp/config.toml # fill in your Zabbix URL + API token
sudo systemctl start zabbix-mcp-server
sudo systemctl enable zabbix-mcp-server
Done. The server is running on http://127.0.0.1:8080/mcp.
Detailed guide: See
INSTALL.mdfor step-by-step instructions for both on-prem (systemd) and Docker deployments, including uninstall, security checklist, and TLS setup.
git clone https://github.com/initMAX/zabbix-mcp-server.git
cd zabbix-mcp-server
sudo ./deploy/install.sh
The install script will:
zabbix-mcp (no login shell)/opt/zabbix-mcp/venv/etc/zabbix-mcp/config.tomlzabbix-mcp-server)/var/log/zabbix-mcp/*.log (daily, 30 days retention)For developers running the server locally on their own machine, an alternative installer is shipped that does not require sudo:
./deploy/install-user.sh # install
./deploy/install-user.sh update # git pull + pip + restart
./deploy/install-user.sh uninstall
It detects Python 3.10+, creates a virtualenv inside the repo, copies config.example.toml to config.toml (with log_file rewritten to a user-writable path), and registers a background service:
~/Library/LaunchAgents/com.initmax.zabbix-mcp-server.plist (auto-restart via KeepAlive)--user unit at ~/.config/systemd/user/zabbix-mcp-server.service with loginctl enable-linger so the service survives logoutThis is intended for local development. For production servers use the regular sudo ./deploy/install.sh above.
cd zabbix-mcp-server
sudo ./deploy/install.sh update
That's the whole procedure — no manual steps afterwards. From v1.15+ the update command handles git sync, package reinstall, systemd reload, validation, and service restart in one shot.
What update does:
fetch + reset --hard origin/<branch> if history diverged), then re-executes itself from the updated script./opt/zabbix-mcp/venv.config.toml — aborts if the config is invalid.systemctl restart zabbix-mcp-server and performs an HTTP health check on the configured port.What is preserved (never overwritten):
/etc/zabbix-mcp/config.toml — your Zabbix URL, API token, MCP tokens, scopes, TLS settings, etc.[admin.users.*] inside config.toml).You'll see ✓ Config preserved at /etc/zabbix-mcp/config.toml (not overwritten) during the update. Check config.example.toml afterwards for any new options added in the release.
PDF reporting during update:
By default update keeps your current reporting state — if PDF reporting was installed, it stays; if it wasn't, it is not added. To change that:
# Enable PDF reporting on an existing install that didn't have it
sudo ./deploy/install.sh update --with-reporting
# Update without PDF reporting dependencies (smaller install)
sudo ./deploy/install.sh update --without-reporting
The --with-reporting flag pulls in weasyprint, jinja2, and system libs (cairo, pango, gdk-pixbuf). See PDF Reports for what you get.
**Upgrading from very old v