Skip to main content

skywalking-zabbix-mcp

CI PyPI Python License

简体中文 | English

一个 MCP Server,把 SkyWalking(应用 APM) 和 Zabbix(主机监控) 接进同一个进程,让 AI 助手能在一次对话里既看应用指标、又看机器指标,并把两者关联起来。

它解决什么问题? 排障时你通常要开两个系统:SkyWalking 看服务慢在哪、Zabbix 看机器是不是扛不住了,然后人脑对时间线判断「是机器先炸拖垮了应用,还是应用自己的 bug」。这个 server 把这一步交给 AI——你问一句「payment-service 怎么了」,它自动拉齐应用侧和机器侧两份数据给出结论。

为什么能自动关联? SkyWalking 的服务名格式是 <IP>::<服务名>(如 192.0.2.11::payment-service),其中的 IP 段正好就是 Zabbix 里的主机名。两边天然用 IP 对齐,不需要维护任何服务↔主机映射表。

diagnose_service 与 correlate_incident 的实际输出

真实的 server 代码跑在 mock 后端 上,数据为合成数据。用 uv run python docs/demo/run_demo.py 可自行复现。


两种运行形态

配置 得到的 server
只配 SW_* 纯 SkyWalking:16 个工具 + 10 prompts + 4 resources
加配 ZABBIX_URL 等 应用 + 机器一体:上面 16 个 + Zabbix 2 个 + 跨栈关联 2 个 = 20 工具

换句话说:配了 ZABBIX_URL 才会注册 Zabbix 和关联相关的 4 个工具,否则退化为纯 SkyWalking server。


快速上手

1. 安装(三选一)

A. uvx —— 不用 clone,一行跑起来(推荐)

uvx skywalking-zabbix-mcp --version

B. Docker

docker run --rm -i \
  -e SW_URL=http://<oap-host>:12800 \
  ghcr.io/ningjiabing/skywalking-zabbix-mcp

C. 源码(要改代码就用这个)

git clone https://github.com/ningjiabing/skywalking-zabbix-mcp.git
cd skywalking-zabbix-mcp
uv sync
uv run skywalking-zabbix-mcp --version

2. 接入 AI 客户端

Claude Code
claude mcp add obs -s user \
  -e SW_URL=http://<oap-host>:12800 \
  -e ZABBIX_URL=http://<zabbix-host>/zabbix/api_jsonrpc.php \
  -e ZABBIX_USER=<用户> -e ZABBIX_PASSWORD='${MY_ZBX_PWD}' \
  -e READ_ONLY=true \
  -- uvx skywalking-zabbix-mcp
Claude Desktop(claude_desktop_config.json)
{
  "mcpServers": {
    "obs": {
      "command": "uvx",
      "args": ["skywalking-zabbix-mcp"],
      "env": {
        "SW_URL": "http://<oap-host>:12800",
        "ZABBIX_URL": "http://<zabbix-host>/zabbix/api_jsonrpc.php",
        "ZABBIX_USER": "<用户>",
        "ZABBIX_PASSWORD": "${MY_ZBX_PWD}",
        "READ_ONLY": "true"
      }
    }
  }
}
Cursor(.cursor/mcp.json 或全局 ~/.cursor/mcp.json)
{
  "mcpServers": {
    "obs": {
      "command": "uvx",
      "args": ["skywalking-zabbix-mcp"],
      "env": {
        "SW_URL": "http://<oap-host>:12800",
        "READ_ONLY": "true"
      }
    }
  }
}
Codex CLI(~/.codex/config.toml)
[mcp_servers.obs]
command = "uvx"
args = ["skywalking-zabbix-mcp"]

[mcp_servers.obs.env]
SW_URL = "http://<oap-host>:12800"
ZABBIX_URL = "http://<zabbix-host>/zabbix/api_jsonrpc.php"
ZABBIX_USER = "<用户>"
READ_ONLY = "true"

等价的命令行写法:

codex mcp add obs -- uvx skywalking-zabbix-mcp

注意 Codex 的配置是 TOML、键名是 mcp_servers(下划线),跟 Claude/Cursor 的 JSON mcpServers 不一样。口令建议留在 shell 环境变量里,由 Codex 进程继承,不要写进 config.toml。

VS Code(.vscode/mcp.json)
{
  "servers": {
    "obs": {
      "type": "stdio",
      "command": "uvx",
      "args": ["skywalking-zabbix-mcp"],
      "env": {
        "SW_URL": "http://<oap-host>:12800",
        "READ_ONLY": "true"
      }
    }
  }
}
源码方式(把 uvx skywalking-zabbix-mcp 换成绝对路径)
{
  "command": "uv",
  "args": ["--directory", "/绝对路径/skywalking-zabbix-mcp", "run", "skywalking-zabbix-mcp"]
}

凭据一律用 ${ENV} 引用(见配置),别写进命令行或配置文件明文。全部变量见 .env.example。

3. 直接跑(stdio / HTTP)

uvx skywalking-zabbix-mcp                                  # stdio,默认
uvx skywalking-zabbix-mcp sse --port 8000
uvx skywalking-zabbix-mcp streamable --port 8000 --path /mcp

⚠️ sse / streamable 没有任何鉴权,默认只绑 127.0.0.1。绑到其它地址等于把 OAP 和 Zabbix 的读权限(没开 READ_ONLY 时还有写权限)暴露给能连上这个端口的任何人。要对外必须挡一层带认证的反向代理,或在网络层限制。详见 SECURITY.md。

4. 试一句

「诊断一下 192.0.2.11::payment-service」

server 会用 diagnose_service 一次返回该服务的应用指标(cpm / 响应时间 / SLA + 告警)和承载主机的 Zabbix 数据(CPU / 内存 / IO + 当前 problem)。


工具一览

SkyWalking(16 个,任何配置都有)

类别 工具 作用
元数据 list_layers list_services list_instances list_endpoints list_processes 列出层 / 服务 / 实例 / 端点 / 进程
拓扑 query_services_topology query_instances_topology query_endpoints_topology query_processes_topology 四个粒度的调用拓扑
链路 query_traces 查 trace,支持 summary / errors_only / full 三视图,v1/v2 协议自动选
指标 execute_mqe_expression list_mqe_metrics get_mqe_metric_type 跑 MQE 表达式、列可用指标、查指标类型
告警/事件/日志 query_alarms query_events query_logs 查告警、事件、日志

Zabbix(2 个,配 ZABBIX_URL 才启用)

工具 作用
zabbix_query 执行任意 Zabbix JSON-RPC 方法(host.get / item.get / problem.get / history.get…)。只读模式下仅放行 *.get
zabbix_list 列常用方法 + 实时探测 API 版本

跨栈关联(2 个,配 ZABBIX_URL 才启用)

工具 作用
diagnose_service 传 SkyWalking 服务名,一次拿回应用侧(cpm / resp_time / sla + 告警)+ 机器侧(该 IP 主机的 CPU/内存/IO + 当前 problem)
correlate_incident 对齐两侧时间窗内的告警,判断「机器先炸」还是「应用先炸」

另外还有

  • 10 个 prompts(排查引导):analyze-performance compare-services top-services investigate-traces trace-deep-dive analyze-logs explore-service-topology generate_duration build-mqe-query explore-metrics
  • 4 个 resources(MQE 文档):mqe://docs/syntax、mqe://docs/examples、mqe://docs/ai_prompt(静态),mqe://metrics/available(动态,实时列后端指标)

配置

全部通过环境变量。凭据类支持 ${ENV} 展开(如 SW_PASSWORD=${MY_SW_PWD}),避免明文。示例见 .env.example。

变量 说明 默认
SW_URL OAP 地址,自动补 /graphql http://localhost:12800/graphql
SW_USERNAME / SW_PASSWORD SkyWalking Basic Auth 空
SW_INSECURE 跳过 TLS 校验(仅测试用) false
SW_LOG_LEVEL 日志级别 info
ZABBIX_URL Zabbix api_jsonrpc.php 全路径。配了才启用 Zabbix + 关联工具 空(禁用)
ZABBIX_USER / ZABBIX_PASSWORD Zabbix 账号 空
READ_ONLY 只读守卫:对 Zabbix 拦截一切非 *.get 写方法 false
VERIFY_SSL Zabbix TLS 校验 true
ZABBIX_SKIP_VERSION_CHECK 兼容占位(本客户端不强制版本,实为 no-op) false

ZABBIX_URL 路径别配错:装在子路径的形如 http://host/zabbix/api_jsonrpc.php,装在根路径的形如 http://host:port/api_jsonrpc.php。配错直接 404。

完整 JSON 写法见上面接入 AI 客户端一节。


典型用法

场景 怎么做
一句话看服务全景 diagnose_service("192.0.2.11::payment-service")——应用指标 + 告警 + 承载主机的机器指标 + problem,一次到手
判断谁先炸 correlate_incident(时间窗)——两侧告警按时间对齐,机器故障 vs 应用异常
链路下钻找瓶颈 query_traces 拉慢/错 trace,配 trace-deep-dive prompt 定位耗时 span
跑指标表达式 execute_mqe_expression;不会写就先读 mqe://docs/syntax 或用 build-mqe-query prompt

兼容性

新旧 OAP 通吃——启动时自动探测后端版本与 schema 能力,按实际支持裁剪查询:

  • 版本探测(version → major.minor):metadata / endpoints / trace 按版本走 v1 或 v2 查询。
  • schema 能力探测(introspection):alarm / MQE 按后端实际字段裁剪 selection set,避免旧版校验报错。
  • MQE 老语法自动改写:service_percentile{p='50,90'} → {_='0,2'},返回结果再还原成 p 标签。
  • coldStage 仅在请求 cold 数据时才下发(旧版 OAP 无此字段)。

Zabbix 4.0 兼容——PHP 污染响应去噪、user 登录参数、body auth 字段、/zabbix/ 子路径,全部自动处理。

安全——SkyWalking 的 16 个工具本就是只读查询;开 READ_ONLY=true 后 Zabbix 侧也只放行 *.get,拦截一切写方法。部署前请读 SECURITY.md:凭据管理、HTTP 传输无鉴权、工具输出会流向 LLM,这三点都要按你的环境评估。

依赖极简——只有 fastmcp + httpx。


开发

uv sync                      # 装运行时 + 开发依赖
uv run pre-commit install    # ruff / 私钥检测 / gitleaks
uv run ruff check . && uv run ruff format --check .
uv run mypy
uv run pytest --cov

测试覆盖 GraphQL 客户端鉴权与错误面、后端版本/能力探测与缓存、trace v1/v2 协议选择与三种视图、MQE 老语法改写、Zabbix 登录/重登/只读守卫/PHP 污染去噪、跨栈关联两个工具的端到端路径,以及「纯 SkyWalking 16 工具、加 Zabbix 变 20 工具」这个契约本身。

贡献流程见 CONTRIBUTING.md。

许可证

Apache License 2.0,见 LICENSE / NOTICE。变更记录见 CHANGELOG.md。SkyWalking 相关查询文本源自 Apache SkyWalking 项目,跨语言移植保留原始许可。

Metadata

Release files for skywalking-zabbix-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skywalking-zabbix-mcp 0.1.0
File Size Uploaded
skywalking_zabbix_mcp-0.1.0.tar.gz 217.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skywalking-zabbix-mcp 0.1.0
File Interpreter ABI Platform
skywalking_zabbix_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 289.5 kB

Release files / skywalking_zabbix_mcp-0.1.0.tar.gz

Download URL skywalking_zabbix_mcp-0.1.0.tar.gz
Size 217.1 kB
Tags Source
SHA-256 checksum
How to use checksums
875cd3b5fe375ab73f1bf36dfbc126ec1aca54181a1023b676d136442bf5c0a2
BLAKE2b-256 checksum
How to use checksums
2d071dd5d6f2db6990f6d140d4451d73000b032b6234765fe161f588e2cd5707
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.

Transparency log

Release files / skywalking_zabbix_mcp-0.1.0-py3-none-any.whl

Download URL skywalking_zabbix_mcp-0.1.0-py3-none-any.whl
Size 72.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a5e1d6c620b535032ccab8a8447add4557e07bb35003f26b738d08e702f51b7a
BLAKE2b-256 checksum
How to use checksums
cd2dd2c3fc49a41884c60ead8175b2c8107727efe24e1815aa8c68e432394a3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page