zabbix-investigation-mcp
Read-only MCP server that provides Zabbix monitoring data to AI agents, enabling investigation of hosts, metrics, incidents, and triggers with deterministic aggregation.
README
Zabbix Investigation MCP
Zabbix API의 읽기 전용 데이터를 n8n AI Agent에 제공하는 독립 MCP 서버입니다. Agent가 조사할 호스트·메트릭·시간 범위·집계 간격을 결정하고, 이 서버는 입력 검증과 Zabbix 조회, 수치 집계를 결정론적으로 수행합니다.
제공 도구
find_hostsget_incident_eventsget_trigger_detailslist_relevant_metricsget_metric_summaryget_metric_historyget_related_events
Zabbix 설정 변경, 이벤트 확인 처리, 스크립트 및 원격 명령 실행 도구는 제공하지 않습니다.
환경 변수
Copy-Item .env.example .env
필수 설정:
ZABBIX_URL:/api_jsonrpc.php를 포함한 Zabbix API URLZABBIX_API_TOKEN: 읽기 전용 API TokenZABBIX_ALLOWED_HOST_GROUP_IDS: 조회를 허용할 Host Group ID 목록. 비워 두면 토큰이 볼 수 있는 모든 호스트가 조사 대상이 됩니다. 제한은 그룹 단위로만 동작하므로, 특정 호스트 몇 대만 대상으로 삼으려면 Zabbix에 전용 호스트 그룹을 만들어 그 ID 하나만 지정하십시오. 기존 운영 그룹을 그대로 쓰면 의도하지 않은 호스트까지 함께 열립니다.ZABBIX_MCP_AUTH_TOKEN: MCP 클라이언트가 사용할 Bearer Token
ZABBIX_MCP_AUTH_TOKEN은 길고 무작위인 값을 사용합니다.
[Convert]::ToHexString(
[Security.Cryptography.RandomNumberGenerator]::GetBytes(32)
).ToLower()
Docker 실행
docker compose up -d --build
docker compose ps
Invoke-RestMethod http://127.0.0.1:3000/healthz
기본 엔드포인트:
- MCP:
http://<instance-a>:3000/mcp - 상태 확인:
http://<instance-a>:3000/healthz
MCP 요청에는 다음 헤더가 필요합니다.
Authorization: Bearer <ZABBIX_MCP_AUTH_TOKEN>
네트워크 노출 제한
컨테이너 포트가 게시되는 호스트 인터페이스는 MCP_BIND_ADDRESS가 정합니다.
MCP_BIND_ADDRESS=192.168.20.22 # 이 머신의 사설 IP
값을 지정하지 않으면 127.0.0.1로 게시되므로, 설정을 빠뜨려도 공인
인터페이스에 열리지 않습니다.
MCP_HOST와 혼동하지 않아야 합니다. MCP_HOST는 프로세스 자체의 바인드
주소이고 docker compose에서는 컨테이너 내부 기준 0.0.0.0으로 고정됩니다.
호스트 노출을 실제로 통제하는 값은 MCP_BIND_ADDRESS입니다.
Docker는 자신의 forwarding 규칙을 ufw보다 앞에 삽입하므로, 0.0.0.0으로
게시한 포트는 호스트 방화벽으로 막히지 않습니다. 방화벽에 의존하지 말고 바인드
주소를 지정하십시오. 클라우드 보안 그룹에서도 3000 포트를 사설 대역으로
제한하는 것을 권장합니다.
적용 결과는 실행 전에 확인할 수 있습니다.
docker compose config
ports:
- host_ip: 192.168.20.22
published: "3000"
target: 3000
MCP_ALLOWED_HOSTS는 소스 IP가 아니라 요청의 Host 헤더를 검사합니다. DNS
rebinding 방어용이며 네트워크 접근 제어를 대신하지 않습니다.
운영 환경에서는 3000 포트를 인터넷에 그대로 공개하지 말고 HTTPS reverse proxy, 방화벽 또는 사설 네트워크를 사용합니다.
로컬 개발
요구 사항은 Node.js 20 이상입니다.
npm ci
npm run typecheck
npm test
npm run build
npm run dev
실제 Zabbix 통합 테스트
tests/integration/은 실제 Zabbix API에 붙어 7개 도구와 정책 가드레일을
검증합니다. 환경 변수가 없으면 자동으로 건너뛰므로 npm test와 CI는 Zabbix
없이도 그대로 통과합니다.
Zabbix가 사설망에 있으면 먼저 터널을 엽니다.
ssh -N -L 8081:<zabbix-host>:80 <jump-host>
$env:ZABBIX_INTEGRATION_URL = "http://127.0.0.1:8081/zabbix/api_jsonrpc.php"
$env:ZABBIX_INTEGRATION_HOST = "<조사할 호스트 이름>"
npm run test:integration
ZABBIX_API_TOKEN은 지정하지 않으면 저장소.env에서 읽습니다. 토큰을 명령줄에 노출하지 않아도 됩니다.- 세 변수(
ZABBIX_INTEGRATION_URL,ZABBIX_API_TOKEN,ZABBIX_INTEGRATION_HOST)가 모두 있어야 실행됩니다. - 대상 호스트에 이벤트가 없으면 이벤트 관련 단정은 건너뛰고, 나머지 계약과 가드레일은 그대로 검증합니다.
토큰에는 최소 권한으로 다음 6개 메서드만 허용하면 충분합니다.
host.get event.get trigger.get item.get history.get trend.get
집계 정책
- 짧은 범위는
history.get원시 값을 지정 간격으로 집계합니다. - 오래된 장기 범위는
trend.get결과를 재집계합니다. - 결과에
data_source,sample_count,coverage_ratio,partial을 포함합니다. - 장기 조회는 최소 1시간 집계만 허용합니다.
- LLM은 평균·최댓값을 계산하지 않고 MCP가 반환한 값을 해석합니다.
partial은 다음 중 하나라도 해당하면 true입니다.
- 조회 한도(
INVESTIGATION_MAX_SOURCE_POINTS)에 도달해 원본이 잘렸을 때 - 출력 한도(
INVESTIGATION_MAX_HISTORY_POINTS)에 도달해 응답이 잘렸을 때 coverage_ratio가INVESTIGATION_MIN_COVERAGE_RATIO(기본0.95) 미만일 때
세 번째 조건 때문에, 아무것도 잘리지 않았더라도 요청 구간의 상당 부분에 원본
데이터가 없으면 완전한 응답으로 표시하지 않습니다. 예를 들어 보존 기간이 짧은
아이템을 7일 구간으로 조회하면 coverage_ratio가 낮게 나오고 partial=true가
됩니다. RCA Writer는 이를 보고서 limitations에 반영해야 합니다.
저장소 구조
.
├── src/
├── tests/
├── Dockerfile
├── docker-compose.yml
├── package.json
└── .env.example
클라이언트의 ZABBIX_MCP_URL은 이 서버의 /mcp 주소를 가리켜야 하며, n8n
HTTP Bearer Auth credential에는 동일한 ZABBIX_MCP_AUTH_TOKEN을 입력합니다.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。