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.
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
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
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.
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_toolblueteam_ai_bot_reconSurface 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_chainAnalyze rule-to-rule transitions to reconstruct attack kill-chain progression.
blueteam_beacon_detectDetect 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_compareCompare 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_reportGenerate 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_virustotalCheck file hash reputation via VirusTotal. Args: params.hash: File hash (MD5/SHA1/SHA256) params.response_format: 'markdown' or 'json'
blueteam_lookup_domain_virustotalCheck domain reputation via VirusTotal. Args: params.domain: Domain name params.response_format: 'markdown' or 'json'
argus_ip_lookupQuery 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_analysisQuery 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_checkCheck if an IP is currently blocked by Sangfor firewall.
sangfor_blocklist_listList 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_scoreQuery 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_summarizeSummarize Wazuh alerts for a source IP into a compact threat digest.
blueteam_threat_cardGenerate 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_contextLook up internal asset context for a hostname/subdomain.
blueteam_attack_graphAnalyze the attacker relationship graph - campaign clusters, hubs, bridges.
blueteam_pivot_suggestSuggest the next investigation step for an IOC, driven by the attack graph.
blueteam_campaign_watchDetect campaign evolution: new clusters and growth in existing clusters.
blueteam_baseline_profileCompute statistical baselines for alert volume, unique IPs, or severity.
blueteam_calendar_heatmapDetect scheduled attack patterns via day×hour heatmap analysis.
blueteam_baseline_driftDetect alert-volume anomalies: current window vs a historical baseline via Z-score.
blueteam_case_createCreate a new investigation case (durable incident record).
blueteam_case_add_iocsAttach IOC to an existing case. **Worked Examples** 1. ``blueteam_case_add_iocs(case_id="case_abc123", iocs=["evil.com", "d41d8cd98f00..."])``
blueteam_case_add_verdictRecord an investigation verdict against a srcip within a case.
blueteam_case_getFetch a case by ID, with all its IOCs and verdicts.
blueteam_case_listList all cases (most recent first).
wazuh_alert_aggregate_analysisZero-doc statistical analysis of Wazuh alerts across the full index.
three_sum_correlationEvaluate 3-Sum APT detection across 3 Wazuh alert categories.
blueteam_investigate_ipRun 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_lookupFetch a CVE record from NVD: description, CVSS, severity, references.
blueteam_cve_epssReturn EPSS scores for one or more CVE IDs (exploitation probability).
blueteam_cve_kevCheck if a CVE is in the CISA Known Exploited Vulnerabilities (KEV) catalog.
blueteam_cve_pocSearch for public proof-of-concept exploits for a CVE (GitHub + Nuclei).
blueteam_cve_scoreCompute a composite 0-100 risk score for a CVE (CVSS + EPSS + KEV + PoC).
blueteam_cve_ssvcTriage a CVE with the CISA SSVC Deployer tree (Act / Attend / Track* / Track).
blueteam_dependency_scanScan a dependency manifest against OSV.dev and return vulnerable packages.
blueteam_document_convertConvert 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_permuteGenerate 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_queryExecute a raw OpenSearch DSL aggregation query against the Wazuh Indexer.
blueteam_fail2ban_statusList all active fail2ban jails and their ban counts.
blueteam_fail2ban_jail_statusGet detailed status of a specific fail2ban jail, including all banned IPs.
blueteam_fail2ban_unbanUnban an IP address from a specific fail2ban jail. DESTRUCTIVE: Modifies security state (removes ban).
blueteam_wazuh_geo_distributionShow top attacking countries by alert volume using Wazuh GeoIP data.
blueteam_read_auth_logRead and optionally filter /var/log/auth.log for SSH, sudo, and PAM events.
blueteam_read_syslogRead /var/log/syslog or journalctl for general system events.
blueteam_read_web_logRead nginx or Apache access/error logs. Great for spotting web attacks.
blueteam_journalctlQuery systemd journal for any service. Useful for services without flat log files.
blueteam_list_listening_portsList all TCP/UDP ports currently listening, with owning process. Equivalent to 'ss -tulpn'. Identifies unexpected services.
blueteam_list_connectionsList all established TCP connections with remote IPs and local processes. Useful for spotting unexpected outbound connections (beaconing, exfil).
blueteam_capture_trafficCapture 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_fileCompute a cryptographic hash of a file. Use to detect tampering. Pair with blueteam_lookup_hash_virustotal to check for known malware.
blueteam_find_suid_filesFind all SUID/SGID binaries on the system. Unexpected SUID files can indicate privilege escalation backdoors.
blueteam_find_world_writableFind world-writable files and directories (excluding /proc, /sys, /dev). World-writable files in unexpected places are common persistence mechanisms.
blueteam_rootkit_scanRun a rootkit scanner (rkhunter or chkrootkit) to check for known rootkits.
blueteam_lynis_auditRun a Lynis system hardening audit. Checks hundreds of security controls and produces prioritized recommendations. Takes 1-2 minutes.
blueteam_check_updatesCheck for available security updates (Debian/Ubuntu: apt, RHEL: dnf/yum).
blueteam_check_open_firewallShow current firewall rules (iptables/nftables/ufw). Identifies overly permissive rules or missing protections.
blueteam_who_is_logged_inShow currently logged-in users, their source IPs, and session times. Useful for detecting unauthorized active sessions.
blueteam_last_loginsShow recent login history from /var/log/wtmp. Includes successful and failed logins with source IP and timestamps.
blueteam_failed_loginsShow all failed login attempts from /var/log/btmp (lastb). High counts from a single IP indicate brute force.
blueteam_sudo_historyShow recent sudo command usage from auth.log. Identifies privilege escalation abuse.
blueteam_list_usersList 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_keysList all SSH authorized_keys files across all user home directories. Unexpected keys indicate backdoors or persistence mechanisms.
blueteam_list_processesList all running processes with CPU, memory, PID, and command line. Useful for spotting unexpected processes or cryptominers.
blueteam_list_cron_jobsList all system and user cron jobs. Attackers often add cron jobs for persistence. Check for unexpected entries.
blueteam_system_healthGet an overview of system health: uptime, disk, memory, CPU load. Useful baseline before deeper investigation.
blueteam_index_schemaDiscover Wazuh Indexer field names and types before building queries.
blueteam_mark_investigatedRecord 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_trackerCount how often a Wazuh rule fired but was later marked false-positive.
blueteam_investigation_summaryDashboard: unique IPs investigated, verdict breakdown, analyst notes.
blueteam_investigation_historyCheck if an IP was previously investigated and what the verdict was.
blueteam_false_positive_kbList the false-positive knowledge base - IOC the 3-Sum engine auto-suppresses.
blueteam_investigation_workflowRun 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_iocsExtract structured Indicators of Compromise from raw text.
blueteam_ioc_lifecycleQuery the IOC lifecycle store - discovered IOCs ranked by time-decay recency.
jarm_fingerprintFingerprint 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_convertConvert 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_metricsShow 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_lookupLook 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_bulkLook up multiple IOCs against AlienVault OTX concurrently (max 20).
blueteam_owned_domainsShow the active redaction policy and the configured owned (victim) domains.
blueteam_set_owned_domainsSet 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_runRun an alert-driven hunting + investigation playbook (langgraph supervisor).
blueteam_prompt_routeMap 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_ingestRebuild 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_queryRetrieve 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_validateAssemble 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_reportGenerate a SOC report deliverable (.docx / .xlsx / .pptx) via officecli.
blueteam_semantic_searchSemantic search over Wazuh rules using BM25 lexical ranking.
blueteam_sigma_rule_validateValidate 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_generateGenerate a Sigma rule draft from a Wazuh alert pattern or analyst text.
blueteam_sigma_rule_saveSave a validated Sigma rule to the staging directory for human review.
blueteam_sigma_rule_convertConvert a Sigma rule into an OpenSearch query or Dashboards artifact.
stealer_log_checkCheck if an email appears in known stealer logs (HudsonRock).
blueteam_stix_analyzeCorrelate Wazuh findings with the MITRE ATT&CK STIX 2.1 knowledge graph.
blueteam_stix_killchainBuild an ATT&CK kill chain for a source IP from observed alerts + the STIX graph.
blueteam_cve_attack_mappingMap a CVE to MITRE ATT&CK techniques and the threat groups that use them.
blueteam_threat_huntRun a named threat hunting query against Wazuh alert data.
blueteam_threat_intel_aggregateAggregate threat intelligence from all available providers for one IOC.
45 further tools are not listed here. The complete surface is in the source.
MCP_TRANSPORTMCP_HOSTMCP_PORTBLUETEAM_BEACON_EXCLUDE_IPSBLUETEAM_CMDB_FILEJSONL audit trail + stores (optional)BLUETEAM_INVESTIGATION_HISTORY_MAX_ENTRIESBLUETEAM_EXPORT_DIRMITRE_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 bundleBLUETEAM_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 bundleBLUETEAM_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 bundleBLUETEAM_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 bundleBLUETEAM_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 bundleMCP_API_KEYRemote HTTP service (http://<host>:<port>/mcp) — requires MCP_API_KEY beyond 127.0.0.1 (bind guard enforced)MCP_API_KEY_SCOPESpre-shared API key + scopes for streamable_httpBLUETEAM_HTTP_RATE_LIMITper-IP sliding-window rate limit (req/min, 0=off) + Origin allowlist (loopback always allowed)BLUETEAM_ALLOWED_ORIGINSper-IP sliding-window rate limit (req/min, 0=off) + Origin allowlist (loopback always allowed)LOG_LEVELBLUE_TEAM_MCP_SERVER_NAMEBLUETEAM_LANGGRAPH_NODE_TIMEOUTBLUETEAM_LANGGRAPH_DBBLUETEAM_CAMPAIGN_SNAPSHOTSBLUETEAM_GRAPH_CACHE_TTLBLUETEAM_ATTACKER_REGISTRYJSONL audit trail + stores (optional)BLUETEAM_ATTACKER_REGISTRY_TTLBLUETEAM_ATTACKER_REGISTRY_MAXBLUETEAM_CASE_STOREJSONL audit trail + stores (optional)BLUETEAM_CASE_MAXWAZUH_API_URLManager API (55000) — rules/agents/configWAZUH_API_USERWAZUH_API_PASSWORDWAZUH_API_VERIFY_SSLdefault trueWAZUH_INDEXER_URLOpenSearch (9200) — alert/event dataWAZUH_INDEXER_USERWAZUH_INDEXER_PASSWORDWAZUH_INDEXER_VERIFY_SSLdefault trueWAZUH_INDEXER_MAX_SIZECROWDSEC_API_KEY9 providers + RapidAPI + HudsonRock; all optionalCROWDSEC_CACHE_TTLCROWDSEC_BASE_URLGREYNOISE_BASE_URLTHREATFOX_API_KEY9 providers + RapidAPI + HudsonRock; all optionalTHREATFOX_CACHE_TTLTHREATFOX_BASE_URLABUSEIPDB_API_KEY9 providers + RapidAPI + HudsonRock; all optionalABUSEIPDB_BASE_URLVIRUSTOTAL_API_KEY9 providers + RapidAPI + HudsonRock; all optionalVIRUSTOTAL_BASE_URLNETRA_API_KEY9 providers + RapidAPI + HudsonRock; all optionalNETRA_VERIFY_SSLNETRA_BASE_URLNETRA_MIN_INTERVALseconds between upstream lookups — default 30/30/5ARGUS_API_KEY9 providers + RapidAPI + HudsonRock; all optionalARGUS_VERIFY_SSLARGUS_BASE_URLARGUS_MIN_INTERVALseconds between upstream lookups — default 30/30/5RDAP_BASE_URLCRTSH_BASE_URLOTX_API_KEY9 providers + RapidAPI + HudsonRock; all optionalOTX_CACHE_TTLOTX_BASE_URLURLHAUS_API_KEY9 providers + RapidAPI + HudsonRock; all optionalURLHAUS_CACHE_TTLURLHAUS_BASE_URLHUDSONROCK_API_KEY9 providers + RapidAPI + HudsonRock; all optionalHUDSONROCK_BASE_URLRAPIDAPI_KEY9 providers + RapidAPI + HudsonRock; all optionalRAPIDAPI_CACHE_TTLSANGFOR_BLOCKLIST_URLSANGFOR_BLOCKLIST_TOKENSANGFOR_BLOCKLIST_TIMEOUTSANGFOR_BLOCKLIST_VERIFY_SSLSANGFOR_MIN_INTERVALseconds between upstream lookups — default 30/30/5BLUETEAM_REDACTION_POLICYsee Security & PrivacyBLUETEAM_REDACT_PIIBLUETEAM_REDACT_EMAILSBLUETEAM_REDACT_DOMAINSBLUETEAM_REDACT_LOCATIONSBLUETEAM_REDACT_UASBLUETEAM_OWNED_DOMAINSsee Security & PrivacyBLUETEAM_ALLOW_RUNTIME_DOMAINS(gated by =true, default off).BLUETEAM_ALLOW_FORENSIC_BYPASSdefault false / emptyBLUETEAM_FORENSIC_TOKENdefault false / emptyBLUETEAM_IOC_STOREJSONL audit trail + stores (optional)BLUETEAM_IOC_STORE_MAXBLUETEAM_EXPORT_RETENTION_DAYSBLUETEAM_AUTO_PROMOTE_IPSBLUETEAM_AUDIT_LOGJSONL audit trail + stores (optional)BLUETEAM_RATE_LIMITfrom , which gates destructive tools (fail2ban unban, tcpdump capture)BLUETEAM_INVESTIGATION_HISTORYBLUETEAM_CHARACTER_LIMITHTTP_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 upstreamBLUETEAM_ALLOW_UNTRUNCATEDWAZUH_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 importWAZUH_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 importWAZUH_READ_ONLYoffensive tooling. 144 tools + 4 resources (118 when =true) across Wazuh SIEM, multi-provider threatBLUETEAM_RERANK_ENABLEDsynonym / cross-lingual matching. Gated by (default false);BLUETEAM_RERANK_MODELBLUETEAM_RERANK_CACHE_PATHinto — local-only, never a hosted API.BLUETEAM_RERANK_MAX_CANDIDATESquery distributions, so a fixed floor deletes good matches.BLUETEAM_RERANK_MODEL_SHA256BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).BLUETEAM_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).ALLOWED_INTERNAL_DOMAINScomma-separated internal domains blueteam_check_webshell may reach on non-public IPs (default: reject all non-public hosts)BLUETEAM_SIGMA_VERIFY_FIELDSBLUETEAM_SIGMA_CHECK_EXISTINGBLUETEAM_SIGMA_MONITOR_INTERVALBLUETEAM_FALSE_POSITIVE_KBJSONL audit trail + stores (optional)BLUETEAM_FALSE_POSITIVE_TTLBLUETEAM_FALSE_POSITIVE_MAXBLUETEAM_IOC_STORE_TTLBLUETEAM_ALLOWED_PATHS(mode="alert", Indexer API), a sample underBLUETEAM_CAPTURE_DIRBLUETEAM_INDEXER_CACHE_TTLTool 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.
[](https://m8ven.ai/mcp/infokom-ki/wazuh-mcp-server)?variant=verified from the URL.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