工具和资源

概述

Zabbix MCP 服务器将 Zabbix 功能以工具和资源的形式提供给 MCP 客户端。

工具名称用于描述相应的活动。 如果设置了 ToolPrefix 参数,则此前缀会添加到每个工具名称中;工具访问规则匹配以下列出的原始名称。

读取工具

工具 Zabbix API 方法 参数 排序依据 资源
hostgroup_get hostgroup.get groupids、names、search、limit 名称 zabbix://hostgroup/<id>
templategroup_get templategroup.get groupids、names、search、limit 名称 zabbix://templategroup/<id>
host_get host.get hostids、groupids、search、limit 名称 zabbix://host/<id>
template_get template.get templateids、groupids、search、limit 名称 zabbix://template/<id>
item_get item.get hostids、itemids、search、limit 名称 zabbix://item/<id>
lld_get discoveryrule.get hostids、ruleids、limit 名称 -
interface_get hostinterface.get hostids、interfaceids、limit 接口 ID -
macro_get usermacro.get hostids 或 global、macro_names、limit 宏 -
problem_get problem.get eventids、groupids、hostids、severities、acknowledged、suppressed、recent、limit 事件 ID,降序 -
maintenance_get maintenance.get maintenanceids、groupids、hostids、limit 名称 -
history_get history.get itemids、time_from、time_till、type、limit 时钟,降序 -
trigger_get trigger.get triggerids、hostids、search、limit 描述 zabbix://trigger/<id>

请注意:

  • host_get 和 template_get 还会返回每个对象的触发器(字段集合有限)、标签和关联的模板。监控项、发现规则、接口和宏由相应的工具返回。
  • history_get 要求时间范围不超过 7 天,且开始时间不得早于 7 天前。type 参数必须是 float、unsigned、character、text、log 或 json 之一,并且必须与监控项的值类型匹配;如果类型错误,将返回空结果,且无法将其与没有数据的监控项区分开来。无法通过 MCP 服务器检索二进制监控项(值类型 5)的历史数据。
  • 读取工具请求固定的字段列表;不会请求所有字段(output: extend)。
  • 包含资源的工具的结果包含 uri 字段,因此 agent 可以从列表继续定位到单个实体。

响应格式

所有读取工具均以相同格式返回响应:

{
  "results": [ ... ],
  "count": 2,
  "truncated": true,
  "truncated_by": "count",
  "limit": 2,
  "note": "已达到结果数量限制 ..."
}

响应受 limit 参数(默认值:100,最大值:1000)以及响应序列化大小(MaxResponseSize,默认值:64K)的限制。 达到任一限制时,响应将停止。 响应仅会在结果之间截断,不会在结果内部截断;截断的响应会指明达到的是哪个限制。 每个工具都有固定的排序顺序,因此截断的响应始终是完整结果集的开头部分。 不支持分页;如需获取其他结果,请缩小查询范围。

问题工具

所有问题工具都会使用相应的操作标志调用 event.acknowledge。 eventids 参数为必填项;可以使用 problem_get 获取事件 ID。 任何问题工具都可以添加消息(评论)。 除 problem_annotate 外,message 参数均为可选;对于 problem_annotate,该参数为必填项。如果指定了该参数,消息会在同一次 Zabbix API 调用中记录。

工具 效果 其他参数
problem_acknowledge 确认问题。 -
problem_unacknowledge 移除确认。 -
problem_close 手动关闭问题(仅适用于允许手动关闭的触发器)。 -
problem_annotate 记录消息。 message(必填)
problem_change_severity 更改问题的严重性。 severity(0-5)
problem_suppress 将问题抑制至指定时间,或无限期抑制。 suppress_until
problem_unsuppress 移除抑制。 -

无法创建或删除问题;所有问题工具都会更新现有问题。

维护工具

工具 Zabbix API 方法 参数
maintenance_create maintenance.create name、groupids 和/或 hostids、active_since、active_till、timeperiods、description、tags、tags_evaltype
maintenance_update maintenance.update maintenanceid 以及上述任意参数。列表参数会替换整个值集合;空列表会清空该集合。
maintenance_delete maintenance.delete maintenanceids

更新维护周期时,列表参数(例如 hostids、groupids 和 timeperiods)会替换现有值,而不是将值添加到现有集合中。 例如,如果某个维护周期涵盖主机 A 和主机 B,而使用仅包含主机 C 的 hostids 调用 maintenance_update,则该维护周期将仅涵盖主机 C。

maintenance_create 是唯一不具备幂等性的操作,而 maintenance_delete 是唯一无法撤销的操作。 若要禁止使用这些操作,请通过 DenyTool 参数拒绝这些工具。

写入工具的行为

问题和维护工具属于写入工具。 其工作方式如下:

  • 在调用任何 Zabbix API 之前,会先验证参数;如果验证失败,错误信息会指出未满足的约束条件。
  • 如果客户端支持,只有在用户批准后才会应用更改。
  • 更改由 Zabbix 使用调用方的令牌执行。Zabbix 会检查权限,并将更改以令牌所有者的身份记录在审计日志中。
  • Zabbix 错误(包括权限错误)将作为包含 code、message 和 data 字段的错误对象原样返回。
  • 写入工具会直接返回 Zabbix 结果;读取工具的响应限制不适用。
  • MCP 服务器绝不会重试写入调用。

资源

资源使用 zabbix://<kind>/<id> URI 方案。
resources/list 响应中仅包含 zabbix://about;无法枚举实体 ID,实体 ID 可从工具的结果中获取。
resources/templates/list 响应列出了实体的种类。

URI 内容
zabbix://about API URL、前端 URL、Zabbix 版本、调用方令牌解析到的身份,以及已公开工具的列表。
zabbix://host/<hostid> 不包含监控项、触发器、接口和宏的主机记录。
zabbix://hostgroup/<groupid> 不包含成员列表的主机组记录。
zabbix://template/<templateid> 不包含监控项、触发器和发现规则的模板记录。
zabbix://templategroup/<groupid> 不包含成员列表的模板组记录。
zabbix://item/<itemid> 不包含当前值的监控项定义。
zabbix://trigger/<triggerid> 不包含主机、依赖关系、函数和标签的触发器定义。

如果相应工具被拒绝访问,则对应资源不存在。
不存在的实体,以及令牌所有者无权访问的实体,都会报告为 resource not found;这些情况经过有意设计,无法相互区分。
zabbix://about 资源不受工具访问规则影响。