Atlas / MCP servers / infokom-ki / Wazuh-MCP-Server

Wazuh-MCP-ServerBLOCK

mcp/infokom-ki/wazuh-mcp-server

Wazuh MCP Server: AI-Driven SOC Automation

Verdict
BLOCK
Grade
F
Trust score
56 /100
Exposed tools
114 99r · 13w · 2d
Transport
stdio · streamable-http
License
BSD-3-Clause
Stars
88
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://glama.ai/mcp/servers/INFOKOM-KI/Wazuh-MCP-Server)

[](https://glama.ai/mcp/servers/INFOKOM-KI/Wazuh-MCP-Server)

A defensive MCP server for Claude Desktop / any MCP client — the blue-team counterpart to offensive tooling. 159 tools + 4 resources (133 when WAZUH_READ_ONLY=true) across Wazuh SIEM, multi-provider threat intelligence, MITRE-driven 3-Sum APT correlation, attack graphing, LangGraph investigation workflows, local case RAG, host forensics, and opt-in HDBSCAN clustering + ATT&CK incident labeling. Read-only by default.

Programmer: NAuliajati (csirt[at]tangerangkota[.]go[.]id)

Architecture

main.py -> mcp_server/  (package)
├─ core/          HTTP client, redaction, audit, config, attack graph, IOC store
├─ wazuh/         Indexer (OpenSearch) + Manager API (JWT auth)
├─ correlation/   3-Sum engine (pure computation, MITRE-driven)
├─ threat_intel/  CrowdSec, ThreatFox, OTX, URLhaus, GreyNoise + shared cache
├─ agents/        LangGraph investigation + playbook workflows
└─ tools/         64 tool modules

Every tool call flows through a single pipeline in the @blueteam_tool decorator — the three most-connected nodes in the code graph:

audit (_audit_log) -> call -> redact (_redact_alert_data) -> truncate (_truncate_if_needed)

CHARACTER_LIMIT (100000 by default) caps what leaves the server. An oversized JSON body comes back as valid JSON with truncated: true instead of a sliced document, and in-process langgraph calls skip the cap enti

Read from source at commit 7da5192d570fOBSERVED · 2026-10-08
Advertisement
02

Exposed tools (114)

99 read · 13 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
argus_ip_lookupreadQuery Argus Threat Intelligence (TangerangKota-CSIRT) aggregating 7 sources.
blueteam_asset_contextreadLook up internal asset context for a hostname/subdomain.
blueteam_attack_chaindestructiveAnalyze rule-to-rule transitions to reconstruct attack kill-chain progression.
blueteam_attack_graphreadAnalyze the attacker relationship graph - campaign clusters, hubs, bridges.
blueteam_beacon_detectreadDetect C2 beaconing patterns via inter-arrival time analysis.
blueteam_breach_checkreadCheck whether an email address appeared in a known data breach (RapidAPI Breach Check).
blueteam_calendar_heatmapreadDetect scheduled attack patterns via day×hour heatmap analysis.
blueteam_campaign_watchreadDetect campaign evolution: new clusters and growth in existing clusters.
blueteam_capture_trafficreadCapture live network traffic using tcpdump. Requires root or CAP_NET_RAW.
blueteam_case_add_iocswriteAttach IOC to an existing case.
blueteam_case_add_verdictwriteRecord an investigation verdict against a srcip within a case.
blueteam_case_createwriteCreate a new investigation case (durable incident record).
blueteam_case_getreadFetch a case by ID, with all its IOCs and verdicts.
blueteam_case_listreadList all cases (most recent first).
blueteam_check_open_firewallreadShow current firewall rules (iptables/nftables/ufw). Identifies
blueteam_check_ssh_authorized_keysreadList all SSH authorized_keys files across all user home directories.
blueteam_check_updatesreadCheck for available security updates (Debian/Ubuntu: apt, RHEL: dnf/yum).
blueteam_check_webshellreadCheck a URL for active webshell or backdoor via curl + signature scan.
blueteam_crtsh_lookupreadSearch SSL certificate transparency logs for a domain via crt.sh.
blueteam_curated_threat_reportreadGenerate a geo/domain/rule-filtered threat intelligence report in one call.
blueteam_cve_advisoryreadFetch Microsoft (MSRC), Red Hat, and Ubuntu security advisories for a CVE.
blueteam_cve_attack_mappingreadMap a CVE to MITRE ATT&CK techniques and the threat groups that use them.
blueteam_cve_epssreadReturn EPSS scores for one or more CVE IDs (exploitation probability).
blueteam_cve_kevreadCheck if a CVE is in the CISA Known Exploited Vulnerabilities (KEV) catalog.
blueteam_cve_lookupreadFetch a CVE record from NVD: description, CVSS, severity, references.
blueteam_cve_pocreadSearch for public proof-of-concept exploits for a CVE (GitHub + Nuclei).
blueteam_cve_scorereadCompute a composite 0-100 risk score for a CVE (CVSS + EPSS + KEV + PoC).
blueteam_cve_ssvcreadTriage a CVE with the CISA SSVC Deployer tree (Act / Attend / Track* / Track).
blueteam_dependency_scanreadScan a dependency manifest against OSV.dev and return vulnerable packages.
blueteam_domain_permutereadGenerate typosquatting/phishing lookalikes of a domain.
blueteam_export_reportreadGenerate a SOC report deliverable (.docx / .xlsx / .pptx) via officecli.
blueteam_extract_iocsreadExtract structured Indicators of Compromise from raw text.
blueteam_fail2ban_jail_statusreadGet detailed status of a specific fail2ban jail, including all banned IPs.
blueteam_fail2ban_statusreadList all active fail2ban jails and their ban counts.
blueteam_fail2ban_unbanreadUnban an IP address from a specific fail2ban jail.
blueteam_failed_loginsreadShow all failed login attempts from /var/log/btmp (lastb).
blueteam_false_positive_kbreadList the false-positive knowledge base - IOC the 3-Sum engine auto-suppresses.
blueteam_false_positive_trackerreadCount how often a Wazuh rule fired but was later marked false-positive.
blueteam_find_suid_filesreadFind all SUID/SGID binaries on the system. Unexpected SUID files
blueteam_find_world_writablereadFind world-writable files and directories (excluding /proc, /sys, /dev).
blueteam_hash_filereadCompute a cryptographic hash of a file. Use to detect tampering.
blueteam_index_schemareadDiscover Wazuh Indexer field names and types before building queries.
blueteam_investigate_ipwriteRun an IP investigation: alert profile, timeline, and geo.
blueteam_investigation_historyreadCheck if an IP was previously investigated and what the verdict was.
blueteam_investigation_summaryreadDashboard: unique IPs investigated, verdict breakdown, analyst notes.
blueteam_investigation_workflowwriteRun the full SOC investigation workflow (langgraph) end-to-end.
blueteam_ioc_lifecyclereadQuery the IOC lifecycle store - discovered IOCs ranked by time-decay recency.
blueteam_ioc_searchreadSearch IOC databases for a source IP (RapidAPI IOC Search).
blueteam_ioc_search_bulkreadSearch IOC databases for many source IPs, one metered request per IP.
blueteam_ip_intel_bulkreadLook up threat intelligence for many IPs in a single metered request.
blueteam_journalctlreadQuery systemd journal for any service. Useful for services without flat log files.
blueteam_last_loginsreadShow recent login history from /var/log/wtmp. Includes successful
blueteam_list_connectionsreadList all established TCP connections with remote IPs and local processes.
blueteam_list_cron_jobswriteList all system and user cron jobs. Attackers often add cron jobs
blueteam_list_listening_portsreadList all TCP/UDP ports currently listening, with owning process.
blueteam_list_processesreadList all running processes with CPU, memory, PID, and command line.
blueteam_list_usersreadList all local user accounts with UID, GID, home dir, and shell.
blueteam_lookup_domain_virustotalreadCheck domain reputation via VirusTotal.
blueteam_lookup_hash_virustotalreadCheck file hash reputation via VirusTotal.
blueteam_lynis_auditwriteRun a Lynis system hardening audit. Checks hundreds of security controls
blueteam_mark_investigatedreadRecord an IP investigation verdict in the persistent JSONL history.
blueteam_metricsreadShow server telemetry per-tool call counts, latency, and guard counters.
blueteam_mitre_lookupreadLook up a MITRE ATT&CK tactic or technique in the local mapping.
blueteam_owned_domainsreadShow the active redaction policy and the configured owned (victim) domains.
blueteam_pivot_suggestreadSuggest the next investigation step for an IOC, driven by the attack graph.
blueteam_playbook_runwriteRun an alert-driven hunting + investigation playbook (langgraph supervisor).
blueteam_prompt_routereadMap a natural language security prompt to the most relevant Wazuh MCP tools.
blueteam_read_auth_logreadRead and optionally filter /var/log/auth.log for SSH, sudo, and PAM events.
blueteam_read_syslogreadRead /var/log/syslog or journalctl for general system events.
blueteam_read_web_logreadRead nginx or Apache access/error logs. Great for spotting web attacks.
blueteam_rootkit_scanwriteRun a rootkit scanner (rkhunter or chkrootkit) to check for known rootkits.
blueteam_semantic_searchreadSemantic search over Wazuh rules using BM25 lexical ranking.
blueteam_set_owned_domainswriteSet the runtime owned (victim) domains used by `protect_victim` redaction.
blueteam_stix_analyzereadCorrelate Wazuh findings with the MITRE ATT&CK STIX 2.1 knowledge graph.
blueteam_stix_killchaindestructiveBuild an ATT&CK kill chain for a source IP from observed alerts + the STIX graph.
blueteam_sudo_historyreadShow recent sudo command usage from auth.log.
blueteam_system_healthreadGet an overview of system health: uptime, disk, memory, CPU load.
blueteam_threat_cardreadGenerate a threat card for a source IP.
blueteam_threat_huntwriteRun a named threat hunting query against Wazuh alert data.
blueteam_threat_intel_aggregatereadAggregate threat intelligence from all available providers for one IOC.
blueteam_unified_threat_scorereadQuery multiple threat intel sources and return a unified confidence score.
blueteam_wazuh_alert_comparereadCompare alert profiles of two source IP side-by-side.
blueteam_wazuh_alert_summarizereadSummarize Wazuh alerts for a source IP into a compact threat digest.
blueteam_wazuh_alertsreadRead Wazuh security alerts - local alerts.json first, auto-fallback to Indexer.
blueteam_wazuh_compliancereadSummarize Wazuh alerts by compliance framework (CIS, PCI DSS, GDPR, HIPAA, NIST 800-53).
blueteam_wazuh_exportreadExport Wazuh alerts to a JSONL file on the server using OpenSearch scroll API.
blueteam_wazuh_geo_heatmapreadGenerate attack coordinate and city-level geo heatmap data.
blueteam_wazuh_indexer_searchreadQuery Wazuh Indexer (OpenSearch) for alerts/events with cursor pagination.
blueteam_wazuh_syscheckreadQuery Wazuh File Integrity Monitoring (syscheck) events from the indexer.
blueteam_wazuh_vulnerabilitiesreadQuery Wazuh vulnerability scanning results from the indexer.
blueteam_who_is_logged_inreadShow currently logged-in users, their source IPs, and session times.
blueteam_whois_lookupreadLook up domain registration via RDAP (free, no API key required).
crowdsec_ip_reputationread_audit_log(
crowdsec_ip_reputation_bulkwriteimport asyncio
greynoise_ip_contextreadCheck if an IP is a known internet scanner or business service (free, no auth).
jarm_fingerprintreadFingerprint a TLS server (JARM-style) to identify C2/malware infrastructure.
netra_ip_analysisreadQuery Netra Threat Intelligence for IP analysis.
otx_lookupreadLook up an IOC in AlienVault OTX (Open Threat Exchange).
otx_lookup_bulkreadLook up multiple IOCs against AlienVault OTX concurrently (max 20).
sangfor_blocklist_checkreadCheck if an IP is currently blocked by Sangfor firewall.
sangfor_blocklist_listreadList IP blocked by Sangfor firewall, optionally filtered by timestamp and/or attacker IP/IoC.
threatfox_ioc_searchreadSearch ThreatFox by abuse.ch for malware-associated indicators of compromise.
threatfox_ioc_search_bulkreadSearch multiple IOCs against ThreatFox concurrently (max 25).
urlhaus_hash_lookupreadLook up a file hash (MD5/SHA256) in URLhaus malware payload database.
urlhaus_lookupreadCheck if a URL is a known malware distributor via URLhaus (abuse.ch).
urlhaus_lookup_bulkreadCheck multiple URLs against URLhaus concurrently (max 20).
wazuh_alert_aggregate_analysisreadZero-doc statistical analysis of Wazuh alerts across the full index.
wazuh_alert_dsl_querywriteExecute a raw OpenSearch DSL aggregation query against the Wazuh Indexer.
wazuh_alert_focused_crawlreadSurgical deep-dive into specific Wazuh alert clusters.
wazuh_alert_timelinereadReturn a time-bucketed breakdown of Wazuh alerts using OpenSearch date_histogram.
wazuh_attack_velocityreadCompare two adjacent time windows to detect attack acceleration or deceleration.
wazuh_compromised_emails_analysisreadCorrelate compromised email addresses with attacker IPs from Wazuh alerts.
wazuh_domain_lookupreadSearch Wazuh alerts for a specific domain name.
wazuh_email_lookupreadSearch Wazuh alerts for email addresses and rank top-N most frequently seen.
03

Trust audit

BLOCKgrade F · trust 56/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (12 observation(s))
Network
declared (16 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
mcp_server/core/tool_decorator.py:171
out[k] = eval(v, globalns)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
mcp_server/tools/webshell_check.py:27
(r"<\?php\s+exec\s*\(.+\)", "Generic PHP exec() backdoor", "medium"),
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_server/tools/host_forensics.py:641
name="blueteam_check_ssh_authorized_keys",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_server/tools/host_forensics.py:644
async def blueteam_check_ssh_authorized_keys(params: BypassRedactionInput) -> str:
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_server/tools/host_forensics.py:654
_audit_log("blueteam_check_ssh_authorized_keys", {})
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_server/tools/host_forensics.py:657
ak = home / ".ssh" / "authorized_keys"
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp_server/tools/host_forensics.py:665
root_ak = Path("/root/.ssh/authorized_keys")
Why it matters. touches a credential store
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
mcp_server/tools/webshell_check.py:234
cmd = ["curl", "-s", "--insecure", "--max-time", str(params.timeout)]
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
mcp_server/tools/__init__.py:123
__import__(f"mcp_server.tools.{attr}", fromlist=[attr])
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
mcp_server/agents/playbook_graph.py:39
"c2_beacon":              {"rule_groups": ["c2", "beacon", "netflow", "outbound"],
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
mcp_server/core/constants.py:28
"Exfiltration":            "C",
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
mcp_server/core/constants.py:68
"Exfiltration":          2.0,
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
mcp_server/correlation/forecast_core.py:48
"Command and Control", "Exfiltration", "Impact", "Lateral Movement",
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
mcp_server/correlation/three_sum_core.py:545
"slow_burn ({}) = 7d only (possible slow beacon / monthly C2). "
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
bake_mitre_tactics.py:166
for key, value in (("WAZUH_INDEXER_URL", "https://127.0.0.1:9200"),
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
blueteam_attack_chain, blueteam_stix_killchain
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_prompt_drift.py:257
model = getattr(importlib.import_module(module_name), model_name)
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_label_mitre_bake.py:71
exec(compile(source, "generated.py", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_webshell_check.py:27
body = "<?php eval(base64_decode('cGhwaW5mbygpOw==')); ?>"
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_webshell_check.py:63
{"weight": "medium", "family": "exec()"},
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcp_server/core/rule_staging.py:126
assert not safe_filename("../../etc/cron.d/x.yar", ".yar"), "traversal must be rejected"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_markitdown_convert.py:52
err, prep = mc._prepare(_input(path="/opt/evidence/../../etc/passwd"))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_sigma_rules.py:347
for bad in ("../../etc/cron.d/x.yml", "x.yar"):
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_yara_rules.py:269
rule_source=_VALID_RULE, filename="../../etc/cron.d/x.yar",
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/test_http_client.py:370
assert _is_private_or_reserved("169.254.169.254") is True
Why it matters. cloud metadata endpoint: the classic SSRF credential grab

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 7da5192d570ffull audit observations/trust-audit/mcp-server/infokom-ki__wazuh-mcp-server.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-087da5192d570fBLOCKF56first audit
05

Questions

What is the Wazuh-MCP-Server MCP server?

Wazuh MCP Server: AI-Driven SOC Automation

What tools does Wazuh-MCP-Server expose?

114 in total: 99 read-only, 13 that write, and 2 that can delete or overwrite (blueteam_attack_chain, blueteam_stix_killchain). Every one is listed on this page with its risk.

Is Wazuh-MCP-Server safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (56/100) and found 8 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Wazuh-MCP-Server need?

It reads ABUSEIPDB_API_KEY, ARGUS_API_KEY, BLUETEAM_ALLOW_FORENSIC_BYPASS, BLUETEAM_FORENSIC_TOKEN, CROWDSEC_API_KEY, MCP_API_KEY, MCP_API_KEY_SCOPES, MISP_API_KEY, NETRA_API_KEY, RAPIDAPI_KEY, SANGFOR_BLOCKLIST_TOKEN and THREATFOX_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Wazuh-MCP-Server run?

It speaks stdio and streamable-http, so it runs as a local process your client starts.

How current is this page?

The grade is for one exact copy of the source (7da5192d570f), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement