Zabbix MCP Server
One-line summary: This MCP server gives AI agents full read and write access to a Zabbix monitoring instance — querying metrics, problems, and configuration, plus creating, updating, and deleting monitoring objects.
Read monitoring data: hosts, host groups, templates, items, item prototypes, triggers, problems, events, graphs, discovery rules (LLD and network), SLAs, services, actions, media types, scripts, users, proxies, maintenance periods, and user macros
Time-series retrieval: raw history points and hourly aggregated trends for items, with time-range filtering
Write operations: create/update/delete hosts, host groups, templates, items, triggers, users, proxies, maintenance windows, and host macros
Operational actions: acknowledge or close problems/events with messages, and execute scripts on monitored hosts
Bulk/config management: export hosts and templates to JSON/XML/YAML and import configurations with per-object rules
Query ergonomics: paging (limit/offset), field selection, sorting, substring search shortcuts (e.g., hostname_contains), and count-only results
Safety controls: read-only mode, tag-based tool disabling, rate limiting, and SSL/timeout configuration
Optional Sentry integration for error tracking and performance monitoring of the MCP server, configured via SENTRY_DSN and supporting trace sample rates, PII flags, environment/release tagging, session profiling, and log forwarding.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zabbix MCP Servershow my top 10 hosts by CPU usage"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Zabbix MCP Server
Let AI agents query and manage Zabbix monitoring through the Model Context Protocol
Installation · Tools · Configuration · Security
Zabbix MCP Server is a Python-based Model Context Protocol (MCP) server designed to provide advanced, programmable access to Zabbix monitoring data and management features. It exposes a modern API for querying, automating, and integrating Zabbix resources such as hosts, templates, triggers, items, problems, events, users, proxies, maintenance periods, and more. The server supports both read and write operations, robust security features, and is suitable for integration with AI assistants, automation tools, dashboards, and custom monitoring workflows.
✨ Features
Core Features
Query Zabbix hosts, templates, items, triggers, and host groups with flexible filtering
Retrieve problems, events, and alerts with severity filtering
Access history and trend data for monitored items
Monitor trigger states and problem severity
Manage maintenance periods and scheduled downtimes
Retrieve user macros and configuration data
Get SLA and service information
Management Operations
Create, update, and delete hosts, templates, and host groups (if enabled)
Manage triggers, items, and discovery rules
Configure maintenance periods and user macros
Execute scripts on monitored hosts
Acknowledge events and close problems
Create and manage users and proxies
Support for bulk operations on hosts and templates
Advanced Capabilities
Rate limiting and API security features
Read-only mode to restrict all write operations for safe monitoring
Optional tool-search transform for large tool catalogs
Bearer token authentication for HTTP transport
Comprehensive logging and audit trails
SSL/TLS support and configurable timeouts
Multiple transport options (STDIO, SSE, HTTP)
Optional Sentry integration for error tracking
Related MCP server: mcp-zabbix
🚀 Installation
Prerequisites
Python 3.11 to 3.15
Access to a Zabbix server. Versions 6.0 to 7.4 are supported - that is the range the
zabbix-utilsclient accepts, and it refuses to connect outside it unlessZABBIX_SKIP_VERSION_CHECK=trueis setValid Zabbix API token or user credentials with appropriate permissions
Quick Install from PyPI
The easiest way to get started is to install from PyPI:
# Using UV (recommended)
uvx zabbix-mcp
# Or using pip
pip install zabbix-mcpRemember to configure the environment variables for your Zabbix instance before running the server:
# Create environment configuration
export ZABBIX_URL=https://zabbix.example.com/api_jsonrpc.php
export ZABBIX_TOKEN=your-zabbix-api-tokenInstall from Source
Clone the repository:
git clone https://github.com/mhajder/zabbix-mcp.git
cd zabbix-mcpInstall dependencies:
# Using UV (recommended)
uv sync
# Or using pip
pip install -e .Configure environment variables:
cp .env.example .env
# Edit .env with your Zabbix URL and credentialsRun the server:
# Using UV (recommended)
uv run zabbix-mcp
# Or using the installed command directly
zabbix-mcpUsing Docker
A Docker image is available on GitHub Packages for easy deployment. It runs the
HTTP Streamable transport on port 8000 (/mcp).
docker pull ghcr.io/mhajder/zabbix-mcp:latestOpen WebUI
Open WebUI 0.6.31 and later connect to the image directly; the separate MCPO
image (ghcr.io/mhajder/zabbix-mcpo) is no longer published. In Open WebUI,
go to Admin Settings > Integrations > External Tool Servers, add a connection
of type MCP (Streamable HTTP) with the URL http://<host>:8000/mcp, and set
Bearer authentication to your MCP_HTTP_BEARER_TOKEN.
Development Setup
For development with additional tools:
# Clone and install with development dependencies
git clone https://github.com/mhajder/zabbix-mcp.git
cd zabbix-mcp
uv sync --group dev
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov=src/
# Run linting and formatting
uv run ruff check .
uv run ruff format .
# Run type checking
uv run ty check .
# Setup prek hooks
uv run prek install🔧 Configuration
Environment Variables
# Zabbix Connection Details
ZABBIX_URL=https://zabbix.example.com/api_jsonrpc.php
# Authentication - use EITHER token OR user/password
# API Token (preferred over user/password)
ZABBIX_TOKEN=your-api-token
# OR Username/Password (for older versions)
# ZABBIX_USER=Admin
# ZABBIX_PASSWORD=zabbix
# SSL Configuration
ZABBIX_VERIFY_SSL=true
ZABBIX_TIMEOUT=30
ZABBIX_SKIP_VERSION_CHECK=false
# Read-Only Mode
# Set READ_ONLY_MODE true to disable all write operations (create, update, delete)
READ_ONLY_MODE=false
# Disabled Tags
# Comma-separated list of tags to disable tools for (empty by default)
# Example: DISABLED_TAGS=host,user,maintenance
DISABLED_TAGS=
# Logging Configuration
LOG_LEVEL=INFO
# Rate Limiting
# Set RATE_LIMIT_ENABLED true to enable rate limiting
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=60
RATE_LIMIT_WINDOW_MINUTES=1
# Tool Search Transform (Optional)
# Set TOOL_SEARCH_ENABLED true to replace full tool listing with search tools
TOOL_SEARCH_ENABLED=false
# Search strategy: bm25 (natural language) or regex (pattern matching)
TOOL_SEARCH_STRATEGY=bm25
# Maximum number of matching tools returned by search_tools
TOOL_SEARCH_MAX_RESULTS=5
# Sentry Error Tracking (Optional)
# Set SENTRY_DSN to enable error tracking and performance monitoring
# SENTRY_DSN=https://your-key@o12345.ingest.us.sentry.io/6789
# Optional Sentry configuration
# SENTRY_TRACES_SAMPLE_RATE=1.0
# SENTRY_SEND_DEFAULT_PII=false
# SENTRY_ENVIRONMENT=production
# SENTRY_RELEASE=1.2.3
# SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# SENTRY_PROFILE_LIFECYCLE=trace
# SENTRY_ENABLE_LOGS=true
# MCP Transport Configuration
# Transport type: 'stdio' (default), 'sse' (Server-Sent Events), or 'http' (HTTP Streamable)
# 'streamable-http' is accepted as an alias for 'http'. Any other value stops
# the server at startup.
MCP_TRANSPORT=stdio
# HTTP Transport Settings (used when MCP_TRANSPORT=sse or MCP_TRANSPORT=http)
# Host to bind the HTTP server (default: 127.0.0.1)
# MCP_HTTP_HOST=127.0.0.1
# Port to bind the HTTP server (default: 8000)
# MCP_HTTP_PORT=8000
# Optional bearer token for authentication (leave empty for no auth)
# MCP_HTTP_BEARER_TOKEN=🧰 Available Tools
API Information
api_version: Get Zabbix API version information
Host Management
host_get: List hosts with optional filtering by groups, templates, proxies, and search criteriahost_create: Create a new host with interfaces and template linkinghost_update: Update host properties (name, status, description)host_delete: Delete hosts by ID
Host Group Management
hostgroup_get: List host groups with optional filteringhostgroup_create: Create a new host grouphostgroup_update: Update an existing host group's properties (name)hostgroup_delete: Delete host groups
Template Management
template_get: List templates with optional filteringtemplate_create: Create a new templatetemplate_update: Update template properties (name, description)template_delete: Delete templates
Item Management
item_get: List items with optional filtering by hosts, groups, templatesitem_create: Create a new item on a hostitem_update: Update item properties (name, delay, units, description, status)item_delete: Delete items
Trigger Management
trigger_get: List triggers with severity and state filteringtrigger_create: Create a new trigger with expressiontrigger_update: Update trigger properties (description, expression, priority, status, comments)trigger_delete: Delete triggers
Problem & Event Management
problem_get: Get current problems with severity and time filteringevent_get: Get events with time range filteringevent_acknowledge: Acknowledge events with optional messages
History & Trends
history_get: Get historical data for itemstrend_get: Get trend data for items
User Management
user_get: List users with optional filteringuser_create: Create a new useruser_update: Update user properties (name, surname, password, type)user_delete: Delete users
Proxy Management
proxy_get: List proxies with optional filteringproxy_create: Create a new proxyproxy_update: Update proxy properties (name, operating mode, description)proxy_delete: Delete proxies
Maintenance Management
maintenance_get: List maintenance periodsmaintenance_create: Create a new maintenance periodmaintenance_update: Update maintenance period properties (name, times, description)maintenance_delete: Delete maintenance periods
Action & Media
action_get: List actions (triggers, autoregistration, etc.)mediatype_get: List media types
Graph & Discovery
graph_get: List graphs with optional filteringdiscoveryrule_get: List LLD discovery rulesdrule_get: List network discovery rulesitemprototype_get: Get item prototypes from discovery rules
SLA & Services
sla_get: List SLAsservice_get: List services
Scripts
script_get: List scriptsscript_execute: Execute a script on a host
User Macros
usermacro_get: List user macros (host and global)usermacro_create: Create a host macrousermacro_delete: Delete host macros
Configuration Management
configuration_export: Export Zabbix configurations to JSON or XMLconfiguration_import: Import Zabbix configurations from JSON or XML
🔒 Security & Safety Features
Read-Only Mode
The server supports a read-only mode that disables all write operations for safe monitoring:
READ_ONLY_MODE=trueTag-Based Tool Filtering
You can disable specific categories of tools by setting disabled tags:
DISABLED_TAGS=alert,billsTool Search for Large Toolsets
FastMCP tool search can reduce prompt size for servers with many tools.
When enabled, list_tools returns two synthetic tools:
search_tools: Finds matching tools and returns their full schemascall_tool: Executes any discovered tool by name
Enable it with:
TOOL_SEARCH_ENABLED=true
TOOL_SEARCH_STRATEGY=bm25 # bm25 or regex
TOOL_SEARCH_MAX_RESULTS=8 # optional, default is 5bm25 supports natural language queries, while regex uses a regex
pattern input for deterministic matching.
Tool search respects existing visibility controls (read-only mode and disabled tags).
Rate Limiting
The server supports rate limiting to control API usage and prevent abuse. If enabled, requests are limited per client using a sliding window algorithm.
Enable rate limiting by setting the following environment variables in your .env file:
RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=60 # Maximum requests allowed per window (default: 60)
RATE_LIMIT_WINDOW_MINUTES=1 # Window size in minutesIf RATE_LIMIT_ENABLED is set to true, the server will apply rate limiting middleware. Adjust RATE_LIMIT_MAX_REQUESTS and RATE_LIMIT_WINDOW_MINUTES as needed for your environment.
Sentry Error Tracking & Monitoring (Optional)
The server optionally supports Sentry for error tracking, performance monitoring, and debugging. Sentry integration is completely optional and only initialized if configured.
Installation
To enable Sentry monitoring, install the optional dependency:
# Using UV (recommended)
uv sync --extra sentryConfiguration
Enable Sentry by setting the SENTRY_DSN environment variable in your .env file:
# Required: Sentry DSN for your project
SENTRY_DSN=https://your-key@o12345.ingest.us.sentry.io/6789
# Optional: Performance monitoring sample rate (0.0-1.0, default: 1.0)
SENTRY_TRACES_SAMPLE_RATE=1.0
# Optional: Include personally identifiable information (default: false).
# When true, tool inputs and outputs are sent to Sentry.
SENTRY_SEND_DEFAULT_PII=false
# Optional: Environment name (e.g., "production", "staging")
SENTRY_ENVIRONMENT=production
# Optional: Release version (auto-detected from package if not set)
SENTRY_RELEASE=1.2.3
# Optional: Profiling - continuous profiling sample rate (0.0-1.0, default: 1.0)
SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# Optional: Profiling - lifecycle mode for profiling (default: "trace")
# Options: "all", "continuation", "trace"
SENTRY_PROFILE_LIFECYCLE=trace
# Optional: Enable log capture as breadcrumbs and events (default: true)
SENTRY_ENABLE_LOGS=trueFeatures
When enabled, Sentry automatically captures:
Exceptions & Errors: All unhandled exceptions with full context
Performance Metrics: Request/response times and traces
MCP Integration: Detailed MCP server activity and interactions
Logs & Breadcrumbs: Application logs and event trails for debugging
Context Data: Environment, client info, and request parameters
Getting a Sentry DSN
Create a free account at sentry.io
Create a new Python project
Copy your DSN from the project settings
Set it in your
.envfile
Disabling Sentry
Sentry is completely optional. If you don't set SENTRY_DSN, the server will run normally without any Sentry integration, and no monitoring data will be collected.
SSL/TLS Configuration
The server supports SSL certificate verification and custom timeout settings:
ZABBIX_VERIFY_SSL=true # Enable SSL certificate verification
ZABBIX_TIMEOUT=30 # Connection timeout in secondsTransport Configuration
The server supports multiple transport mechanisms for the MCP protocol:
STDIO Transport (Default)
The default transport uses standard input/output for communication. This is ideal for local usage and integration with tools that communicate via stdin/stdout:
MCP_TRANSPORT=stdioHTTP SSE Transport (Server-Sent Events)
For network-based deployments, you can use HTTP with Server-Sent Events. This allows the MCP server to be accessed over HTTP with real-time streaming:
MCP_TRANSPORT=sse
MCP_HTTP_HOST=127.0.0.1 # Localhost
MCP_HTTP_PORT=8000 # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token # Optional authentication tokenWhen using SSE transport with a bearer token, clients must include the token in their requests:
curl -H "Authorization: Bearer your-secret-token" http://localhost:8000/sseHTTP Streamable Transport
The HTTP Streamable transport provides HTTP-based communication with request/response streaming. This is ideal for web integrations and tools that need HTTP endpoints:
MCP_TRANSPORT=http
MCP_HTTP_HOST=127.0.0.1 # Localhost
MCP_HTTP_PORT=8000 # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token # Optional authentication tokenWhen using streamable transport with a bearer token:
curl -H "Authorization: Bearer your-secret-token" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
http://localhost:8000/mcpNote: The HTTP transport requires proper JSON-RPC formatting with jsonrpc and id fields. The server may also require session initialization for some operations.
Health Endpoint
Both HTTP transports (sse and http) serve GET /health, which answers 200 ok
when the server is handling requests. It needs no bearer token and does not
contact Zabbix, so a Zabbix outage does not mark the MCP server unhealthy.
The Docker image's HEALTHCHECK uses it:
curl http://localhost:8000/healthFor more information on FastMCP transports, see the FastMCP documentation.
🤝 Contributing
Contributions are welcome. See CONTRIBUTING.md for the dev setup, checks and commit message format, and use the issue templates for bugs and feature requests.
Found a security problem? Please report it privately as described in SECURITY.md.
📜 License
MIT License - see LICENSE for details.
Available Tools
53 toolsaction_getAction GetBRead-onlyIdempotent
Get actions from Zabbix.
Actions define automated responses to problems/triggers. They specify what happens when problems occur - sending notifications, executing remote commands, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'notify'}. | |
| hostids | No | List of host IDs to get actions for. An empty list matches none. | |
| groupids | No | List of host group IDs to get actions for. An empty list matches none. | |
| actionids | No | List of action IDs to get. Omit to return all actions; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | actionid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description contributes useful domain semantics about what actions represent, but says nothing about auth requirements, paging behavior, or what the returned objects contain beyond 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 sentences with the core operation front-loaded; the second paragraph is domain explanation rather than padding, though it could be trimmed slightly.
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 a full output schema, rich annotations, and 91% schema coverage, the description only needs to frame the resource, which it does. It is adequate for correct invocation, with only usage routing left implicit.
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 91%, so the schema already documents nearly every parameter including limit, offset, search and the id filters. The description adds no parameter guidance, 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?
It states a specific verb and resource ('Get actions from Zabbix') and adds a concise definition of what an action is (automated responses to problems/triggers). The resource is unambiguous and no sibling shares it, though there is no explicit differentiation text.
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 explains what actions are but not when to call this tool versus alternatives, nor when to filter by hostids/groupids/actionids versus using search. The agent must infer usage entirely from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_versionApi VersionARead-onlyIdempotent
Get Zabbix API version information.
This tool retrieves the current version of the Zabbix API you are connecting to. This is useful for understanding API capabilities and ensuring compatibility with specific features that may be version-dependent.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful behavioral context by explaining that the result reflects the connected Zabbix API version and matters for version-dependent feature compatibility.
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?
The definition is short and front-loaded with the core action. The second sentence partly restates the first by explaining that it retrieves the current API version, but the compatibility rationale still 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?
For a zero-parameter, read-only tool with an output schema and annotations covering safety traits, the description supplies the needed operational context. An agent can understand what the tool returns conceptually and why to call it without needing more detail.
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?
The tool has zero parameters, so there are no parameter semantics to explain, which meets the baseline of 4. The description appropriately does not invent parameter details for a no-argument call.
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 description states a specific verb and resource: retrieving the current Zabbix API version. It clearly distinguishes this metadata/version-check tool from the many CRUD sibling tools such as host_get, item_get, and user_get.
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 clear usage context: understanding API capabilities and checking compatibility with version-dependent features. It does not explicitly state when not to use it or name alternatives, but no sibling tool provides the same version-information function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configuration_exportConfiguration ExportARead-onlyIdempotent
Export Zabbix configurations.
Exports monitored hosts, templates, and their complete configurations to JSON, XML, or YAML format. Useful for backup, migration, disaster recovery, or sharing configurations.
When you export templates or hosts, the export includes:
All associated items (metrics/data sources)
All triggers and their dependencies
Discovery rules and prototypes
Graphs and visualizations
Macros and variable definitions
Host groups and interfaces (for hosts)
Inventory data (for hosts)
And all other configuration elements
| Name | Required | Description | Default |
|---|---|---|---|
| hostids | No | List of host IDs to export. | |
| format_type | No | Export format: 'json', 'xml', or 'yaml'. | json |
| prettyprint | No | If true, returns pretty-printed output. | |
| templateids | No | List of template IDs to export. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 earns credit by disclosing the scope of what gets pulled in (items, triggers, discovery rules, graphs, macros, host groups, inventory), which tells the agent the output is large and cascading. It does not state what happens when both hostids and templateids are omitted, which is the main behavioral unknown.
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 line, followed by the format/output summary and then a scannable inclusion list. The only filler is the closing 'And all other configuration elements', which is forgivable as a catch-all.
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 a full input schema, an output schema, and read-only annotations, the description covers what an agent needs to invoke it correctly. The one gap is default behavior with zero IDs (export everything vs. error), which matters because no parameters are required.
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; the description adds real meaning on top by explaining that exporting a host or template transitively includes its dependent objects, which reframes what hostids/templateids actually select. It does not explain the interaction of the two ID lists or the validation of format_type values beyond what the schema lists.
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 description opens with a specific verb+resource ("Export Zabbix configurations") and immediately narrows to hosts, templates, and their full configuration, which distinguishes it cleanly from the sibling configuration_import and from the many *_get tools that return single-object data. An agent can pick this without opening the 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?
It gives clear use contexts: backup, migration, disaster recovery, and sharing configurations. It does not name exclusions or point at a specific alternative (e.g. 'use configuration_import to restore', or 'use host_get for a single host'), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configuration_importConfiguration ImportBDestructive
Import configurations into Zabbix.
Imports hosts, templates, and other configurations from JSON, XML or YAML. Useful for migration, cloning, or restoring configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | Per-object import rules, e.g. {'hosts': {'createMissing': true, 'updateExisting': true}}. Defaults to creating and updating every object type, without deleting anything. | |
| content | Yes | Configuration content to import. | |
| format_type | No | Import format: 'json', 'xml' or 'yaml'. | json |
| delete_missing | No | If true, the default rules also delete objects absent from the import. Ignored when 'rules' is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false, yet the description never mentions that an import can overwrite or delete existing objects, nor that repeated imports are not idempotent. For a destructive bulk-mutation tool this silence is a significant gap – the description adds no behavioural context beyond the annotations themselves.
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 short sentences, front-loaded with the operation and resource, with no filler. The second line about formats is slightly redundant with the schema but does not waste much space.
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?
An output schema exists so return values need not be explained, and the schema covers parameters well. However, given a destructive, non-idempotent bulk import across many object types, the description omits any warning about overwrite/delete behaviour or conflict handling that an agent would need before invoking it.
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 schema already documents 'content', 'format_type', 'rules' and 'delete_missing' thoroughly, including the interaction between them. The description's mention of JSON/XML/YAML merely restates what the schema says, so the baseline holds.
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 ('Import configurations into Zabbix') and enumerates the object types and accepted formats, which is more than the title alone provides. It does not differentiate itself from the obvious sibling configuration_export, but the import/export split is self-evident.
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 usage contexts ('migration, cloning, or restoring') but no when-not guidance, no pointer to configuration_export or to per-object tools, and no prerequisites. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discoveryrule_getDiscoveryrule GetBRead-onlyIdempotent
Get discovery rules from Zabbix.
Discovery rules automatically detect items, triggers, and interfaces from network resources. They enable dynamic host and item management without manual configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'SNMP'}. | |
| hostids | No | List of host IDs to get discovery rules from. An empty list matches none. | |
| itemids | No | List of item IDs (discovery rules are items) to get. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | itemid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| templateids | No | List of template IDs to get discovery rules from. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful domain context about what discovery rules do, but it does not add behavioral details beyond annotations, such as paging, filtering, or response behavior; the output schema covers return values.
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?
The description is short and front-loads the core action in the first sentence. The second sentence provides domain background rather than invocation guidance, so it is not maximally efficient, but it is not excessive.
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?
The description, rich schema, annotations, and output schema together make the tool callable. Still, for an 11-parameter list/get tool with a closely related sibling, the missing usage guidance and sibling differentiation leave a meaningful contextual 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 91%, so the schema already documents nearly all 11 parameters. The description adds no parameter-specific semantics, but with such high coverage 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?
The description uses a clear verb+resource phrase, 'Get discovery rules from Zabbix,' and explains what discovery rules are. However, it does not distinguish this tool from the similarly named sibling 'drule_get' or clarify when this should be used 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?
The description says what the tool retrieves but provides no explicit when-to-use guidance, no exclusions, and no alternatives. With siblings such as 'drule_get' and 'item_get', an agent is left to infer the correct choice from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drule_getDrule GetBRead-onlyIdempotent
Get network discovery rules from Zabbix.
Network discovery (drule) rules perform network scanning to discover hosts and services. They can scan for active devices, open ports, and available services in CIDR ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'LAN'}. | |
| druleids | No | List of network discovery rule IDs to get. Omit to return all rules; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | druleid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful domain context about what network discovery rules do, but it does not disclose behavioral details such as pagination behavior, permissions, or response characteristics beyond what the schema provides.
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?
The description is short and front-loads the core action. The second sentence about network scanning is useful domain context, though not strictly required for selecting or invoking the tool.
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?
Given that annotations cover safety and an output schema exists, the description is adequate for understanding the resource. However, it lacks guidance on alternatives such as 'discoveryrule_get' and does not explain when filtering or paging should be used, leaving some context gaps.
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 high at 89%, so the schema already documents most parameters well. The description adds no parameter-specific meaning or syntax, which is acceptable given the strong schema coverage but does not raise it above the baseline.
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 description states a specific verb and resource: 'Get network discovery rules from Zabbix,' and clarifies that 'drule' means network discovery rules. It explains the domain well, but it does not distinguish this tool from the sibling 'discoveryrule_get,' which appears closely related.
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?
The description gives no guidance on when to use this tool versus alternatives, nor does it mention prerequisites, filtering use cases, or any when-not-to-use conditions. It only implies usage by saying it retrieves network discovery rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_acknowledgeEvent AcknowledgeADestructiveIdempotent
Acknowledge events in Zabbix.
Mark events (problems/alerts) as acknowledged to show that operations staff are aware of and working on the issue. Acknowledged events can also be closed if resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Bitmask: 1=close problem, 2=acknowledge, 4=add message, 8=change severity, 16=unacknowledge, 32=suppress, 64=unsuppress. | |
| message | No | Message to add to the event. The 'add message' flag (4) is added to 'action' automatically when this is set - Zabbix otherwise accepts the call and stores an empty message, losing the text silently. | |
| eventids | Yes | Event IDs to acknowledge. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=true, so the safety profile is carried structurally. The description adds real context about what acknowledgement means operationally and hints that closing is possible, but it never warns that the action bitmask can close problems or change severity — the destructive edges of this tool go unmentioned.
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 action and followed by the operational rationale. No filler, though the last sentence about closing drifts slightly from the tool's core purpose.
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?
An output schema exists so return values need no explanation, and the three parameters are fully documented in schema. What remains thin is bulk semantics — whether multiple eventids are all-or-nothing — but overall an agent has enough to invoke it 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 coverage is 100%, and the schema itself documents the action bitmask and the auto-adding of flag 4 for messages in detail. The description adds nothing about eventids (single vs. bulk), partial failures, or the action parameter, so the 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?
The description opens with a specific verb+resource ('Acknowledge events in Zabbix') and clarifies that the targets are problems/alerts, which separates it from the read-side sibling event_get. It does not explicitly name the sibling, so it stops short of a 5.
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 the operational intent (show staff are aware and working the issue) and notes that events can also be closed if resolved, which implies when to reach for it. There is no explicit guidance on when not to use it, no mention of the alternate siblings (event_get, problem_get), and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_getEvent GetARead-onlyIdempotent
Get events from Zabbix.
Events represent state changes in the system - when triggers transition from normal to problem and back, or recovery events. Each event has a timestamp, trigger, and can be acknowledged to show operators have seen the alert.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| hostids | No | List of host IDs to get events from. An empty list matches none. | |
| eventids | No | List of event IDs to get. Omit to return all events; an empty list matches none. | |
| groupids | No | List of host group IDs to get events from. An empty list matches none. | |
| objectids | No | List of trigger IDs to get events from. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | eventid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| time_from | No | Unix timestamp to filter events from this time onwards. | |
| time_till | No | Unix timestamp to filter events up to this time. | |
| suppressed | No | If false, return only unsuppressed events. If true, return only suppressed events. | |
| select_tags | No | If true, include the tags for each event in the response (selectTags=extend). | |
| acknowledged | No | If false, return only unacknowledged events. If true, return only acknowledged events. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| select_hosts | No | If true, include the hosts each event belongs to in the response (selectHosts=extend). | |
| select_related_object | No | If true, include the related object (e.g., trigger) in the response (selectRelatedObject=extend). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 structurally. The description adds useful semantic context (event lifecycle, ack meaning) but says nothing about result volume, default limit of 100, or that paging requires a deterministic sort — the one behavior an agent most needs to know before calling.
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 action, and no redundant restatement of the tool name. The trailing explanatory sentences are slightly verbose but earn their place by defining what an event is.
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 17 optional parameters and rich per-parameter documentation plus an output schema, the description only needs to frame the resource, which it does. Minor gaps remain around how filters combine and default truncation at 100 results, but nothing essential for correct invocation 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 94%, so nearly every parameter is already documented, including default limit, offset paging via has_more/total, and empty-list-matches-none semantics. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the work.
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 definition opens with a clear specific verb+resource ("Get events from Zabbix") and explains the domain: state-change events from trigger transitions plus recovery events. It implicitly separates itself from problem_get (current state) and event_acknowledge (mutating acknowledgement), though it never names those siblings explicitly.
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?
Usage is only implied through domain explanation; the description never states when to use this versus problem_get or event_acknowledge, nor any prerequisites or filter-combination rules. The mention that events "can be acknowledged" hints at a related tool without routing the agent to it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_getGraph GetCRead-onlyIdempotent
Get graphs from Zabbix.
Graphs visualize item data over time, displaying metric values in line/bar/pie charts. Graphs can be included in dashboards, reports, and custom views for data analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'CPU'}. | |
| hostids | No | List of host IDs to get graphs from. An empty list matches none. | |
| graphids | No | List of graph IDs to get. Omit to return all graphs; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | graphid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| templateids | No | List of template IDs to get graphs from. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| select_hosts | No | If true, include the hosts that the graphs belong to (selectHosts=extend). | |
| select_items | No | If true, include the items contained in each graph (selectGraphItems=extend). | |
| filter_params | No | Additional filter parameters for advanced filtering. | |
| select_templates | No | If true, include the templates that the graphs belong to (selectTemplates=extend). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 fully covered. The description adds no behavioral context beyond that — no mention of pagination semantics, large-result behavior, or how filtering and select_* flags affect cost/size. The remaining sentences are domain trivia about what graphs are used for, not behavior.
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?
The first sentence is front-loaded and earns its place. The second paragraph (charts, dashboards, reports, custom views) is generic product blurb that adds no actionable information for an agent and inflates the definition without improving call accuracy.
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?
The schema is rich and an output schema exists, so return values need not be explained. For a 14-parameter read tool with no required args, the description is adequate but thin: it says nothing about paging discipline, how to combine graphids/hostids/templateids, or what count_output returns in context, which are the places an agent is most likely to mis-call.
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 93%, so the 14 parameters (including limit/offset paging, search, ids lists, and select_* flags) are already well documented in structured data. The description contributes no additional parameter meaning, 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?
The description opens with a specific verb and resource ("Get graphs from Zabbix"), which unambiguously separates this tool from the other resource-scoped siblings in the list (host_get, item_get, trigger_get). However, it does not sharpen that distinction by explaining what a 'graph' object is relative to its underlying items, leaving only the resource name to differentiate.
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?
There is no statement of when to call this tool versus alternatives such as item_get or history_get/trend_get, which return the data that graphs render. The second paragraph describes what graphs are in general terms but gives no selection guidance, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
history_getHistory GetARead-onlyIdempotent
Get history data from Zabbix.
Retrieves the raw metric values collected by items. History contains all individual collected data points with timestamps, allowing detailed analysis of system behavior over time.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| history | No | Storage type to read: 0=float, 1=char, 2=log, 3=unsigned, 4=text. Must match the items' value_type or Zabbix returns nothing. Detected from the items when omitted. | |
| itemids | Yes | Item IDs to get history for. | |
| sortfield | No | Field to sort by (default 'clock' = timestamp). | clock |
| sortorder | No | Sort direction - 'ASC' (oldest first) or 'DESC' (newest first). Default is DESC. | DESC |
| time_from | No | Unix timestamp to get history from this time onwards. | |
| time_till | No | Unix timestamp to get history up to this time. | |
| count_output | No | If true, returns only the count of matched objects as an integer. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 that results are raw individual collected data points with timestamps, but does not discuss volume, performance, or pagination behavior beyond what the schema already documents.
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?
The description is short and front-loaded with the core action. The second sentence is helpful but slightly overlaps with the first by restating that history contains individual data points.
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?
Given an output schema, full schema description coverage, and annotations covering safety, the description is complete enough for an agent to understand that this tool returns raw historical metric values. Minor missing context includes explicit guidance versus trend_get, but the structured fields carry the detailed contract.
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 eight parameters are documented in the schema, including history type matching, time filters, sorting, limit, and count_output. The description adds no parameter-specific meaning beyond the schema, so 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 and resource: retrieves raw metric values collected by items from Zabbix, with timestamps. It implicitly distinguishes history from aggregate trend data by emphasizing individual raw data points, but does not explicitly name alternatives like trend_get.
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?
Provides implied usage for detailed system behavior analysis over time, but does not state when to use this instead of sibling tools such as trend_get or item_get, nor does it give exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_createHost CreateA
Create a new host in Zabbix.
Adds a new monitored host to Zabbix. This is essential for starting to monitor a new server or device. You must specify at least a host name and groups. You can optionally configure interfaces (for agent/SNMP communication) and link templates.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Technical name of the host. | |
| name | No | Visible name. | |
| groups | No | Host groups (e.g., [{'groupid': '1'}]). | |
| params | No | Raw host.create params, for fields the arguments below do not cover. Describes a single host, not a batch. If provided, individual parameters are ignored. | |
| status | No | 0=enabled, 1=disabled. | |
| templates | No | Templates to link. | |
| interfaces | No | Host interfaces. | |
| description | No | Description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-idempotent, non-destructive, so the safety profile is covered by structured data. The description adds the practical requirement that a host name and groups are mandatory and that interfaces/templates are optional, which is useful context beyond annotations, but says nothing about duplicate-name behavior, permissions, or side effects of attaching templates.
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?
Short and front-loaded, opening with the action and then requirements. The second sentence ('Adds a new monitored host to Zabbix') largely restates the first, a minor redundancy, but the remainder each contributes a distinct constraint or capability.
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?
An output schema exists, so return values need not be described, and the description covers the effective required fields plus the optional interfaces and template linkage that define a create call. Combined with full schema coverage and annotations, an agent has enough to invoke it 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 coverage is 100%, so the schema already documents all eight parameters, making 3 the baseline. The description's note that host name and groups are effectively required (despite zero formally required fields) is a genuinely useful addition, but interfaces, templates, status, and the raw 'params' passthrough are not explained further.
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 ('Create a new host in Zabbix') and clarifies it adds a monitored host, so an agent knows what object is produced. It never names or contrasts with siblings like host_update or host_get, so differentiation relies on the agent inferring from 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?
The phrase 'essential for starting to monitor a new server or device' implies the situation in which to use it, but there is no explicit when-not-to-use or reference to the update/get/delete siblings. Adequate but leaves the agent to infer the boundary between create and update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_deleteHost DeleteADestructive
Delete hosts from Zabbix.
Permanently removes one or more hosts from Zabbix. This will delete all associated data including history and alerts. Use with caution as this is a destructive operation.
| Name | Required | Description | Default |
|---|---|---|---|
| hostids | Yes | List of host IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, but the description adds important scope: deletion is permanent and removes all associated data including history and alerts. This is exactly the kind of behavioral consequence an agent needs beyond the annotation flags.
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?
The description is short, front-loaded, and structured around the core action, its permanence, and the destructive warning. Every sentence contributes useful information without unnecessary elaboration.
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?
Given the single fully documented parameter, existing annotations, and an output schema, the description provides everything needed for correct invocation. It covers the action, scope of deletion, and the critical destructive consequence.
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?
The schema has 100% description coverage and clearly documents hostids as the list of host IDs to delete. The description adds only that one or more hosts are removed, which aligns with the schema but does not expand on parameter semantics beyond it.
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 description uses a specific verb and resource: "Delete hosts from Zabbix" and "Permanently removes one or more hosts." It clearly distinguishes this tool from sibling operations like host_create, host_update, and host_get by stating the destructive host-removal purpose.
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 clearly establishes the destructive context and warns "Use with caution," which helps an agent decide when this tool is appropriate. However, it does not explicitly name alternatives or conditions where deletion should not be used, such as preferring host_update for changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_getHost GetARead-onlyIdempotent
Get hosts from Zabbix with optional filtering.
Retrieves a list of monitored hosts from Zabbix. You can filter by host IDs, groups, templates, proxies, or use search criteria. This is useful for discovering which hosts are available in your monitoring system.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size - maximum number of results to return. Default is 100. | |
| offset | No | Number of matching hosts to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | Output format: 'extend' or specific fields. | extend |
| search | No | Search criteria (e.g., {'host': 'web'} to perform a 'LIKE' search). | |
| status | No | Shortcut to filter by status (0=enabled, 1=disabled) (constructs filter={'status': status}). | |
| hostids | No | List of host IDs to retrieve. An empty list matches none. | |
| groupids | No | List of host group IDs to filter by. An empty list matches none. | |
| proxyids | No | List of proxy IDs to filter by. An empty list matches none. | |
| sortfield | No | Field to sort by - 'hostid', 'host', 'name' or 'status'. A deterministic sort is required for paging to be consistent. | hostid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| select_tags | No | If true, include the tags for each host in the response (selectTags=extend). | |
| templateids | No | List of template IDs to filter by. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Filter criteria (e.g., {'status': 0}). | |
| select_groups | No | If true, include the host groups each host belongs to in the response (selectHostGroups=extend). | |
| select_templates | No | If true, include the templates linked to each host in the response (selectTemplates=extend). | |
| hostname_contains | No | Shortcut to search for hosts by name (constructs search={'host': hostname_contains}). | |
| select_interfaces | No | If true, include the interfaces for each host in the response (selectInterfaces=extend). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds that filtering is optional and that it returns a list, but says nothing about default paging behavior (limit=100), the has_more/total response fields it enables, or that count_output switches to a scalar return — all left 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 sentences, front-loaded with the verb and resource. Minor waste: the first and second sentences largely restate each other ('Get hosts from Zabbix' / 'Retrieves a list of monitored hosts from Zabbix').
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 18 fully documented parameters, an output schema, and complete annotations, the description only needs to frame the tool's role — which it does. It omits any mention of paging strategy or response-expansion flags, but those are well covered elsewhere, so the gap is small.
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 baseline is 3. The description restates the filter dimensions (host IDs, groups, templates, proxies, search) that already appear as schema properties but adds no semantics of its own — e.g., that an empty ID list matches nothing, or that a deterministic sortfield is required for stable paging.
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 ('Get') and resource ('hosts from Zabbix') and names the filterable dimensions. It is clear what the tool returns (a list of monitored hosts), but it never distinguishes itself from siblings like hostgroup_get or template_get beyond the resource noun.
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?
'This is useful for discovering which hosts are available in your monitoring system' is an implied usage context rather than explicit guidance. No when-not-to-use cases and no named alternative (e.g., that mutations belong to host_create/host_update) are given, though the read-only nature of the operation makes the choice fairly obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hostgroup_createHostgroup CreateB
Create a new host group in Zabbix.
Host groups serve as containers for organizing hosts. They're essential for applying permissions, templates, and maintenance windows to multiple hosts at once.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the host group. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the agent knows this is a non-destructive, non-idempotent write. The description adds useful domain context about why host groups matter (permissions, templates, maintenance windows) but does not say what happens if the name already exists, which is the most likely failure mode for a non-idempotent create.
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?
The core action is front-loaded in the first sentence, and the follow-up paragraph is brief and informative rather than repetitive. It could be tightened, but nothing is wasted verbatim on restating the name or title.
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?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. However, for a non-idempotent create the description should mention duplicate-name behavior or scope (per-host vs global), which it omits; the tool is simple, but that remaining gap is a real one an agent would hit.
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?
There is a single parameter with 100% schema description coverage, which sets the baseline at 3. The description adds no meaning beyond the schema — nothing about name uniqueness, allowed characters, or length — so it neither compensates nor subtracts.
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 names a specific verb and resource: "Create a new host group in Zabbix." That is unambiguous and the create/get/update/delete siblings make the intent obvious. It stops short of explicitly contrasting itself with hostgroup_update or hostgroup_get, so it is clear but not sibling-differentiating.
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?
The description never says when to use this versus hostgroup_update or host_create, and gives no prerequisites such as required auth or whether the host group must already exist somewhere. The second paragraph explains what host groups are for conceptually, which is background rather than invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hostgroup_deleteHostgroup DeleteADestructive
Delete host groups from Zabbix.
Permanently removes one or more host groups. Hosts in deleted groups will no longer be members of that group (though the hosts themselves remain unless explicitly deleted).
| Name | Required | Description | Default |
|---|---|---|---|
| groupids | Yes | Group IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description earns credit for going further: it states deletion is permanent and explains the cascade — group membership is severed while host entities persist unless separately deleted. It stops short of covering downstream objects tied to the group (items, triggers) 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 short sentences, front-loaded with the action, and the cascade note is placed where it matters. The first two sentences overlap slightly ('Delete host groups' / 'Permanently removes one or more host groups'), a minor redundancy.
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 an output schema present and 100% schema coverage, the description needn't detail return values, and it covers the destructive semantics well. The remaining gap is the fate of items, triggers, and templates associated with the deleted group, which an agent doing impact assessment would want.
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 single groupids parameter is documented in-schema as 'Group IDs to delete.' The description's 'one or more host groups' only mildly reinforces that the parameter accepts a list, so 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?
The description leads with a specific verb and resource ('Delete host groups from Zabbix') and restates the scope as one or more groups. It's unambiguous what the tool does, but it doesn't differentiate itself from siblings like hostgroup_update or hostgroup_create beyond the verb.
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?
Usage is implied by the delete verb but there is no explicit when-to-use / when-not-to-use guidance, no mention of prerequisites like permissions, and no pointer to hostgroup_update as the non-destructive alternative. The note that hosts survive deletion gives partial context, but routing guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hostgroup_getHostgroup GetBRead-onlyIdempotent
Get host groups from Zabbix.
Retrieves host groups with optional filtering. Host groups are used to organize and manage hosts collectively, applying templates, permissions, and maintenance windows to multiple hosts at once.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | Output format. | extend |
| search | No | Search. | |
| hostids | No | Host IDs. An empty list matches none. | |
| groupids | No | Group IDs. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | groupid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| select_hosts | No | If true, include the hosts in each group in the response (selectHosts=extend). | |
| group_name_contains | No | Shortcut to search for groups by name (constructs search={'name': group_name_contains}). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 domain context about what host groups represent, but says nothing about result size, paging behavior, or permission scoping beyond 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?
Two short paragraphs with the action front-loaded in the first sentence. The second paragraph is explanatory domain filler that aids understanding but does not directly help invocation, keeping it just short of a 5.
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 an output schema, full parameter documentation, and read-only annotations, the description does not need to restate return values or paging mechanics. What remains thin is guidance on when to reach for this tool, which is covered under usage rather than completeness.
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 each parameter (limit, offset, search, group_name_contains, select_hosts, count_output) is documented inline with defaults and semantics. The description only generically mentions 'optional filtering' and adds nothing beyond the schema, so 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 ('Get host groups from Zabbix') and clarifies the object being retrieved, which distinguishes it from host_get or trigger_get by resource. It does not explicitly contrast with siblings like hostgroup_create/update/delete, so it stops short of a 5.
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?
Says retrieval supports 'optional filtering' but gives no guidance on when to use this versus host_get, trigger_get, or the hostgroup mutation siblings, and no prerequisites or exclusions. An agent must infer usage from parameter names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hostgroup_updateHostgroup UpdateA
Update an existing host group in Zabbix.
Modifies properties of an existing host group. You can change the group's name. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New group name. | |
| groupid | Yes | ID of the group to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description usefully narrows the mutation scope to renaming only, but it does not address behavior the annotations flag, such as non-idempotency or what happens when the groupid does not exist.
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?
The first two sentences restate the same fact ('Update an existing host group' / 'Modifies properties of an existing host group'), which is wasted space. The genuinely useful line about specifying only changed fields is buried last rather than front-loaded.
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?
An output schema exists so return values need not be explained, and the annotations cover the safety profile. For a mutation tool, however, the description says nothing about error conditions or whether group names must be unique — a gap an agent would likely hit.
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 real semantic meaning by stating that fields are optional and only changed fields should be sent — critical since groupid is the sole required parameter. It does not add format or constraint detail beyond that.
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 ('Update an existing host group in Zabbix') and clarifies via the schema that only the group name is mutable. The sibling set (hostgroup_create/delete/get) makes the distinction by name straightforward, though the description itself does not call out those siblings.
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?
'Only specify the fields you want to change' gives concrete guidance on how to invoke it as a partial update, which is the main decision an agent faces here. It stops short of explicit when-to-use/when-not or naming alternatives like hostgroup_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
host_updateHost UpdateADestructiveIdempotent
Update an existing host in Zabbix.
Modifies properties of an existing host. You can change the technical name, visible name, status (enable/disable monitoring), description, linked templates, or the proxy that monitors it. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | New technical name. | |
| name | No | New visible name. | |
| hostid | Yes | ID of the host to update. | |
| status | No | 0=enabled, 1=disabled. | |
| proxyid | No | Proxy to monitor the host through. '0' moves monitoring back to the Zabbix server; blank leaves it unchanged. | |
| templates | No | Replaces ALL linked templates (e.g., [{'templateid': '10001'}]). Templates left out are unlinked; their items and triggers stay on the host. | |
| description | No | New description. | |
| templates_clear | No | Templates to unlink AND clear - their items, triggers and collected data are deleted from the host. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=true, and the description adds partial-update semantics beyond that. It does not itself disclose that template changes unlink templates or delete collected data (that lives only in the schema), nor does it mention permission requirements or the effect of omitted fields beyond the generic instruction.
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 with the core action front-loaded and the partial-update rule placed last where it is most actionable. The middle sentence slightly overlaps the first in listing properties, but there is no real padding.
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 an output schema present and full schema coverage, the description only needs to frame the operation, which it does adequately. The remaining gap is behavioral rather than structural: side effects of template replacement and required auth level are left to the schema and annotations.
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 every parameter is already documented, including the destructive semantics of templates and templates_clear. The description restates the set of editable fields but adds no syntax, format, or edge-case detail beyond what the schema provides, so 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 ("Update an existing host in Zabbix") and enumerates the mutable properties, which makes clear it is the mutation counterpart to host_create/host_delete. It never explicitly differentiates itself from those siblings in text, relying on the reader to infer from the name.
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?
"Only specify the fields you want to change" is genuinely useful partial-update guidance. However, there is no explicit statement of when to use this versus host_create, host_delete, or template_update, and no prerequisites (e.g., permissions, host must exist) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_createItem CreateB
Create a new item in Zabbix.
Items define what data is collected from a host. Each item specifies the metric name, how to collect it (agent, SNMP, etc.), what interval to use, and what data type to store.
| Name | Required | Description | Default |
|---|---|---|---|
| key_ | Yes | Item key. | |
| name | Yes | Item name. | |
| delay | No | Update interval. Must be '0' for trapper (2) and dependent (18) items. | 1m |
| type_ | Yes | Item type (0=Zabbix agent, 2=trapper, etc.). | |
| units | No | Optional units for the values like 'bytes', 'CPU%', 'rpm'. | |
| hostid | Yes | Host ID. | |
| value_type | Yes | Value type (0=float, 1=char, 2=log, 3=unsigned, 4=text). | |
| description | No | Optional item description explaining its purpose. | |
| interfaceid | No | Host interface to poll through. Required for Zabbix agent (0), SNMP agent (20), SNMP trap (17), IPMI (12) and JMX (16) items on a host. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds domain context about what an item represents (metric, collection method, interval, data type) but does not disclose creation side effects, uniqueness constraints, required permissions, or failure behavior. With annotations covering the safety profile, this is adequate but incomplete.
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?
The description is three sentences and front-loads the action. The item-model explanation is useful and compact, though the latter sentences are more conceptual than invocation-critical.
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?
The tool has 9 parameters, 5 required, with full schema descriptions, annotations, and an output schema, so return values and most parameter detail are covered elsewhere. The description supplies purpose and item-model context, but omits operational prerequisites and sibling-routing guidance, leaving it complete enough but not rich.
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 schema documents types, defaults, and conditional requirements such as delay=0 for trapper/dependent items and interfaceid being required for certain item types. The description only echoes the high-level fields and adds no syntax or conditional guidance 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 description opens with a specific verb and resource ("Create a new item in Zabbix") and explains what an item is. It does not explicitly differentiate from siblings such as item_update or item_get, so it is clear but lacks sibling-routing language.
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?
There is no explicit when-to-use or when-not-to-use guidance, and it never mentions item_update for modifying existing items or prerequisites for creation. Usage is only implied by the verb "Create".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_deleteItem DeleteADestructive
Delete items from Zabbix.
Permanently removes one or more items from monitoring. The item's historical data is typically removed as part of cleanup, though this depends on Zabbix configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| itemids | Yes | Item IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description still adds genuine value beyond them by disclosing that deletion is permanent and that historical data removal depends on Zabbix configuration.
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?
The core action is front-loaded in the first line, with two short supporting sentences. The hedged clause about configuration slightly dilutes the second sentence but still earns its place by warning about irreversible data loss.
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?
An output schema exists, so return values need not be explained, and the single parameter is fully documented in the schema. Destruction consequences are covered; only permission requirements and effects on dependent triggers/entities are absent, which 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?
Only one parameter exists with 100% schema description coverage, so the schema already documents itemids. The description reinforces that multiple IDs are accepted but adds no format or retrieval details beyond that, making baseline 3 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+resource (delete items from Zabbix) and clarifies scope as 'one or more items', which matches the itemids array. It is trivially distinguishable from item_create/item_update/item_get siblings, and there is no competing item-deletion tool to confuse it with.
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?
Usage is implied by the destructive framing ('Permanently removes'), which signals caution, but there is no explicit guidance on when to delete versus alternatives such as disabling or updating an item, and no stated prerequisites or required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_getItem GetBRead-onlyIdempotent
Get items (metrics) from Zabbix.
Items are the data sources in Zabbix - they define what metrics are collected and how (protocol, interval, etc.). Each item produces a stream of values over time.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'CPU'} for substring matching. | |
| hostids | No | List of host IDs to get items from. Filters items by host. An empty list matches none. | |
| itemids | No | List of item IDs to get. Omit to return all items; an empty list matches none. | |
| groupids | No | List of group IDs to get items from hosts in those groups. An empty list matches none. | |
| webitems | No | If true, also return web scenario items (webitems=true), which Zabbix leaves out by default. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | itemid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| select_tags | No | If true, include the tags for each item in the response (selectTags=extend). | |
| templateids | No | List of template IDs to get items from those templates. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| select_hosts | No | If true, include the hosts each item belongs to in the response (selectHosts=extend). | |
| filter_params | No | Additional filter parameters for advanced filtering. | |
| select_triggers | No | If true, include the triggers for each item in the response (selectTriggers=extend). | |
| item_key_contains | No | Shortcut to search for items by key (constructs search={'key_': item_key_contains}). | |
| item_name_contains | No | Shortcut to search for items by name (constructs search={'name': item_name_contains}). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds domain context that items define collected metrics and produce value streams, but it does not add operational behavior such as pagination, permissions, or response effects. With annotations carrying the safety signal, this is adequate but not rich.
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?
The definition is front-loaded with the purpose in the first sentence and then uses two short sentences to define items. It is appropriately sized and has little waste. The extra definitional context is useful but not strictly essential.
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?
The tool has 18 parameters, but 94% schema coverage and an output schema mean the description does not need to explain parameters or return values. Annotations cover the read-only/idempotent safety profile. The missing piece is explicit guidance on when to use this tool versus related read tools such as history_get or trend_get.
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 94%, so the 18 parameters are already well documented in the schema. The description adds no parameter-specific meaning beyond the schema. A baseline 3 is appropriate when the schema does nearly all parameter explanation.
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 read verb and resource: 'Get items (metrics) from Zabbix.' The follow-up explains what items are, which helps distinguish this data-source resource from adjacent tools. However, it does not explicitly contrast with siblings such as itemprototype_get or item_update/create/delete.
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?
The description gives no explicit when-to-use guidance or alternatives. It never says when to choose item_get over history_get, trend_get, or itemprototype_get, nor when not to use it. Usage is only implied by the verb 'Get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
itemprototype_getItemprototype GetBRead-onlyIdempotent
Get item prototypes from Zabbix.
Item prototypes are template items created by discovery rules that generate actual items dynamically based on discovered entities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'CPU'}. | |
| hostids | No | List of host IDs to get item prototypes from. An empty list matches none. | |
| itemids | No | List of item prototype IDs to get. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | itemid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| discoveryids | No | List of discovery rule IDs to get prototypes from. An empty list matches none. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 useful domain context (what a prototype is and how it is produced) but says nothing about pagination behavior, the count_output mode, or result size limits that the schema hints at.
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 short sentences, front-loaded with the action, and no filler. The second sentence earns its place by disambiguating the domain term, though it is arguably the only thing beyond the name.
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 an output schema present and annotations covering safety, the description need not explain return values. But for an 11-parameter, filter-heavy list tool it omits any mention of filtering capabilities, deterministic sorting for paging, or the count-only mode, leaving a gap the schema only partially fills.
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 91%, so nearly all 11 parameters are documented inline (limit/offset paging, hostids, itemids, discoveryids, count_output, sortfield). The description adds no parameter-level meaning beyond the schema, which is the correct baseline behavior 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?
States a specific verb and resource ("Get item prototypes from Zabbix") and even explains the domain concept (template items generated by discovery rules). However, it never distinguishes itself from close siblings like item_get or discoveryrule_get, so the agent must infer the boundary.
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?
There is no explicit guidance on when to call this versus item_get, discoveryrule_get, or template_get. The only hint is the conceptual note that prototypes come from discovery rules, which implies usage but never states a selection condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
item_updateItem UpdateA
Update an existing item in Zabbix.
Modifies properties of an existing monitoring item. You can change the name, collection interval, units, or status. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New item name. | |
| delay | No | New collection interval (e.g., '30s', '5m', '1h'). | |
| units | No | New units for the values. | |
| itemid | Yes | ID of the item to update. | |
| status | No | 0=enabled, 1=disabled. | |
| description | No | New description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that only supplied fields are changed, but is silent on permissions, what happens to omitted/null fields, and failure behavior for non-existent items. No contradiction with 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 scope, then the key partial-update rule. Slightly redundant: 'Modifies properties of an existing monitoring item' restates the opening sentence without adding information.
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?
A 6-parameter mutation tool with full schema coverage, an output schema, and annotations covering the safety profile. The description is adequate; the only minor gap is that omitted-field behavior and permissions are left implicit.
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 each of the 6 parameters is already documented. The description echoes four of them (name, interval, units, status) without adding format or constraint detail beyond the schema (e.g., delay syntax '30s'/'5m' comes from the schema, not the description). 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 ('Update an existing item in Zabbix') and clarifies it modifies properties of an existing monitoring item rather than creating one. The verb alone distinguishes it from item_create/item_delete/item_get siblings, but no sibling is named explicitly.
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?
'Only specify the fields you want to change' gives useful partial-update guidance and implies the item must already exist. However, it never states prerequisites (permissions, item lifecycle state) or when to prefer item_create versus this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maintenance_createMaintenance CreateA
Create a new maintenance period in Zabbix.
Schedules a maintenance window when monitoring alerts are suppressed. Useful for planned upgrades, patching, or system maintenance without triggering false alarms.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Maintenance name. | |
| hostids | No | List of specific host IDs to apply maintenance to. | |
| groupids | No | List of host group IDs to apply maintenance to. At least one of groupids or hostids is required. | |
| active_till | Yes | End time (Unix timestamp). | |
| description | No | Optional description explaining the maintenance purpose. | |
| timeperiods | No | When maintenance actually runs, e.g. [{'timeperiod_type': 0, 'start_date': 1735689600, 'period': 3600}]. Required by Zabbix; if omitted, a single one-off period covering active_since to active_till is sent. | |
| active_since | Yes | Start time (Unix timestamp). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutating-but-non-destructive profile is covered structurally. The description's genuine addition is the effect semantics: alerts are suppressed during the window, which motivates creation. It does not mention overlap with existing maintenance, permission requirements, or that non-idempotent calls create duplicates, so a 3 is appropriate.
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 action, then the semantic explanation, then use cases. No filler or restatement of the title.
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 an output schema, full parameter documentation, and annotations present, the description only needs to supply purpose and context, which it does. Minor gaps remain around target scoping (hosts vs. groups) and scheduling edge cases, but nothing blocks a correct call.
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%, including the subtle constraint that at least one of groupids/hostids is required and the timeperiods fallback behavior, so the schema does the heavy lifting and a 3 baseline applies. The description adds no parameter-level meaning of its own — no mention of target scoping or timestamp units.
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 ('Create a new maintenance period in Zabbix') and immediately explains what that object means ('Schedules a maintenance window when monitoring alerts are suppressed'). The verb distinguishes it cleanly from maintenance_get, maintenance_update, and maintenance_delete in the sibling list.
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 when-to-use context — 'planned upgrades, patching, or system maintenance without triggering false alarms' — which tells the agent the operational scenario. It stops short of exclusions or naming alternatives (e.g. use maintenance_update to extend an existing window instead of creating a duplicate), so it is clear but not fully directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maintenance_deleteMaintenance DeleteADestructive
Delete maintenance periods from Zabbix.
Cancels maintenance windows immediately, resuming alert generation. If the maintenance period has already passed, historical event suppression is retained.
| Name | Required | Description | Default |
|---|---|---|---|
| maintenanceids | Yes | Maintenance IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true and idempotentHint=false, so the bar is lower. The description still adds genuine behavioral context beyond those flags: alert generation resumes immediately on cancel, and already-passed periods keep their historical suppression, which affects how an agent should reason about the consequences of deletion.
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 with the purpose front-loaded followed by two clauses that each carry distinct behavioral information: immediate alert resumption and retained historical suppression.
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 destructive mutation with annotations and an output schema, the description covers the essential side effects a caller must know. The only remaining gap is error behavior for invalid or not-found IDs, which is a minor omission.
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 required parameter (maintenanceids array) is documented there, so baseline is 3. The description adds nothing about batching, how nonexistent or already-deleted IDs are handled, or whether partial success is possible.
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 ('Delete maintenance periods from Zabbix'), which an agent can immediately distinguish from the maintenance_get, maintenance_create, and maintenance_update siblings. It doesn't explicitly name those alternatives, so it stops short of a 5.
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?
The description makes clear what deleting accomplishes (cancels windows, resumes alert generation), which implies when to reach for it, but it never states when-not to use it or points to maintenance_update as the way to modify rather than remove a window. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maintenance_getMaintenance GetBRead-onlyIdempotent
Get maintenance periods from Zabbix.
Maintenance windows define periods when monitoring is paused for planned upgrades, maintenance, or testing. Alerts are suppressed during maintenance periods.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| hostids | No | List of host IDs to get maintenance for. An empty list matches none. | |
| groupids | No | List of host group IDs to get maintenance for. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | maintenanceid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| maintenanceids | No | List of maintenance IDs to get. Omit to return all maintenance periods; an empty list matches none. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 useful domain semantics — that alerts are suppressed during these windows — but says nothing about result size, paging behavior, or the count_only mode, which are the operationally relevant traits.
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 action, then useful domain context. Slight redundancy between sentences two and three, but 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?
With an output schema present, well-covered parameters, and explicit read-only annotations, the description covers what remains needed. Only the routing question (why choose this over other getters) is left unanswered.
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 89%, with limit, offset, hostids, groupids, maintenanceids, sortfield, sortorder, and count_output all documented inline. The description contributes no additional parameter meaning, 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 ('Get maintenance periods from Zabbix') and clarifies what a maintenance window is. It does not explicitly contrast with maintenance_create/update/delete, but the naming makes the read-vs-write split unambiguous.
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?
Explains what maintenance windows are conceptually, but gives no guidance on when an agent should call this versus siblings such as problem_get, host_get, or maintenance_create. No exclusions, no typical triggers for invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maintenance_updateMaintenance UpdateBDestructive
Update an existing maintenance period in Zabbix.
Modifies properties of an existing maintenance window. You can change the name, start time, end time, time periods, or description. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New maintenance name. | |
| active_till | No | New end time (Unix timestamp). | |
| description | No | New description. | |
| timeperiods | No | Replaces all of the maintenance's time periods, e.g. [{'timeperiod_type': 0, 'start_date': 1735689600, 'period': 3600}]. Omit to keep them; a one-off period created for the old window is moved along with it. | |
| active_since | No | New start time (Unix timestamp). | |
| maintenanceid | Yes | ID of the maintenance to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, so the description should warn about the destructive behavior; instead it merely says time periods "can be changed" without disclosing (as the schema does) that the array replaces all existing periods. The partial-update sentence adds genuine value beyond annotations, but the destructive/idempotency implications are left undisclosed.
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?
The core action is front-loaded in the first sentence and the operative guidance is short and actionable. The second sentence ("Modifies properties of an existing maintenance window") largely restates the first, so a small amount of text does not fully 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?
An output schema exists, so return values need not be explained. But for a destructive, non-idempotent mutation the description omits the risk context an agent needs — that passing timeperiods wipes and replaces all periods, and that maintenanceid must reference an existing window.
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. The description enumerates the mutable fields (name, start time, end time, time periods, description) consistent with the schema, but adds no format, timestamp-unit, or nesting semantics beyond what the schema already documents.
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 ("Update an existing maintenance period in Zabbix") and the word "existing" implicitly separates it from maintenance_create/maintenance_delete. It stops short of naming those siblings or the maintenance_get read path, so differentiation is inferred rather than explicit.
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?
"Only specify the fields you want to change" gives useful partial-update guidance, which is real usage context. However there is no statement of when to use this versus maintenance_create, no prerequisites (permissions, whether the window must be active), and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mediatype_getMediatype GetBRead-onlyIdempotent
Get media types from Zabbix.
Media types define communication channels for sending notifications (email, SMS, webhooks, etc.). Actions use media types to deliver alerts to users and integrations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'Email'}. Zabbix 5.4 renamed the media type 'description' field to 'name'. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | mediatypeid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| mediatypeids | No | List of media type IDs to get. Omit to return all media types; an empty list matches none. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 fully covered without description help. The description adds useful domain context about media types being notification channels consumed by actions, but says nothing about result shape, paging or filtering behavior beyond what the schema provides.
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 with the retrieval statement front-loaded. The two explanatory sentences on media types are background rather than invocation guidance, but they are brief and help ground the resource without 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?
For a simple read-only list tool with 9 well-documented optional parameters and an output schema, the description plus structured fields are sufficient to call it correctly. The only real gap is routing guidance relative to sibling getters.
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 89%, so nearly every parameter is already documented in the schema (limit, offset, search, sortfield, mediatypeids all carry explanations). The description contributes no additional parameter semantics, which is acceptable at this coverage level but not value-adding.
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 ('Get media types from Zabbix') and explains what a media type is, so an agent knows exactly what this retrieves. It does not explicitly distinguish itself from sibling list tools such as action_get, though the resource noun is unambiguous.
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?
The description explains what media types are used for in Zabbix but never says when an agent should call this tool versus the many other *_get siblings, nor any preconditions or exclusions. Usage must be inferred purely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
problem_getProblem GetBRead-onlyIdempotent
Get problems from Zabbix.
Problems are active trigger states that indicate issues with monitored infrastructure. Each problem is associated with a trigger and can be acknowledged by operators.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| recent | No | If true, only return recently recovered problems. | |
| search | No | Dictionary with search criteria like {'name': 'CPU'}. | |
| hostids | No | List of host IDs to get problems from. An empty list matches none. | |
| eventids | No | List of event IDs to get problems for. Omit to return all problems; an empty list matches none. | |
| groupids | No | List of host group IDs to get problems from. An empty list matches none. | |
| objectids | No | List of trigger IDs to get problems from. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | eventid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| time_from | No | Unix timestamp. | |
| time_till | No | Unix timestamp. | |
| severities | No | Severity levels 0-5. | |
| suppressed | No | If false, return only unsuppressed problems. If true, return only suppressed problems. | |
| acknowledged | No | If false, return only unacknowledged problems. If true, return only acknowledged problems. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| name_contains | No | Shortcut to search for problems by name (constructs search={'name': name_contains}). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnly/idempotent/non-destructive annotations establish the safety profile, so the description's burden is lighter. It adds useful domain semantics — that problems are tied to triggers and are operator-acknowledgeable, hinting at a follow-up with event_acknowledge — but says nothing about pagination behavior, result size, or ordering despite a deterministic-sort requirement for paging that the schema itself flags.
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 with the core action front-loaded and no filler; the domain definition earns its place by clarifying what a 'problem' is. It could still be tighter given how little of it is actionable.
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 an output schema present and near-total parameter coverage, the description needn't explain returns or fields. But for an 18-parameter, zero-required query tool, it offers no guidance on which filters matter or how to page safely, so the agent must reconstruct calling strategy from the schema alone.
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 94%, so all 18 parameters are already documented in the schema, including paging, filtering, severity, and the name_contains shortcut. The description adds no parameter-level meaning beyond that, which is acceptable at this coverage level but earns only the baseline.
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 definition gives a specific verb and resource ("Get problems from Zabbix") and defines what a problem is — an active trigger state indicating an infrastructure issue — which implicitly distinguishes it from trigger_get or event_get. However, it does not name any sibling tool, so the agent has to infer that problems are the current-state view rather than the historical event view.
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?
The description never says when to call this tool versus event_get (event history), trigger_get (trigger definitions), or event_acknowledge (acknowledging). It gives domain context but no usage conditions, alternatives, or prerequisites, leaving the agent to infer the routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_createProxy CreateA
Create a new proxy in Zabbix.
Proxies allow distributed monitoring by collecting data from remote networks and reporting to the central Zabbix server. Useful for firewall-separated networks or high-latency connections.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Proxy name. | |
| description | No | Optional description explaining the proxy's purpose or location. | |
| operating_mode | No | 0=active, 1=passive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readonly, non-idempotent, non-destructive write, so the agent knows this mutates state. The description adds domain background about distributed monitoring but nothing beyond annotations about failure modes (duplicate name, auth requirements, TLS setup) or what is returned, which are the details a create call actually 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?
The action statement is front-loaded in the first line and the second paragraph is short explanatory context rather than filler. It is slightly verbose for a three-parameter create tool, but nothing is redundant.
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?
An output schema exists, so return values need not be explained, and all three parameters are documented, leaving the description to establish what a proxy is and why one would create it – which it does. The only real gap is post-creation behavior on naming conflicts or permissions.
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 name, optional description, and operating_mode (0=active, 1=passive) all documented in the schema. The description adds no formatting, defaults, or semantics beyond what the schema already states, so the baseline of 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 ('Create a new proxy in Zabbix') and follows with what a proxy is for, so the object is unambiguous. It does not explicitly contrast with the sibling proxy_get/proxy_update/proxy_delete, relying on the name to do that routing work.
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?
The second paragraph gives a use case ('firewall-separated networks or high-latency connections'), which hints at when this capability matters, but it never says when to choose this tool over proxy_update, proxy_get, or configuration_import, nor any prerequisites such as required permissions or name uniqueness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_deleteProxy DeleteADestructive
Delete proxies from Zabbix.
Permanently removes proxy definitions. Hosts assigned to deleted proxies will need to be reassigned to other proxies or the server. Data from deleted proxies is typically retained.
| Name | Required | Description | Default |
|---|---|---|---|
| proxyids | Yes | Proxy IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds real value beyond that: it warns that host assignments break and must be reassigned, and that proxy data is typically retained — consequences an agent cannot infer from annotations alone. It stops short of saying what happens on invalid IDs or partial batch failure.
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 action and its permanence, followed by the two operational consequences. No filler or repetition.
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?
The presence of an output schema removes the need to describe return values, and annotations cover the safety profile, so the description's coverage of permanence and host reassignment fills the main gap. A note on how to obtain proxy IDs or behavior on nonexistent IDs would make it 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% with a single required 'proxyids' array already documented as 'Proxy IDs to delete.' The description adds no format, source, or batching guidance beyond that, 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 ('Delete proxies from Zabbix') and reinforces scope with 'Permanently removes proxy definitions.' An agent can immediately distinguish this from proxy_get, proxy_create, and proxy_update in the sibling list.
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?
Usage is implied by the destructive verb, but the description never states when to use this versus alternatives (e.g., proxy_update to repoint a proxy) or that proxy IDs must first be obtained via proxy_get. No explicit prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_getProxy GetCRead-onlyIdempotent
Get proxies from Zabbix.
Proxies act as data collection points for Zabbix, allowing monitoring of remote networks without direct connectivity. Proxies collect data locally and report to the Zabbix server.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'proxy1'}. Zabbix 7.0 renamed the proxy 'host' field to 'name' and rejects the old one. | |
| proxyids | No | List of proxy IDs to get. Omit to return all proxies; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | proxyid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 structurally. The description adds only encyclopedic context about what proxies do; it says nothing about pagination behaviour, result ordering, whether an empty proxyids list matches nothing, or which Zabbix version quirks apply — all of which are behavioural and would warrant credit.
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 in the first four words, then three short sentences with no redundancy. The two explanatory sentences are optional background rather than wasted space, but they push the operational content out of the way slightly.
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?
Output schema exists and annotations cover safety, so the description does not need to explain return values. However, for a 9-parameter paged list tool with a version-dependent search field, the description leaves the agent without any operational framing beyond a definition of proxies.
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 89%, so the schema already carries the parameter meaning (limit/offset defaults, search rename from host to name in 7.0, empty-list semantics). The description adds nothing about any of the 9 parameters, so the baseline 3 applies rather than a higher score.
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 ('Get proxies from Zabbix') and follows with a plain-language definition of what a proxy is, so an agent unfamiliar with Zabbix can place the resource. It does not explicitly contrast itself with proxy_create/proxy_update/proxy_delete, though the read-only verb makes the distinction easy to infer.
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?
There is no guidance on when to call this versus other retrieval tools, no mention of the paging pattern (limit/offset/sortfield), no guidance on proxyids vs search vs filter_params, and no mention of when count_output should be preferred. The only 'usage' content is domain background, not invocation routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proxy_updateProxy UpdateA
Update an existing proxy in Zabbix.
Modifies properties of an existing proxy. You can change the name, operating mode, or description. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New proxy name/hostname. | |
| proxyid | Yes | ID of the proxy to update. | |
| description | No | New description. | |
| operating_mode | No | 0=active, 1=passive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds real context beyond them: unspecified fields are left unchanged, which tells the agent this is a safe partial mutation. It omits consequences the agent would want, such as what happens to hosts assigned to a proxy when operating_mode flips, or name-uniqueness constraints.
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?
Short and front-loaded, with the action stated in the first sentence. The second sentence partly restates the first ("Modifies properties of an existing proxy"), costing a little redundancy, but overall it is compact.
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 four-parameter mutation with full schema coverage, annotations, and an output schema, the description covers what the tool does and how minimally to call it. Only the side effects of a proxy-mode change are left unexplained, which 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 the schema already documents all four parameters including the 0=active/1=passive encoding. The description restates the same field list (name, operating mode, description) without adding format, constraints, or edge-case meaning 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?
Names a specific verb and resource ("Update an existing proxy in Zabbix") and enumerates the mutable fields, so the agent knows exactly what changes. It does not explicitly contrast with proxy_create/proxy_delete/proxy_get siblings, though the verb alone makes the distinction fairly obvious.
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?
"Only specify the fields you want to change" gives useful partial-update guidance that implies this is an edit-in-place operation. However, there is no statement of prerequisites (proxy must already exist, valid proxyid), no exclusions, and no explicit routing to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_executeScript ExecuteBDestructive
Execute a script on a host in Zabbix.
Runs a custom script on a specified host. Used for executing remediation tasks, configuration changes, or diagnostic commands remotely.
| Name | Required | Description | Default |
|---|---|---|---|
| hostid | Yes | Host ID to execute the script on. | |
| scriptid | Yes | Script ID to execute. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the risk profile is known. The description adds useful context that this runs arbitrary commands remotely for remediation or configuration changes, which is consistent with the annotations, but it does not warn about irreversibility, permission requirements, or that results depend entirely on the script's contents. It adds some value over the annotations without being rich behavioral detail.
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 short sentences with the core action front-loaded. The second sentence earns its place by narrowing the action domain, though it partially restates the first and could be merged.
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?
An output schema exists, so return values need not be explained, and parameters are fully covered by the schema. However, for a destructive remote-execution tool the description omits key operational caveats — prerequisite of a pre-existing script, execution target type (agent/proxy/server), permission requirements, and whether the call is asynchronous. These are material gaps for correct invocation.
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 both required parameters (hostid and scriptid), so the schema fully documents them. The description adds no format, source, or discovery hints (e.g., where to obtain a valid scriptid) beyond what the schema provides. Baseline 3 applies when the schema carries the parameter burden.
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 and resource ("Execute a script on a host in Zabbix") that clearly separates it from script_get, the only script-related sibling. The second sentence reinforces scope by naming the kinds of actions performed. It stops short of explicitly contrasting itself with siblings, so it lands at 4 rather than 5.
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?
"Used for executing remediation tasks, configuration changes, or diagnostic commands remotely" implies the usage context, but there is no explicit when-to-use versus when-not, no mention that the script must already be defined in Zabbix, and no guidance on prerequisites such as permissions or target host type. The agent must infer these from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
script_getScript GetBRead-onlyIdempotent
Get scripts from Zabbix.
Scripts are custom automation routines that can be executed on monitored hosts or the server. They can be triggered manually or by actions to automate remediation or configuration tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'restart'}. | |
| hostids | No | List of host IDs to get scripts for. An empty list matches none. | |
| groupids | No | List of group IDs to get scripts for hosts in those groups. An empty list matches none. | |
| scriptids | No | List of script IDs to get. Omit to return all scripts; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | scriptid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered structurally. The description adds useful domain framing about what scripts are used for, but says nothing about permissions, return volume, or paging behavior beyond what annotations and schema already give.
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 action in one short sentence; the follow-up definition of scripts is relevant domain context. Slightly padded — the second sentence could be trimmed — but nothing is misleading or wasteful.
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 11 parameters, an output schema present, and rich schema descriptions, the definition is functionally sufficient to call the tool. However, for a list tool with search/host/group filtering, the description gives no hint that these filtering capabilities exist, leaving the agent to discover them purely from the schema.
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 91%, so nearly every parameter (limit, offset, search, hostids, groupids, scriptids, sortfield, count_output) is already documented in the schema. The description adds no parameter-level meaning, which is the baseline-3 case when the schema carries the load.
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 clear verb and resource ('Get scripts from Zabbix') and adds a definition of what a script is. An agent can tell this is a read/list operation on scripts, but the description never distinguishes it from the sibling 'script_execute', which is the key ambiguity an agent faces here.
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?
No guidance on when to use this versus 'script_execute' or any other sibling, and no mention of the filtering/paging behavior that would tell an agent how to narrow a query. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_getService GetBRead-onlyIdempotent
Get services from Zabbix.
Services represent business capabilities or applications (e.g., 'Web Application', 'Database'). Services can depend on other services, creating hierarchies for tracking dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'API'}. | |
| parentids | No | List of parent service IDs to get child services from. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | serviceid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| serviceids | No | List of service IDs to get. Omit to return all services; an empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful domain context about service hierarchies, but does not disclose operational behavior such as pagination, auth requirements, or response shape beyond what the schema and output schema provide.
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?
The description is short, front-loaded, and appropriately sized. The first sentence identifies the operation, and the following sentences explain the resource domain. The generic service explanation is useful but not strictly necessary, keeping it just below maximally concise.
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 10 optional parameters, 90% schema description coverage, an output schema, and read-only annotations, the description does not need to restate parameter or return details. It could be more complete by mentioning paging/counting or when to choose this over other retrieval tools, but the structured metadata covers most requirements.
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 90%, so the schema already documents nearly all parameters, including limit, offset, search, parentids, serviceids, sortfield, sortorder, and count_output. The description adds no parameter-specific meaning beyond the schema, which is acceptable at the baseline for high-coverage schemas.
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 description states a specific verb and resource: 'Get services from Zabbix.' It also clarifies that services are business capabilities/applications and can form dependency hierarchies, which helps distinguish this from other *_get tools. It does not explicitly name sibling alternatives, so it falls short of a 5.
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?
The description says what the tool retrieves but gives no explicit guidance on when to use it versus alternatives, nor when to use specific parameters such as parentids, search, count_output, or paging options. Usage is only implied by the tool name and resource domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sla_getSla GetCRead-onlyIdempotent
Get SLAs from Zabbix.
Service Level Agreements (SLAs) define uptime and availability targets for services. They track compliance with service objectives and generate reports on availability.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'name': 'Website'}. | |
| slaids | No | List of SLA IDs to get. Omit to return all SLAs; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | slaid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| serviceids | No | List of service IDs to get SLAs for. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is fully covered structurally. The description adds only background about what SLAs conceptually are, not how the tool behaves — nothing about paging, the count_output mode, sort determinism, or response shape (even though an output schema exists, the paging/count interaction is behavioral context the schema's parameter docs only partially cover).
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?
The lead sentence is front-loaded and useful; the two following sentences are domain tutorial content that doesn't help an agent invoke the tool. Appropriately short, but with waste.
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 an output schema and near-complete parameter docs, an agent can call this correctly. What's missing is the sibling routing context (service_get vs sla_get) and any behavioral note on the two output modes.
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 90%, so limit, offset, slaids, serviceids, count_output and sortfield are already well documented in the schema. The description adds no parameter meaning beyond that; 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 ("Get SLAs from Zabbix") and the definitional sentence clarifies what an SLA is. However, it does nothing to distinguish this from the closely-related sibling service_get, which also retrieves availability objects.
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?
There is no indication of when to use this versus service_get, nor any prerequisite or exclusion guidance. The only implied usage is 'retrieve SLAs', which the name already conveys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_createTemplate CreateB
Create a new template in Zabbix.
Templates define the monitoring configuration (items, triggers, graphs) that can be reused across multiple hosts. Creating custom templates enables standardized monitoring for specific applications or server types.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Technical name of the template. | |
| name | No | Template name (required). Example: 'Apache Web Server', 'PostgreSQL Database'. Should describe what the template monitors. | |
| groups | Yes | Template groups the template belongs to, e.g. [{'groupid': '10'}]. Since Zabbix 6.2 these are template groups, not host groups. | |
| description | No | Optional template description explaining its purpose and use. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so the write nature is covered, but the description adds no behavioral context beyond that. It does not mention that repeated calls create duplicates, that the 'host' technical name must be unique, or what happens when a group id is invalid.
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 in the first sentence, with the explanatory paragraph following. The conceptual explanation is slightly verbose for a tool definition but not wasteful.
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 annotations, an output schema, and full schema coverage, the structured data covers most needs, but for a non-idempotent create operation the description omits uniqueness constraints and group-existence prerequisites, leaving a meaningful 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 the four parameters are fully documented in the schema, and the description adds no parameter-level detail. Baseline 3 applies when the schema carries the burden.
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 ('Create a new template in Zabbix') and clarifies what a template is, making it easy to distinguish from template_get, template_update, and template_delete. The second paragraph adds domain meaning without obscuring the action.
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?
The description explains why templates are useful but never states when to choose this tool over siblings (e.g., template_update for existing templates), nor does it mention prerequisites such as groups needing to exist first. Usage is only inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_deleteTemplate DeleteADestructive
Delete templates from Zabbix.
Permanently removes one or more templates. Hosts that have the deleted templates applied will lose those template's items, triggers, and graphs. The hosts themselves remain unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| templateids | Yes | Template IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds substantial behavioral context beyond those flags: deletion is permanent, applied hosts lose the template's items, triggers, and graphs, but the hosts themselves remain. This is exactly the kind of impact disclosure an agent needs for a destructive operation.
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?
The description is three short sentences with the core action front-loaded. Every sentence adds value, especially the cascade impact note, and there is no redundant boilerplate.
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 destructive template-deletion tool with complete input schema coverage, annotations, and an output schema, the description supplies the critical behavioral detail an agent would otherwise lack: permanence and downstream effects on hosts. Nothing essential to correct invocation 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 the single parameter 'templateids' is already documented as an array of template IDs. The description's phrase 'one or more templates' is consistent with the schema but does not add meaningful syntax or usage detail beyond it. Baseline 3 is appropriate when the schema carries the parameter documentation.
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 description states a specific verb and resource: delete templates from Zabbix. It is clearly distinguishable from sibling tools such as template_get, template_create, and template_update. The additional sentence about permanent removal reinforces rather than obscures the purpose.
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?
The description makes the use case clear: permanently removing one or more templates. It does not explicitly name alternatives like template_update for non-destructive changes, but the deletion context is unambiguous. The warning about affected hosts gives useful context for when caution is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_getTemplate GetBRead-onlyIdempotent
Get templates from Zabbix.
Templates are reusable collections of items, triggers, and graphs that can be applied to hosts. They standardize monitoring across multiple servers with the same role.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Substring search in template name. Matches partial names like 'Linux' finds 'Linux Server Template'. | |
| hostids | No | Return only templates linked to these hosts. An empty list matches none. | |
| groupids | No | Return only templates in these template groups. An empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | host |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| select_tags | No | If true, include the tags for the templates (selectTags=extend). | |
| templateids | No | List of template IDs to get. Omit to return all templates; an empty list matches none. Find template IDs with a search or from host associations. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| select_hosts | No | If true, include the hosts that are linked to the templates (selectHosts=extend). | |
| select_groups | No | If true, include the template groups the templates belong to (selectTemplateGroups=extend). | |
| select_macros | No | If true, include the macros for the templates (selectMacros=extend). | |
| select_templates | No | If true, include the templates that are linked to these templates directly (selectTemplates=extend). | |
| template_name_contains | No | Shortcut to search for templates by name (constructs search={'host': template_name_contains}). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds domain context about what templates are, but does not disclose operational details like pagination behavior, default result size, or that count_output changes the return type. Given annotation coverage, a 3 is appropriate.
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?
The purpose is front-loaded in the first sentence. The second and third sentences are definitional rather than behavioral, which is mildly extraneous for a retrieval tool but still useful context for agents unfamiliar with Zabbix templates.
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 a 16-parameter schema, an output schema present, and safety annotations, the structured fields compensate for much of the description's brevity. Still, the description does not mention filtering, sorting, or selection capabilities at all, which is a notable gap for a tool of this complexity.
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 94%, so the schema already documents nearly all of the 16 parameters in detail. The description itself provides no parameter-specific semantics, so the baseline of 3 applies when the schema does the heavy lifting.
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 clear verb and resource: 'Get templates from Zabbix.' An agent can distinguish this from write siblings like template_create/template_update by the verb. However, it does not explicitly differentiate from other read tools such as host_get or item_get, relying on the resource name alone.
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?
The description offers no guidance on when to use this tool versus alternatives, nor any conditions or exclusions. It does not mention the available filtering modes (templateids, hostids, groupids, search) or when to prefer one over another, leaving the agent to infer usage entirely from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_updateTemplate UpdateA
Update an existing template in Zabbix.
Modifies properties of an existing template. You can change the name or description. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New template name. | |
| templateid | Yes | ID of the template to update. | |
| description | No | New template description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that only name and description are editable and supports partial updates, but it does not mention permissions, side effects, or response behavior.
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?
The description is short and front-loaded with the core action. It has mild redundancy between "Update an existing template" and "Modifies properties of an existing template," but remains efficient.
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?
Given the presence of an output schema, full parameter schema coverage, and annotations, the description is largely complete for a simple mutation tool. It could mention required templateid or permissions, but those are reasonably covered by structured data.
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 parameter documentation is already strong. The description adds useful semantic context by naming the editable fields and clarifying that unspecified fields should be omitted during partial updates.
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: update an existing Zabbix template. It clearly distinguishes mutation from template_get/create/delete by saying "existing" and naming the editable properties, though it does not explicitly route to sibling tools.
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?
Provides partial-update guidance with "Only specify the fields you want to change," which implies how to use optional fields. However, it does not state when to use this versus template_create or template_get, nor does it mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trend_getTrend GetARead-onlyIdempotent
Get trend data from Zabbix.
Trends are aggregated (summarized) historical data providing min/max/average values at hour-long intervals. Trends use less storage than raw history while preserving statistical information for long-term analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| itemids | Yes | Item IDs to get trends for. | |
| time_from | No | Unix timestamp to get trends from this time onwards. | |
| time_till | No | Unix timestamp to get trends up to this time. | |
| count_output | No | If true, returns only the count of matched objects as an integer. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's real contribution is disclosing that results are aggregated at hour-long intervals with min/max/average stats rather than point samples. That granularity disclosure materially affects how an agent interprets returned values. It omits pagination/limit behavior, but the schema 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?
Two sentences, front-loaded with the action and followed by the definitional context that justifies the tool's existence. The second sentence earns its place by explaining why trends exist, though it could be trimmed slightly without loss.
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?
Output schema and full parameter documentation are present, annotations cover safety, so the description only needed to explain purpose and data semantics — which it does. An agent can correctly decide to call this and understand the shape of the data (hourly aggregates) without further context.
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 five well-documented parameters, so the schema already carries the semantics of itemids, time_from, time_till, limit, and count_output. The description adds no parameter-level meaning (e.g., that time_from/time_till filter the aggregation window), which is the correct baseline of 3 given full schema coverage.
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+resource ('Get trend data from Zabbix') and then defines what a trend actually is (aggregated min/max/average at hour-long intervals), which effectively separates it from history_get without naming it. It stops short of explicitly naming the sibling alternative, so it is clear but not fully differentiated.
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?
Usage is only implied: the note that trends use less storage than raw history for 'long-term analysis' hints that this tool is for coarse/long-range queries and history_get for raw detail, but no explicit when-to-use or when-not-to-use statement is given. An agent must infer the boundary with history_get from a passing phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_createTrigger CreateC
Create a new trigger in Zabbix.
Triggers define the conditions under which problems are detected. They use expressions to evaluate item values and determine when to transition from normal to problem state.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | 0=enabled, 1=disabled. | |
| comments | No | Optional comment/notes about the trigger explaining its purpose and context. | |
| priority | No | Severity 0-5. | |
| expression | Yes | Trigger expression. | |
| description | Yes | Trigger description/name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is a non-read-only, non-idempotent, non-destructive mutation. The description does not add meaningful behavioral detail such as permission requirements, duplicate-handling behavior, validation rules, or side effects, though it does stay consistent with the 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?
The description is short and front-loaded, with the purpose stated in the first sentence and supporting domain context in the second. It is appropriately sized, though the second sentence is useful background rather than strictly necessary invocation guidance.
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 full schema coverage, annotations, and an output schema, the description does not need to explain parameters or return values. However, for a create/mutation tool it still lacks context around permissions, uniqueness, or what happens when a duplicate trigger is created, leaving some behavioral gaps.
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 schema already documents every parameter, including status, priority, expression, and description. The description adds no parameter-specific meaning beyond what the schema provides, making the baseline score of 3 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?
The description clearly states the specific verb and resource: "Create a new trigger in Zabbix." It adds a concise explanation of what triggers are, but does not explicitly distinguish this tool from nearby siblings such as trigger_update or trigger_get, so it falls just short of a 5.
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?
The description implies that this tool is for new triggers rather than updates, but it gives no explicit guidance on when to use it versus trigger_update or trigger_get. It also does not mention prerequisites, exclusions, or common call conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_deleteTrigger DeleteADestructive
Delete triggers from Zabbix.
Permanently removes one or more triggers. Hosts will no longer generate alerts for these conditions. Historical trigger data and associated problems are typically retained.
| Name | Required | Description | Default |
|---|---|---|---|
| triggerids | Yes | Trigger IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds useful behavioral context: removal is permanent, hosts stop generating alerts for the conditions, and historical trigger data/problems are typically retained. It does not cover permissions or error behavior for repeated deletion, but it meaningfully supplements the 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?
The description is three short sentences, front-loaded with the core action and followed by consequences. Every sentence adds relevant information with no wasted text.
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?
An output schema exists, so return values need not be explained. Given the destructive annotations and the description's explanation of permanence, alert impact, and data retention, the definition is complete for a one-parameter delete tool.
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?
There is only one parameter, triggerids, and the schema description coverage is 100%, so the schema already documents it fully. The description does not add syntax or format details beyond what the schema provides, making the baseline 3 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?
The description states a specific verb and resource: delete triggers from Zabbix. It also clarifies that this permanently removes one or more triggers, distinguishing it from trigger_get, trigger_create, and trigger_update.
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?
Usage is implied by the destructive delete action, but the description does not explicitly say when to use this tool versus alternatives such as updating or disabling a trigger. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_getTrigger GetCRead-onlyIdempotent
Get triggers from Zabbix.
Triggers are rules that define when a problem occurs based on item values. They evaluate expressions against collected metrics and transition between problem and normal states.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'description': 'CPU'}. | |
| hostids | No | List of host IDs to get triggers from. An empty list matches none. | |
| groupids | No | List of group IDs to get triggers from hosts in those groups. An empty list matches none. | |
| only_true | No | Only return triggers in problem state. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | triggerid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| triggerids | No | List of trigger IDs to get. Omit to return all triggers; an empty list matches none. | |
| templateids | No | List of template IDs to get triggers from those templates. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| min_severity | No | Minimum severity (0-5). | |
| select_hosts | No | If true, include the hosts each trigger belongs to in the response (selectHosts=extend). | |
| filter_params | No | Additional filter parameters for advanced filtering. | |
| description_contains | No | Shortcut to search for triggers by description (name) (constructs search={'description': description_contains}). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 only domain background (triggers evaluate expressions and transition between problem/normal states), not operational behavior such as pagination semantics, volume expectations, or how counts are returned.
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 short sentences, front-loaded with the action. The second sentence is domain education rather than routing information, but it does help an agent interpret results, so it mostly 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?
With an output schema and rich annotations, the description needn't explain return values, and the schema documents 16 parameters well. What is missing is the selection guidance an agent needs to choose this tool over its many read-oriented siblings.
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 94%, so the schema already explains limit, offset, filters, min_severity, count_output and the rest. The description contributes no additional parameter meaning beyond that, 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 ("Get triggers from Zabbix") and adds a definition of what a trigger is. It is clearly a read/list operation, distinguishable from trigger_create/update/delete siblings by the verb, though it never contrasts with sibling read tools like problem_get or event_get.
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?
There is no explicit when-to-use guidance: nothing says when to prefer trigger_get over problem_get or event_get, nor when to use only_true or filters. Usage is only implied by the tool name and the parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_updateTrigger UpdateA
Update an existing trigger in Zabbix.
Modifies properties of an existing trigger. You can change the description, expression, priority, status, or comments. Only specify fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | 0=enabled, 1=disabled. | |
| comments | No | New comments/notes. | |
| priority | No | New severity level (0-5). | |
| triggerid | Yes | ID of the trigger to update. | |
| expression | No | New trigger expression. | |
| description | No | New trigger name/description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds partial-update semantics ('only specify fields you want to change'), which is useful beyond the annotations. However, with readOnlyHint=false and idempotentHint=false, it does not disclose whether changes take effect immediately, permission requirements, or what happens if no fields are supplied.
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?
The description is short and front-loaded, with the partial-update rule at the end. The first two sentences are somewhat redundant ('Update an existing trigger' / 'Modifies properties of an existing trigger'), but there is no significant waste.
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?
Given the output schema exists, the rich parameter descriptions, and the annotations, the description is nearly complete for a partial-update tool. It could be stronger by mentioning required triggerid or side effects, but the essential call semantics are present.
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. The description lists the changeable fields (description, expression, priority, status, comments) and reinforces that only desired fields should be sent, but it adds no per-parameter 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 description gives a specific verb and resource ('Update an existing trigger in Zabbix') and clarifies scope with 'Modifies properties of an existing trigger.' It implicitly distinguishes update from sibling trigger_create/trigger_get/trigger_delete, but never explicitly names or contrasts those siblings.
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?
The phrase 'Only specify fields you want to change' gives useful guidance for partial updates, but the description does not explicitly say when to use this tool versus trigger_create, trigger_get, or trigger_delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_createUser CreateB
Create a new user in Zabbix.
Creates a new user account with specified credentials, role and group membership.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | User's first name (optional). | |
| passwd | Yes | Password. | |
| roleid | No | ID of the user's role, which is what grants permissions. Defaults to '1' (User role); a user created without one gets roleid 0 and cannot log in. | 1 |
| surname | No | User's last name (optional). | |
| usrgrps | Yes | User groups [{'usrgrpid': '1'}]. | |
| username | Yes | Username. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that it creates a user account with credentials, role, and group membership, but does not disclose duplicate-username behavior, permission requirements, or authentication implications beyond what the schema provides.
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?
The description is short and front-loaded with the core action. The second sentence partially restates the first but does add the account-composition details, so there is minor redundancy rather than verbosity.
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?
The tool has rich structured context: 100% schema description coverage, annotations covering mutation safety, and an output schema. Given that support, the description is sufficient to identify the tool as a user-creation operation, though it could mention duplicate handling or required group semantics more explicitly.
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 schema already documents all parameters in detail. The description maps at a high level to credentials, role, and group membership, but adds no syntax, format, or default-value information 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 description uses a specific verb and resource: "Create a new user in Zabbix." It also clarifies that the created account includes credentials, role, and group membership. It does not explicitly distinguish itself from siblings like user_update or user_delete, but the create purpose is unambiguous.
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?
The description states what the tool does but gives no guidance on when to use it versus alternatives such as user_update or user_get. It also omits prerequisites, exclusions, or warnings about duplicate usernames.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_deleteUser DeleteADestructive
Delete users from Zabbix.
Permanently removes user accounts from the system. The user's access will be immediately revoked. Historical data and previous actions by the user are retained for audit purposes.
| Name | Required | Description | Default |
|---|---|---|---|
| userids | Yes | User IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known; the description still adds real value by disclosing consequences — immediate access revocation and that historical data/audit trails survive the deletion. The only unaddressed trait is multi-ID behavior (all-or-nothing vs partial failure), which is relevant given the array parameter.
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?
Four short sentences, front-loaded with the action, then the permanence warning, then the audit-retention note. Nothing is repeated and no sentence is 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 destructive tool with full annotation coverage, a complete schema, and an output schema, the description covers purpose and consequences adequately. The missing piece is failure/partial-success behavior when several IDs are passed, which matters for a batch delete.
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 'userids' array is already documented as 'User IDs to delete', so the schema carries the burden. The description adds nothing about batch semantics or how multiple IDs are handled, so 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?
The description opens with a specific verb+resource ('Delete users from Zabbix') and elaborates that accounts are permanently removed, which clearly separates it from user_get, user_create, and user_update. It stops short of explicitly naming the non-destructive alternative (disabling via user_update), which is the one ambiguity an agent could face.
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?
Usage is implied rather than stated: 'Permanently removes' and 'access will be immediately revoked' telegraph that this is a last-resort operation, but there is no explicit when-to-use/when-not or pointer to siblings. An agent must infer that user_update is the reversible alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_getUser GetBRead-onlyIdempotent
Get users from Zabbix.
Users represent people with access to the Zabbix system. Each user has authentication credentials and permission level determining what they can view and modify.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'username': 'admin'}. Zabbix 5.4 renamed 'alias' to 'username' and rejects the old name. | |
| userids | No | List of user IDs to get. Omit to return all users; an empty list matches none. | |
| sortfield | No | Field to sort by. A deterministic sort is required for paging to be consistent. | userid |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| filter_params | No | Additional filter parameters for advanced filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds domain context about what Zabbix users represent, but does not disclose additional behavior such as pagination, filtering behavior, or authentication 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?
The description is short and front-loads the core action: 'Get users from Zabbix.' The second sentence adds useful domain context but is not operationally necessary for invoking the tool.
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?
Given the rich input schema, output schema, and read-only/idempotent annotations, the description is largely complete for a retrieval tool. It establishes the resource and its meaning, though it omits usage guidance and does not mention filtering or paging behavior already covered by the schema.
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 high at 89%, so the schema already documents most parameters. The description does not add any parameter-level meaning beyond what the schema provides, which is the baseline expectation when schema coverage is high.
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 description states a specific verb and resource: 'Get users from Zabbix.' It clearly identifies the user entity and its domain meaning, but does not explicitly differentiate this retrieval tool from sibling user tools such as user_create, user_update, or user_delete.
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?
The description gives no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. Usage is only implied by the verb 'Get' and the resource 'users'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usermacro_createUsermacro CreateB
Create a new host macro in Zabbix.
Host macros define custom variables for specific hosts. They can be referenced in items and triggers using {$MACRO_NAME} syntax, allowing dynamic configuration without editing items.
| Name | Required | Description | Default |
|---|---|---|---|
| macro | Yes | Macro name (e.g., {$MYMACRO}). | |
| type_ | No | 0=text, 1=secret, 2=vault. | |
| value | Yes | Macro value. | |
| hostid | Yes | Host ID for the macro. | |
| description | No | Optional description explaining the macro's purpose. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds useful conceptual context (macros are referenced via {$MACRO_NAME} in items/triggers), but omits what happens on duplicate macro names, secret/vault value handling, or permission requirements implied by type_=1/2.
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?
The action is front-loaded in the first sentence, followed by a short explanatory paragraph about macro reference syntax. Nothing is padded, though the second paragraph is context rather than invocation guidance.
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?
An output schema exists, so return values need not be described, and the schema fully documents parameters. Remaining gaps are duplicate-name behavior and error modes for a non-idempotent create, which would be nice but are not essential to invoke 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%, so all five parameters, including the type_ enum meaning and macro format, are documented in the schema. The description reinforces the {$MACRO_NAME} convention but adds no semantics beyond what the schema already provides.
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 ("Create a new host macro in Zabbix") and clarifies the host-level scope, which distinguishes it from generic macro handling. It does not explicitly contrast with sibling usermacro_get/usermacro_delete, but the create intent is unambiguous.
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?
There is no statement of when to use this versus usermacro_get, usermacro_delete, host_create, or template/global-level macros. The only implied guidance is the word "host" scoping the macro level; no prerequisites, exclusions, or alternative-routing advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usermacro_deleteUsermacro DeleteADestructive
Delete host macros from Zabbix.
Permanently removes host-level macro definitions. Items and triggers using this macro will no longer be able to reference it, potentially causing parsing errors.
| Name | Required | Description | Default |
|---|---|---|---|
| hostmacroids | Yes | Host macro IDs to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety bar is low. The description earns credit by adding real downstream context the annotations cannot convey: dependent items and triggers lose the reference and may hit parsing errors, which is exactly the kind of impact an agent needs before calling a destructive tool.
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 tight sentences: the action first, then the blast radius. Nothing is repeated from the annotations or schema and nothing is wasted.
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?
An output schema exists so return values need no explanation, and the destructive nature plus dependent-object impact is covered. The only missing piece is how to source valid macro IDs (e.g., usermacro_get) before deletion, a small gap for a single-param destructive tool.
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?
There is only one parameter (hostmacroids) with 100% schema coverage, so the schema already carries its meaning. The description adds nothing about format or where these IDs come from, which is the correct baseline when the schema is complete.
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 ('Delete host macros from Zabbix') and clarifies it is host-level macros, so there's no ambiguity about scope. It does not explicitly distinguish itself from usermacro_get/usermacro_create, but the verb makes the distinction evident.
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?
The consequence sentence implies when to be careful, but there is no explicit guidance on when to delete versus update a macro, or that IDs should first be obtained via usermacro_get. Usage is implied rather than instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usermacro_getUsermacro GetCRead-onlyIdempotent
Get user macros from Zabbix.
User macros are variables that can be referenced in items, triggers, and scripts. They allow parameterization of monitoring configurations with custom values.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 100. | |
| offset | No | Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response. | |
| output | No | extend | |
| search | No | Dictionary with search criteria like {'macro': '{$THRESHOLD}'}. | |
| hostids | No | List of host IDs to get macros from. An empty list matches none. | |
| sortfield | No | Field to sort by. usermacro.get only allows 'macro'. | macro |
| sortorder | No | Sort direction - 'ASC' or 'DESC'. | ASC |
| globalmacro | No | Return global macros. | |
| templateids | No | List of template IDs to get macros from. An empty list matches none. | |
| count_output | No | If true, returns only the count of matched objects as an integer. | |
| hostmacroids | No | List of host macro IDs to get. An empty list matches none. | |
| filter_params | No | Additional filter parameters for advanced filtering. | |
| globalmacroids | No | List of global macro IDs to get. An empty list matches none. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only a conceptual definition of user macros and does not disclose behavior beyond 'get', such as pagination, count-only mode, or host/global/template macro scoping.
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?
The description is short and front-loaded with the core action: getting user macros. The second sentence is useful context but not strictly necessary for invocation, so it is efficient though slightly under-specified for a 13-parameter tool.
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?
An output schema exists and the input schema is richly annotated, so return format and most parameter details need not be repeated. However, for a 13-parameter tool with global, host, and template macro modes, the description is thin on how to choose among those modes and when to use filtering or count-only behavior.
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 92%, so the input schema already documents nearly all parameters in detail. The description does not add any parameter-specific meaning beyond the schema, but the baseline is 3 when schema coverage is this high.
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 description states a clear verb and resource: 'Get user macros from Zabbix.' It also explains what user macros are, which helps an agent understand the object. However, it does not explicitly distinguish this tool from sibling operations such as usermacro_create or usermacro_delete.
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?
The description gives no guidance on when to use this tool versus alternatives, nor does it mention important usage distinctions such as global macros versus host/template macros. It simply says it gets user macros, leaving all invocation context to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_updateUser UpdateB
Update an existing user in Zabbix.
Modifies properties of an existing user account. You can change name, surname, password, or role. Only specify the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New first name. | |
| passwd | No | New password. | |
| roleid | No | ID of the user's role, which is what grants permissions. Roles are objects in Zabbix 5.2+; the old numeric user 'type' no longer exists. | |
| userid | Yes | ID of the user to update. | |
| surname | No | New last name. | |
| username | No | New username (not recommended - can cause issues). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds nothing beyond that: no mention of required permissions, what happens when a password or role is changed, or whether the operation can be reverted. It largely restates the name and 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?
Three short sentences, front-loaded with the core action and ending with the partial-update rule. The second sentence mostly restates the first, costing a little density but no real confusion.
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?
An output schema exists, so return values need not be explained, and the schema is fully documented. Still, for a user-account mutation an agent would benefit from knowing about permission requirements and side effects of password or role changes, which are 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 each parameter is already documented in detail, including the caveat about username. The description's field list adds no syntax or constraint information beyond the schema, so 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 ('Update an existing user in Zabbix') and enumerates the mutable fields, so the tool's job is unambiguous. It stops short of naming sibling tools like user_create or user_delete, which the names make fairly obvious anyway.
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?
'Only specify the fields you want to change' usefully describes partial-update semantics and implies that userid is required and everything else optional. There is no explicit guidance on when to prefer this over user_create or on prerequisites such as admin permissions.
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.
23 tool updates
v0.7.1- Changed
action_get3 fields changed- changed
Input schema / properties / actionids / descriptionPrevious value: -"List of action IDs to get. If empty, returns all actions."New value: +"List of action IDs to get. Omit to return all actions; an empty list matches none." - changed
Input schema / properties / groupids / descriptionPrevious value: -"List of host group IDs to get actions for."New value: +"List of host group IDs to get actions for. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get actions for."New value: +"List of host IDs to get actions for. An empty list matches none."
- Changed
discoveryrule_get3 fields changed- changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get discovery rules from."New value: +"List of host IDs to get discovery rules from. An empty list matches none." - changed
Input schema / properties / itemids / descriptionPrevious value: -"List of item IDs (discovery rules are items) to get."New value: +"List of item IDs (discovery rules are items) to get. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get discovery rules from."New value: +"List of template IDs to get discovery rules from. An empty list matches none."
- Changed
drule_get1 field changed- changed
Input schema / properties / druleids / descriptionPrevious value: -"List of network discovery rule IDs to get. If empty, returns all rules."New value: +"List of network discovery rule IDs to get. Omit to return all rules; an empty list matches none."
- Changed
event_get4 fields changed- changed
Input schema / properties / eventids / descriptionPrevious value: -"List of event IDs to get. If empty, returns all events."New value: +"List of event IDs to get. Omit to return all events; an empty list matches none." - changed
Input schema / properties / groupids / descriptionPrevious value: -"List of host group IDs to get events from."New value: +"List of host group IDs to get events from. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get events from."New value: +"List of host IDs to get events from. An empty list matches none." - changed
Input schema / properties / objectids / descriptionPrevious value: -"List of trigger IDs to get events from."New value: +"List of trigger IDs to get events from. An empty list matches none."
- Changed
graph_get3 fields changed- changed
Input schema / properties / graphids / descriptionPrevious value: -"List of graph IDs to get. If empty, returns all graphs."New value: +"List of graph IDs to get. Omit to return all graphs; an empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get graphs from."New value: +"List of host IDs to get graphs from. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get graphs from."New value: +"List of template IDs to get graphs from. An empty list matches none."
- Changed
host_get4 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"List of host group IDs to filter by."New value: +"List of host group IDs to filter by. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to retrieve."New value: +"List of host IDs to retrieve. An empty list matches none." - changed
Input schema / properties / proxyids / descriptionPrevious value: -"List of proxy IDs to filter by."New value: +"List of proxy IDs to filter by. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to filter by."New value: +"List of template IDs to filter by. An empty list matches none."
- Changed
host_update3 fields changed- added
Input schema / properties / proxyidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Proxy to monitor the host through. '0' moves monitoring back to the Zabbix server; blank leaves it unchanged." +} - added
Input schema / properties / templatesAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Replaces ALL linked templates (e.g., [{'templateid': '10001'}]). Templates left out are unlinked; their items and triggers stay on the host." +} - added
Input schema / properties / templates_clearAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Templates to unlink AND clear - their items, triggers and collected data are deleted from the host." +}
- Changed
hostgroup_get2 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"Group IDs."New value: +"Group IDs. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"Host IDs."New value: +"Host IDs. An empty list matches none."
- Changed
item_create1 field changed- changed
Input schema / properties / value_type / descriptionPrevious value: -"Value type (0=float, 1=char, 3=unsigned, 4=text)."New value: +"Value type (0=float, 1=char, 2=log, 3=unsigned, 4=text)."
- Changed
item_get5 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"List of group IDs to get items from hosts in those groups."New value: +"List of group IDs to get items from hosts in those groups. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get items from. Filters items by host."New value: +"List of host IDs to get items from. Filters items by host. An empty list matches none." - changed
Input schema / properties / itemids / descriptionPrevious value: -"List of item IDs to get. If empty, returns all items."New value: +"List of item IDs to get. Omit to return all items; an empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get items from those templates."New value: +"List of template IDs to get items from those templates. An empty list matches none." - added
Input schema / properties / webitemsAdded value: +{ + "default": false, + "description": "If true, also return web scenario items (webitems=true), which Zabbix leaves out by default.", + "type": "boolean" +}
- Changed
itemprototype_get3 fields changed- changed
Input schema / properties / discoveryids / descriptionPrevious value: -"List of discovery rule IDs to get prototypes from."New value: +"List of discovery rule IDs to get prototypes from. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get item prototypes from."New value: +"List of host IDs to get item prototypes from. An empty list matches none." - changed
Input schema / properties / itemids / descriptionPrevious value: -"List of item prototype IDs to get."New value: +"List of item prototype IDs to get. An empty list matches none."
- Changed
maintenance_get3 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"List of host group IDs to get maintenance for."New value: +"List of host group IDs to get maintenance for. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get maintenance for."New value: +"List of host IDs to get maintenance for. An empty list matches none." - changed
Input schema / properties / maintenanceids / descriptionPrevious value: -"List of maintenance IDs to get. If empty, returns all maintenance periods."New value: +"List of maintenance IDs to get. Omit to return all maintenance periods; an empty list matches none."
- Changed
maintenance_update1 field changed- added
Input schema / properties / timeperiodsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Replaces all of the maintenance's time periods, e.g. [{'timeperiod_type': 0, 'start_date': 1735689600, 'period': 3600}]. Omit to keep them; a one-off period created for the old window is moved along with it." +}
- Changed
mediatype_get1 field changed- changed
Input schema / properties / mediatypeids / descriptionPrevious value: -"List of media type IDs to get. If empty, returns all media types."New value: +"List of media type IDs to get. Omit to return all media types; an empty list matches none."
- Changed
problem_get4 fields changed- changed
Input schema / properties / eventids / descriptionPrevious value: -"List of event IDs to get problems for. If empty, returns all problems."New value: +"List of event IDs to get problems for. Omit to return all problems; an empty list matches none." - changed
Input schema / properties / groupids / descriptionPrevious value: -"List of host group IDs to get problems from."New value: +"List of host group IDs to get problems from. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get problems from."New value: +"List of host IDs to get problems from. An empty list matches none." - changed
Input schema / properties / objectids / descriptionPrevious value: -"List of trigger IDs to get problems from."New value: +"List of trigger IDs to get problems from. An empty list matches none."
- Changed
proxy_get1 field changed- changed
Input schema / properties / proxyids / descriptionPrevious value: -"List of proxy IDs to get. If empty, returns all proxies."New value: +"List of proxy IDs to get. Omit to return all proxies; an empty list matches none."
- Changed
script_get3 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"List of group IDs to get scripts for hosts in those groups."New value: +"List of group IDs to get scripts for hosts in those groups. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get scripts for."New value: +"List of host IDs to get scripts for. An empty list matches none." - changed
Input schema / properties / scriptids / descriptionPrevious value: -"List of script IDs to get. If empty, returns all scripts."New value: +"List of script IDs to get. Omit to return all scripts; an empty list matches none."
- Changed
service_get2 fields changed- changed
Input schema / properties / parentids / descriptionPrevious value: -"List of parent service IDs to get child services from."New value: +"List of parent service IDs to get child services from. An empty list matches none." - changed
Input schema / properties / serviceids / descriptionPrevious value: -"List of service IDs to get. If empty, returns all services."New value: +"List of service IDs to get. Omit to return all services; an empty list matches none."
- Changed
sla_get2 fields changed- changed
Input schema / properties / serviceids / descriptionPrevious value: -"List of service IDs to get SLAs for."New value: +"List of service IDs to get SLAs for. An empty list matches none." - changed
Input schema / properties / slaids / descriptionPrevious value: -"List of SLA IDs to get. If empty, returns all SLAs."New value: +"List of SLA IDs to get. Omit to return all SLAs; an empty list matches none."
- Changed
template_get3 fields changed- added
Input schema / properties / groupids / descriptionAdded value: +"Return only templates in these template groups. An empty list matches none." - added
Input schema / properties / hostids / descriptionAdded value: +"Return only templates linked to these hosts. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get. If empty, returns all templates.\n Find template IDs with a search or from host associations."New value: +"List of template IDs to get. Omit to return all templates; an empty list matches none.\n Find template IDs with a search or from host associations."
- Changed
trigger_get4 fields changed- changed
Input schema / properties / groupids / descriptionPrevious value: -"List of group IDs to get triggers from hosts in those groups."New value: +"List of group IDs to get triggers from hosts in those groups. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get triggers from."New value: +"List of host IDs to get triggers from. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get triggers from those templates."New value: +"List of template IDs to get triggers from those templates. An empty list matches none." - changed
Input schema / properties / triggerids / descriptionPrevious value: -"List of trigger IDs to get. If empty, returns all triggers."New value: +"List of trigger IDs to get. Omit to return all triggers; an empty list matches none."
- Changed
user_get1 field changed- changed
Input schema / properties / userids / descriptionPrevious value: -"List of user IDs to get. If empty, returns all users."New value: +"List of user IDs to get. Omit to return all users; an empty list matches none."
- Changed
usermacro_get4 fields changed- changed
Input schema / properties / globalmacroids / descriptionPrevious value: -"List of global macro IDs to get."New value: +"List of global macro IDs to get. An empty list matches none." - changed
Input schema / properties / hostids / descriptionPrevious value: -"List of host IDs to get macros from."New value: +"List of host IDs to get macros from. An empty list matches none." - changed
Input schema / properties / hostmacroids / descriptionPrevious value: -"List of host macro IDs to get."New value: +"List of host macro IDs to get. An empty list matches none." - changed
Input schema / properties / templateids / descriptionPrevious value: -"List of template IDs to get macros from."New value: +"List of template IDs to get macros from. An empty list matches none."
39 tool updates
v0.6.0- Changed
action_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"actionid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
configuration_import3 fields changed- added
Input schema / properties / delete_missingAdded value: +{ + "default": false, + "description": "If true, the default rules also delete objects absent from the import. Ignored when 'rules' is given.", + "type": "boolean" +} - changed
Input schema / properties / format_type / descriptionPrevious value: -"Import format: 'json' or 'xml'."New value: +"Import format: 'json', 'xml' or 'yaml'." - added
Input schema / properties / rulesAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Per-object import rules, e.g. {'hosts': {'createMissing': true, 'updateExisting': true}}. Defaults to creating and updating every object type, without deleting anything." +}
- Changed
discoveryrule_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"itemid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
drule_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"druleid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
event_acknowledge4 fields changed- changed
Input schema / properties / action / defaultPrevious value: -1New value: +2 - changed
Input schema / properties / action / descriptionPrevious value: -"Action: 1=ack, 2=close, 4=add message, etc."New value: +"Bitmask: 1=close problem, 2=acknowledge, 4=add message, 8=change severity, 16=unacknowledge, 32=suppress, 64=unsuppress." - added
Input schema / properties / eventids / minItemsAdded value: +1 - changed
Input schema / properties / message / descriptionPrevious value: -"Optional message to add when acknowledging (e.g., \"Working on this\", \"Will restart service\")."New value: +"Message to add to the event. The 'add message' flag (4) is added to\n 'action' automatically when this is set - Zabbix otherwise accepts\n the call and stores an empty message, losing the text silently."
- Changed
event_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"eventid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
graph_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"graphid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
history_get6 fields changed- added
Input schema / properties / history / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / history / defaultPrevious value: -0New value: +null - changed
Input schema / properties / history / descriptionPrevious value: -"History type: 0=float, 1=char, 2=log, 3=unsigned, 4=text."New value: +"Storage type to read: 0=float, 1=char, 2=log, 3=unsigned, 4=text. Must match the items' value_type or Zabbix returns nothing. Detected from the items when omitted." - removed
Input schema / properties / history / typeRemoved value: -"integer" - added
Input schema / properties / itemids / minItemsAdded value: +1 - removed
Input schema / properties / offsetRemoved value: -{ - "default": 0, - "description": "Number of results to skip (for pagination). Requires sortfield to be set.", - "minimum": 0, - "type": "integer" -}
- Changed
host_create1 field changed- changed
Input schema / properties / params / descriptionPrevious value: -"Raw params dict for bulk operations. If provided, individual parameters are ignored."New value: +"Raw host.create params, for fields the arguments below do not cover. Describes a single host, not a batch. If provided, individual parameters are ignored."
- Changed
host_delete1 field changed- added
Input schema / properties / hostids / minItemsAdded value: +1
- Changed
host_get7 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results to return. Default is 100."New value: +"Page size - maximum number of results to return. Default is 100." - changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching hosts to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - changed
Input schema / properties / select_groups / descriptionPrevious value: -"If true, include the host groups each host belongs to in the response (selectGroups=extend)."New value: +"If true, include the host groups each host belongs to in the response (selectHostGroups=extend)." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"hostid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by - 'hostid', 'host', 'name' or 'status'. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
hostgroup_delete1 field changed- added
Input schema / properties / groupids / minItemsAdded value: +1
- Changed
hostgroup_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"groupid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
item_create2 fields changed- changed
Input schema / properties / delay / descriptionPrevious value: -"Collection interval. Default '1m'. Use time suffixes like '30s', '5m', '1h'."New value: +"Update interval. Must be '0' for trapper (2) and dependent (18) items." - added
Input schema / properties / interfaceidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Host interface to poll through. Required for Zabbix agent (0), SNMP agent (20), SNMP trap (17), IPMI (12) and JMX (16) items on a host." +}
- Changed
item_delete1 field changed- added
Input schema / properties / itemids / minItemsAdded value: +1
- Changed
item_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"itemid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
itemprototype_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"itemid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
maintenance_create1 field changed- changed
Input schema / properties / timeperiods / descriptionPrevious value: -"Optional list of time period objects for recurring maintenance."New value: +"When maintenance actually runs, e.g. [{'timeperiod_type': 0, 'start_date': 1735689600, 'period': 3600}]. Required by Zabbix; if omitted, a single one-off period covering active_since to active_till is sent."
- Changed
maintenance_delete1 field changed- added
Input schema / properties / maintenanceids / minItemsAdded value: +1
- Changed
maintenance_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"maintenanceid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
mediatype_get6 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - changed
Input schema / properties / search / descriptionPrevious value: -"Dictionary with search criteria like {'description': 'email'}."New value: +"Dictionary with search criteria like {'name': 'Email'}. Zabbix 5.4\n renamed the media type 'description' field to 'name'." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"mediatypeid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
problem_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"eventid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
proxy_delete1 field changed- added
Input schema / properties / proxyids / minItemsAdded value: +1
- Changed
proxy_get6 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - changed
Input schema / properties / search / descriptionPrevious value: -"Dictionary with search criteria like {'host': 'proxy1'} for name matching."New value: +"Dictionary with search criteria like {'name': 'proxy1'}. Zabbix 7.0\n renamed the proxy 'host' field to 'name' and rejects the old one." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"proxyid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
script_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"scriptid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
service_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"serviceid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
sla_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"slaid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
template_create1 field changed- changed
Input schema / properties / groups / descriptionPrevious value: -"Host groups."New value: +"Template groups the template belongs to, e.g. [{'groupid': '10'}]. Since Zabbix 6.2 these are template groups, not host groups."
- Changed
template_delete1 field changed- added
Input schema / properties / templateids / minItemsAdded value: +1
- Changed
template_get6 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - changed
Input schema / properties / select_groups / descriptionPrevious value: -"If true, include the template groups the templates belong to (selectGroups=extend)."New value: +"If true, include the template groups the templates belong to (selectTemplateGroups=extend)." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"host" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
trend_get4 fields changed- added
Input schema / properties / itemids / minItemsAdded value: +1 - removed
Input schema / properties / offsetRemoved value: -{ - "default": 0, - "description": "Number of results to skip (for pagination). Requires sortfield to be set.", - "minimum": 0, - "type": "integer" -} - removed
Input schema / properties / sortfieldRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Field to sort by." -} - removed
Input schema / properties / sortorderRemoved value: -{ - "default": "ASC", - "description": "Sort direction - 'ASC' or 'DESC'.", - "type": "string" -}
- Changed
trigger_delete1 field changed- added
Input schema / properties / triggerids / minItemsAdded value: +1
- Changed
trigger_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"triggerid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
user_create1 field changed- added
Input schema / properties / roleidAdded value: +{ + "default": "1", + "description": "ID of the user's role, which is what grants permissions. Defaults to '1' (User role); a user created without one gets roleid 0 and cannot log in.", + "type": "string" +}
- Changed
user_delete1 field changed- added
Input schema / properties / userids / minItemsAdded value: +1
- Changed
user_get6 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - changed
Input schema / properties / search / descriptionPrevious value: -"Dictionary with search criteria like {'alias': 'admin'} for username matching."New value: +"Dictionary with search criteria like {'username': 'admin'}. Zabbix 5.4\n renamed 'alias' to 'username' and rejects the old name." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"userid" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. A deterministic sort is required for paging to be consistent." - added
Input schema / properties / sortfield / typeAdded value: +"string"
- Changed
user_update2 fields changed- added
Input schema / properties / roleidAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ID of the user's role, which is what grants permissions. Roles are objects in Zabbix 5.2+; the old numeric user 'type' no longer exists." +} - removed
Input schema / properties / type_Removed value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "User type: 1=Zabbix user, 2=Zabbix admin, 3=Zabbix super admin." -}
- Changed
usermacro_delete1 field changed- added
Input schema / properties / hostmacroids / minItemsAdded value: +1
- Changed
usermacro_get5 fields changed- changed
Input schema / properties / offset / descriptionPrevious value: -"Number of results to skip (for pagination). Requires sortfield to be set."New value: +"Number of matching records to skip. Use with 'limit' to page through results; check 'has_more' and 'total' in the response." - removed
Input schema / properties / sortfield / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / sortfield / defaultPrevious value: -nullNew value: +"macro" - changed
Input schema / properties / sortfield / descriptionPrevious value: -"Field to sort by."New value: +"Field to sort by. usermacro.get only allows 'macro'." - added
Input schema / properties / sortfield / typeAdded value: +"string"
53 tool updates
v0.5.3- First observed
action_get - First observed
api_version - First observed
configuration_export - First observed
configuration_import - First observed
discoveryrule_get - First observed
drule_get - First observed
event_acknowledge - First observed
event_get - First observed
graph_get - First observed
history_get - First observed
host_create - First observed
host_delete - First observed
host_get - First observed
host_update - First observed
hostgroup_create - First observed
hostgroup_delete - First observed
hostgroup_get - First observed
hostgroup_update - First observed
item_create - First observed
item_delete - First observed
item_get - First observed
item_update - First observed
itemprototype_get - First observed
maintenance_create - First observed
maintenance_delete - First observed
maintenance_get - First observed
maintenance_update - First observed
mediatype_get - First observed
problem_get - First observed
proxy_create - First observed
proxy_delete - First observed
proxy_get - First observed
proxy_update - First observed
script_execute - First observed
script_get - First observed
service_get - First observed
sla_get - First observed
template_create - First observed
template_delete - First observed
template_get - First observed
template_update - First observed
trend_get - First observed
trigger_create - First observed
trigger_delete - First observed
trigger_get - First observed
trigger_update - First observed
user_create - First observed
user_delete - First observed
user_get - First observed
user_update - First observed
usermacro_create - First observed
usermacro_delete - First observed
usermacro_get
TDQS
Scored across 53 tools
Most tools map clearly to a distinct Zabbix resource and action, with descriptions distinguishing similar resources such as items vs. item prototypes and LLD discovery rules vs. network discovery rules. A few pairs (event_get vs. problem_get, discoveryrule_get vs. drule_get) still require careful reading, preventing a perfect score.
The set overwhelmingly follows a predictable snake_case resource_action pattern (host_get, host_create, host_update, host_delete, item_get, etc.). Minor deviations exist, such as api_version and the abbreviated drule_get alongside discoveryrule_get, but overall naming is consistent.
At 53 tools, the surface is far above the typical well-scoped range and is heavy for an agent to navigate reliably. While Zabbix is a broad domain, many tools could be consolidated or scoped into separate server configurations.
Core host, host group, template, item, trigger, user, proxy, and maintenance lifecycles have full CRUD coverage, and many read operations are present. However, significant resources such as actions, media types, graphs, services, SLAs, item prototypes, and discovery rules are read-only or lack update/delete operations, leaving notable gaps.
Maintenance
Related MCP Connectors
140+ data APIs for agents: finance, banking validation, geo, weather, text. One API key.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
- AnaellaOAuthcom.anaella
One API for your agent: email, calendars, Drive, Sheets, Slack, ads, analytics, social posts.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- 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.-
- AlicenseCqualityCmaintenanceExposes the complete Zabbix API functionality through the Model Context Protocol, mapping API methods to tools for managing hosts, triggers, and monitoring data. It enables seamless integration and control of Zabbix monitoring environments via natural language interfaces.10025 PyPIMIT
- 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.86241AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceExposes Zabbix monitoring capabilities as callable tools for AI agents and MCP-compatible clients.-