mcpField
M
Mcp Zabbix

Mcp Zabbix

本地服务
github.com/badoss云与基础设施224 周前更新

关于 Mcp Zabbix

MCP Zabbix 是一个 Python 服务,用于将兼容 MCP 的 AI 助手连接到 Zabbix 监控 API。它提供监控和主机管理工具,还能将趋势图生成为 PNG 文件及可内联显示的 base64 数据。

主要功能

  1. 01列出主机、组、监控项和用户
  2. 02查看当前及指定主机的问题
  3. 03创建 Zabbix 主机
  4. 04获取监控项趋势
  5. 05生成 PNG 与 base64 趋势图
  6. 06通过可选 SMTP 发送邮件

适用场景

  1. 01查看受监控主机及其组成员关系
  2. 02排查主机上的活动问题
  3. 03绘制指定时间范围内的监控项图表
  4. 04通过已配置的 SMTP 发送告警邮件

MCP 相关

该服务通过 MCP stdio 与客户端通信,并提供 Zabbix、图表生成和可选邮件工具;它通过 JSON-RPC API 连接 Zabbix。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP Zabbix

Python License: MIT MCP Code style: ruff Type-checked: mypy

一个面向生产环境的 Model Context Protocol 服务,可将 Zabbix 监控 API 接入 Claude Desktop、Cursor 等 AI 助手,以及任何其他兼容 MCP 的客户端。该服务基于 FastMCP 构建,使用异步 httpx 客户端、类型化的 Pydantic 模型、结构化日志记录,以及趋势图渲染器;渲染器会返回磁盘上的 PNG 文件和用于内嵌显示的 base64 载荷。


目录


架构

                       ┌─────────────────────────────────────┐
                       │       AI Assistant / MCP Client     │
                       │   (Claude Desktop, Cursor, etc.)    │
                       └────────────────┬────────────────────┘
                                        │
                                        │   MCP stdio (JSON-RPC)
                                        ▼
        ┌──────────────────────────────────────────────────────────┐
        │                   FastMCP server (main.py)               │
        │  ┌────────────────────────────────────────────────────┐  │
        │  │  @mcp.tool registrations  →  async handlers        │  │
        │  └────────────────────────────────────────────────────┘  │
        │            │                  │                 │        │
        │            ▼                  ▼                 ▼        │
        │  ┌──────────────────┐  ┌────────────┐  ┌──────────────┐  │
        │  │  ZabbixClient    │  │  Email     │  │  Graph       │  │
        │  │  (httpx async,   │  │  (smtplib  │  │  (matplotlib │  │
        │  │   retry, auth)   │  │   thread)  │  │   PNG+b64)   │  │
        │  └────────┬─────────┘  └─────┬──────┘  └──────┬───────┘  │
        │           │                  │                │          │
        │  ┌────────┴──────────────────┴────────────────┴──────┐   │
        │  │  core/  : Settings  •  Logger  •  Exceptions      │   │
        │  └───────────────────────────────────────────────────┘   │
        └────────────┬────────────────────────┬────────────────────┘
                     │                        │
                     ▼                        ▼
            ┌────────────────┐        ┌──────────────────┐
            │ Zabbix API     │        │  SMTP (Gmail)    │
            │ (JSON-RPC)     │        │                  │
            └────────────────┘        └──────────────────┘

来自 AI 助手的请求通过 MCP stdio 到达,并路由至异步工具处理程序;处理程序再委托给服务层(ZabbixClient、电子邮件、图表)。每一层都从同一个 pydantic-settings Settings 对象读取配置,并通过一个轮转处理程序记录日志。


亮点

  • 完全异步 — 使用 httpx.AsyncClient 和 bearer 令牌身份验证,支持可配置的超时时间,并针对瞬时故障进行指数退避重试。
  • 类型化边界 — Pydantic v2 模型会在工具输入(电子邮件、IP 地址、时间范围)到达网络之前进行验证。
  • 配置的单一事实来源 — pydantic-settings 先读取进程环境变量,再读取 .env;机密使用 SecretStr 封装。
  • 适用于 stdio 的日志记录 — 轮转文件处理程序 + stderr 流(绝不会污染 stdout 上的 MCP 协议)。
  • 图表渲染 — 将 PNG 保存到磁盘,并且返回 base64,使 MCP 客户端无需再次往返即可内嵌渲染。
  • 优雅降级 — 缺少 SMTP 凭据时会自动禁用电子邮件工具,并返回结构化错误,而不是导致服务崩溃。
  • 经过测试 — 使用 respx 模拟 HTTP 的异步 pytest 测试套件;CI 无需连接真实的 Zabbix。

可用工具

工具签名描述
get_zabbix_host()列出包含接口、组和标签的主机。
get_zabbix_host_group()列出主机组。
get_zabbix_host_by_group(group_id: str)列出某个组中的主机。
get_zabbix_item(host_id: str)列出主机上配置的监控项。
get_zabbix_problem()列出当前问题(按最新时间优先)。
get_zabbix_problem_by_host(host_id: str)列出单台主机的问题。
get_zabbix_trend(item_id, start_time, end_time)获取某个监控项的趋势数据行。
get_zabbix_user()列出包含角色和访问标志的用户。
get_zabbix_proxy()列出代理清单。
get_zabbix_ha_cluster_nodes()获取 HA 集群节点状态。
create_zabbix_host(hostname, ip, group_ids, ...)创建主机(agent/snmp/ipmi/jmx)。
send_email_tool(to_email, subject, body)通过 SMTP 发送邮件。
construct_graph(item_id, start_time, end_time, item_name)渲染趋势图表(PNG + base64)。

所有 Zabbix 工具都会返回 JSON-RPC 响应中的原始 result 载荷。 发生故障时,它们会返回结构化的 {"error": ..., "type": ...} 信封,而不是抛出异常。


项目布局

mcp_zabbix/
├── src/mcp_zabbix/
│   ├── __init__.py
│   ├── main.py              # FastMCP entrypoint + tool registrations
│   ├── core/
│   │   ├── config.py        # pydantic-settings (env + .env)
│   │   ├── logging.py       # rotating file + stderr handlers
│   │   └── exceptions.py    # ZabbixAPIError / EmailError / GraphError
│   ├── models/
│   │   └── zabbix.py        # Pydantic schemas for tool I/O
│   └── services/
│       ├── zabbix.py        # async ZabbixClient (retry, auth)
│       ├── email.py         # SMTP wrapper (asyncio.to_thread)
│       └── graph.py         # matplotlib renderer (PNG + base64)
├── tests/
│   ├── conftest.py          # autouse env stubbing
│   ├── test_config.py
│   ├── test_zabbix_client.py  # respx-mocked HTTP
│   └── test_graph.py
├── Dockerfile               # python:3.12-slim, non-root user
├── docker-compose.yml       # mounts ./logs and ./output
├── pyproject.toml           # hatchling build, dev extras, ruff/mypy
├── requirements.txt         # mirror of runtime deps for pip users
├── run.sh                   # convenience launcher (loads .env)
├── .env.example
└── LICENSE

快速开始

前置条件
  • Python 3.10 或更高版本
  • 可访问且具有有效 API 令牌的 Zabbix 服务器
  • (可选)用于邮件工具的 Gmail / SMTP 凭据
本地安装(pip)
git clone https://github.com/badoss/mcp_zabbix.git
cd mcp_zabbix

python -m venv .venv
source .venv/bin/activate            # Windows: .venv\Scripts\activate

pip install -e ".[dev]"
cp .env.example .env                 # edit ZABBIX_API_URL / TOKEN
./run.sh                             # or: mcp-zabbix
本地安装(uv)

uv 是一款基于 Rust 的快速 pip 替代工具:

uv sync                              # installs runtime deps
uv sync --extra dev                  # add dev tooling
cp .env.example .env
uv run mcp-zabbix
Docker
cp .env.example .env                 # edit secrets
docker compose up --build

./logs 和 ./output 会挂载到容器中,以便日志文件和 生成的 PNG 文件保留在主机上。


配置

所有设置均通过环境变量提供。项目 根目录中的 .env 文件会自动加载。完整列表请参见 .env.example:

Zabbix
变量默认值描述
ZABBIX_API_URL— (必需)api_jsonrpc.php 的完整 URL。
ZABBIX_API_TOKEN— (必需)Bearer 令牌(以 SecretStr 存储)。
ZABBIX_REQUEST_TIMEOUT30HTTP 超时时间,单位为秒。
ZABBIX_MAX_RETRIES3针对暂时性故障的重试次数上限。
SMTP(可选)
变量默认值描述
SMTP_HOSTsmtp.gmail.comSMTP 服务器主机。
SMTP_PORT587SMTP 服务器端口(STARTTLS)。
SMTP_USER空登录用户名;启用邮件功能时必需。
SMTP_PASSWORD空登录密码或 Gmail 应用专用密码。
SMTP_FROM_NAMEMCP ZabbixFrom 标头中显示的名称。

**Gmail 提示:**启用两步验证并创建应用专用密码 — Google 的 SMTP 不再接受普通账户密码。

运行时
变量默认值描述
LOG_LEVELINFODEBUG / INFO / WARNING / ERROR / CRITICAL。
LOG_DIRlogs轮换日志目录(5 MB × 3 backups)。
GRAPH_OUTPUT_DIRoutput趋势 PNG 文件的写入位置。

MCP 客户端配置

Claude Desktop / Cursor(uv 启动器)

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):

{
  "mcpServers": {
    "mcp-zabbix": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/mcp_zabbix",
        "mcp-zabbix"
      ]
    }
  }
}
通过 pip 安装的虚拟环境
{
  "mcpServers": {
    "mcp-zabbix": {
      "command": "/absolute/path/to/mcp_zabbix/.venv/bin/mcp-zabbix"
    }
  }
}
Docker
{
  "mcpServers": {
    "mcp-zabbix": {
      "command": "docker",
      "args": ["compose", "-f", "/absolute/path/to/docker-compose.yml", "run", "--rm", "mcp-zabbix"]
    }
  }
}

编辑配置后重启 MCP 客户端 — 工具随后应会显示在其工具面板中。


使用示例

连接后,用日常语言向助手发送提示词;它会自动选择合适的工具。

列出受监控的主机

列出所有 Zabbix 主机及其所属的组。

调查某台主机上的问题

主机 10084 有哪些活动问题?按严重性分组。

生成趋势图

绘制项目 50134 过去 24 小时的 CPU 使用率,并将图表命名为 "Web-01 CPU"。

construct_graph 工具会返回磁盘上的文件路径以及 base64 编码的 PNG — 大多数 MCP 客户端会以内嵌方式显示图表。

发送告警邮件

给 [email protected] 发送邮件,主题为 "P1: DB latency",正文用一句话描述当前问题。

邮件工具成功时会返回 {"status": "sent", ...},如果未配置 SMTP,则会返回结构化的错误信息。


开发

pip install -e ".[dev]"

# run the test suite (async + respx-mocked HTTP)
pytest

# lint & format
ruff check src tests
ruff format src tests

# strict type-check
mypy src

测试套件使用 pytest-asyncio(自动模式)和 respx 模拟 httpx。CI 无需真实的 Zabbix 服务器。

要让服务器连接到本地 Zabbix:

cp .env.example .env
$EDITOR .env
./run.sh

许可证

基于 MIT License 发布。

支持

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。