@@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.1.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8+ ## [ 4.0.7] - 2026-02-25
9+
10+ ### Added
11+ - 19 new action/verification/rollback tools (48 tools total):
12+ - 9 active response tools: block_ip, isolate_host, kill_process, disable_user, quarantine_file, active_response, firewall_drop, host_deny, restart
13+ - 5 verification tools: check_blocked_ip, check_agent_isolation, check_process, check_user_status, check_file_quarantine
14+ - 5 rollback tools: unisolate_host, enable_user, restore_file, firewall_allow, host_allow
15+ - Input validation for action tool parameters (IP addresses, file paths, usernames, AR commands)
16+ - Batch request size limit (MAX_BATCH_SIZE=100) to prevent resource exhaustion
17+ - SSE keepalive loop cancellation on client disconnect
18+ - ` fastmcp>=2.14.0 ` added to pyproject.toml dependencies
19+
20+ ### Fixed
21+ - ** Circuit breaker race condition** : State transitions now use asyncio.Lock for thread safety
22+ - ** Retry on non-transient errors** : Narrowed retry scope to 5xx and connection errors only (was retrying 400/401/404)
23+ - ** Circuit breaker monitoring always "unknown"** : Fixed ` cb._state ` → ` cb.state.value ` attribute mismatch
24+ - ** Unbounded Prometheus metric cardinality** : Endpoint labels now normalized to fixed set
25+ - ** JSONDecodeError crashes** : Added handling at all 5 ` response.json() ` call sites in wazuh_client.py and wazuh_indexer.py
26+ - ** Wazuh Indexer init race condition** : Added asyncio.Lock with double-check pattern
27+ - ** Non-deterministic cache keys** : Replaced ` hash() ` with ` sorted() ` for stable cross-process keys
28+ - ** Premature metrics increment** : Removed hardcoded status_code=200 counter before request processing
29+ - ** Session cleanup on every request** : Throttled to run at most every 60 seconds
30+ - ** 10 broken MCP tools** calling non-existent Wazuh Manager API endpoints
31+ - ** get_wazuh_alerts** now queries Wazuh Indexer instead of non-existent Manager API endpoint
32+ - ** 3 broken endpoints** : ` /manager/stats/all ` → ` /manager/stats ` , ` /cluster/health ` → ` /cluster/healthcheck ` , ` /manager/stats/logcollector ` → ` /manager/stats/analysisd `
33+ - ** get_rules_summary** calling non-existent ` /rules/summary ` endpoint — now aggregates from ` /rules `
34+ - ** CI release workflow** : Removed ` || true ` that silenced test failures
35+ - ** CI security workflow** : Replaced ` || true ` with ` continue-on-error: true ` for proper visibility
36+
37+ ### Removed
38+ - 4 dead-code methods with non-existent API endpoints (get_incidents, create_incident, update_incident, get_manager_version_check)
39+
840## [ 4.0.6] - 2025-02-14
941
1042### Added
0 commit comments