WAF MCP Server
Provides tools for managing OWASP ModSecurity CRS via Docker, including monitoring container logs, executing commands, and managing Docker Compose services.
Provides tools for managing OWASP ModSecurity Core Rule Set (CRS), including rule enable/disable, paranoia level setting, engine mode switching, and false positive analysis.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WAF MCP Servershow waf overview for last 24 hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WAF MCP Server
An MCP (Model Context Protocol) server for managing OWASP ModSecurity CRS via Docker. Gives AI assistants like Claude direct access to WAF monitoring, analysis, and configuration through a structured drill-down pipeline.
Built for Claude Code but works with any MCP-compatible client.
Why
LLM proxy services (LiteLLM, OpenRouter, etc.) sit behind WAFs that generate massive amounts of false positives — prompts contain code, SQL, HTML, shell commands that trigger every content-inspection rule in the book. Managing these WAFs requires constant monitoring, tuning exclusions, and investigating events.
This MCP server lets an AI assistant do that work directly:
Overview — see total events, unique IPs, active rules at a glance
Drill down — filter events by IP or rule, inspect matched data
Act — disable rules, whitelist IPs, change engine mode — all without leaving the conversation
Related MCP server: Docker MCP Server
Tools
Analysis (drill-down pipeline)
Tool | Description |
| Dashboard: total events, unique IPs/rules, events last hour |
| Top IPs by event count with geo enrichment (ipinfo.io) |
| Most triggered rules with severity and description |
| Rules that fired on HTTP 2xx responses (false positive candidates) |
| Events filtered by source IP |
| Events filtered by rule ID |
| Full event: headers, request body, all rule matches with matched data |
Actions
Tool | Description |
| Container health, engine mode, rules loaded, paranoia level |
| Switch between |
| Set CRS paranoia level (1–4) |
| Disable a rule by ID (adds |
| Re-enable a previously disabled rule |
| Whitelist an IP (bypass WAF entirely) |
| Remove an IP from whitelist |
| Run test suite: scanner detection, SQLi, XSS, path traversal |
Common parameters
since — All analysis tools accept a since parameter to control the time window. Default is "24h". Supports Docker duration syntax: "1h", "24h", "7d", "30m". Days are automatically converted to hours (Docker's --since doesn't support the d suffix natively).
waf_overview(since: "7d") # last 7 days
waf_events_by_ip(ip: "1.2.3.4", since: "1h") # last hourverbose — waf_events_by_ip, waf_events_by_rule, and waf_event_detail accept verbose: true. By default, matchedData and requestBody are truncated to keep responses within context limits:
Field | Default | Verbose |
| 150–200 chars | 4000 chars |
| 500 chars | 8000 chars |
Prerequisites
Docker with a running owasp/modsecurity-crs container
Docker Compose managing the ModSecurity container
Node.js 18+
ModSecurity configured with JSON Serial audit log (
SecAuditLogFormat JSON)
Installation
git clone https://github.com/KratosUAE/waf_mcp.git
cd waf_mcp
npm install
npm run buildConfiguration
Environment variables
Variable | Required | Default | Description |
| Yes | — | Path to directory containing |
| No |
| Domain for WAF test requests |
| No |
| Default time window for log queries |
| No |
| Grep pattern to find the ModSecurity container |
| No |
| Path to CRS exclusions file (relative to compose dir) |
| No |
| Docker Compose filename |
| No | — | ipinfo.io token for IP geolocation |
| No | — | Set to any value to enable debug logging |
Connect to Claude Code
claude mcp add --transport stdio --scope user \
-e WAF_COMPOSE_DIR=/path/to/your/compose/dir \
-e WAF_DOMAIN=https://your-domain.com \
waf -- node /path/to/waf_mcp/dist/index.jsOr manually add to ~/.claude.json:
{
"mcpServers": {
"waf": {
"type": "stdio",
"command": "node",
"args": ["/path/to/waf_mcp/dist/index.js"],
"env": {
"WAF_COMPOSE_DIR": "/path/to/your/compose/dir",
"WAF_DOMAIN": "https://your-domain.com"
}
}
}
}Docker Compose setup
The server expects a ModSecurity container managed by Docker Compose. Example service definition:
modsecurity:
image: owasp/modsecurity-crs:nginx-alpine
environment:
- BACKEND=http://your-app:8080
- MODSEC_RULE_ENGINE=DetectionOnly
- MODSEC_AUDIT_LOG=/dev/stderr
- MODSEC_AUDIT_LOG_FORMAT=JSON
- MODSEC_AUDIT_LOG_TYPE=Serial
- MODSEC_AUDIT_ENGINE=RelevantOnly
- MODSEC_REQ_BODY_ACCESS=On
- MODSEC_REQ_BODY_LIMIT=52428800
- MODSEC_RESP_BODY_ACCESS=Off
- PARANOIA=1
- ANOMALY_INBOUND=5
volumes:
- ./modsecurity/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf:/etc/modsecurity.d/owasp-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf:roKey settings:
MODSEC_AUDIT_LOG=/dev/stderr— sends audit log to Docker logs (required for the MCP server to read events)MODSEC_AUDIT_LOG_FORMAT=JSON— JSON format for structured parsingExclusions file mount — allows hot-reload of rule exclusions via
nginx -s reload
CRS exclusions for LLM traffic
LLM API endpoints receive prompts containing code, SQL, HTML, and shell commands — all legitimate content that triggers WAF rules. Create an exclusions file to disable content-inspection rules on API paths:
# modsecurity/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
SecRule REQUEST_URI "@rx ^(/v1/)?(chat/completions|completions|embeddings|responses|messages)|^/anthropic/" \
"id:1000,phase:1,nolog,pass,\
ctl:ruleRemoveById=921000-944999"This disables rules 921000–944999 (all content-inspection categories: SQLi, XSS, RCE, LFI, RFI, etc.) on LLM API endpoints while keeping protocol enforcement, scanner detection, DoS protection, and IP reputation checks active.
Usage example
Typical workflow in Claude Code:
You: "Check the WAF — anything suspicious?"
Claude: [calls waf_overview]
→ 332 events, 4 unique IPs, 12 rules triggered
Claude: [calls waf_top_ips]
→ 135.237.83.23 (Washington, US, Microsoft) — 320 events
Claude: [calls waf_events_by_ip, ip: "135.237.83.23", count: 5]
→ All POST /chat/completions, HTTP 200, rules: 942360, 932100...
Claude: [calls waf_event_detail, index: 42]
→ User-Agent: OpenAI/JS 6.26.0, body contains tool descriptions
→ Rule 942360 matched "update" in cron action descriptions
Claude: "This is your OpenClaw bot — all false positives.
Want me to whitelist this IP?"
You: "Yes"
Claude: [calls waf_allow_ip, ip: "135.237.83.23"]
→ Done. IP whitelisted.Investigating older events:
You: "Check IP 185.206.249.230 — it was flagged yesterday"
Claude: [calls waf_events_by_ip, ip: "185.206.249.230", since: "7d"]
→ 2 events from Apr 7, GET /v1/skills, HTTP 401, no rules triggered
→ Apple Private Relay IP (Singapore), just unauthorized API probesDevelopment
npm run build # Compile TypeScript
npm test # Run tests (43 tests)
npm run test:watch # Watch mode
WAF_DEBUG=1 npm start # Run with debug loggingArchitecture
src/
├── index.ts # MCP server setup, tool registration
├── waf-manager.ts # Core service: Docker exec, log parsing, config management
├── types.ts # TypeScript interfaces
├── config.ts # Environment-based configuration
├── logger.ts # stderr-only logger (stdout reserved for MCP protocol)
└── tools/
├── overview.ts # L0: dashboard
├── top-ips.ts # L1: IP aggregation
├── top-rules.ts # L1: rule aggregation
├── fp-candidates.ts # L1: false positive detection
├── events-by-ip.ts # L2: drill-down by IP
├── events-by-rule.ts # L2: drill-down by rule
├── event-detail.ts # L3: full event inspection
├── status.ts # Container status
├── set-engine.ts # Engine mode control
├── set-paranoia.ts # Paranoia level control
├── disable-rule.ts # Rule management
├── enable-rule.ts # Rule management
├── allow-ip.ts # IP whitelist
├── deny-ip.ts # IP whitelist
├── test.ts # WAF test suite
└── utils.ts # Shared utilitiesEvents are parsed from Docker logs and cached for 30 seconds. Rapid drill-down calls (overview → top IPs → events by IP → event detail) hit the cache instead of re-parsing. The cache is invalidated when the since parameter changes.
License
MIT
Available Tools
15 toolswaf_allow_ipB
Whitelist an IP address to bypass WAF inspection entirely.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to whitelist (bypass WAF inspection) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait ('bypass WAF inspection entirely'), but since no annotations are provided, it carries the full burden. It does not detail reversibility, scope, or limitations, which are important for a security tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the main action. It is not verbose, but it could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is adequate but lacks details on prerequisites, side effects, or security implications. It serves as a minimal viable description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a description for the 'ip' parameter, and the tool description does not add new semantic information beyond what is in the schema. With 100% schema coverage, the baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Whitelist an IP address') and the effect ('to bypass WAF inspection entirely'), distinguishing it from sibling tools like waf_deny_ip (block) and waf_disable_rule (disable rule).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you want to bypass WAF for an IP, but it provides no explicit guidance on when not to use it or when to prefer alternatives like waf_deny_ip. No context about prerequisites or side effects is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_deny_ipB
Remove an IP address from the WAF whitelist.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to remove from whitelist |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action. It doesn't disclose idempotency, required permissions, or effects when IP not in whitelist, which are critical for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single 7-word sentence, no superfluous content. Perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description fails to provide necessary context like scope (all zones?), consequences, or prerequisites, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides 100% coverage with a description identical to the tool's description. The tool description adds no extra semantic value beyond the schema, making it redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Remove an IP address from the WAF whitelist' clearly states the specific action (remove) and resource (IP from whitelist), distinguishing it from sibling tools like waf_allow_ip which likely adds to the whitelist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like waf_allow_ip or waf_disable_rule. The description lacks any context about prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_disable_ruleA
Disable a specific ModSecurity rule by ID to suppress false positives.
| Name | Required | Description | Default |
|---|---|---|---|
| ruleId | Yes | ModSecurity rule ID to disable (e.g. '942140') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so description bears full responsibility. It discloses the action (disable) and purpose but omits critical details: whether the change is reversible (implied by sibling waf_enable_rule), immediate effect, side effects on other rules, or required permissions. A security-critical tool demands more transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundant words. It front-loads the action and purpose without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the basic action and purpose. However, it lacks usage guidance and behavioral details that would be expected for a tool that modifies security rules (e.g., impact, reversibility).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already provides pattern and example for ruleId. The description adds no additional meaning beyond the schema; it does not explain how to find the rule ID or its significance. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Disable' and the resource 'ModSecurity rule by ID', and explains the purpose 'to suppress false positives.' It implicitly distinguishes from sibling tools like waf_enable_rule (enable) and waf_allow_ip (IP allowlisting).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies usage for false positive suppression but lacks explicit guidance on when to use vs alternatives (e.g., waf_fp_candidates, waf_enable_rule). No when-not-to-use or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_enable_ruleA
Re-enable a previously disabled ModSecurity rule by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ruleId | Yes | ModSecurity rule ID to re-enable (e.g. '942140') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description lacks behavioral details such as side effects (e.g., immediate activation), required permissions, or error conditions. The description minimally states the action without further transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is front-loaded and efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description provides the core purpose. However, it omits context such as prerequisites (the rule must be disabled) and any consequences, making it adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the parameter fully (pattern, description), and the description adds an example ('e.g. 942140'). However, this adds little beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Re-enable') and the resource ('previously disabled ModSecurity rule by ID'). It is specific and distinguishes from sibling tools like waf_disable_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a rule needs to be re-enabled, but does not explicitly state when to use this tool versus alternatives (e.g., waf_disable_rule) or provide context on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_event_detailA
Full deep-dive into a single event by index. Shows all request headers, body snippet, all rule matches with matched data, and response code.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Event index from a previous query result | |
| verbose | No | Return full body and matched data (default: truncated for readability) | |
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the content returned (headers, body snippet, rule matches, response code) and the effect of the verbose parameter. However, it does not mention rate limits, authentication, or error conditions, which are minor omissions for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads the core purpose, and the second lists key outputs. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no output schema, and no annotations, the description covers the main behavior and parameter effects. It lacks details on output structure or potential errors, but it is sufficiently complete for an agent to understand basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal new meaning beyond the schema: it clarifies that index is from a previous query and verbose toggles truncation. The since parameter description is essentially repeated from the schema. No additional syntax or format details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Full deep-dive' and 'Shows') and the specific resource ('a single event by index'). It distinguishes from sibling tools like waf_events_by_ip or waf_events_by_rule which list multiple events, as this tool provides detailed information for one event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool is used when you have an index from a previous query and want detailed event info, but it does not explicitly state when to use it versus alternatives like waf_events_by_ip or waf_events_by_rule. No when-not or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_events_by_ipA
Drill into events from a specific IP address. Shows timestamps, methods, URIs, HTTP codes, and triggered rules.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to filter events by | |
| count | No | Number of events to return (default 20) | |
| verbose | No | Include full matched data in rules (default: truncated) | |
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals it is a read operation that returns specific event details. It does not mention side effects or prerequisites, but the behavior is straightforward for a query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the purpose, the second lists output fields. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a query tool with 4 well-documented parameters and no output schema, the description adequately explains the action and output. It covers the key information but could mention pagination or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add parameter-specific meaning beyond the schema, which already provides clear descriptions for ip, count, verbose, and since.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'drill into' and the resource 'events from a specific IP address'. It lists the output fields (timestamps, methods, URIs, HTTP codes, triggered rules), distinguishing it from sibling tools like waf_events_by_rule which filter by rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like waf_events_by_rule or waf_top_ips. The usage is implied from the description but lacks direct comparison or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_events_by_ruleA
Drill into events that triggered a specific rule. Shows timestamps, IPs, methods, URIs, HTTP codes, and matched data.
| Name | Required | Description | Default |
|---|---|---|---|
| ruleId | Yes | Rule ID to filter events by | |
| count | No | Number of events to return (default 20) | |
| verbose | No | Include full matched data (default: truncated) | |
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full burden. It discloses output fields but does not mention default truncation (verbose flag) or any limits/ordering. Behavioral traits are partially disclosed but lack key details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is concise and front-loads the core purpose. Every word contributes value, and no unnecessary information is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description covers the output fields well but omits mention of time window, sorting, or pagination. It is mostly complete for a simple drill-down tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context about output fields but does not provide additional meaning to individual parameters beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Drill into events that triggered a specific rule') and specifies the fields returned. It distinguishes well from siblings like waf_events_by_ip and waf_event_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Usage is implied ('drill into a specific rule'), but there is no mention of when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_fp_candidatesA
Rules that triggered on HTTP 2xx responses — likely false positives. Critical for WAF tuning.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavior. It specifies the filter on HTTP 2xx responses, which is key, but does not disclose data freshness, sorting, limits, or output format. The 'since' parameter from the schema is not mentioned, leaving behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the core function. It is front-loaded with the key action and context, though an additional sentence on typical usage could enhance structure without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description provides adequate context to understand its role in WAF tuning. However, it lacks details on output format or interpretation, which a user would need to effectively use the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter 'since' with a clear description and default. The tool's description adds no extra semantic meaning, but given full schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: listing WAF rules that triggered on HTTP 2xx responses, which are likely false positives. The verb 'triggered' implies retrieval, and the resource is well-specified, distinguishing it from sibling tools like waf_events_by_rule or waf_top_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is 'Critical for WAF tuning,' giving clear context for when to use it. However, it does not explicitly contrast with alternatives like waf_events_by_rule or provide when-not-to-use guidance, though the specific focus on 2xx responses implicitly differentiates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_overviewA
High-level WAF dashboard: total events, unique IPs, unique rules, events in last hour. Start here to assess if anything needs attention.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It accurately describes the output as aggregate metrics and implies it is read-only. Additional detail about data boundaries or refresh could improve transparency, but the description is adequate for the simple read behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the key metrics and purpose. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description fully covers its purpose, input, and output. It tells the agent exactly what metrics are returned and when to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add anything about the 'since' parameter beyond what the schema already provides (default, format examples).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a high-level WAF dashboard with specific metrics (total events, unique IPs, unique rules, events in last hour). It uses a specific verb ('assess') and distinguishes itself from sibling tools that perform specific actions or show detailed data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends starting here to assess if attention is needed, implying it is the entry point. However, it does not provide explicit exclusions or alternatives, though the context of sibling tools makes the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_set_engineA
Change WAF engine mode: On (actively blocking), Off (disabled), or DetectionOnly (log without blocking).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | WAF engine mode: On (blocking), Off (disabled), DetectionOnly (log only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the three modes and their effects (blocking, disabled, log only), which is basic behavioral disclosure. However, with no annotations provided, it lacks details on side effects, required permissions, or whether the change is immediate or reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is concise, front-loaded with the action, and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and no output schema, the description covers the core function and parameter meaning. Missing behavioral context, but completeness is adequate given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema's enum descriptions, essentially restating the same meanings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Change WAF engine mode') and lists the three distinct modes, providing specificity and distinguishing from sibling tools like waf_status or waf_set_paranoia.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., waf_status for checking mode, or waf_set_paranoia for adjusting detection sensitivity). The description is purely functional without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_set_paranoiaA
Set CRS paranoia level (1-4). Level 1 is minimal rules, level 4 is maximum security with more false positives.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | CRS paranoia level (1 = low, 4 = highest). Higher levels catch more attacks but increase false positives. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It mentions false positives as a consequence, but fails to disclose important behavioral traits such as whether the change is immediate, persistent, or affects all rules. The description is too high-level for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the core action. Every word serves a purpose. Extremely concise for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 param, no output schema), the description is mostly adequate. However, it lacks context about the broader impact (e.g., immediate application, if it requires a restart) and does not provide guidance on selecting levels. Sibling tools are numerous, but the description doesn't help differentiate usage scenarios further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single parameter 'level' has a clear description with minimum/maximum and effect. The tool description adds the trade-off between minimal rules and maximum security with false positives, but this largely repeats the schema info. Value added is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and the resource 'CRS paranoia level' with a specific numeric range (1-4). It distinguishes from sibling tools (IP operations, rule enabling, etc.) by focusing on a unique configuration parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool adjusts the paranoia level, which affects security vs. false positives. However, it does not explicitly mention when to use it versus alternatives, nor does it provide exclusions. The usage is straightforward from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_statusA
Get WAF container health, engine mode, rules loaded, and paranoia level.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states it 'gets' data, implying read-only, but omits authentication needs, rate limits, side effects (none), or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, immediately conveying the tool's purpose. Every word is informative; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately lists four key elements of the response. It could add format details or mention it is a read-only operation, but for a simple status check it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the baseline is 3. The description adds value by enumerating the specific data returned (health, engine mode, rules, paranoia level), which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and lists four distinct pieces of information ('health', 'engine mode', 'rules loaded', 'paranoia level'), clearly stating what the tool outputs and distinguishing it from siblings like waf_set_engine.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., waf_overview), no prerequisites, and no context about typical usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_testA
Run the WAF test suite to verify blocking and pass-through rules are working correctly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the tool as running tests, implying non-destructive behavior, but does not disclose potential side effects, authentication needs, or rate limits. The lack of transparency is notable for a test tool that might affect state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the action and purpose, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and many sibling tools, the description is complete enough. It clearly states the tool's purpose (verifying rules) and the domain (WAF test suite), making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema provides 100% coverage. The description adds no parameter details, but with no parameters to document, the baseline of 4 is appropriate. No additional value needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('run'), resource ('WAF test suite'), and purpose ('verify blocking and pass-through rules'). It distinguishes from sibling tools like waf_allow_ip or waf_disable_rule, which focus on configuration rather than verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. No when-not conditions or comparisons to siblings are given, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_top_ipsA
Top attacking IPs with hit counts, geo info, and last seen timestamp. Use to identify most active sources.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of top IPs to return (default 10) | |
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return data (hit counts, geo, last seen). With no annotations, it covers basic behavior but omits any constraints like rate limits or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. Every word adds value: field enumeration and usage hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, description adequately explains what is returned and the core purpose. Lacks any behavioral caveats, but sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides full coverage (100%) with descriptions for count and since. Description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns top attacking IPs with hit counts, geo info, and last seen timestamp. Distinguishes from siblings like waf_events_by_ip by focusing on aggregated top sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear use case: 'Use to identify most active sources.' But does not exclude alternative siblings or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waf_top_rulesA
Most frequently triggered WAF rules with severity and description. Use to identify dominant attack patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of top rules to return (default 10) | |
| since | No | Time window for log search (e.g. '1h', '24h', '7d'). Default: 24h | 24h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It mentions the output includes severity and description but does not disclose whether the operation is read-only, if any side effects occur, or if special permissions are needed. This is inadequate for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded, effectively communicating the tool's purpose and usage. Every word is meaningful and there is no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters and no output schema, the description is largely complete. It explains what the tool returns and its use case. A small improvement could be mentioning the output format or that it returns a list, but it is already sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters (count and since). The tool description does not add any additional parameter semantics beyond what the schema already provides, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the most frequently triggered WAF rules with severity and description, which is a specific verb+resource combination. It distinguishes itself from siblings like waf_top_ips and waf_event_detail by focusing on rules and attack patterns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to identify dominant attack patterns,' providing a clear context for when to use this tool. While it does not list alternatives or when not to use, it gives sufficient guidance for typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: IP management, rule toggling, event analysis, engine settings, and testing. No two tools overlap in functionality.
All tools follow a consistent 'waf_verb_noun' pattern, making it easy to predict what each tool does based on its name.
15 tools is an appropriate number for a WAF management server, covering operations, monitoring, and tuning without being overwhelming.
The tool set covers the full lifecycle of WAF management: IP whitelisting/blacklisting, rule enable/disable, engine mode, paranoia levels, event drilling, false positive detection, and testing. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Security intelligence for AI agents. 27 x402 endpoints: honeypot, forensics, CAPTCHA, preflight.
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Docker containers, execute commands inside them, and inspect container information through a minimalist set of tools supporting both stdio and HTTP transports.3211MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Docker containers through safe, permission-controlled access to inspect, manage, and diagnose containers, images, and compose services with built-in timeouts and AI-powered analysis.
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage and analyze containers across Docker and Podman through natural language, providing unified inspection, monitoring, and diagnostics.3
- AlicenseNot gradedqualityDmaintenanceProvides Docker management tools for AI agents, including inspecting containers, images, Dockerfiles, and Compose configurations.471MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/KratosUAE/waf_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server