wazuh-mcp
Provides tools for querying the OpenSearch-backed Wazuh Indexer, including alert search, alert statistics, timelines, vulnerability state, index listing, and raw OpenSearch DSL queries restricted to wazuh-* indices.
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., "@wazuh-mcpShow me the top security alerts from the 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.
wazuh-mcp
An MCP server for querying a remote Wazuh deployment. It talks to both halves of Wazuh — the Manager API (agents, rules, inventory, configuration) and the Wazuh Indexer (alerts, vulnerability state) — and exposes 34 tools plus a composite report generator.
Read-only by default. State-changing tools exist but stay disabled unless you explicitly opt in.
Why both backends
Wazuh splits its data in a way that trips people up: the Manager API knows about agents, rules and inventory, but historical alerts are not there — they live in the Indexer (OpenSearch). Anything resembling "what fired last night" or "top threats this week" needs the Indexer. Configure both.
The 4.8 release also moved vulnerability detection results from the Manager API into the Indexer. This server detects the manager version and routes vulnerability queries to whichever backend actually holds the data, so the same tool works across releases.
Related MCP server: Wazuh MCP Server
Install
uv syncConfigure
Copy .env.example to .env and fill it in, or set the variables in your MCP
client config.
Variable | Required | Default | Purpose |
| for Manager tools | — | e.g. |
| for Manager tools | — | API credentials |
| for alert tools | — | e.g. |
| for alert tools | — | Indexer credentials |
| no | — | Path to your Wazuh root CA (preferred over disabling TLS) |
| no |
| Set |
| no |
| Enables agent restart, scans, active response |
| no |
| Per-request timeout, seconds |
| no |
| Ceiling on any single result set |
| no |
| Alert index pattern |
| no |
| Vulnerability state index |
Either backend can be configured alone. Tools needing a missing backend fail with a message naming the exact variables to set, rather than a generic error.
Least-privilege credentials
Create a dedicated Wazuh API user with a read-only RBAC role instead of reusing
wazuh-wui. If you never intend to enable WAZUH_ALLOW_WRITE, the role needs
only read actions — the server's read-only default and the API's own RBAC then
reinforce each other.
Transports
stdio (default) for a local client — no token, no network surface.
streamable HTTP for remote clients, authenticated with a bearer token:
WAZUH_TRANSPORT=http WAZUH_PUBLIC_URL=https://wazuh.example.com/mcp \
WAZUH_AUTH_TOKENS=$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))') \
uv run wazuh-mcpVariable | Default | Purpose |
|
|
|
|
| Bind address; leave on loopback behind a proxy |
|
| Bind port |
|
| URL path to serve on |
| — | Required for |
| — | Required for |
| from | Accepted |
The HTTP transport fails closed: it will not start without a token of at
least 32 characters, or without WAZUH_PUBLIC_URL. Requests arrive as
Authorization: Bearer <token>; anything else gets a 401 carrying the
protected-resource metadata URL. DNS-rebinding protection is on, so the Host
header must appear in the allowlist — a forged one gets 421.
Terminate TLS in front of it. A bearer token over plain HTTP is sent in clear text, and binding to anything other than loopback logs a warning saying so. See deploy/DEPLOY.md for a systemd + nginx deployment, including the point that running on the Wazuh host lets you close ports 55000 and 9200 entirely.
Connect it
Claude Code
claude mcp add wazuh --env WAZUH_API_URL=https://wazuh.example.com:55000 --env WAZUH_API_USER=wazuh-mcp --env WAZUH_API_PASSWORD=secret --env WAZUH_INDEXER_URL=https://wazuh.example.com:9200 --env WAZUH_INDEXER_USER=wazuh-mcp --env WAZUH_INDEXER_PASSWORD=secret -- uv run --directory /Users/lema/Projects/wazuh-mcp wazuh-mcpClaude Desktop / any stdio client
{
"mcpServers": {
"wazuh": {
"command": "uv",
"args": ["run", "--directory", "/Users/lema/Projects/wazuh-mcp", "wazuh-mcp"],
"env": {
"WAZUH_API_URL": "https://wazuh.example.com:55000",
"WAZUH_API_USER": "wazuh-mcp",
"WAZUH_API_PASSWORD": "secret",
"WAZUH_INDEXER_URL": "https://wazuh.example.com:9200",
"WAZUH_INDEXER_USER": "wazuh-mcp",
"WAZUH_INDEXER_PASSWORD": "secret"
}
}
}
}Tools
Health and operations
Tool | What it answers |
| One call: manager version, daemon states, cluster, agent counts, Indexer health. Start here. |
| Node roles, sync state, healthcheck detail |
|
|
| analysisd queue pressure and dropped events, remoted counters, alert volume |
| The running |
| Read-only escape hatch for any Manager API endpoint |
Agents
Tool | What it answers |
| Filter by status, group, OS, version, name, or a raw |
| One endpoint in full: state, OS, hardware, package count |
| Fleet health: status mix, OS spread, outdated, ungrouped |
| Groups and their members |
| The config an agent actually loaded (did the group change land?) |
| Write. Restart agents |
Alerts (Indexer)
Tool | What it answers |
| The main alert query: time window, severity, agent, rule, MITRE, source IP, free text |
| "Top N by X" — one or two grouping levels, done server-side |
| Volume over time with automatic bucket sizing and peak detection |
| Raw OpenSearch DSL, restricted to |
| What data exists and how far back |
Vulnerabilities
Tool | What it answers |
| CVEs by agent, severity, CVE ID, package, CVSS floor |
| Exposure rollup: severity mix, worst hosts, most widespread CVEs |
Detection content
Tool | What it answers |
| Search the ruleset, including by compliance control |
| One rule plus its XML definition |
| Valid rule groups, or every control in a framework |
| How a log source is being parsed |
| ATT&CK techniques, tactics, groups, software, mitigations |
| CDB lookup lists and their contents |
Posture and inventory
Tool | What it answers |
| CIS-style hardening scores per policy, worst first |
| Individual checks with remediation text; defaults to failures |
| File integrity state, hashes, change counts |
| Legacy rootkit / policy-monitoring findings |
| Packages, processes, ports, interfaces, hardware, hotfixes |
| Fleet-wide package search — "who has log4j?" |
| Write. Trigger a FIM scan now |
Reporting
wazuh_generate_report returns structured data and a rendered markdown
report. Types: executive_summary, threat_activity, agent_health,
vulnerability_exposure, compliance (PCI DSS / GDPR / HIPAA / NIST 800-53 /
TSC), file_integrity, authentication.
Active response
wazuh_active_response — Write, destructive. Runs firewall-drop,
disable-account, host-deny and friends on named agents. Marked destructive
in its tool annotations so clients prompt before use.
Conventions
Time — relative (
30m,24h,7d) or ISO-8601. Alert queries default to 24 hours; reports to 7 days.Severity — maps to Wazuh rule levels: critical 15+, high 12–14, medium 7–11, low 4–6, info 0–3.
Agent IDs — zero-padded to three digits automatically;
000is the manager itself.Paging — list results carry
total_matchingand, when more exist,next_offset.
Safety
Read-only by default. Every state-changing tool checks
WAZUH_ALLOW_WRITEbefore issuing any request, and is annotated withread_only_hint=false/destructive_hint=true.Credential endpoints are blocked.
wazuh_api_requestrefuses/agents/{id}/keyand the authentication endpoint, so agent keys and API tokens cannot be pulled into a model's context.Index access is namespaced. Raw Indexer queries are restricted to
wazuh-*prefixes, with path-traversal patterns rejected, so a query cannot reach unrelated indices sharing the cluster.Output is bounded. Long strings are truncated and large containers summarised, so one broad query cannot flood the context window.
Development
uv run pytestuv run ruff check .The suite runs against a mocked Wazuh (respx) and covers the JWT
refresh-on-401 path, envelope handling, .keyword aggregation fallback,
4.8 vulnerability routing, write gating, index guards and report rendering.
Verified end to end against a live Wazuh 4.14.7 deployment. Version-specific behaviour the mocks alone would have missed, now covered by regression tests:
/agents/summary/statusnests counts underconnection/configuration; older releases returned one flat mapping. Both are parsed.wazuh-agentlessd,wazuh-csyslogd,wazuh-maild,wazuh-reportdandwazuh-clusterdare stopped in a healthy default install, so only stopped core daemons are reported as a problem.vulnerability.severityis the literal"-"for unscored CVEs — around a fifth of findings on a real host. It is relabelledUntriagedrather than dropped, so severity breakdowns reconcile with the total.The MITRE
*_idsparameters match internal STIX ids, not ATT&CK numbers. Lookups queryexternal_id/idsoT1595andattack-pattern--<uuid>both work.
Tests construct settings with _env_file=None and strip inherited WAZUH_*
variables, so a populated .env cannot leak into them and quietly satisfy the
assertions that check for missing configuration.
Available Tools
34 toolswazuh_active_responseRun an active-response commandADestructive
Execute an active-response command on agents — blocking an IP with firewall-drop, disabling an account, null-routing a host. This changes the state of production endpoints and can cut off network access, so it requires WAZUH_ALLOW_WRITE=true and should be confirmed with a human before use.
| Name | Required | Description | Default |
|---|---|---|---|
| custom | No | True when 'command' is a custom script on the agent rather than a built-in Wazuh AR command. | |
| command | Yes | Command to run. Built-ins: firewall-drop, restart-wazuh, disable-account, host-deny, route-null, win_route-null, netsh. A custom script configured on the agent may also be named. | |
| agent_ids | Yes | Agent IDs to run the command on. There is deliberately no 'all agents' shortcut — name the targets explicitly. | |
| arguments | No | Arguments for the command, e.g. ['1.2.3.4'] as the IP to block for firewall-drop. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently discloses that it is destructive and requires an explicit environment variable, matching the annotations (readOnlyHint=false, destructiveHint=true). It also warns about irreversible network impact, which is more detailed than the bare 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 two sentences, with the purpose front-loaded and no redundant information. Every sentence adds value, including the risk warning and required environment variable.
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?
The description conveys the essential context for a risky write operation: the purpose, the requirement for WAZUH_ALLOW_WRITE=true, and the need for human confirmation. Since an output schema exists, return values are not required, and the description suffices for agents to understand the tool's role.
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 schema covers all four parameters with descriptions, so the baseline is 3. The description does not add significant extra parameter detail beyond the examples already in the schema; the 'arguments' example is echoed from the JSON 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 clearly states the tool executes an active-response command on agents and provides concrete examples (blocking an IP, disabling an account). It uses a specific verb and resource, distinguishing it from read-only sibling tools.
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?
It explains that the tool changes production state and can cut off network access, and instructs that it requires WAZUH_ALLOW_WRITE=true and human confirmation before use. However, it does not explicitly contrast with sibling action tools like wazuh_restart_agents, so the when-to-use guidance is partially implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_agent_configRead an agent's applied configurationARead-onlyIdempotent
Fetch the configuration a running agent has actually loaded for one module — useful for confirming a group change or centralised config reached the endpoint. Common pairs: component='syscheck' configuration='syscheck', component='wmodules' configuration='wmodules', component='agent' configuration='client'.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID, e.g. '001'. | |
| component | Yes | Wazuh daemon or component to read. | |
| configuration | Yes | Configuration section, e.g. 'syscheck', 'client', 'wmodules'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds that it reads the configuration 'actually loaded' by the agent, which is a behavioral nuance implying it returns the effective runtime state, not just the configured value. This goes beyond the 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 two concise sentences plus a short list of common pairs. No redundant wording, no filler. Every sentence adds value: the first states the action, the second gives motivation, and the list provides practical examples.
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, output schema presence, and clear parameter descriptions, the description adequately covers purpose, usage context, and parameter behavior. There is no obvious missing information that would prevent correct invocation.
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 covers all three parameters with descriptions (agent_id, component, configuration) at 100% coverage. The description adds concrete example values and pairing guidance (e.g., component='syscheck' configuration='syscheck'), which enhances the schema's basic descriptions and helps the agent pick correct combinations.
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 'Fetch' and the specific resource: 'the configuration a running agent has actually loaded for one module'. It also distinguishes from siblings like wazuh_get_agent (agent info) and wazuh_manager_config (manager config) by focusing on agent-applied configuration.
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 clear context for when to use it: 'useful for confirming a group change or centralised config reached the endpoint'. It also gives common component/configuration pairs, which serves as practical guidance. It does not explicitly name alternative tools to avoid, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_agent_inventoryRead an agent's system inventoryARead-onlyIdempotent
Read collected inventory from one endpoint: installed packages, running processes, listening ports, network interfaces and addresses, hardware, OS or Windows hotfixes. Use it for questions like 'what is listening on this host', 'is package X installed', or 'what patches are missing'.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field, '-' prefix for descending. | |
| limit | No | ||
| query | No | Raw Wazuh query filter for precise conditions, e.g. 'local.port=443' for ports or 'state=LISTENING'. | |
| offset | No | ||
| search | No | Substring match across the component's fields, e.g. 'openssl' for packages or 'nginx' for processes. | |
| agent_id | Yes | Agent ID, e.g. '001'. | |
| component | Yes | Which inventory component to read. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) already cover the key behavioral aspects. The description adds no conflicting information and implicitly confirms read-only behavior by saying 'Read inventory'. No side effects are stated, but none are needed given the 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 only two sentences, yet it conveys the full scope (components, sample questions) without padding. It is well-structured for quick parsing and decision-making.
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?
With an output schema present and the description covering usage and scope, the tool is adequately contextualized. It doesn't mention prerequisites like agent existence or error cases, but these are not essential given the schema and 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?
Descriptions for key parameters are helpful: query and search include concrete examples ('local.port=443', 'openssl'), agent_id and component are clearly explained, and sort describes the descending prefix. However, limit and offset lack descriptions, leaving a small gap in schema coverage (71%) that is not fully compensated.
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?
States the exact function—reading system inventory from an endpoint—and lists the specific components (packages, processes, ports, etc.). It also provides concrete example questions that clarify the tool's scope, distinguishing it from sibling tools focused on alerts, rules, or health.
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?
Explicitly tells when to use the tool via example questions ('what is listening on this host', 'is package X installed', 'what patches are missing'). While it doesn't mention alternatives like wazuh_find_software or wazuh_get_agent, the usage scenarios are clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_agent_summaryFleet health summaryARead-onlyIdempotent
Aggregate health of the whole agent fleet: connection-state counts, OS distribution, agents on outdated versions and agents with no group. The fastest way to answer 'how healthy is my deployment'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds minimal extra transparency beyond noting it is an aggregation/health summary, which aligns with the annotations. No contradictions, but no significant additional behavioral context is provided.
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 concise sentences with a clear structure: first listing the aggregated contents, then stating its primary use case. Every word serves a purpose; no fluff or 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?
For a tool with no parameters and a simple purpose, the description provides all needed context: what data is aggregated (connection states, OS, outdated versions, no-group agents) and what question it answers (deployment health). No output schema is present, but that is not required for this simple 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?
The tool has zero parameters, so schema coverage is effectively 100%. The description cannot add parameter-specific meaning, and the baseline for high coverage applies. No parameter details are needed or 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 tool's purpose: aggregating agent fleet health including connection-state counts, OS distribution, outdated agents, and agents with no group. It explicitly positions it as 'the fastest way to answer how healthy is my deployment', distinguishing it from more detailed or specific tools like wazuh_list_agents or wazuh_health.
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 gives implicit guidance by calling it 'the fastest way' to assess health, but it does not explicitly mention alternative tools or when to prefer them instead. The use case is clear, but there are no direct exclusions or comparisons to siblings, leaving the decision partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_alert_statsAggregate alerts by fieldARead-onlyIdempotent
Group alerts by one or two fields and return counts — the tool for 'top 10 rules today', 'which agents are noisiest', 'alert counts by MITRE tactic', or 'top source IPs per agent'. Far cheaper than fetching alerts and counting them yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Window end. Defaults to now. | |
| top | No | Number of buckets for the first field. | |
| text | No | Lucene query to narrow the set. | |
| start | No | Window start. Defaults to 24h ago. | |
| then_by | No | Optional second grouping field, nested inside the first. | |
| agent_id | No | ||
| group_by | No | Field to group by. Common choices: rule.description, rule.id, rule.level, rule.groups, agent.name, rule.mitre.technique, rule.mitre.tactic, data.srcip, location, decoder.name. | rule.description |
| severity | No | ||
| min_level | No | ||
| rule_group | No | ||
| top_nested | No | Buckets for the second field. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and idempotentHint annotations already communicate that this is a safe, read-only operation, and the description does not contradict that. The description also clarifies it returns aggregated counts rather than raw alert data, adding useful behavioral context.
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 long and packs the core purpose, example use cases, and a performance benefit without unnecessary detail. It is well-structured and easy to scan.
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?
The description gives enough context for an agent to decide when to use this aggregation tool and understand that it returns counts. It does not spell out the exact output shape, but the output schema is marked as available and the use cases make the expected result clear.
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?
Several key parameters have useful descriptions, especially group_by with common field choices, start/end defaults, and top_nested. However, agent_id, severity, min_level, and rule_group lack descriptions, and the tool description itself only partially compensates. Schema coverage is 64%, so parameter semantics are adequate but not comprehensive.
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 aggregates alerts by one or two fields and returns counts, with concrete example use cases such as 'top 10 rules today' and 'top source IPs per agent'. This makes the purpose distinct and immediately understandable.
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 good usage guidance by listing common aggregation scenarios and explicitly notes that this is far cheaper than fetching alerts and counting them yourself. It does not directly name sibling tools like wazuh_search_alerts, but the use cases make the appropriate context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_alert_timelineAlert volume over timeARead-onlyIdempotent
Bucket alert counts into time intervals to show trend and spikes — 'was there a spike overnight', 'alert volume per hour this week'. Optionally splits each interval by a field such as severity or agent.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Window end. Defaults to now. | |
| text | No | ||
| start | No | Window start. Defaults to 24h ago. | |
| agent_id | No | ||
| interval | No | Bucket size such as '5m', '1h', '1d'. Chosen automatically from the window length when omitted. | |
| severity | No | ||
| split_by | No | Optional field to break each bucket down by, e.g. 'rule.level'. | |
| min_level | No | ||
| split_top | No | ||
| rule_group | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, and non-destructive behavior, and the description clearly frames it as a read-only aggregation query. It does not describe output format, but the presence of an output schema and the straightforward read nature make the behavior sufficiently transparent.
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 one concise sentence with useful examples and no filler. It efficiently communicates the core behavior and the optional split capability.
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?
The description provides enough context for a straightforward read-only aggregation tool, and the schema supplies defaults and constraints. It does not explain every filter parameter, but the overall purpose and usage context are clear.
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?
Only 4 of 10 parameters have schema descriptions (end, start, interval, split_by), and the description does not compensate for the missing parameter semantics. Several parameters such as min_level, split_top, severity, and rule_group rely only on their names for meaning.
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?
States a clear, specific purpose: bucketing alert counts by time to show trends and spikes. Includes concrete example use cases and notes the optional split-by capability.
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 temporal analysis use cases but does not explicitly contrast this with sibling tools such as wazuh_search_alerts or wazuh_alert_stats. It lacks guidance on when this tool is preferred over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_api_requestCall any read-only Manager API endpointARead-onlyIdempotent
Escape hatch for Manager API endpoints without a dedicated tool — for example /agents/stats/distinct, /tasks/status, /security/users, /overview/agents, or /experimental/* inventory endpoints. GET only, so it cannot change state. Prefer the purpose-built tools when one fits; they shape their output for readability.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | API path beginning with '/', e.g. '/overview/agents' or '/syscollector/001/processes'. Do not include the host or port. | |
| params | No | Query parameters, e.g. {'limit': 10, 'q': 'status=active'}. Wazuh list endpoints accept limit, offset, select, sort, search and q. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and not destructive, and the description adds that it is 'GET only, so it cannot change state.' This reinforces safety behavior beyond the annotations, though it does not describe edge cases like error handling or rate limits. Given the annotation coverage, this is more than sufficient.
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 concise sentences with no fluff, front-loading the purpose and examples before the usage guidance. Every word adds value, and the structure is clean and scannable.
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 that an output schema is present (per context signals), the description does not need to explain return formats. It covers the tool's role as a generic fallback, when to use it, and how it relates to siblings. A small gap is that it doesn't mention error handling or response shape, but that's covered by the output schema and annotation hints.
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?
Both parameters are fully documented in the schema with descriptions and examples, achieving 100% coverage. The description adds no additional parameter info beyond what the schema already provides, so the 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 states the tool's purpose as an escape hatch for read-only Manager API endpoints, with concrete examples like '/agents/stats/distinct' and '/security/users'. It also explicitly contrasts with purpose-built siblings by saying 'Prefer the purpose-built tools when one fits,' which distinguishes it from other Wazuh tools.
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 to use this tool when no dedicated tool exists and to prefer purpose-built siblings when one fits. This gives clear when-to-use and when-not-to-use guidance, surpassing the basic schema info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_cdb_listsList CDB listsBRead-onlyIdempotent
List the CDB (constant database) lists used by rules for lookups such as known-bad IPs, allowed users or audit keys, optionally including their contents.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| filename | No | Specific list file, e.g. 'audit-keys'. | |
| include_contents | No | Include each list's key/value entries. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool as read-only, idempotent, and non-destructive, which the description does not contradict. The description adds no extra behavioral context such as performance implications or rate limits, but given that the annotations cover the safety profile, a moderate score is appropriate. The description is consistent with the 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, well-structured sentence that conveys the core functionality without extraneous words. It includes relevant examples and clarifies the optional behavior, achieving high clarity in a compact form.
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?
The tool is a simple read-only list operation, and the description covers the primary purpose and output. However, it omits details about the limit and offset parameters and does not describe the structure of the returned contents, which might be relevant for effective use. The presence of an output schema partially compensates, but the description alone leaves some gaps.
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?
Only two of the four parameters (filename and include_contents) have descriptions in the schema, while limit and offset lack any explanation. The main description also does not elaborate on pagination or filtering semantics. This incomplete coverage leaves agents uncertain about the exact meaning and usage of the parameters.
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 precisely states that the tool lists CDB lists, including their purpose in rules (e.g., known-bad IPs, allowed users, audit keys). It also notes the optional inclusion of contents, making the function unambiguous. This clearly differentiates it from other Wazuh list tools without needing further inference.
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 explicit guidance on when to use this tool versus sibling tools such as wazuh_list_rules or wazuh_list_agents. While the mention of 'used by rules' hints at a context, it does not name alternatives or specify conditions for selection. Agents would need to infer the appropriate tool from naming or external knowledge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_cluster_statusCluster nodes and health checkARead-onlyIdempotent
Detailed cluster view: whether clustering is enabled, each node's role and address, and the manager's own healthcheck output including per-node sync status and agent distribution.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds specific details about the returned information (enabled state, node roles, addresses, sync status, agent distribution), enhancing transparency without contradicting the 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, well-structured sentence that conveys all necessary information without redundancy or filler. It is appropriately concise for the tool's scope.
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?
The description fully explains what the tool returns, and the output schema is present to define the exact structure. No additional context is needed for an agent to use this tool correctly.
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 schema has no parameters, and schema description coverage is 100% (vacuously). The description adds no parameter information because none exist. This matches the baseline of 3 for high schema coverage.
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 purpose: providing a detailed cluster view including enabled status, node roles, addresses, and healthcheck output. It is distinct from sibling tools that handle alerts, agents, or vulnerabilities.
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 inherently implies when to use it (when cluster status is needed) and contrasts with similar monitoring tools through its specific focus. However, it does not explicitly state alternative tools to avoid, though the sibling context makes this clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_fim_findingsFile integrity monitoring findingsARead-onlyIdempotent
Query File Integrity Monitoring (syscheck) state for an agent: which monitored files and registry keys exist, their hashes, permissions and how many times they have changed. Use it to answer 'was this binary modified' or 'what changed in /etc'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | Substring match on the path, e.g. 'ssh'. | |
| agent_id | Yes | Agent ID, e.g. '001'. | |
| file_path | No | Exact monitored path, e.g. '/etc/passwd'. | |
| entry_type | No | Restrict to files or Windows registry entries. | |
| hash_value | No | Find entries by md5, sha1 or sha256 digest. | |
| changed_only | No | Only entries that have changed at least once since baseline. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it queries current state, which is consistent with the annotations but does not reveal additional behaviors such as rate limits or error conditions.
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 long, front-loads the purpose, and provides practical examples without unnecessary detail or repetition.
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?
The description is complete for the tool's scope: it identifies the resource (FIM findings), the target (agent), the returned data categories, and typical use cases. Since an output schema exists, return-value details are not required for completeness.
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 75%, so many parameters already have descriptions. The tool description adds clarifying examples and semantics (e.g., 'ssh' substring for search, exact monitored path, md5/sha1/sha256 digests, 'changed at least once since baseline'), which enriches parameter understanding beyond the base 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 clearly states the tool queries File Integrity Monitoring state for an agent, listing what information is returned (files, registry keys, hashes, permissions, change count). It also gives concrete use cases ('was this binary modified', 'what changed in /etc') that distinguish it from general alert or agent tools.
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 example questions the tool answers, giving implied usage guidance. However, it does not explicitly mention when not to use this tool or compare it with related tools like wazuh_search_alerts or wazuh_rootcheck, so guidance is present but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_find_softwareFind software across the fleetARead-onlyIdempotent
Search for a package across every agent at once — the tool for vulnerability response questions like 'which hosts have log4j installed' or 'who is still on OpenSSL 1.1.1'. Returns the matching package and version per agent.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matching rows to return. | |
| package | Yes | Package name or substring to search for, e.g. 'log4j'. | |
| version | No | Optional exact version to match. | |
| agent_limit | No | How many agents to scan when the fleet-wide endpoint is unavailable and results must be gathered agent by agent. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds valuable behavioral detail: it returns matching package and version per agent, and it explains the agent_limit fallback when the fleet-wide endpoint is unavailable. This goes beyond the annotation baseline, though it doesn't specify error conditions or rate limits.
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, front-loaded with the action and use case, followed by the return value. No fluff or repetition. Every word adds 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?
The description covers what it does, why it's used (vulnerability response), examples, and the output format. It also addresses edge behavior (fallback scanning). Combined with the output schema and annotations, an agent has all the necessary context to invoke this tool correctly.
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 schema descriptions cover all parameters 100% (package, version, limit, agent_limit) with clear meanings. The description adds a tiny bit of extra context for version ('Optional exact version') but largely repeats the schema. Since the schema is already thorough, 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 states the tool's primary function ('Search for a package across every agent at once') and gives concrete, recognizable examples ('which hosts have log4j installed'). It is distinct from sibling tools like wazuh_search_alerts or wazuh_list_agents, and the scope (fleet-wide) is unambiguous.
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 frames the tool for vulnerability response questions ('the tool for vulnerability response questions like...'), which tells an agent exactly when to invoke it. It also implies when not to use it (when a single agent is the target, other agent-specific tools would apply). The fallback behavior for agent_limit is described, giving practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_generate_reportGenerate a Wazuh reportARead-onlyIdempotent
Build a ready-to-share report by combining several Wazuh sources into one narrative with a markdown rendering. Report types: executive_summary (posture overview for leadership), threat_activity (top threats, MITRE breakdown, attacking IPs), agent_health (connectivity and version drift), vulnerability_exposure (CVE exposure by severity and host), compliance (control coverage for a framework), file_integrity (FIM change activity), authentication (login failures and brute-force patterns). Use this instead of stitching many tool calls together by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Window end. Defaults to now. | |
| top | No | Rows per breakdown table. | |
| start | No | Window start: relative ('7d', '24h') or ISO-8601. Defaults to 7d. | |
| agent_id | No | Scope the report to specific agents. Omit for the whole fleet. | |
| framework | No | Required for report_type='compliance'. | |
| report_type | No | Which report to build. | executive_summary |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety implications. The description adds context about combining sources and producing a report, which is consistent with the annotations. No contradictions or extra side effects are mentioned.
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 well-structured with a clear summary and a bulleted list of report types. It avoids unnecessary fluff but is slightly lengthy due to the enumeration. Overall, it is concise and 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's complexity and the presence of an output schema, the description provides sufficient context: what it does, when to use it, and a list of report types. It doesn't explain the output format in detail, but the output schema covers that, so the description is complete enough.
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 all parameters with descriptions, and the description adds meaningful semantics for 'framework' by stating it's required for compliance reports. This goes beyond the schema's basic description, improving parameter understanding.
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 purpose: building a ready-to-share report by combining multiple Wazuh sources into one narrative with markdown rendering. It lists all report types and explicitly differentiates from sibling tools by saying 'Use this instead of stitching many tool calls together by hand.'
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 explicit usage guidance by directing users to use this tool instead of manually combining multiple tool calls. However, it doesn't enumerate specific scenarios beyond listing report types, so it's clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_get_agentGet one agent in detailARead-onlyIdempotent
Full picture of a single agent: registration and connection state, operating system, hardware, group membership and installed-package count. Start here when investigating a specific endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID, e.g. '001'. Zero-padded to 3 digits if shorter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent behavior, and the description aligns with these by describing a pure retrieval operation with no mention of side effects. The description reinforces the read-only nature without contradicting the 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 two sentences, efficiently listing what the tool returns and when to use it. No redundant or unnecessary words; the structure is well-organized and scannable.
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 single-agent retrieval tool, the description adequately covers its function and usage context. No output schema is provided, but the description's promise of a 'full picture' is sufficiently clear for an agent to know what to expect.
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 schema provides a thorough description of the agent_id parameter, including an example and the zero-padding rule. The tool description adds no additional parameter detail, but the schema alone offers high coverage, so the baseline is met and slightly exceeded by the helpful example.
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 retrieves a comprehensive set of details for a single agent, including registration, connection state, OS, hardware, group membership, and installed-package count. It explicitly distinguishes itself from list-type tools by focusing on a specific agent.
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 phrase 'Start here when investigating a specific endpoint' provides clear situational guidance. While it doesn't explicitly contrast with alternative tools, it strongly implies when this tool is the appropriate choice versus broader list or summary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_get_ruleGet one rule with full detailARead-onlyIdempotent
Fetch a single rule including its full XML definition, so you can explain exactly what conditions trigger it and what it is mapped to.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule ID, e.g. '5710'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds that it returns full XML definition but does not elaborate on side effects or operational nuances beyond the annotation coverage.
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, focused sentence with no redundant information, making it easy for an agent to parse and apply.
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?
The description provides the tool's primary purpose and mentions the return content (full XML definition) sufficiently for an agent to decide when to call it, though it doesn't specify the exact output format.
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 parameter rule_id is fully described with a concrete example ('5710'), which adds practical clarity beyond the schema's basic type definition.
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 ('Fetch') and the resource ('a single rule') with the specific detail of including its full XML definition, which distinguishes it from listing tools like wazuh_list_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 implies usage when a single rule's details and explanation are needed, but it does not explicitly state when to prefer this tool over alternatives such as wazuh_list_rules or wazuh_rule_groups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_healthOverall deployment healthARead-onlyIdempotent
One-call situational awareness: manager version and uptime, the state of every Wazuh daemon, cluster status, agent connection counts and Indexer cluster health. Call this first when asked 'is Wazuh healthy' or when starting an investigation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds context about the aggregated nature of the call ('one-call situational awareness'), which implies a broad data fetch. No contradictions with 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 concise, listing the key data points and usage hint in two sentences. It is well-structured and free of unnecessary details.
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?
With no parameters and a clear description of the returned information (manager health, daemon states, cluster, agents, indexer), the tool is fully specified for an agent to decide when to use it. No missing context.
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, so there is nothing to explain. The baseline score of 4 applies; the description correctly omits parameter details.
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 specifies the tool's purpose: providing a comprehensive health snapshot including manager version/uptime, daemon states, cluster status, agent connection counts, and indexer health. It is distinct from siblings like wazuh_cluster_status or wazuh_manager_stats.
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?
Explicitly states when to use: 'Call this first when asked is Wazuh healthy or when starting an investigation.' This gives clear guidance and distinguishes it from more specialized tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_indexer_queryRun a raw Indexer queryARead-onlyIdempotent
Escape hatch: send a raw OpenSearch query DSL body to a Wazuh index for anything the purpose-built alert tools cannot express — unusual aggregations, scripted fields, composite queries. Restricted to wazuh-* indices and read-only _search.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | OpenSearch query DSL body, e.g. {"query": {"match_all": {}}, "size": 5, "aggs": {...}}. Always set an explicit small 'size' unless you only need aggregations. | |
| index | No | Index pattern to search. Defaults to the configured alerts index. Must start with a wazuh-* prefix. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only nature by stating 'read-only _search' and 'Restricted to wazuh-* indices', which aligns with the annotations (readOnlyHint true, destructiveHint false). It adds the restriction context beyond the annotations, making behavior fully transparent.
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 concise and well-structured: it opens with the core purpose ('Escape hatch'), then explains the scope and restrictions in two clear sentences. No unnecessary details or repetitions.
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?
The description covers the tool's purpose, usage context, constraints, and parameter behavior. Since an output schema exists, return value details are not needed, and the description is complete for an agent to select and invoke this tool correctly.
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?
Both parameters are thoroughly described. The body parameter includes an example and a best-practice note about setting a small 'size' unless aggregations are needed, while the index parameter explains the default and the required wazuh-* prefix. This goes well beyond the schema descriptions.
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 sends a raw OpenSearch query DSL body to a Wazuh index, with a specific verb and resource. It also distinguishes itself from purpose-built alert tools by explicitly stating it handles anything they cannot express, such as unusual aggregations, scripted fields, and composite queries.
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 positions the tool as an 'escape hatch' for cases where purpose-built alert tools are insufficient, and provides concrete restrictions (wazuh-* indices and read-only _search). This gives clear when-to-use guidance compared to sibling tools like wazuh_search_alerts or wazuh_alert_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_list_agentsList Wazuh agentsARead-onlyIdempotent
List and filter agents enrolled with the Wazuh manager. Use this to answer 'which endpoints are disconnected', 'what agents are in group X', or 'which agents run an outdated version'. Supports server-side filtering, sorting and paging.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Exact agent IP match. | |
| name | No | Exact agent name match. | |
| sort | No | Sort field prefixed with '-' for descending, e.g. '-lastKeepAlive'. | |
| group | No | Only agents in this group. | |
| limit | No | Max agents to return. | |
| query | No | Raw Wazuh query filter for conditions the named arguments do not cover, e.g. "os.platform=linux;rule.level>10". Use ';' for AND, ',' for OR. | |
| offset | No | Paging offset. | |
| search | No | Free-text substring match across agent fields. | |
| status | No | Restrict to these connection states. | |
| version | No | Agent version, e.g. 'v4.9.0'. | |
| os_platform | No | OS platform, e.g. 'linux', 'windows', 'darwin'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces the read-only nature by saying 'List and filter' and adds context about server-side filtering, sorting, and paging. It does not contradict the annotations, though it does not discuss auth needs or rate limits, which are less critical given the 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 three concise sentences with no filler. The main purpose is front-loaded, followed by concrete use cases and a brief note on supported features. It is easy to parse and directly useful to an agent.
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 rich parameter schema, clear annotations, and the presence of an output schema, the description provides sufficient context: it states what the tool does, gives example use cases, and notes filtering/sorting/paging support. No critical contextual information is missing.
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?
All 11 parameters have individual schema descriptions, giving 100% schema description coverage. The description adds no additional parameter-level details beyond what the schema already provides, so the 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 states the tool's purpose: 'List and filter agents enrolled with the Wazuh manager.' It includes concrete example questions ('which endpoints are disconnected', 'what agents are in group X', 'which agents run an outdated version') and distinguishes this list/filter tool from singular agent lookup or agent-related summary tools.
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 gives explicit use cases with 'Use this to answer...' and mentions server-side filtering, sorting, and paging. It does not explicitly mention when not to use this tool or compare it to alternative tools, but the provided examples are strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_list_decodersSearch log decodersARead-onlyIdempotent
Search the decoders that parse raw logs into fields. Use this when an alert's fields look wrong or absent, to see how a log source is being parsed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | Free-text substring match. | |
| status | No | ||
| filename | No | Decoder file name. | |
| decoder_names | No | Specific decoder names, e.g. ['sshd']. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat these. The description adds no extra behavioral detail (e.g., side effects, auth requirements), but it is fully consistent with the annotations. Given the lower bar when annotations are present, a score of 3 is appropriate.
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 concise sentences with no redundant information. It states the main function and the primary use case, making it easy to parse and directly informative.
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?
The output schema is present, so the description doesn't need to explain return values. The purpose and use case are clear, and the parameter descriptions (though partial) cover the key filters. The description provides sufficient context for an agent to decide when and how to invoke the tool, though it could mention pagination or filtering behavior, which is already implied by the parameters.
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 50% (3 of 6 parameters have descriptions). The descriptions for search, filename, and decoder_names add meaningful context, but limit, offset, and status lack explicit descriptions. The covered parameters are the most domain-specific, but the overall coverage is only partial, so a mid-range score is justified.
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 'search' and clearly identifies the resource as 'decoders' that parse raw logs into fields. It also states the intended use case (when alert fields look wrong or absent), which makes the purpose unambiguous and distinguishes it from the listed sibling tools.
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 states when to use the tool ('when an alert's fields look wrong or absent') and explains the benefit (see how a log source is being parsed). It does not explicitly mention when not to use it, but the context of sibling tools provides adequate differentiation, so a strong score is warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_list_groupsList agent groupsARead-onlyIdempotent
List configured agent groups with their member counts and configuration checksums. Pass a group name to list its members instead.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | If set, list the agents belonging to this group. | |
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the conditional output behavior and is consistent with the readOnly, idempotent, and non-destructive annotations. It does not mention pagination details, but the annotations already cover the main safety aspects.
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 concise, using two sentences to convey the purpose and conditional behavior without extraneous detail.
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?
The description covers the core purpose and a key conditional behavior, and output schema is present. However, missing parameter semantics for pagination and lack of usage-selection guidance leave some context gaps.
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?
Only the 'group' parameter is described; 'limit' and 'offset' are not mentioned. With schema coverage at 33%, the description adds some value for one parameter but leaves most parameter semantics undocumented.
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 lists configured agent groups with member counts and checksums, and explicitly covers the conditional behavior of listing members when a group name is supplied. The verb and resource are specific.
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 is given for when to use this tool versus alternative sibling tools. The conditional note about passing a group name is useful but does not address tool selection or boundary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_list_indicesList Wazuh indicesARead-onlyIdempotent
List the wazuh-* indices with health, document counts and sizes, plus Indexer cluster health. Use this to confirm what data exists and how far back it goes before querying.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Index pattern to list. Must be within wazuh-*. | wazuh-* |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds minimal extra context beyond implying a listing operation, so it does not significantly enhance transparency beyond the 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, concise sentence that conveys the essential information without verbosity. It is well-structured and 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?
For a simple listing tool, the description is complete enough. It covers the purpose, the resource, and the intended use case. Since an output schema is present, not detailing return values is acceptable.
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 single parameter 'pattern' is fully described in the schema with a default value. The tool description does not add extra semantic detail about parameter behavior or constraints 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 tool lists wazuh-* indices with health, document counts, and sizes, plus cluster health. It uses a specific verb and resource, but does not explicitly differentiate from sibling tools like wazuh_indexer_query.
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 clear guidance on when to use it: to confirm what data exists and how far back it goes before querying. Does not explicitly mention alternatives, but the intended use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_list_rulesSearch detection rulesARead-onlyIdempotent
Search the manager's ruleset. Use this to explain why an alert fired, to find every rule covering a compliance control ('which rules map to PCI DSS 10.2.4'), or to audit which high-severity rules are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field, '-' prefix for descending. | |
| group | No | Rule group, e.g. 'authentication_failed', 'syscheck', 'sca'. | |
| level | No | Exact level ('10') or an inclusive range ('10-15'). | |
| limit | No | ||
| query | No | Raw Wazuh query filter, e.g. 'level>=10;status=enabled'. | |
| offset | No | ||
| search | No | Free-text substring across rule fields. | |
| status | No | Rule status filter. | |
| filename | No | Rule file, e.g. '0095-sshd_rules.xml'. | |
| rule_ids | No | Specific rule IDs, e.g. ['5710', '5712']. | |
| compliance | No | Compliance framework to filter on, paired with compliance_value. | |
| compliance_value | No | Specific control within the framework, e.g. '10.2.4' for pci_dss or 'T1110' for mitre. Omit to match any rule tagged with the framework. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds no additional behavioral details such as pagination behavior, permissions, or rate limits beyond the read-only search intent.
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 three sentences and every sentence adds value: it defines the tool, lists concrete use cases, and gives examples. No fluff or redundant phrasing.
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?
The tool has 12 parameters and a detailed schema, and the description covers primary use cases while parameter descriptions clarify filtering semantics. It is complete enough for effective use, though it could mention that wazuh_get_rule is the more targeted option for a single known rule.
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?
Parameter descriptions are helpful and go beyond raw schema types, e.g., level supports '10' or '10-15', compliance_value explains omitting it matches any rule in the framework, and query provides a raw filter example. With 83% schema coverage, most parameters are well explained, though a couple like offset and limit rely on defaults rather than added semantics.
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 'Search the manager's ruleset' and gives concrete use cases like explaining why an alert fired, finding compliance-related rules, and auditing high-severity rules. It is distinguishable from siblings like wazuh_get_rule, though it does not explicitly contrast itself with single-rule retrieval.
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 clear when-to-use guidance with three specific scenarios: alert explanation, compliance mapping, and high-severity auditing. It does not explicitly mention when not to use the tool or point to alternatives such as wazuh_get_rule for individual rule details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_manager_configRead manager configurationARead-onlyIdempotent
Read the manager's running ossec.conf configuration, optionally narrowed to one section. Use this to confirm what is actually enabled — which modules, integrations, log sources or remote settings.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | Specific field within the section. | |
| section | No | Configuration section to read, e.g. 'global', 'remote', 'syscheck', 'vulnerability-detection', 'wodle', 'integration'. Omit for the whole configuration, which can be large. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful context by noting it reads the 'running' configuration and confirms 'actually enabled' settings, which implies no side effects or mutation.
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 concise sentences with no redundant wording. The primary action and optional narrowing are stated first, followed by a practical use case. Every clause contributes meaning.
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?
With an output schema present and both parameters fully documented, the description supplies sufficient context for invoking the tool correctly. It does not need to explain return values or further details.
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% for both parameters. The description reinforces the 'section' parameter with concrete examples ('global', 'remote', 'syscheck', etc.) and clarifies that omission returns the whole configuration, adding marginal value 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 uses specific verb 'Read' and identifies the exact resource ('manager's running ossec.conf configuration'), with optional narrowing by section. It clearly distinguishes from sibling tools focused on search, agents, alerts, and other manager functions.
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 this to confirm what is actually enabled — which modules, integrations, log sources or remote settings.' It does not explicitly name alternatives or exclusions, but the purpose is concrete enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_manager_logsRead manager logsARead-onlyIdempotent
Read and filter ossec.log entries from the manager. Use this to diagnose ingestion problems, integration failures or daemon errors — filter to level='error' to see only what is broken.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only entries from this daemon, e.g. 'wazuh-modulesd'. | |
| level | No | Only entries at this log level. | |
| limit | No | ||
| offset | No | ||
| search | No | Free-text substring match in the message. | |
| summary | No | Return per-daemon counts by level instead of individual lines — the fast way to see where errors are concentrated. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description matches annotations: says 'Read' and 'filter', reinforcing read-only and idempotent behavior. No side effects implied, consistent with destructiveHint=false.
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?
One sentence with purpose, use cases, and example. Front-loaded with 'Read and filter ossec.log entries'. No fluff.
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?
Includes purpose, use cases, and an example filter. The output schema is available and no nested objects. It doesn't mention pagination, but that's in schema. For a read-only log viewer, this is 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?
Schema provides descriptions for tag, level, search, summary (67% coverage). Limit and offset are self-explanatory. The description doesn't add extra parameter context, but the schema covers the main ones.
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?
States 'Read and filter ossec.log entries from the manager' – clear verb and resource. Also gives specific diagnostic use cases, distinguishing it from other Wazuh tools like manager stats or config.
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?
Explicitly says 'Use this to diagnose ingestion problems, integration failures or daemon errors' and gives an example filter to level='error'. That is clear guidance. It doesn't mention alternatives, but the use cases are specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_manager_statsManager throughput statisticsARead-onlyIdempotent
Event-processing statistics from the manager: analysisd queue usage and event rates, remoted reception counts, or hourly/weekly alert volumes. Use analysisd stats to spot dropped events and queue saturation.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 'analysisd' for rule-engine and queue metrics (best for capacity problems), 'remoted' for agent-communication counters, 'hourly' / 'weekly' for alert volume shape. | analysisd |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately portrays the tool as a read-only statistics operation, matching the readOnlyHint and idempotentHint annotations. It adds useful context about what the stats are used for, and no side effects or destructive behavior are implied or omitted.
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 concise sentences with no redundant wording. It front-loads the resource and capability, then provides a brief, useful use case in the second sentence.
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?
An output schema is provided, so the description is not required to detail return values. The description covers the essential selection criteria—what kind of statistics are available and what they are used for—making it complete for an agent to decide when and how to call it.
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 single kind parameter has 100% schema coverage, and the description enriches each enum value with practical meaning: analysisd for capacity problems, remoted for agent-communication counters, and hourly/weekly for alert volume shape. This makes parameter selection unambiguous.
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 resource as manager event-processing statistics and names the specific subcategories (analysisd, remoted, hourly/weekly). It also gives a concrete diagnostic purpose—spotting dropped events and queue saturation—which differentiates it from general health or alert-listing tools.
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?
It explicitly states when to use analysisd stats ('to spot dropped events and queue saturation') and gives hints for each kind parameter. It does not enumerate when other sibling tools should be used instead, but the use-case guidance is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_mitreQuery the MITRE ATT&CK catalogueARead-onlyIdempotent
Look up MITRE ATT&CK techniques, tactics, groups, software or mitigations from the manager's bundled catalogue. Use it to expand a technique ID seen in an alert into its description, tactics and mitigations.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Specific IDs. Accepts the familiar ATT&CK numbers — ['T1110'] for techniques, ['TA0006'] for tactics, ['G0001'] for groups — as well as internal STIX ids like ['attack-pattern--0042a9f5-f053-4769-b3ef-9ad018dfa298']. | |
| limit | No | ||
| offset | No | ||
| search | No | Free-text search across names and descriptions. | |
| resource | No | Which part of the ATT&CK catalogue to query. | techniques |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the operation as read-only, idempotent, and non-destructive, and the description is consistent with that behavior. No side effects are implied, so no additional disclosure is needed.
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 compact and immediately informative, with no redundant wording or irrelevant detail. It front-loads the core purpose and then adds the primary usage scenario.
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 modest parameter set and the presence of an output schema, the description provides sufficient context for correct invocation. It specifies the data source, supported resource types, and a concrete real-world trigger for using the 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?
The schema provides helpful descriptions for ids, search, and resource, including concrete examples of accepted ID formats. Limit and offset are not described but are standard pagination parameters whose meaning is evident from their names and defaults.
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 as a lookup operation against the MITRE ATT&CK catalogue, listing the exact resource types it covers. It is easily distinguished from all sibling tools, none of which target MITRE 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 gives an explicit use case: expanding a technique ID seen in an alert into its description, tactics, and mitigations. It does not name alternative tools, but the scenario is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_restart_agentsRestart Wazuh agentsADestructive
Restart one or more agents. This interrupts monitoring on the target endpoints while they come back up, and requires WAZUH_ALLOW_WRITE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_ids | Yes | Agent IDs to restart, e.g. ['001', '002']. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses the side effect (interrupts monitoring) and the write-permission requirement, matching the destructiveHint and non-readOnly annotations. This goes beyond the annotations to explain the operational impact.
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 concise sentences, front-loads the action, and includes only essential context about side effects and permissions. No unnecessary wording.
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 one-parameter, destructive-action tool, the description covers purpose, side effects, and prerequisites. The output schema is present, so no return-value explanation is needed.
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 schema already documents the single required parameter agent_ids with a clear description and example. The tool description adds no additional parameter-level detail, so baseline coverage is sufficient.
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?
Clearly states the action ('Restart'), the target resource ('one or more agents'), and its effect (interrupting monitoring). This distinguishes it from sibling tools like search, list, and scan operations.
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 useful context by noting the monitoring interruption and the WAZUH_ALLOW_WRITE=true requirement, so the agent understands when it is appropriate. It does not explicitly mention alternatives or when-not-to-use, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_rootcheckRootcheck / policy-monitoring findingsARead-onlyIdempotent
Read rootcheck findings for an agent — rootkit signatures, hidden processes and legacy policy-monitoring hits. Note this is Wazuh's older assessment module; SCA (wazuh_sca_checks) is the modern equivalent and usually more useful.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | Substring match on the finding text. | |
| status | No | 'outstanding' shows findings still present. | outstanding |
| agent_id | Yes | Agent ID, e.g. '001'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and idempotentHint annotations already establish the non-destructive behavior; the description's 'Read' verb confirms this but adds no additional behavioral context such as side effects, rate limits, or data-source specifics.
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 deliver the main purpose first and then a concise legacy/alternative note, with no redundant or filler content.
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?
The description covers what the tool returns, the legacy nature of the module, and the preferred alternative, while the output schema supplies return-shape details. This is sufficient context for an agent to select and invoke the tool correctly.
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 description does not elaborate on the limit, offset, search, or status parameters; it only reinforces that the data is per-agent, which the schema already states via agent_id. With only 60% schema description coverage, the description should have compensated by summarizing the filtering and pagination semantics.
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 opens with a specific verb and resource: 'Read rootcheck findings for an agent.' It further clarifies the domain by listing rootkit signatures, hidden processes, and legacy policy-monitoring hits, and distinguishes itself from the sibling wazuh_sca_checks by calling SCA the modern equivalent.
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 names wazuh_sca_checks as the modern equivalent and advises it is 'usually more useful,' giving an agent clear guidance to prefer SCA unless legacy rootcheck data is specifically needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_rule_groupsList rule groups and compliance controlsARead-onlyIdempotent
Enumerate the rule groups in the ruleset, or every value present for one compliance framework. Useful for discovering valid filter values before calling wazuh_list_rules or wazuh_search_alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| requirement | No | 'groups' for rule groups, or a framework to list its controls. | groups |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds minimal behavioral context beyond that, primarily reinforcing the enumeration aspect, but does not introduce new side-effect information.
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 concise, using two sentences to convey the purpose and use case without unnecessary detail or repetition.
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 two optional parameters, the description provides sufficient context, including a practical use case (filter value discovery). The output schema is separate and not required to be described here.
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 50% with only the 'requirement' parameter described. The tool description adds some clarity by explaining the 'groups' default and framework controls, but leaves the 'limit' parameter ambiguous, not elaborating on its purpose or effect.
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 function: enumerating rule groups or compliance framework values. It also distinguishes itself from siblings by mentioning its use in discovering filter values for wazuh_list_rules and wazuh_search_alerts.
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?
Explicitly indicates when to use the tool: 'before calling wazuh_list_rules or wazuh_search_alerts' to discover valid filter values. This provides clear guidance on its practical application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_run_scanTrigger a FIM or SCA scanA
Ask agents to start a syscheck (FIM) scan now instead of waiting for the schedule. This puts load on the target endpoints and requires WAZUH_ALLOW_WRITE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_ids | Yes | Agent IDs to scan, e.g. ['001']. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral aspects: it triggers a write operation, requires write permission, and places load on endpoints. The annotations already indicate readOnlyHint=false and idempotentHint=false, and the description aligns with those without contradiction.
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 compact and front-loaded, using two sentences to convey the purpose, timing, prerequisite, and operational impact. There is no redundant or filler content.
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 one-parameter action, the description provides the essential context: what triggers, when to use it, the required permission, and the side effect on endpoints. Output schema exists, so not describing return values is acceptable, though failure/response behavior could be slightly more explicit.
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 schema already provides a clear description for the agent_ids parameter, including the format and an example. The tool description reinforces the scan context but does not add substantial meaning beyond the schema's own parameter documentation.
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 purpose: to start a syscheck (FIM) scan immediately rather than waiting for the scheduled run. It also distinguishes this action from related read/search tools by identifying it as an on-demand scan operation.
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 when to use the tool ('instead of waiting for the schedule') and notes the prerequisite WAZUH_ALLOW_WRITE=true. It also warns about load on target endpoints, giving the agent enough context to decide whether this action is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_sca_checksSCA checks within a policyARead-onlyIdempotent
List the individual configuration checks in one SCA policy, including the remediation text for each. Filter to result='failed' to get an actionable hardening list for a host.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| result | No | Filter by outcome. 'failed' is the actionable set. | failed |
| search | No | Free-text match across check titles and text. | |
| agent_id | Yes | Agent ID, e.g. '001'. | |
| policy_id | Yes | Policy ID from wazuh_sca_policies, e.g. 'cis_debian10' or 'cis_win2019_enterprise'. | |
| include_remediation | No | Include rationale and remediation prose. Informative but verbose; turn off when you only need the list of failures. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds no additional behavioral details (e.g., pagination, rate limits), but also does not contradict the annotations. Given the annotations cover the key behavioral traits, a neutral score is appropriate.
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, direct, and free of redundant wording. It packs the core purpose and a key usage hint without unnecessary elaboration.
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 rich schema (with per-parameter descriptions) and complete annotations, the description sufficiently explains what the tool does and how to use it for a common scenario. No critical missing information prevents correct invocation.
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 covers 71% of parameters with descriptions, and the tool description reinforces the meaning of 'result' and 'include_remediation' but does not add substantial new insight beyond what the schema already provides. The description does not clarify the undocumented 'limit' and 'offset' parameters.
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 clear verb ('List'), specifies the resource ('individual configuration checks in one SCA policy'), and includes distinctive details like remediation text and the actionable filter. It clearly distinguishes this tool from wazuh_sca_policies which lists policies themselves.
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 actionable guidance by suggesting filtering with result='failed' to get a hardening list. This is a concrete usage tip, though it does not explicitly contrast with sibling tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_sca_policiesSCA policy scores for an agentARead-onlyIdempotent
List an agent's Security Configuration Assessment policies with pass/fail counts and hardening scores — CIS benchmarks and similar. Use this to answer 'how well hardened is this host' before drilling into individual failed checks.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Agent ID, e.g. '001'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this by describing a listing operation that returns counts and scores without side effects, adding useful output-behavior detail without contradicting the 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 two tight sentences: the first states the action and output, the second gives the intended use case. Every word adds value and there is no redundancy or unnecessary detail.
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 simple single-parameter input and the existence of an output schema, the description provides enough context: what the tool lists, the key output fields (pass/fail counts and hardening scores), why it is used, and how it relates to later drill-down. Nothing essential is missing.
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 only parameter, agent_id, is fully covered by the schema with a type, title, and description. The description adds a concrete example ('001') and ties the parameter to the agent whose policies will be listed, which is sufficient for a simple required identifier.
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 uses the specific verb 'List' and identifies the exact resource: an agent's Security Configuration Assessment policies with pass/fail counts and hardening scores. It explicitly distinguishes this from deeper individual checks by noting it is the precursor to 'drilling into individual failed checks'.
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?
Clearly states when to use this tool: to answer 'how well hardened is this host' and to do so 'before drilling into individual failed checks'. This gives explicit usage context and implies that deeper investigation belongs to a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_search_alertsSearch Wazuh alertsARead-onlyIdempotent
Search security alerts in the Wazuh Indexer over a time window. This is the main tool for questions like 'show me critical alerts in the last hour', 'what fired on server-db-01 yesterday', 'find SSH brute force attempts', or 'alerts matching MITRE T1110'. Returns a compact projection of each alert by default.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Window end. Defaults to now. | |
| text | No | Lucene query over alert text, e.g. 'failed password', 'rule.description:*sudo*', or 'data.srcport:22 AND NOT agent.id:000'. | |
| limit | No | Max alerts to return. | |
| start | No | Window start: relative like '24h', '7d', '30m', or ISO-8601 like '2026-08-01T00:00:00Z'. Defaults to 24 hours ago. | |
| offset | No | Paging offset. | |
| src_ip | No | Restrict to these source IPs. | |
| rule_id | No | Restrict to these rule IDs. | |
| agent_id | No | Restrict to these agent IDs. | |
| mitre_id | No | MITRE technique IDs, e.g. ['T1110']. | |
| severity | No | Severity band by rule level: critical=15+, high=12-14, medium=7-11, low=4-6, info=0-3. | |
| max_level | No | Maximum rule.level, inclusive. | |
| min_level | No | Minimum rule.level, inclusive. | |
| agent_name | No | Restrict to these agent names (exact). | |
| rule_group | No | Restrict to these rule groups, e.g. 'authentication_failed', 'web', 'syscheck', 'sca', 'vulnerability-detector'. | |
| full_documents | No | Return every field of each alert instead of the compact projection. Much larger output; use for deep inspection of a handful of alerts. | |
| sort_ascending | No | Oldest first instead of newest first. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context by noting that a compact projection is returned by default. It could add more about output size implications with full_documents, but the schema and annotations already provide substantial coverage.
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, front-loaded with purpose and followed by relevant examples. There is no filler, redundancy, or over-explanation, making it appropriately sized for the 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 rich schema covering all 16 parameters, an output schema, and the read-only annotations, the description is complete enough for an agent to select and invoke the tool correctly. It identifies the primary use, default projection, and typical query intents, with no required parameters or nested objects adding hidden complexity.
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 the baseline is 3. The tool description itself does not add parameter-specific semantic detail beyond the schema descriptions; the example questions give only indirect mapping to parameters like severity, agent_name, text, and mitre_id.
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 opens with a specific verb, resource, and scope: 'Search security alerts in the Wazuh Indexer over a time window.' It provides concrete example questions that clarify intent. However, it does not explicitly differentiate from nearby sibling tools like alert_stats, alert_timeline, or indexer_query, so it falls just short of a top score.
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?
It clearly positions itself as the main tool for time-window alert searches and gives representative question types. It does not explicitly state when to prefer sibling tools for aggregations, timelines, or raw indexer queries, so the guidance is strong but not fully explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_vulnerabilitiesList detected vulnerabilitiesARead-onlyIdempotent
List CVEs Wazuh has detected on endpoints, filterable by agent, severity, CVE ID and package. Answers 'what critical CVEs do we have', 'is CVE-2024-3094 anywhere in the estate', or 'which vulnerable packages are on this host'. Works on both 4.8+ (Indexer state) and earlier (Manager API) deployments.
| Name | Required | Description | Default |
|---|---|---|---|
| cve | No | Specific CVE IDs, e.g. ['CVE-2024-3094']. | |
| limit | No | ||
| offset | No | ||
| package | No | Package name to match, e.g. 'openssl'. | |
| agent_id | No | Restrict to these agent IDs. Omit for the whole fleet (4.8+ only). | |
| severity | No | Restrict to these severities. | |
| min_score | No | Minimum CVSS base score. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds a useful compatibility note about working on both 4.8+ and earlier deployments, which is beyond the annotations. No contradictions found.
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 concise, using two sentences plus examples. It is well-structured and every sentence adds value, covering functionality, filters, use cases, and compatibility.
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 list-type tool, the description is complete: it covers what it does, filters, examples, and version compatibility. An output schema exists, so return value details are not needed. No missing context that would prevent correct 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 descriptions cover 5 of 7 parameters (71%), with limit and offset lacking descriptions. The tool description mentions filter fields but does not compensate for the missing limit/offset semantics. Parameters that do have descriptions are clear, but overall the parameter information is only partially complete.
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 lists CVEs detected on endpoints, mentions the available filters (agent, severity, CVE ID, package), and provides example use cases. It is specific and distinguishes this from other tools like search or summary functions.
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 gives example questions the tool answers, which is helpful, but it does not explicitly state when to use this tool instead of alternatives like wazuh_vulnerability_summary or wazuh_search_alerts. It also notes compatibility across versions, but lacks direct 'use this when' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wazuh_vulnerability_summarySummarise vulnerability exposureARead-onlyIdempotent
Aggregate vulnerability exposure across the fleet: counts by severity, the most affected agents, the most common CVEs and the worst offending packages. Use this for exposure reporting and to decide where to look in detail.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Rows per breakdown. | |
| agent_id | No | Limit the summary to these agents. | |
| min_severity | No | Only count vulnerabilities at or above this severity. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, idempotentHint true, and destructiveHint false, covering the main safety aspects. The description adds that it aggregates data, which is consistent with a read-only summary operation. No contradiction and the existing annotations lower the burden.
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 concise—two sentences. The first sentence lists the aggregation outputs, the second gives the use case. No fluff or irrelevant details, and the key information is 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?
The tool is simple, parameters are fully described in the schema, annotations cover behavior, and an output schema exists. The description is sufficient for an agent to understand the tool's purpose and use it correctly without missing critical information.
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 schema description coverage is 100% (top, agent_id, min_severity each have clear descriptions). Since the schema already fully explains the parameters, the description does not add extra parameter context, so the baseline 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 states the tool aggregates vulnerability exposure across the fleet, listing specific outputs (counts by severity, most affected agents, common CVEs, worst offending packages) and the intended use case (exposure reporting, deciding where to look in detail). This is specific and distinguishes it from sibling tools like wazuh_vulnerabilities.
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 a clear use case ('Use this for exposure reporting and to decide where to look in detail'), which implies when to use it. It does not explicitly state when not to use it (e.g., for raw vulnerability lists), but the purpose is clear enough to guide the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
34 tool updates
v0.1.0- First observed
wazuh_active_response - First observed
wazuh_agent_config - First observed
wazuh_agent_inventory - First observed
wazuh_agent_summary - First observed
wazuh_alert_stats - First observed
wazuh_alert_timeline - First observed
wazuh_api_request - First observed
wazuh_cdb_lists - First observed
wazuh_cluster_status - First observed
wazuh_fim_findings - First observed
wazuh_find_software - First observed
wazuh_generate_report - First observed
wazuh_get_agent - First observed
wazuh_get_rule - First observed
wazuh_health - First observed
wazuh_indexer_query - First observed
wazuh_list_agents - First observed
wazuh_list_decoders - First observed
wazuh_list_groups - First observed
wazuh_list_indices - First observed
wazuh_list_rules - First observed
wazuh_manager_config - First observed
wazuh_manager_logs - First observed
wazuh_manager_stats - First observed
wazuh_mitre - First observed
wazuh_restart_agents - First observed
wazuh_rootcheck - First observed
wazuh_rule_groups - First observed
wazuh_run_scan - First observed
wazuh_sca_checks - First observed
wazuh_sca_policies - First observed
wazuh_search_alerts - First observed
wazuh_vulnerabilities - First observed
wazuh_vulnerability_summary
TDQS
Scored across 34 tools
Most tools target a distinct resource (alerts, agents, rules, SCA, FIM, vulnerabilities), but several overlap: wazuh_health, wazuh_cluster_status, and wazuh_agent_summary all describe health/status, and wazuh_search_alerts, wazuh_alert_stats, wazuh_alert_timeline, and wazuh_indexer_query all query alert data. The descriptions are clear enough to avoid most misselections, but the boundaries are not crisp.
All names share the wazuh_ prefix and snake_case, but the action pattern is inconsistent: some are verb-first (search_alerts, list_agents, generate_report), some are bare nouns (health, rootcheck, vulnerabilities), and some are noun phrases (cluster_status, agent_summary). A uniform verb_noun convention would make the set more predictable.
34 tools is well above the 25+ threshold and makes the surface feel heavy; several status/stat tools could be consolidated and two escape hatches cover long-tail needs. Wazuh is a broad platform, but this count will increase token overhead and selection difficulty.
The set covers the main Wazuh operations well: alert search, agent health, SCA/FIM/inventory, vulnerability lookup, rule/decoder reference, reporting, and active response. Minor gaps exist (no agent-group assignment, no rule/decoder editing, no alert triage/acknowledge), but the read-only API escape hatch and the breadth of purpose-built tools keep workflows from hitting dead ends.
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
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
XFA's remote MCP server — query device posture, compliance, policies & CVEs. Read-only.
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables querying logs, traces, and metrics from multiple OpenObserve instances via MCP tools, with parallel execution, batching, and caching.6959MIT
- AlicenseNot gradedqualityDmaintenanceEnables integration between Wazuh security platform and AI applications through the MCP framework, providing tools for security analysis, agent management, and system monitoring.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables remote execution of commands, file operations, screenshots, and clipboard access on Windows machines through MCP tools.1MIT
- AlicenseAqualityCmaintenanceEnables read-only querying of Azure Log Analytics and Azure Resource Graph through MCP, supporting KQL queries, workspace discovery, and resource inventory exploration with Azure RBAC authentication.52MIT