waf_rule_stats
Retrieve statistics of loaded WAF rules, including compilation status, errors, and category counts.
Instructions
返回当前已加载规则的统计:含 rules_file、compiled_rules、compile_failed、compile_errors(截断)及分类计数。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/waf_mcp/server.py:91-94 (handler)The MCP tool handler for 'waf_rule_stats'. Decorated with @mcp.tool, it returns the WAF engine's statistics by calling _get_engine().get_stats().
@mcp.tool def waf_rule_stats() -> Dict[str, Any]: """返回当前已加载规则的统计:含 rules_file、compiled_rules、compile_failed、compile_errors(截断)及分类计数。""" return _get_engine().get_stats() - src/waf_mcp/waf_engine.py:125-149 (schema)The get_stats() method on WAFEngine that provides the actual statistics data (total_rules, enabled_rules, compiled_rules, compile_failed, categories, severities, etc.)
def get_stats(self) -> Dict: """获取规则统计""" categories = {} severities = {} for rule in self.rules: if rule.get("enabled") is False: continue cat = rule.get("category", "other") sev = rule.get("severity", "medium") categories[cat] = categories.get(cat, 0) + 1 severities[sev] = severities.get(sev, 0) + 1 enabled_rules = [r for r in self.rules if r.get("enabled") is not False] return { "rules_file": str(self.rules_file), "total_rules": len(self.rules), "enabled_rules": len(enabled_rules), "compiled_rules": len(self.compiled_rules), "compile_failed": len(self.compile_failures), "compile_errors": self.compile_failures[:50], "categories": categories, "severities": severities, } - src/waf_mcp/server.py:52-52 (registration)The FastMCP instance ('mcp') is created here; the @mcp.tool decorator on waf_rule_stats registers it as a tool.
mcp = FastMCP(name="hospital-waf") - src/waf_mcp/server.py:39-43 (helper)The _get_engine() helper that lazily initializes and returns the WAFEngine singleton used by waf_rule_stats.
def _get_engine() -> WAFEngine: global _engine if _engine is None: _engine = WAFEngine(str(_rules_path())) return _engine