Skip to main content
Glama
KratosUAE

WAF MCP Server

by KratosUAE

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:

  1. Overview — see total events, unique IPs, active rules at a glance

  2. Drill down — filter events by IP or rule, inspect matched data

  3. 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

waf_overview

Dashboard: total events, unique IPs/rules, events last hour

waf_top_ips

Top IPs by event count with geo enrichment (ipinfo.io)

waf_top_rules

Most triggered rules with severity and description

waf_fp_candidates

Rules that fired on HTTP 2xx responses (false positive candidates)

waf_events_by_ip

Events filtered by source IP

waf_events_by_rule

Events filtered by rule ID

waf_event_detail

Full event: headers, request body, all rule matches with matched data

Actions

Tool

Description

waf_status

Container health, engine mode, rules loaded, paranoia level

waf_set_engine

Switch between On, Off, DetectionOnly

waf_set_paranoia

Set CRS paranoia level (1–4)

waf_disable_rule

Disable a rule by ID (adds SecRuleRemoveById to exclusions)

waf_enable_rule

Re-enable a previously disabled rule

waf_allow_ip

Whitelist an IP (bypass WAF entirely)

waf_deny_ip

Remove an IP from whitelist

waf_test

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 hour

verbosewaf_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

matchedData (per rule)

150–200 chars

4000 chars

requestBody

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 build

Configuration

Environment variables

Variable

Required

Default

Description

WAF_COMPOSE_DIR

Yes

Path to directory containing docker-compose.yml

WAF_DOMAIN

No

https://localhost

Domain for WAF test requests

WAF_LOGS_SINCE

No

24h

Default time window for log queries

WAF_CONTAINER_PATTERN

No

modsecurity

Grep pattern to find the ModSecurity container

WAF_EXCLUSIONS_FILE

No

modsecurity/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

Path to CRS exclusions file (relative to compose dir)

WAF_COMPOSE_FILE

No

docker-compose.yml

Docker Compose filename

IPINFO_TOKEN

No

ipinfo.io token for IP geolocation

WAF_DEBUG

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.js

Or 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:ro

Key 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 parsing

  • Exclusions 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 probes

Development

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 logging

Architecture

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 utilities

Events 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 tools
waf_allow_ipB

Whitelist an IP address to bypass WAF inspection entirely.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesIP address to whitelist (bypass WAF inspection)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesIP address to remove from whitelist

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYesModSecurity rule ID to disable (e.g. '942140')

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYesModSecurity rule ID to re-enable (e.g. '942140')

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesEvent index from a previous query result
verboseNoReturn full body and matched data (default: truncated for readability)
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesIP address to filter events by
countNoNumber of events to return (default 20)
verboseNoInclude full matched data in rules (default: truncated)
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYesRule ID to filter events by
countNoNumber of events to return (default 20)
verboseNoInclude full matched data (default: truncated)
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesWAF engine mode: On (blocking), Off (disabled), DetectionOnly (log only)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYesCRS paranoia level (1 = low, 4 = highest). Higher levels catch more attacks but increase false positives.

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of top IPs to return (default 10)
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of top rules to return (default 10)
sinceNoTime window for log search (e.g. '1h', '24h', '7d'). Default: 24h24h

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: IP management, rule toggling, event analysis, engine settings, and testing. No two tools overlap in functionality.

Naming Consistency5/5

All tools follow a consistent 'waf_verb_noun' pattern, making it easy to predict what each tool does based on its name.

Tool Count5/5

15 tools is an appropriate number for a WAF management server, covering operations, monitoring, and tuning without being overwhelming.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables 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.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage and analyze containers across Docker and Podman through natural language, providing unified inspection, monitoring, and diagnostics.
    3
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides Docker management tools for AI agents, including inspecting containers, images, Dockerfiles, and Compose configurations.
    47
    1
    MIT

Latest Blog Posts

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