Wazuh-MCP-Server (INFOKOM-KI/Wazuh-MCP-Server) is an MCP server listed on the M8ven Trust Index. It scores 45 out of 100, grade D. It declares 145 tools. No publisher has claimed this listing.

D
Caution
45/100

Wazuh-MCP-Server

Wazuh MCP Server: AI-Driven SOC Automation

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

INFOKOM-KI

Source: github_repo_search

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
⚠️
Tool annotations don’t match behaviour
1 read-only tool performs write/delete/exec — blueteam_check_webshell (line 276: os.unlink(body_file))
⚠️
Tool descriptions don’t match what handlers do
1 tool describes read intent but its handler mutates — blueteam_check_webshell (line 276: os.unlink(body_file))
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
🔐
You'll be asked for 15 credentials: MCP_API_KEY, WAZUH_API_PASSWORD, WAZUH_INDEXER_PASSWORD, CROWDSEC_API_KEY, THREATFOX_API_KEY, ABUSEIPDB_API_KEY, VIRUSTOTAL_API_KEY, NETRA_API_KEY, ARGUS_API_KEY, OTX_API_KEY, URLHAUS_API_KEY, HUDSONROCK_API_KEY, RAPIDAPI_KEY, SANGFOR_BLOCKLIST_TOKEN, BLUETEAM_FORENSIC_TOKEN
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes145 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

blueteam_my_tool
blueteam_ai_bot_recon

Surface AI/LLM-driven reconnaissance and scanning against your perimeter. Aggregates Wazuh web-accesslog alerts whose raw log line (``full_log``) contains a known AI-agent user-agent (GPTBot, ClaudeBot, ChatGPT-User, PerplexityBot, etc.) or a suspicious custom agent string (ai-scanner, autogpt, lang

blueteam_attack_chain

Analyze rule-to-rule transitions to reconstruct attack kill-chain progression.

blueteam_beacon_detect

Detect C2 beaconing patterns via inter-arrival time analysis. Fetches ``@timestamp`` for all alerts from a given source IP, computes inter-arrival gaps, and calculates the coefficient of variation (CV = σ/μ). A low CV with consistent intervals is the statistical signature of periodic beaconing — a h

blueteam_wazuh_alert_compare

Compare alert profiles of two source IP side-by-side. Fetches alert counts, top rules, max severity, MITRE tactics, and beacon scores for both IPs and returns a structured comparison with a verdict on which IP is more suspicious. Saves the LLM from orchestrating 4+ sequential calls to analyze two IP

blueteam_curated_threat_report

Generate a geo/domain/rule-filtered threat intelligence report in one call. Combines alert aggregation, IP extraction, and multi-source threat intel enrichment into a single structured report. Replace 8-12 sequential LLM tool calls with one.

blueteam_lookup_hash_virustotal

Check file hash reputation via VirusTotal. Args: params.hash: File hash (MD5/SHA1/SHA256) params.response_format: 'markdown' or 'json'

blueteam_lookup_domain_virustotal

Check domain reputation via VirusTotal. Args: params.domain: Domain name params.response_format: 'markdown' or 'json'

argus_ip_lookup

Query Argus Threat Intelligence (TangerangKota-CSIRT) aggregating 7 sources. Renders every provider the response contains, with no hardcoded provider or field names, so a changed response structure still renders instead of showing blanks. Args: params.ip: Public IP to query params.response_format: '

netra_ip_analysis

Query Netra Threat Intelligence for IP analysis. Args: params.ip: Public IP to analyze params.response_format: 'markdown' or 'json' params.bypass_redaction: When true, skip PII/credential redaction for audit investigations.

sangfor_blocklist_check

Check if an IP is currently blocked by Sangfor firewall.

sangfor_blocklist_list

List IP blocked by Sangfor firewall, optionally filtered by timestamp and/or attacker IP/IoC. Sends a POST to the Sangfor /blocklist endpoint (SANGFOR_BLOCKLIST_URL already includes the /blocklist path) with a JSON body {date_start, date_end, limit, offset, ip}. The `ip` key is OMITTED from the body

blueteam_unified_threat_score

Query multiple threat intel sources and return a unified confidence score. Aggregates CrowdSec + ThreatFox + AbuseIPDB into a single weighted verdict (0.0–1.0) eliminating the need for 3+ sequential LLM tool calls per IP.

blueteam_wazuh_alert_summarize

Summarize Wazuh alerts for a source IP into a compact threat digest.

blueteam_threat_card

Generate a comprehensive threat card for a source IP. Collapses alert summarization, attack chain analysis, MITRE ATT&CK mapping, and threat intelligence (CrowdSec + GreyNoise) into a single structured report. Designed as the one-stop triage tool the LLM can understand the full threat context in one

blueteam_asset_context

Look up internal asset context for a hostname/subdomain.

blueteam_attack_graph

Analyze the attacker relationship graph - campaign clusters, hubs, bridges.

blueteam_pivot_suggest

Suggest the next investigation step for an IOC, driven by the attack graph.

blueteam_campaign_watch

Detect campaign evolution: new clusters and growth in existing clusters.

blueteam_baseline_profile

Compute statistical baselines for alert volume, unique IPs, or severity.

blueteam_calendar_heatmap

Detect scheduled attack patterns via day×hour heatmap analysis.

blueteam_baseline_drift

Detect alert-volume anomalies: current window vs a historical baseline via Z-score.

blueteam_case_create

Create a new investigation case (durable incident record).

blueteam_case_add_iocs

Attach IOC to an existing case. **Worked Examples** 1. ``blueteam_case_add_iocs(case_id="case_abc123", iocs=["evil.com", "d41d8cd98f00..."])``

blueteam_case_add_verdict

Record an investigation verdict against a srcip within a case.

blueteam_case_get

Fetch a case by ID, with all its IOCs and verdicts.

blueteam_case_list

List all cases (most recent first).

wazuh_alert_aggregate_analysis

Zero-doc statistical analysis of Wazuh alerts across the full index.

three_sum_correlation

Evaluate 3-Sum APT detection across 3 Wazuh alert categories.

blueteam_investigate_ip

Run a comprehensive IP investigation - alert profile, timeline, and geo. Combines three indexer queries in parallel: 1. Alert count + top rules (like alert summarization) 2. Hourly timeline (for pattern/beacon detection) 3. Geo distribution (country-level attack origin)

blueteam_cve_lookup

Fetch a CVE record from NVD: description, CVSS, severity, references.

blueteam_cve_epss

Return EPSS scores for one or more CVE IDs (exploitation probability).

blueteam_cve_kev

Check if a CVE is in the CISA Known Exploited Vulnerabilities (KEV) catalog.

blueteam_cve_poc

Search for public proof-of-concept exploits for a CVE (GitHub + Nuclei).

blueteam_cve_score

Compute a composite 0-100 risk score for a CVE (CVSS + EPSS + KEV + PoC).

blueteam_cve_ssvc

Triage a CVE with the CISA SSVC Deployer tree (Act / Attend / Track* / Track).

blueteam_dependency_scan

Scan a dependency manifest against OSV.dev and return vulnerable packages.

blueteam_document_convert

Convert a SOC PDF (IR playbook, vendor advisory, scanned report) to markdown/JSON/HTML/chunks using the Marker engine (surya layout + OCR models). SOC IR workflow: drop a playbook or advisory PDF on the server under an allowed path, then convert it to markdown for LLM analysis or to JSON for structu

blueteam_domain_permute

Generate typosquatting/phishing lookalikes of a domain. Produces the most likely near-miss domains an attacker would register against your org (omission, swap, repetition, homoglyph, hyphenation, TLD swap). Feed the top candidates into `blueteam_whois_lookup` / `blueteam_crtsh_lookup` to detect acti

wazuh_alert_dsl_query

Execute a raw OpenSearch DSL aggregation query against the Wazuh Indexer.

blueteam_fail2ban_status

List all active fail2ban jails and their ban counts.

blueteam_fail2ban_jail_status

Get detailed status of a specific fail2ban jail, including all banned IPs.

blueteam_fail2ban_unban

Unban an IP address from a specific fail2ban jail. DESTRUCTIVE: Modifies security state (removes ban).

blueteam_wazuh_geo_distribution

Show top attacking countries by alert volume using Wazuh GeoIP data.

blueteam_read_auth_log

Read and optionally filter /var/log/auth.log for SSH, sudo, and PAM events.

blueteam_read_syslog

Read /var/log/syslog or journalctl for general system events.

blueteam_read_web_log

Read nginx or Apache access/error logs. Great for spotting web attacks.

blueteam_journalctl

Query systemd journal for any service. Useful for services without flat log files.

blueteam_list_listening_ports

List all TCP/UDP ports currently listening, with owning process. Equivalent to 'ss -tulpn'. Identifies unexpected services.

blueteam_list_connections

List all established TCP connections with remote IPs and local processes. Useful for spotting unexpected outbound connections (beaconing, exfil).

blueteam_capture_traffic

Capture live network traffic using tcpdump. Requires root or CAP_NET_RAW. Read-only for packet inspection; writes pcap files when params.output_file is set. Makes network I/O (openWorldHint).

blueteam_hash_file

Compute a cryptographic hash of a file. Use to detect tampering. Pair with blueteam_lookup_hash_virustotal to check for known malware.

blueteam_find_suid_files

Find all SUID/SGID binaries on the system. Unexpected SUID files can indicate privilege escalation backdoors.

blueteam_find_world_writable

Find world-writable files and directories (excluding /proc, /sys, /dev). World-writable files in unexpected places are common persistence mechanisms.

blueteam_rootkit_scan

Run a rootkit scanner (rkhunter or chkrootkit) to check for known rootkits.

blueteam_lynis_audit

Run a Lynis system hardening audit. Checks hundreds of security controls and produces prioritized recommendations. Takes 1-2 minutes.

blueteam_check_updates

Check for available security updates (Debian/Ubuntu: apt, RHEL: dnf/yum).

blueteam_check_open_firewall

Show current firewall rules (iptables/nftables/ufw). Identifies overly permissive rules or missing protections.

blueteam_who_is_logged_in

Show currently logged-in users, their source IPs, and session times. Useful for detecting unauthorized active sessions.

blueteam_last_logins

Show recent login history from /var/log/wtmp. Includes successful and failed logins with source IP and timestamps.

blueteam_failed_logins

Show all failed login attempts from /var/log/btmp (lastb). High counts from a single IP indicate brute force.

blueteam_sudo_history

Show recent sudo command usage from auth.log. Identifies privilege escalation abuse.

blueteam_list_users

List all local user accounts with UID, GID, home dir, and shell. Highlights users with UID 0 (root-level) and users with login shells.

blueteam_check_ssh_authorized_keys

List all SSH authorized_keys files across all user home directories. Unexpected keys indicate backdoors or persistence mechanisms.

blueteam_list_processes

List all running processes with CPU, memory, PID, and command line. Useful for spotting unexpected processes or cryptominers.

blueteam_list_cron_jobs

List all system and user cron jobs. Attackers often add cron jobs for persistence. Check for unexpected entries.

blueteam_system_health

Get an overview of system health: uptime, disk, memory, CPU load. Useful baseline before deeper investigation.

blueteam_index_schema

Discover Wazuh Indexer field names and types before building queries.

blueteam_mark_investigated

Record an IP investigation verdict in the persistent JSONL history. Appends a timestamped entry to BLUETEAM_INVESTIGATION_HISTORY. This is the only tool that writes investigation state - all other tools (curated reports, threat cards, beacon detection) are read-only.

blueteam_false_positive_tracker

Count how often a Wazuh rule fired but was later marked false-positive.

blueteam_investigation_summary

Dashboard: unique IPs investigated, verdict breakdown, analyst notes.

blueteam_investigation_history

Check if an IP was previously investigated and what the verdict was.

blueteam_false_positive_kb

List the false-positive knowledge base - IOC the 3-Sum engine auto-suppresses.

blueteam_investigation_workflow

Run the full SOC investigation workflow (langgraph) end-to-end. Orchestrates the platform's analyzers as a stateful graph: extract IOCs -> false-positive gate (opt-in) -> threat-intel enrichment -> CVE pipeline (dependency scan + score + SSVC + MITRE) -> 3-Sum correlation -> attack graph -> STIX kil

blueteam_extract_iocs

Extract structured Indicators of Compromise from raw text.

blueteam_ioc_lifecycle

Query the IOC lifecycle store - discovered IOCs ranked by time-decay recency.

jarm_fingerprint

Fingerprint a TLS server (JARM-style) to identify C2/malware infrastructure. Probes the server with multiple TLS configurations and hashes the negotiated cipher + version + certificate. Identical fingerprints indicate the same underlying software - useful for attributing C2 servers. **No API key req

blueteam_markitdown_convert

Convert an office or data file (DOCX, XLSX, PPTX, PDF, HTML, CSV, JSON, XML, Outlook .msg) to Markdown for LLM ingestion using the lightweight MarkItDown engine (pdfminer-based; no torch, no OCR, no network egress).

blueteam_metrics

Show server telemetry per-tool call counts, latency, and guard counters. Surfaces the same data as the `metrics://prometheus` resource in a form the LLM can read directly: top tools by call count, top tools by cumulative latency, and redaction-gate / rate-limit rejections. Use it to find slow or hot

otx_lookup

Look up an IOC in AlienVault OTX (Open Threat Exchange). OTX is the largest open threat intel community. Unlike reputation-only feeds, OTX returns *pulses* - curated IOC collections with malware families, adversaries, industries, and MITRE ATT&CK technique IDs. This provides attribution and campaign

otx_lookup_bulk

Look up multiple IOCs against AlienVault OTX concurrently (max 20).

blueteam_owned_domains

Show the active redaction policy and the configured owned (victim) domains.

blueteam_set_owned_domains

Set the runtime owned (victim) domains used by `protect_victim` redaction. Operator action - changes which emails/subdomains are masked. In-memory only: the change lasts until restart; set `BLUETEAM_OWNED_DOMAINS` for a persistent default. **Worked Examples** 1. ``blueteam_set_owned_domains(domains=

blueteam_playbook_run

Run an alert-driven hunting + investigation playbook (langgraph supervisor).

blueteam_prompt_route

Map a natural language security prompt to the most relevant Wazuh MCP tools. Uses BM25 lexical ranking over all registered tool descriptions, with an optional cross-encoder rerank pass (``rerank=True``) for semantic, cross-lingual matching. Breaks the prompt into key terms, scores each against the t

blueteam_rag_ingest

Rebuild a RAG corpus label from its source of truth and embed it locally. Requires ``BLUETEAM_RAG_ENABLED=true`` and an absolute ``BLUETEAM_RAG_DB``. Requires the ``wazuh:write`` scope on the streamable_http transport (derived automatically from ``readOnlyHint=False``). ``source="cases"`` reads ``ca

blueteam_rag_query

Retrieve analyst knowledge: prior cases, confirmed false positives, IR playbooks. Two stages. Vector recall pulls ``recall_k`` candidates (default 100) from the local SQLite store; the optional cross-encoder rerank re-scores them and keeps ``top_k``. Rerank is rank-based and applies NO score thresho

blueteam_rag_fp_validate

Assemble false-positive evidence for one indicator. Recommends; never writes. Deterministic, in this order: 1. The indicator is in the exact-suppression set AND the attacker registry -> ``conflicting_state``. Neither store clears the other, so this tool refuses to pick a winner. 2. The indicator is

blueteam_export_report

Generate a SOC report deliverable (.docx / .xlsx / .pptx) via officecli.

blueteam_semantic_search

Semantic search over Wazuh rules using BM25 lexical ranking.

blueteam_sigma_rule_validate

Validate a Sigma rule: YAML + schema always, pySigma parse when installed. Read-only. No network, no filesystem access. Nothing is executed. Wazuh target: none. This tool touches no Wazuh API. Indexer unmapped-field checking happens in blueteam_sigma_rule_generate, which has the alert context.

blueteam_sigma_rule_generate

Generate a Sigma rule draft from a Wazuh alert pattern or analyst text.

blueteam_sigma_rule_save

Save a validated Sigma rule to the staging directory for human review.

blueteam_sigma_rule_convert

Convert a Sigma rule into an OpenSearch query or Dashboards artifact.

stealer_log_check

Check if an email appears in known stealer logs (HudsonRock).

blueteam_stix_analyze

Correlate Wazuh findings with the MITRE ATT&CK STIX 2.1 knowledge graph.

blueteam_stix_killchain

Build an ATT&CK kill chain for a source IP from observed alerts + the STIX graph.

blueteam_cve_attack_mapping

Map a CVE to MITRE ATT&CK techniques and the threat groups that use them.

blueteam_threat_hunt

Run a named threat hunting query against Wazuh alert data.

blueteam_threat_intel_aggregate

Aggregate threat intelligence from all available providers for one IOC.

45 further tools are not listed here. The complete surface is in the source.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configMCP_TRANSPORT
configMCP_HOST
configMCP_PORT
configBLUETEAM_BEACON_EXCLUDE_IPS
configBLUETEAM_CMDB_FILEJSONL audit trail + stores (optional)
configBLUETEAM_INVESTIGATION_HISTORY_MAX_ENTRIES
configBLUETEAM_EXPORT_DIR
configMITRE_ATTACK_STIXhttps:// URL or a local path (no file:///ftp://), cache path (default /var/log/blue-team-mcp/mitre_enterprise_attack.json), refresh TTL (7 days), fetch cap (100 MB — the corpus is 40 MB), retry after a failed first load (60s). A failed refresh keeps the last good bundle
configBLUETEAM_STIX_CACHEhttps:// URL or a local path (no file:///ftp://), cache path (default /var/log/blue-team-mcp/mitre_enterprise_attack.json), refresh TTL (7 days), fetch cap (100 MB — the corpus is 40 MB), retry after a failed first load (60s). A failed refresh keeps the last good bundle
configBLUETEAM_STIX_MAX_AGE_DAYShttps:// URL or a local path (no file:///ftp://), cache path (default /var/log/blue-team-mcp/mitre_enterprise_attack.json), refresh TTL (7 days), fetch cap (100 MB — the corpus is 40 MB), retry after a failed first load (60s). A failed refresh keeps the last good bundle
configBLUETEAM_STIX_MAX_MBhttps:// URL or a local path (no file:///ftp://), cache path (default /var/log/blue-team-mcp/mitre_enterprise_attack.json), refresh TTL (7 days), fetch cap (100 MB — the corpus is 40 MB), retry after a failed first load (60s). A failed refresh keeps the last good bundle
configBLUETEAM_STIX_RETRY_Shttps:// URL or a local path (no file:///ftp://), cache path (default /var/log/blue-team-mcp/mitre_enterprise_attack.json), refresh TTL (7 days), fetch cap (100 MB — the corpus is 40 MB), retry after a failed first load (60s). A failed refresh keeps the last good bundle
🔐 secretMCP_API_KEYRemote HTTP service (http://<host>:<port>/mcp) — requires MCP_API_KEY beyond 127.0.0.1 (bind guard enforced)
configMCP_API_KEY_SCOPESpre-shared API key + scopes for streamable_http
configBLUETEAM_HTTP_RATE_LIMITper-IP sliding-window rate limit (req/min, 0=off) + Origin allowlist (loopback always allowed)
configBLUETEAM_ALLOWED_ORIGINSper-IP sliding-window rate limit (req/min, 0=off) + Origin allowlist (loopback always allowed)
configLOG_LEVEL
configBLUE_TEAM_MCP_SERVER_NAME
configBLUETEAM_LANGGRAPH_NODE_TIMEOUT
configBLUETEAM_LANGGRAPH_DB
configBLUETEAM_CAMPAIGN_SNAPSHOTS
configBLUETEAM_GRAPH_CACHE_TTL
configBLUETEAM_ATTACKER_REGISTRYJSONL audit trail + stores (optional)
configBLUETEAM_ATTACKER_REGISTRY_TTL
configBLUETEAM_ATTACKER_REGISTRY_MAX
configBLUETEAM_CASE_STOREJSONL audit trail + stores (optional)
configBLUETEAM_CASE_MAX
configWAZUH_API_URLManager API (55000) — rules/agents/config
configWAZUH_API_USER
🔐 secretWAZUH_API_PASSWORD
configWAZUH_API_VERIFY_SSLdefault true
configWAZUH_INDEXER_URLOpenSearch (9200) — alert/event data
configWAZUH_INDEXER_USER
🔐 secretWAZUH_INDEXER_PASSWORD
configWAZUH_INDEXER_VERIFY_SSLdefault true
configWAZUH_INDEXER_MAX_SIZE
🔐 secretCROWDSEC_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configCROWDSEC_CACHE_TTL
configCROWDSEC_BASE_URL
configGREYNOISE_BASE_URL
🔐 secretTHREATFOX_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configTHREATFOX_CACHE_TTL
configTHREATFOX_BASE_URL
🔐 secretABUSEIPDB_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configABUSEIPDB_BASE_URL
🔐 secretVIRUSTOTAL_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configVIRUSTOTAL_BASE_URL
🔐 secretNETRA_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configNETRA_VERIFY_SSL
configNETRA_BASE_URL
configNETRA_MIN_INTERVALseconds between upstream lookups — default 30/30/5
🔐 secretARGUS_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configARGUS_VERIFY_SSL
configARGUS_BASE_URL
configARGUS_MIN_INTERVALseconds between upstream lookups — default 30/30/5
configRDAP_BASE_URL
configCRTSH_BASE_URL
🔐 secretOTX_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configOTX_CACHE_TTL
configOTX_BASE_URL
🔐 secretURLHAUS_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configURLHAUS_CACHE_TTL
configURLHAUS_BASE_URL
🔐 secretHUDSONROCK_API_KEY9 providers + RapidAPI + HudsonRock; all optional
configHUDSONROCK_BASE_URL
🔐 secretRAPIDAPI_KEY9 providers + RapidAPI + HudsonRock; all optional
configRAPIDAPI_CACHE_TTL
configSANGFOR_BLOCKLIST_URL
🔐 secretSANGFOR_BLOCKLIST_TOKEN
configSANGFOR_BLOCKLIST_TIMEOUT
configSANGFOR_BLOCKLIST_VERIFY_SSL
configSANGFOR_MIN_INTERVALseconds between upstream lookups — default 30/30/5
configBLUETEAM_REDACTION_POLICYsee Security & Privacy
configBLUETEAM_REDACT_PII
configBLUETEAM_REDACT_EMAILS
configBLUETEAM_REDACT_DOMAINS
configBLUETEAM_REDACT_LOCATIONS
configBLUETEAM_REDACT_UAS
configBLUETEAM_OWNED_DOMAINSsee Security & Privacy
configBLUETEAM_ALLOW_RUNTIME_DOMAINS(gated by =true, default off).
configBLUETEAM_ALLOW_FORENSIC_BYPASSdefault false / empty
🔐 secretBLUETEAM_FORENSIC_TOKENdefault false / empty
configBLUETEAM_IOC_STOREJSONL audit trail + stores (optional)
configBLUETEAM_IOC_STORE_MAX
configBLUETEAM_EXPORT_RETENTION_DAYS
configBLUETEAM_AUTO_PROMOTE_IPS
configBLUETEAM_AUDIT_LOGJSONL audit trail + stores (optional)
configBLUETEAM_RATE_LIMITfrom , which gates destructive tools (fail2ban unban, tcpdump capture)
configBLUETEAM_INVESTIGATION_HISTORY
configBLUETEAM_CHARACTER_LIMIT
configHTTP_TIMEOUTseconds per upstream request — default 30. Netra overrides it per request at 90s because its fan-out measured ~34s. A timeout counts as a breaker failure, so a budget below real latency trips the breaker for that upstream
configBLUETEAM_ALLOW_UNTRUNCATED
configWAZUH_DISABLED_TOOLSskip destructive tools / tool categories. The registered tool count changes with these. WAZUH_READ_ONLY=true skips the host_forensics (23 tools) and fail2ban (3 tools) modules at import, so the startup line reads 118 tools registered instead of 144: 144 - 23 - 3 = 118. Disabling a category via WAZUH_DISABLED_CATEGORIES subtracts that category's tools the same way. Each skip is logged at INFO with the category name, immediately before the count line. Nothing is hardcoded: the count comes from the live FastMCP registry after import
configWAZUH_DISABLED_CATEGORIESskip destructive tools / tool categories. The registered tool count changes with these. WAZUH_READ_ONLY=true skips the host_forensics (23 tools) and fail2ban (3 tools) modules at import, so the startup line reads 118 tools registered instead of 144: 144 - 23 - 3 = 118. Disabling a category via WAZUH_DISABLED_CATEGORIES subtracts that category's tools the same way. Each skip is logged at INFO with the category name, immediately before the count line. Nothing is hardcoded: the count comes from the live FastMCP registry after import
configWAZUH_READ_ONLYoffensive tooling. 144 tools + 4 resources (118 when =true) across Wazuh SIEM, multi-provider threat
configBLUETEAM_RERANK_ENABLEDsynonym / cross-lingual matching. Gated by (default false);
configBLUETEAM_RERANK_MODEL
configBLUETEAM_RERANK_CACHE_PATHinto — local-only, never a hosted API.
configBLUETEAM_RERANK_MAX_CANDIDATESquery distributions, so a fixed floor deletes good matches.
configBLUETEAM_RERANK_MODEL_SHA256
configBLUETEAM_RAG_ENABLEDSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_DBSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_MODELSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_CACHE_PATHSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_MAX_CANDIDATESSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_TOP_KSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_MAX_CHUNKSSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_CHUNK_CHARSSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_CHUNK_OVERLAPSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_ALLOW_DOWNLOADSQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configBLUETEAM_RAG_MODEL_SHA256SQLite retrieval corpus over cases / confirmed false positives / IR playbooks. ENABLED=true requires an absolute DB path or startup raises. ALLOW_DOWNLOAD defaults false (local_files_only).
configALLOWED_INTERNAL_DOMAINScomma-separated internal domains blueteam_check_webshell may reach on non-public IPs (default: reject all non-public hosts)
configBLUETEAM_SIGMA_VERIFY_FIELDS
configBLUETEAM_SIGMA_CHECK_EXISTING
configBLUETEAM_SIGMA_MONITOR_INTERVAL
configBLUETEAM_FALSE_POSITIVE_KBJSONL audit trail + stores (optional)
configBLUETEAM_FALSE_POSITIVE_TTL
configBLUETEAM_FALSE_POSITIVE_MAX
configBLUETEAM_IOC_STORE_TTL
configBLUETEAM_ALLOWED_PATHS(mode="alert", Indexer API), a sample under
configBLUETEAM_CAPTURE_DIR
configBLUETEAM_INDEXER_CACHE_TTL
// quality suggestions

Tool annotations

132/145 tools have annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

13/145 tools missing one or more hints — blueteam_wazuh_get_rules (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); blueteam_wazuh_get_decoders (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); blueteam_wazuh_get_groups (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +10 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool annotations match behaviour

1 read-only tool performs write/delete/exec — blueteam_check_webshell (line 276: os.unlink(body_file))

Either remove the readOnlyHint:true annotation, or remove the write/delete call from the tool handler.

Destructive tools are labelled

2 tools perform destructive updates without destructiveHint — blueteam_wazuh_export deletes at line 226 (old.unlink()); blueteam_check_webshell deletes at line 276 (os.unlink(body_file))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Descriptions match behaviour

1 tool describes read intent but its handler mutates — blueteam_check_webshell (line 276: os.unlink(body_file))

Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.

Tool test coverage

Only 34/145 tools referenced in tests (23%)

Write tests that reference each tool by name so every tool has at least one test.

Tool description accuracy

blueteam_check_webshell: description implies read-only but handler writes/deletes/executes

Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/infokom-ki/wazuh-mcp-server?variant=verified)](https://m8ven.ai/mcp/infokom-ki/wazuh-mcp-server)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 30138fb52fc83cd8aed3438ee735a50e8d8a8286
code hash: a237d30688431a402cf6714142a7f3d12d30297085ec5ac279763fedd0978d89
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client