klaxon
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAZUH_TIMEOUT | No | Timeout in seconds for requests to Wazuh. | 60 |
| WAZUH_ENGINE_URL | No | URL of the Wazuh engine HTTP server. If empty, the 'tester_sessions' tool is disabled. | |
| WAZUH_VERIFY_SSL | No | Whether to verify SSL certificates. Setting it to 'false' logs a warning at startup. | true |
| WAZUH_INDEXER_URL | Yes | The URL of the Wazuh indexer (required). | |
| WAZUH_MANAGER_URL | No | URL of the Wazuh manager API. If empty, the 'manager' tool is disabled. | |
| WAZUH_INDEXER_USER | No | Username for the Wazuh indexer. | |
| WAZUH_MANAGER_USER | No | Username for the Wazuh manager API. | |
| WAZUH_LOGTEST_SPACE | No | The logtest environment (tester session) to use. | custom |
| WAZUH_MCP_AUTH_TOKEN | No | Shared secret required as Authorization: Bearer <token> when serving over HTTP. Without it, the server serves without authentication. | |
| WAZUH_SEARCH_MAX_SIZE | No | Maximum number of results returned by the 'search' tool. '0' disables the cap. | 100 |
| WAZUH_INDEXER_PASSWORD | No | Password for the Wazuh indexer. | |
| WAZUH_MANAGER_PASSWORD | No | Password for the Wazuh manager API. | |
| WAZUH_SCHEMA_FIELD_LIMIT | No | Maximum number of fields returned by the 'schema' tool. | 200 |
| WAZUH_SCHEMA_PROBE_BATCH | No | Batch size for probing field coverage in the schema tool. | 100 |
| WAZUH_LOGTEST_TRACE_LEVEL | No | Trace level for logtest. | ASSET_ONLY |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| searchA | Run an OpenSearch query DSL request against a Wazuh 5 index pattern. Returns the raw JSON response, including Common patterns:
These are datastreams. Always query the wildcard pattern, never a backing index such as .ds-wazuh-events-v5-network-activity-000001. The time field is A "size" larger than KLAXON_SEARCH_MAX_SIZE (default 100) is lowered to that limit before the query is sent, and the diagnostics block says so. Use "size": 0 with aggregations to count without pulling documents. The same cap applies to the When anonymization is enabled and KLAXON_ANONYMIZATION_MASK_AGGREGATION_KEYS
is on, aggregation bucket keys for masked fields (terms, multi_terms,
composite) are replaced with the same deterministic tokens as the Args: index: Index or datastream pattern, e.g. "wazuh-events-v5-network-activity*". body: OpenSearch query DSL as a JSON string. |
| schemaA | List the fields of a Wazuh 5 index and how many documents actually fill them. Use this before writing any aggregation. The Wazuh 5 engine schema defines
2351 fields, and a mapped field is not necessarily a populated one: Namespace sizes in the engine schema: wazuh=492, threat=444, process=391, file=144, tls=77, host=57, observer=53, dll=46, user=46, client=35, destination=35, server=35. Args: index: Index or datastream pattern, e.g. "wazuh-events-v5-network-activity*". prefix: Restrict to a field namespace, e.g. "wazuh." or "source.". Strongly recommended — an unfiltered listing over 2351 fields is capped. only_populated: When true (default), issue a second pass with exists aggregations and return only fields holding a value in at least one document. |
| logtestA | Run a raw log line through the Wazuh 5 decoder chain and return the result. Calls the Content Manager plugin on the indexer. The response shows which decoders matched and what the normalised WCS document looks like, which is the way to find out why a field is empty in the index. Args:
event: The raw log line to decode.
location: Log source path, e.g. "/var/ossec/logs/opnsense_syslog.log".
queue: Queue id of the originating source. Defaults to 49.
space: One of test, custom, standard — logtest supports no others. Custom
decoders live in "custom"; "standard" carries only the shipped ruleset.
A valid name does not guarantee the environment is provisioned — use
the |
| managerA | Issue a GET against the Wazuh manager API and return the response unchanged. A deliberately thin passthrough. The manager API is the volatile half of Wazuh 5 and breaks further at GA (/var/ossec moves to /var/wazuh-manager, clustering becomes the default, agent id 000 disappears), so this tool adds no interpretation on top of it. Non-2xx responses are returned as they are, status code included. In Wazuh 5 several 4.x endpoints are gone and their 404 is the correct answer, not a failure to hide:
The Args: path: Manager API path, e.g. "/agents". params: Optional query parameters. |
| detectorsA | List or fetch OpenSearch Security Analytics detectors. Detection in Wazuh 5 lives in the indexer, not in the Engine. These detectors are what produces the documents in wazuh-findings-v5-*. The plugin exposes no list-all endpoint, so Args: action: "list" for all detectors, "get" for a single one by id. detector_id: Required when action is "get". size: Maximum number of detectors to return for "list". Defaults to 50. |
| tester_sessionsA | List the Wazuh 5 engine test sessions — the environments
Calls POST /_internal/tester/table/get on the engine's internal HTTP API. That server runs inside the manager container on its own port, so it needs KLAXON_ENGINE_URL — the indexer and manager URLs do not reach it. Read-only by design. The engine also exposes session/post, session/delete and session/reload; none of them are wired up here. Sessions are recreated on every policy import through the Content Manager API, so a hand-made session disappears at the next import — a create tool would only invite a workaround that does not hold. Args: action: Only "list" is supported. |
| findings_overviewA | Summarise wazuh-findings-v5-* by severity, agent, rule title and category. A frozen query for the breakdown every report starts with, so that producing
it needs no valid OpenSearch query DSL. Severity is Output is a compact set of tables, not raw JSON. The request that produced
them is in the footer if you want to re-run or extend it via Args: hours: Size of the time window ending now, in hours. Default 24. top_agents: How many agents to list, by finding count. Default 10. top_titles: How many rule titles to list. Default 10. |
| field_coverageA | Measure what share of the documents actually carries a value per field. The normalisation-quality measurement, callable without query DSL. For each mapped field it reports the document count and coverage inside a time window and across the whole datastream, because those are different questions: A decoder fix had landed hours earlier. All three numbers are correct. The window describes the pipeline as it runs now, the datastream describes the stored history — quote the one you mean. When they differ by more than 20 percentage points the diagnostics block says so explicitly, because that gap is the signature of a change in normalisation inside the datastream. Fields with 0% coverage are listed, never filtered: mapped-but-never-
populated is the Coverage is three-valued — populated, not populated, not measurable. An exists aggregation returns 0 for a field the mapping declares "index": false no matter what the documents hold, so the mapping is read first and such fields are reported as not measurable, with dashes, never as 0%. Verified: event.original in wazuh-events-v5-network-activity* is index:false and doc_values:false, matches 0 of 10,243,389 documents, and carries the complete raw log line in _source of every document sampled. For those fields the tool samples _source and reports in how many of the sampled documents the key is present — evidence rather than a coverage figure. Cost scales with the field count — the schema has 2351 fields — so the
listing is capped at KLAXON_SCHEMA_FIELD_LIMIT (default 200) and the cap is
reported. Pass a Args: index: Index or datastream pattern, e.g. "wazuh-events-v5-network-activity*". prefix: Restrict to a field namespace, e.g. "source." or "wazuh.". hours: Size of the time window ending now, in hours. Default 24. min_docs: Hide fields below this document count in the window. Default 0, which hides nothing. Any higher value removes the 0% fields — the ones worth looking at — so the output says how many it dropped. |
| gdpr_checkA | Run the DSGVO plausibility check on an index: find sensitive fields. Reads the index mappings, samples a few documents, and classifies the
fields by three heuristics in decreasing certainty: custom rules from
config.yaml ( Priorities: IPs, usernames and e-mails are directly personal (high);
hostnames and agent ids are indirectly personal (medium); free-text fields
that embed personal data are flagged as such. Fields already in the
anonymization With Args: index: Index or datastream pattern, e.g. "wazuh-events-v5-*". prefix: Restrict to a field namespace, e.g. "user." or "source.". sample_docs: Documents to sample for content analysis. Defaults to KLAXON_GDPR_SAMPLE_SIZE (10). 0 disables sampling. apply: When true, merge the suggested fields into config.yaml and log. exclude: Field names to skip (e.g. internal fields without GDPR relevance). as_json: When true, return a machine-readable JSON report instead of the table. |
| klaxon_posture_checkA | Read-only security/DSGVO posture check: facts + gaps, never a verdict. Returns one The salt is NEVER emitted — not even partially, not hashed. No PII, raw values, tokens, hostnames, usernames, IPs or sampled values appear in the output; only counts, booleans, statuses, index patterns, durations and role names. When the indexer is unreachable a check reports "unknown — " instead of a guessed value. Read-only: nothing is written to the indexer, nothing deployed, no config change. Args: tenant: Tenant whose masked/quarantine streams and RBAC roles are checked (default "customer-a"). hours: Quarantine-backlog window in hours (default 24). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| categories | The eight fixed Wazuh 5 integration categories. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sec73/klaxon'
If you have feedback or need assistance with the MCP directory API, please join our Discord server