Skip to main content
Glama

OSSEC MCP Server

A fully functional Model Context Protocol (MCP) server for OSSEC HIDS (Host-based Intrusion Detection System). This server exposes OSSEC's security monitoring capabilities as MCP tools, resources, and prompts -- enabling AI assistants to query alerts, manage agents, inspect rules, run integrity checks, and more.

Features

Tools (26 tools)

Category

Tool

Description

Alerts

get_alerts

Retrieve alerts with filtering by level, group, time range, and search

get_alert_summary

Aggregated alert statistics by severity, group, and top rules

search_alerts

Free-text search across all alert data

Agents

list_agents

List all managed agents with status

get_agent_info

Detailed info for a specific agent

add_agent

Register a new agent

remove_agent

Remove an agent registration

restart_agent

Restart an agent remotely

Rules

get_rules

Search rules by ID, level, group, or keyword

get_rule_details

Full rule definition with match criteria

list_rule_files

List all rule XML files

get_decoders

Search and list log decoders

Syscheck

get_syscheck_results

File Integrity Monitoring results

run_syscheck_scan

Trigger a FIM scan

clear_syscheck_database

Reset FIM baseline

Rootcheck

get_rootcheck_results

Rootkit/anomaly detection results

run_rootcheck_scan

Trigger rootcheck scan

Status

get_ossec_status

Service health for all daemons

restart_ossec

Restart all OSSEC services

get_ossec_logs

Internal OSSEC logs with filtering

get_ossec_stats

Processing statistics

get_ossec_configuration

Parsed configuration (full or by section)

get_ossec_configuration_raw

Raw ossec.conf XML

Log Test

run_logtest

Test log lines against rules/decoders

Response

get_active_responses

List configured active responses

run_active_response

Execute active response on an agent

Resources (8 static resources + 3 resource templates)

Static resources:

URI

Description

ossec://status

Current service status

ossec://alerts/recent

Last 50 alerts

ossec://alerts/critical

Critical alerts (level 12+, last 24h)

ossec://agents/list

All agents

ossec://config/main

Parsed configuration

ossec://config/raw

Raw XML configuration

ossec://rules/summary

Rule files summary

ossec://logs/recent

Recent internal logs

Resource templates (dynamic, parameterized):

URI Template

Description

ossec://agents/{agent_id}

Specific agent detail

ossec://agents/{agent_id}/syscheck

Agent FIM results

ossec://agents/{agent_id}/rootcheck

Agent rootcheck results

Prompts (5 prompts)

Prompt

Description

analyze_alerts

Structured security alert analysis with recommendations

investigate_agent

Deep-dive investigation of a specific agent

security_audit

Comprehensive OSSEC deployment audit

incident_response

Guided IR workflow for security events

tune_rules

Rule tuning to reduce false positives

Related MCP server: wazuh-mcp-server

Security

This server includes several hardening measures:

  • Secure XML parsing -- Uses defusedxml to prevent XXE and billion laughs attacks when parsing OSSEC rules, decoders, and configuration files.

  • Input validation -- All user-supplied parameters (agent_id, agent name, ip, command, filename) are validated against strict regex patterns before being passed to CLI tools or the API, preventing command injection and path traversal.

  • Path traversal prevention -- Filename parameters used in filesystem glob() calls reject path separators and .. sequences.

  • Error sanitization -- Error messages returned to clients have filesystem paths stripped to avoid leaking internal directory structure.

  • Bounded resource usage -- File reads are capped at 10 MB, log tail operations use bounded memory, and query limits are clamped to configured maximums.

  • Secure defaults -- SSE transport binds to 127.0.0.1 by default (not 0.0.0.0). API communication always uses HTTPS.

  • No shell execution -- All subprocess calls use create_subprocess_exec with argument lists, never shell strings.

Installation

Prerequisites

  • Python 3.10+

  • OSSEC HIDS installed (local mode) or Wazuh/OSSEC API access (API mode)

  • Linux host (or Windows with WSL) for local mode

Installing OSSEC HIDS

If OSSEC is not already installed, you can compile it from source. Example for Debian/Ubuntu/Kali:

# Install build dependencies
sudo apt update && sudo apt install -y \
  build-essential make gcc libssl-dev libpcre2-dev \
  zlib1g-dev wget libsystemd-dev

# Download OSSEC 3.7.0
cd /tmp
wget https://github.com/ossec/ossec-hids/archive/refs/tags/3.7.0.tar.gz
tar -zxf 3.7.0.tar.gz
cd ossec-hids-3.7.0

# Create non-interactive install config
cat > etc/preloaded-vars.conf << 'EOF'
USER_LANGUAGE="en"
USER_NO_STOP="y"
USER_INSTALL_TYPE="local"
USER_DIR="/var/ossec"
USER_DELETE_DIR="y"
USER_ENABLE_ACTIVE_RESPONSE="y"
USER_ENABLE_SYSCHECK="y"
USER_ENABLE_ROOTCHECK="y"
USER_ENABLE_EMAIL="n"
USER_ENABLE_SYSLOG="y"
USER_ENABLE_FIREWALL_RESPONSE="n"
USER_WHITE_LIST="127.0.0.1"
EOF

# Compile and install
sudo ./install.sh

# Start OSSEC
sudo /var/ossec/bin/ossec-control start

# Verify
sudo /var/ossec/bin/ossec-control status

After installation, the following daemons should be running: ossec-analysisd, ossec-logcollector, ossec-syscheckd, ossec-monitord, ossec-execd.

Dependencies

Package

Purpose

mcp >= 1.0.0

MCP SDK with FastMCP server framework

pydantic >= 2.0.0

Data validation

pydantic-settings >= 2.0.0

Environment/file-based configuration

httpx >= 0.25.0

Async HTTP client for API mode

python-dateutil >= 2.8.0

Timestamp parsing

defusedxml >= 0.7.0

Secure XML parsing

Dev dependencies: pytest, pytest-asyncio, ruff

Install from source

# Clone or download the project
cd OSSEC_MCP_SERVER

# Create a virtual environment (recommended)
python3 -m venv .venv
source .venv/bin/activate   # Linux/macOS
# .venv\Scripts\activate    # Windows

# Install the package
pip install -e .

# Or install with dev dependencies
pip install -e '.[dev]'

Configure

# Copy the example environment file
cp .env.example .env

# Edit with your OSSEC settings
# At minimum, verify OSSEC_PATH points to your installation

Configuration is loaded from environment variables or a .env file. All options and their defaults:

Variable

Default

Description

OSSEC_PATH

/var/ossec

OSSEC installation root directory

OSSEC_MODE

local

local (CLI tools + filesystem) or api (REST API)

OSSEC_API_HOST

localhost

API hostname (API mode only)

OSSEC_API_PORT

55000

API port (API mode only)

OSSEC_API_USER

admin

API username (API mode only)

OSSEC_API_PASSWORD

(empty)

API password (API mode only)

OSSEC_API_SSL_VERIFY

true

Verify TLS certificates for API connections

MCP_TRANSPORT

stdio

MCP transport: stdio or sse

MCP_HOST

127.0.0.1

SSE bind address (SSE transport only)

MCP_PORT

8000

SSE port (SSE transport only)

MAX_ALERTS

500

Maximum alerts returned per query

MIN_ALERT_LEVEL

1

Default minimum alert level filter

LOG_LEVEL

INFO

Logging level (DEBUG, INFO, WARNING, ERROR)

Usage

Run the server

# stdio transport (default -- for AI tool integration)
ossec-mcp-server

# Or run as a Python module
python -m ossec_mcp

If the venv is not activated, use the full path:

/path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server

Sudo / permissions

OSSEC files under /var/ossec/ are owned by root and the ossec user. The MCP server must run with elevated privileges to read alerts, logs, rules, and configuration. Without sudo, most tools will return Permission denied.

There are two ways to handle this:

Option A -- Inline password (simple, stores password in config):

Use sudo -S to feed the password via stdin, then exec sudo to run the server with cached credentials:

echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/ossec-mcp-server

The first command authenticates and caches the credential. The exec sudo then runs the server using the cached session -- keeping stdin free for the MCP stdio protocol.

Option B -- Passwordless sudo (more secure, one-time setup):

Add a sudoers rule that allows running only this one binary without a password:

echo 'YOUR_USER ALL=(ALL) NOPASSWD: /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server' \
  | sudo tee /etc/sudoers.d/ossec-mcp
sudo chmod 440 /etc/sudoers.d/ossec-mcp

Then the config only needs sudo without any password handling:

sudo /path/to/ossec-mcp-server

All examples below use Option A (inline password). Replace <PASSWORD> with your Linux sudo password. If you prefer Option B, remove the echo ... | sudo -S true 2>/dev/null; prefix and use sudo directly.


Integration with AI tools

OSSEC is a Linux HIDS. The MCP server needs access to the OSSEC installation -- either locally on the same Linux host, or remotely via the Wazuh/OSSEC REST API.

If your editor is running on the same Linux machine as OSSEC, the commands below work directly. If your editor is on Windows/macOS and OSSEC is in WSL or a remote server, see the "Windows with WSL" and "Remote / API mode" sections further down.


VS Code (GitHub Copilot)

A ready-to-use config file is included at .vscode/mcp.json. After installing the package into the venv, VS Code will pick it up automatically when you open the project folder.

To configure it manually or in another project, create .vscode/mcp.json:

Native Linux:

{
  "servers": {
    "ossec": {
      "type": "stdio",
      "command": "bash",
      "args": [
        "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windows with WSL:

{
  "servers": {
    "ossec": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": [
        "-d", "kali-linux",
        "-e", "bash", "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Then in VS Code: open Copilot Chat, switch to Agent mode, and the OSSEC tools will be available.


Claude Code (CLI)

A ready-to-use config file is included at .mcp.json in the project root. Claude Code reads this automatically when you run claude from this directory.

To add it manually:

claude mcp add ossec \
  -e OSSEC_PATH=/var/ossec \
  -e OSSEC_MODE=local \
  -- bash -c "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"

Or create/edit .mcp.json in the project root:

{
  "mcpServers": {
    "ossec": {
      "command": "bash",
      "args": [
        "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

For global availability across all projects, add to ~/.claude.json instead.


Claude Desktop

Edit the config file at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Native Linux / macOS:

{
  "mcpServers": {
    "ossec": {
      "command": "bash",
      "args": [
        "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windows with WSL:

{
  "mcpServers": {
    "ossec": {
      "command": "wsl.exe",
      "args": [
        "-d", "kali-linux",
        "-e", "bash", "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Cursor

A ready-to-use config file is included at .cursor/mcp.json. Cursor reads this automatically when you open the project.

To configure manually, create .cursor/mcp.json in the project root:

Native Linux:

{
  "mcpServers": {
    "ossec": {
      "command": "bash",
      "args": [
        "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windows with WSL:

{
  "mcpServers": {
    "ossec": {
      "command": "wsl.exe",
      "args": [
        "-d", "kali-linux",
        "-e", "bash", "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json:

Native Linux:

{
  "mcpServers": {
    "ossec": {
      "command": "bash",
      "args": [
        "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windows with WSL:

{
  "mcpServers": {
    "ossec": {
      "command": "wsl.exe",
      "args": [
        "-d", "kali-linux",
        "-e", "bash", "-c",
        "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"
      ],
      "env": {
        "OSSEC_PATH": "/var/ossec",
        "OSSEC_MODE": "local"
      }
    }
  }
}

Windows with WSL (summary)

All the per-tool sections above already include Windows with WSL examples. The key pattern is:

wsl.exe -d <DISTRO> -e bash -c "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo <ABSOLUTE_PATH_TO_SERVER>"

Replace:

  • <DISTRO> with your WSL distro name (run wsl -l to list, e.g., kali-linux)

  • <PASSWORD> with your Linux sudo password

  • <ABSOLUTE_PATH_TO_SERVER> with the full path, e.g., /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server

Claude Code (on Windows):

claude mcp add ossec \
  -e OSSEC_PATH=/var/ossec \
  -e OSSEC_MODE=local \
  -- wsl.exe -d kali-linux -e bash -c \
  "echo '<PASSWORD>' | sudo -S true 2>/dev/null; exec sudo /mnt/d/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server"

Remote / API mode

If OSSEC runs on a remote server and you cannot run the MCP server locally alongside it, use API mode. The MCP server connects to the Wazuh/OSSEC REST API over HTTPS:

{
  "mcpServers": {
    "ossec": {
      "command": "/path/to/OSSEC_MCP_SERVER/.venv/bin/ossec-mcp-server",
      "env": {
        "OSSEC_MODE": "api",
        "OSSEC_API_HOST": "192.168.1.100",
        "OSSEC_API_PORT": "55000",
        "OSSEC_API_USER": "admin",
        "OSSEC_API_PASSWORD": "your-password",
        "OSSEC_API_SSL_VERIFY": "false"
      }
    }
  }
}

This works from any machine -- Windows, macOS, or Linux -- as long as it can reach the API endpoint over the network.


SSE transport

For network-accessible deployment (e.g., shared MCP server for multiple clients):

MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 MCP_PORT=8000 ossec-mcp-server

SSE binds to 127.0.0.1 by default. Set MCP_HOST=0.0.0.0 explicitly to expose it externally.

Connection Modes

Local mode (default)

Interacts directly with OSSEC on the same host via:

  • CLI tools: ossec-control, manage_agents, agent_control, syscheck_control, rootcheck_control, ossec-logtest

  • Filesystem: Reads alerts (JSON and plain-text formats), internal logs, rule XML files, decoder XML files, and ossec.conf directly

Requires the server to run on the same machine as the OSSEC manager, or to have filesystem access to the OSSEC installation directory (e.g., via WSL mounts).

API mode

Connects to the OSSEC/Wazuh REST API over HTTPS. Use this when the MCP server runs on a different machine than the OSSEC manager. Set OSSEC_MODE=api and configure the API connection variables. See the "Remote / API mode" example in the Usage section above.

OSSEC Alert Levels Reference

Level

Severity

Description

0

Ignored

Not classified

1--3

Low

System notifications, successful events

4--6

Medium

Errors, warnings, bad configurations

7--9

High

Bad words detected, first-time events

10--11

Very High

Multiple failures, integrity changes

12--14

Critical

Firewall drops, high-impact events

15--16

Severe

Attack success, critical integrity changes

Testing

The project includes four test suites (356 tests total):

# Activate the virtual environment
source .venv/bin/activate

# Unit and integration tests (167 tests)
python tests/test_comprehensive.py

# Security validation tests (72 tests)
python tests/test_security.py

# Live MCP protocol tests via official SDK client (105 tests)
python tests/test_mcp_sdk_protocol.py

# Live OSSEC integration tests (12 tests) -- requires a running OSSEC installation
sudo .venv/bin/python tests/test_live_ossec.py

The security tests validate input sanitization, path traversal prevention, XML safety (defusedxml), error message sanitization, timezone-aware datetime handling, boundary clamping, and exact group matching.

The MCP protocol tests spawn the server as a subprocess and connect a real MCP SDK client to verify initialization, tool listing, tool calls, resource reads, and prompt retrieval over the stdio transport.

The live OSSEC integration tests run the OssecClient directly against a real OSSEC installation, exercising service status, log retrieval, rule/decoder parsing, alert queries, syscheck, rootcheck, agent listing, stats, and configuration reads. These require sudo since OSSEC files are owned by the ossec user.

Project Structure

OSSEC_MCP_SERVER/
├── pyproject.toml                  # Build config, dependencies, entry point
├── .env.example                    # Configuration template
├── .mcp.json                       # Claude Code MCP config (auto-detected)
├── .vscode/mcp.json                # VS Code MCP config (auto-detected)
├── .cursor/mcp.json                # Cursor MCP config (auto-detected)
├── README.md
├── .gitignore
├── src/
│   └── ossec_mcp/
│       ├── __init__.py             # Package version (1.0.0)
│       ├── __main__.py             # python -m ossec_mcp support
│       ├── server.py               # FastMCP server creation and entry point
│       ├── config.py               # Settings via pydantic-settings
│       ├── ossec_client.py         # OSSEC interaction layer (CLI + API)
│       ├── tools/
│       │   ├── alerts.py           # get_alerts, get_alert_summary, search_alerts
│       │   ├── agents.py           # list_agents, get_agent_info, add/remove/restart_agent
│       │   ├── rules.py            # get_rules, get_rule_details, list_rule_files, get_decoders
│       │   ├── syscheck.py         # get_syscheck_results, run_syscheck_scan, clear_syscheck_database
│       │   ├── rootcheck.py        # get_rootcheck_results, run_rootcheck_scan
│       │   ├── status.py           # get_ossec_status, restart_ossec, logs, stats, config
│       │   ├── logtest.py          # run_logtest
│       │   └── active_response.py  # get_active_responses, run_active_response
│       ├── resources/
│       │   └── providers.py        # 8 static resources + 3 resource templates
│       └── prompts/
│           └── templates.py        # 5 prompt templates
└── tests/
    ├── test_comprehensive.py       # 167 unit/integration tests
    ├── test_security.py            # 72 security validation tests
    ├── test_mcp_sdk_protocol.py    # 105 live MCP protocol tests
    └── test_live_ossec.py          # 12 live OSSEC integration tests

License

MIT

Available Tools

26 tools
add_agentA

Add a new agent to the OSSEC manager.

Registers a new agent with the specified name and IP address. The agent will need to be authenticated and configured to connect.

Args: name: Unique name for the new agent (e.g., 'webserver-01'). ip: IP address of the agent (e.g., '10.0.0.10'). Use 'any' for dynamic IPs.

Returns: JSON object with the result including the new agent's ID and key.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
ipYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral aspects. It states the tool adds an agent and returns an ID and key, but doesn't detail side effects, uniqueness constraints, or error conditions. This is adequate but leaves gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear docstring format, front-loading the main action. It includes Args and Returns sections without unnecessary fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters and no annotations, the description covers the core functionality, input guidance, and return value. It lacks error handling or prerequisites, but is sufficient for a simple creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description adds crucial meaning. It provides examples for both parameters ('webserver-01' for name, '10.0.0.10' for ip) and explains 'any' for dynamic IPs, which is essential for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a new agent to the OSSEC manager' and explains the registration process. It distinguishes from sibling tools like list_agents and remove_agent by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions that the agent will need to be authenticated and configured after addition, providing some context. However, it doesn't explicitly state when to use this tool versus alternatives, though the purpose is distinct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_syscheck_databaseA

Clear the syscheck database for an agent.

Removes all stored file integrity data. The next scan will create a new baseline.

Args: agent_id: Agent ID whose database to clear (default: '000' for the manager).

Returns: JSON object indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNo000

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and clearly discloses the destructive nature ('removes all stored file integrity data') and the consequence that the next scan creates a new baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (6 lines), front-loads the purpose, then explains consequences and parameter details with no superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one optional parameter, no annotations, and an output schema indicating JSON return, the description adequately covers behavior, parameters, and return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% but the description adds meaning to the agent_id parameter, explaining its purpose and clarifying the default '000' corresponds to the manager.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Clear' and resource 'syscheck database', and explains that it removes all stored file integrity data, distinguishing it from siblings like get_syscheck_results and run_syscheck_scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for resetting the database and forcing a new baseline, but does not explicitly state when not to use it or compare with alternatives like run_syscheck_scan.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_active_responsesA

Get configured active response rules.

Active responses are automated actions OSSEC can take when specific alerts trigger, such as blocking an IP, restarting a service, or running a custom script.

Returns: JSON array of active response configurations including command, location, rules_id, and timeout.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only states it returns data, but fails to mention whether the operation is read-only, requires special permissions, or has any side effects or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at three sentences, front-loads the purpose, and includes necessary explanation of what active responses are. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description adequately covers the purpose and return value. Minor omission: does not specify if scope is global or filtered, but overall sufficient for a simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description has no burden to explain them. It adds value by describing the output format, which, while not parameter-related, is helpful context. Baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Get configured active response rules.' It explains what active responses are and specifies the return format as a JSON array of configurations. The verb is specific and the resource is distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or context for usage. The agent is left to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_infoA

Get detailed information about a specific OSSEC agent.

Retrieves comprehensive details including agent name, IP, OS info, last keep-alive time, group membership, and current status.

Args: agent_id: The agent ID (e.g., '001', '002'). Use '000' for the manager.

Returns: JSON object with detailed agent information.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not explicitly state that this is a read-only operation with no side effects. It lists returned fields but does not disclose behavioral traits like auth requirements or potential errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with clear sections for Args and Returns. It is front-loaded with the purpose. Slightly redundant with the existing output schema, but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description is complete. It explains the purpose, parameter, and return format. Missing details like error handling are acceptable given simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0%, but the description adds meaningful context for the agent_id parameter, including examples and the special case '000' for the manager, compensating for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves detailed information about a specific OSSEC agent, using 'Get' as a verb and specifying the resource. It distinguishes from sibling tools like list_agents and get_alerts by focusing on a single agent's comprehensive details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when detailed info about one agent is needed, but does not explicitly state when to use or not use this tool compared to siblings. No exclusion criteria or alternatives are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_alertsA

Retrieve recent OSSEC security alerts with optional filtering.

Args: limit: Maximum number of alerts to return (default: 50, max: 500). level_min: Minimum alert severity level (0-16). Level 0 = ignored, 3 = successful events, 5 = user errors, 7 = bad words, 10 = multiple failures, 12 = high importance, 15 = severe. level_max: Maximum alert severity level (0-16). group: Filter by rule group (e.g., 'syslog', 'sshd', 'authentication_failed'). search: Free-text search across alert content. time_range: Time range filter. Examples: '1h' (last hour), '24h' (last day), '7d' (last week), '30m' (last 30 minutes).

Returns: JSON array of alert objects containing timestamp, rule info, agent details, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
level_minNo
level_maxNo
groupNo
searchNo
time_rangeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides no annotations and only states 'retrieve', implying a read-only operation. It does not disclose rate limits, authentication requirements, or other behavioral traits. Given no annotations, the description is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the purpose, and uses clear structure (Args, Returns). Every sentence adds value, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters and an output schema, the description covers all inputs with detailed explanations, default values, and examples. It mentions the return format as a JSON array of alert objects, providing sufficient context for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the schema, explaining each parameter in detail including default values, valid ranges (e.g., severity levels 0-16), examples for time_range, and the return format. This fully compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve recent OSSEC security alerts with optional filtering', which includes a specific verb and resource. However, it does not differentiate from sibling tools like search_alerts, which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the parameter explanations, but it lacks explicit guidance on when to use this tool versus alternatives or when not to use it. It does not mention search_alerts or other filtering options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_alert_summaryA

Get a summary of OSSEC alerts over a time period.

Provides counts grouped by severity level, rule group, and top triggered rules.

Args: time_range: Time range to summarize. Examples: '1h', '24h', '7d'. Default: '24h'.

Returns: JSON summary with alert counts by level, group, and top rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_rangeNo24h

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It states the tool returns a JSON summary, which implies a read-only operation, but it does not explicitly disclose side effects, permissions, or data volume. Lacks full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a first sentence stating the purpose, followed by details on counts, and a separate Args section. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter and an output schema, so completeness is modest. The description covers the main functionality and return format adequately, though it could mention that alerts are from OSSEC (assumed) or any limitations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description adds critical meaning: it explains the time_range parameter with examples ('1h', '24h', '7d') and the default '24h'. This goes well beyond the schema's minimal definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a summary of OSSEC alerts over a time period' and details that it provides counts grouped by severity level, rule group, and top triggered rules. This is specific and differentiates it from siblings like get_alerts and get_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes the time_range parameter with examples and default, implying when to use it for summary statistics. It does not explicitly state when not to use it or mention alternatives, but the context of sibling tools and the description make usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_decodersA

Search and retrieve OSSEC log decoders.

Decoders are used to parse and normalize log data before it is evaluated against rules. They extract fields like source IP, username, program name, etc.

Args: search: Free-text search in decoder names. filename: Filter by decoder file name (e.g., 'local_decoder.xml').

Returns: JSON array of decoder objects with name, parent, fields extracted, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNo
filenameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description is the sole source for behavioral traits. It describes the tool as searching/retrieving, suggesting read-only behavior, but does not explicitly state non-destructiveness, permissions, or other safety aspects, which is insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a clear title line, a brief explanation of decoders, and a structured Args/Returns section. Every sentence is informative without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two optional parameters, no required params) and the existence of an output schema (though not shown), the description covers purpose, parameters, and return format adequately. Minor omissions like pagination or error handling are acceptable for a search/retrieve tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description adds clear semantic meaning for both parameters: 'search' as free-text in decoder names and 'filename' as filter by file name with an example. This significantly compensates for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search and retrieve OSSEC log decoders,' using a specific verb and resource. It explains what decoders are used for, distinguishing them conceptually from related tools like get_rules, but does not explicitly contrast with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when searching or retrieving decoders and provides parameter details. However, it lacks explicit when-not or alternative tool guidance, though the context of decoders vs rules is hinted at.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ossec_configurationA

Read the OSSEC configuration (ossec.conf).

Retrieves the parsed configuration. Can return the full config or a specific section.

Args: section: Optional configuration section to retrieve. Common sections: 'global', 'alerts', 'syscheck', 'rootcheck', 'localfile', 'remote', 'rules', 'command', 'active-response', 'syslog_output'. If not specified, returns the full configuration.

Returns: JSON object with the parsed configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes read operation and return format, but with no annotations, it lacks disclosure on error behavior, authentication needs, or side effects. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient, structured with Args/Returns, no redundant content. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core functionality and parameter; output schema exists for return type. Lacks mention of permissions but otherwise complete for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant value beyond schema: lists common section values and explains default behavior (returns full config). Compensates for 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it reads the OSSEC configuration (ossec.conf) and returns parsed config. Distinguishes from sibling get_ossec_configuration_raw by implying raw vs parsed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on optional section parameter and common values, but does not explicitly guide when to use this tool over siblings like get_ossec_configuration_raw or when to expect a section.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ossec_configuration_rawA

Get the raw OSSEC configuration file content.

Returns the complete ossec.conf file as plain text, preserving all XML formatting and comments.

Returns: The raw content of ossec.conf.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses that the output is plain text with XML formatting and comments preserved. However, it omits details such as file size implications, authentication requirements, or potential performance impact. The information is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences and a returns line. It front-loads the essential purpose in the first sentence and adds minimal necessary detail, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, clear return), the description is mostly complete. It explains the output format and preservation of comments. However, it misses an opportunity to contrast with the sibling 'get_ossec_configuration' which would provide full context for selection. The presence of an output schema (not shown) might cover return details, but its absence from provided information is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema coverage is 100%. Per guidelines, zero parameters baseline is 4. The description adds no additional parameter semantics because none are needed. The return value description is clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the raw OSSEC configuration file content as plain text, preserving XML formatting and comments. This specific verb and resource, combined with 'raw' in the name, distinguishes it from the sibling 'get_ossec_configuration' which likely returns structured data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus any alternative, particularly the sibling 'get_ossec_configuration'. There is no mention of use cases, prerequisites, or conditions under which raw content is preferred over parsed output.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ossec_logsA

Get OSSEC internal logs (ossec.log).

Retrieves the latest entries from OSSEC's own log file, useful for troubleshooting and monitoring OSSEC's operation.

Args: lines: Number of log lines to retrieve (default: 100). category: Optional filter by log category (e.g., 'ossec-analysisd', 'ossec-remoted', 'error', 'warning').

Returns: JSON array of log lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that it retrieves latest entries and explains parameters, but could add more context like being read-only with no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with an Args section and Returns section, concise with no unnecessary words. Each sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Low complexity tool with 2 optional parameters and output schema; description explains the JSON array output. Complete enough for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% coverage, but description fully explains both parameters: lines (number of lines, default 100) and category (optional filter with examples). Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves OSSEC internal logs (ossec.log) for troubleshooting and monitoring, distinguishing it from sibling tools like get_alerts, search_alerts, and get_ossec_stats which handle alerts and statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is 'useful for troubleshooting and monitoring OSSEC's operation', giving context but lacking explicit guidance on when not to use it or alternatives for other log types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ossec_statsA

Get OSSEC processing statistics.

Retrieves statistics about events analyzed, alerts generated, firewall events, and other metrics.

Args: date: Optional date filter (YYYY-MM-DD format). Default: current day.

Returns: JSON object with statistical data.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It indicates a read-only operation (Retrieves, Returns), which is non-destructive. However, it lacks details on potential side effects, rate limits, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with clear sections for purpose, args, and returns. No unnecessary words, and vital information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and an output schema (exists but not detailed), the description covers the purpose, parameter format, and return type. It could list more exact response fields but given the output schema, this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'date' is fully described: optional, format YYYY-MM-DD, default current day. This adds significant meaning beyond the schema's minimal title and type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves OSSEC processing statistics, listing specific metrics like events analyzed and alerts generated. It differentiates from siblings like get_alerts or get_ossec_logs by focus on aggregated stats, but does not explicitly compare.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as get_alerts or get_ossec_status. The description does not mention prerequisites or context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ossec_statusA

Get the current status of all OSSEC services.

Checks whether each OSSEC daemon is running or stopped, including: ossec-analysisd, ossec-remoted, ossec-syscheckd, ossec-logcollector, ossec-maild, ossec-execd, and ossec-monitord.

Returns: JSON object with service status, running count, and overall state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses that the tool checks each daemon's running state and returns a JSON object with service status, running count, and overall state. It does not mention side effects, permissions, or limitations, but for a read-only status tool, the disclosure is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences and a bulleted list. It front-loads the main purpose and efficiently lists the daemons covered, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and the note about output (even though the output schema exists), the description fully explains what the tool does and what it returns. No gaps remain for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema coverage is 100%. The description does not need to add parameter semantics beyond what's already in the schema. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool description begins with a clear verb+resource: 'Get the current status of all OSSEC services.' It then lists the specific daemons checked, making its purpose unambiguous and distinct from sibling tools like get_agent_info or get_alerts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for status checking but does not provide explicit guidance on when to use this tool over alternatives like get_ossec_logs or get_ossec_stats. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rootcheck_resultsA

Get rootcheck results for an agent.

Rootcheck performs system auditing, checking for rootkits, trojans, hidden processes, suspicious files, and system anomalies.

Args: agent_id: Agent ID to query (default: '000' for the manager).

Returns: JSON object with rootcheck findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNo000

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behaviors. It states it is a retrieval operation returning JSON, but lacks details on permissions, rate limits, or side effects. The explanation of rootcheck adds some context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with a clear structure: purpose, background, parameter documentation, return type. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and an output schema, the description covers purpose, parameter, and return type adequately. It could mention that results are from previous scans, but overall it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description compensates by explaining the agent_id parameter (default '000' for manager), adding meaning beyond the raw schema which only provides type and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get rootcheck results for an agent' and explains what rootcheck does, distinguishing it from sibling tools like run_rootcheck_scan (which initiates a scan) and get_syscheck_results (file integrity).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives such as run_rootcheck_scan or get_syscheck_results. The description implies it returns results but does not specify prerequisites or context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rule_detailsA

Get the full details of a specific OSSEC rule by its ID.

Returns the complete rule definition including all matching criteria, parent rules, frequency settings, and associated group.

Args: rule_id: The rule ID to look up (e.g., '5710').

Returns: JSON object with the complete rule definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool returns a JSON object with 'complete rule definition including all matching criteria, parent rules, frequency settings, and associated group.' It does not mention permissions, errors, or side effects, but for a read-only lookup, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loads the purpose, and uses a clear 'Args/Returns' structure without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential behavior and return content. Given the tool's simplicity (one parameter) and the existence of an output schema, it is complete enough for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 0%, the description adds value by providing an example value for rule_id ('e.g., '5710') and clarifying its purpose. For a single, simple parameter, this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the specific resource 'full details of a specific OSSEC rule by its ID'. This distinguishes it from sibling tools like 'get_rules' which likely lists rules, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description implies when to use it (when you have a rule_id and need full details), it does not explicitly exclude alternatives or mention when not to use it. However, the context from sibling tool names helps infer its distinct use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rulesA

Search and retrieve OSSEC detection rules.

OSSEC rules define what events trigger alerts. Each rule has an ID, severity level, group classification, and matching criteria.

Args: rule_id: Filter by specific rule ID (e.g., '5710' for SSH brute force). level_min: Minimum rule level (0-16). level_max: Maximum rule level (0-16). group: Filter by rule group (e.g., 'sshd', 'web', 'syslog', 'authentication_failed'). search: Free-text search in rule descriptions. filename: Filter by rule file name (e.g., 'sshd_rules.xml').

Returns: JSON array of rule objects with id, level, description, groups, and match criteria.

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idNo
level_minNo
level_maxNo
groupNo
searchNo
filenameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries full burden. It indicates read-only behavior ('search and retrieve') and describes the return format. However, it does not disclose potential pagination, performance considerations, or authorization needs. Acceptable but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose sentence, followed by a brief context paragraph and a cleanly formatted parameter list. Every sentence adds value, no redundancy. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no enums, and an output schema, the description covers parameter details and return format well. It could specify default behavior (e.g., all rules returned when no filters) and note if results are paginated. Mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates well by listing all 6 parameters with clear explanations and examples (e.g., '5710' for rule_id, 'sshd' for group). This adds significant meaning beyond the schema's bare titles and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search and retrieve OSSEC detection rules,' specifying the verb and resource. It distinguishes from sibling tools like 'get_rule_details' by focusing on search/retrieval of multiple rules, but could explicitly contrast with that tool for clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Sibling tools like 'get_rule_details' exist but are not mentioned, leaving the agent to infer context. No when-not-to-use or prerequisite information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_syscheck_resultsA

Get File Integrity Monitoring (FIM) results for an agent.

Syscheck monitors files and directories for changes. It detects modifications to file content, permissions, ownership, and attributes.

Args: agent_id: Agent ID to query (default: '000' for the manager). file: Optional specific file path to check (e.g., '/etc/passwd').

Returns: JSON object with syscheck results including changed files and their details.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNo000
fileNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions the tool detects changes to file attributes but does not disclose behavioral traits such as result freshness, dependency on syscheck being enabled, or that empty results indicate no changes. This is adequate but could be more explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (overview, args, returns). Every sentence adds value without verbosity. It is concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite low complexity (2 parameters) and presence of an output schema, the description is fairly complete. It explains what the tool returns. However, it could mention error conditions or prerequisites (e.g., agent must have syscheck module enabled).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description adds significant value by explaining both parameters: agent_id (with default '000' for manager) and file (optional path with example). This fully compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves File Integrity Monitoring results for an agent, using specific verbs and resource. It distinguishes from sibling tools like 'run_syscheck_scan' (starts a scan) and 'clear_syscheck_database' (clears results).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides basic usage context (query by agent_id, optional file filter, default manager agent). However, it does not explicitly state when to use this tool versus alternatives like 'get_rootcheck_results' or exclusion cases (e.g., agent not configured for syscheck).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agentsA

List all OSSEC agents managed by this server.

Retrieves the full list of agents including their ID, name, IP address, and status information.

Args: status: Optional filter by agent status. Valid values: 'active', 'disconnected', 'never_connected', 'pending'. If not specified, returns all agents.

Returns: JSON array of agent objects with id, name, ip, and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description is straightforward about read-only retrieval. Lacks details on side effects, authentication requirements, or rate limits, which are not critical for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured: title, brief description, parameter section, returns section. No unnecessary words, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with output schema, description provides essential info: what it lists, filter options, return format. Could mention if agents are sorted or paginated, but sufficient for intended use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description thoroughly documents the 'status' parameter with valid values and default behavior, compensating for 0% schema description coverage in the input schema. Adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List all OSSEC agents', specifying verb and resource. Distinguishes from sibling 'get_agent_info' which retrieves details for a specific agent, as this returns a full list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly shows when to use (to list agents with optional status filter) but does not explicitly state when to use alternatives or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rule_filesA

List all OSSEC rule files.

Returns the file names of all rule XML files, which can be used to inspect or filter rules by file.

Returns: JSON array of rule file information including filename and path.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description discloses return format but does not mention safety or side effects. For a read-only list, this is adequate but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences front-load the main action, with no fluff. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with no parameters and an output schema; description covers return type and purpose. Lacks potential use case but is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100% trivially. Baseline of 4 for zero-parameter tools applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'List all OSSEC rule files' with a specific verb and resource. It distinguishes from siblings like 'get_rules' (returning rules) and 'get_rule_details' (specific rule details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives guidance; usage is implied by the action, but no exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_agentA

Remove an agent from the OSSEC manager.

Permanently removes the agent registration. The agent will no longer be able to connect to the manager.

Args: agent_id: The agent ID to remove (e.g., '001').

Returns: JSON object indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It explicitly states the permanent and irreversible nature of the operation, which is critical for an agent removal tool. It also mentions the return type (JSON object indicating success/failure). More details on prerequisites or error states would improve it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no wasted words. It front-loads the action, then explains permanence, and ends with parameter and return details. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description covers the key aspects: purpose, permanence, parameter format, and return type. It could be enhanced with error handling or prerequisite info, but it is sufficient for an agent to use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter agent_id has zero schema description coverage, but the description adds an example ('e.g., ''001'') and clarifies it is the agent ID. This adds meaningful guidance beyond the schema's type-only definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Remove an agent from the OSSEC manager' with a specific verb and resource. It distinguishes itself from sibling tools like add_agent, list_agents, and restart_agent by focusing on removal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the permanent effect ('Permanently removes the agent registration. The agent will no longer be able to connect to the manager.'), providing clear context. However, it does not explicitly state when to use this tool versus alternatives, such as deactivating or suspending an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_agentA

Restart a specific OSSEC agent.

Sends a restart command to the agent, causing it to reload its configuration and reconnect.

Args: agent_id: The agent ID to restart (e.g., '001').

Returns: JSON object indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the restart action, configuration reload, and reconnection, but does not mention side effects like agent downtime or required permissions. Basic transparency is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no redundant text, and includes structured Args and Returns sections. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and a basic return, the description is mostly complete. However, it does not specify when a restart is valid (e.g., agent must be connected) or what failure reasons might be. The presence of an output schema is noted but not shown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter (agent_id) with 0% coverage. The description adds meaning by specifying it's the agent ID and providing an example ('001'). This compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool restarts a specific OSSEC agent, with a specific verb ('Restart') and resource ('OSSEC agent'). It distinguishes itself from sibling tools like restart_ossec and get_agent_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but provides no explicit guidance on when to use it versus alternatives (e.g., restart_ossec, remove_agent). Usage is implied but not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_ossecA

Restart all OSSEC services.

Stops and restarts all OSSEC daemons. Use this after making configuration changes to apply them.

Returns: JSON object indicating success or failure with service output.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes 'Stops and restarts all OSSEC daemons' but does not elaborate on side effects like potential downtime. With no annotations, slightly more detail would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three efficient sentences with clear purpose, usage, and return value. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for a simple restart tool. Covers purpose, usage context, and output shape. Could mention that restart might be disruptive, but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage is 100%. Baseline score of 4 applies as description adds no param info, but none needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Restart all OSSEC services' which is a specific verb+resource. It distinguishes from sibling restart_agent by targeting all services.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use this after making configuration changes to apply them', providing clear context. Does not mention alternatives or when not to use, but sufficient for simple tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_active_responseA

Execute an active response command on an agent.

Triggers a configured active response action on a specific agent. Common commands include firewall-drop, host-deny, disable-account, etc.

⚠️ WARNING: This performs real actions on the agent! Ensure you understand the command's effect before executing.

Args: agent_id: Target agent ID (e.g., '001'). Use '000' for the manager. command: Active response command name (e.g., 'firewall-drop', 'host-deny', 'restart-ossec', 'disable-account'). arguments: Optional space-separated arguments (e.g., IP to block: '10.0.0.5').

Returns: JSON object indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes
commandYes
argumentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description fully covers behavior. Warns that it performs real actions (destructive), and describes return as JSON indicating success or failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections, but the warning could be integrated more concisely. Overall minimal fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameters, return type, and usage caution. Lacks explicit differentiation from sibling tools, but the action-oriented nature makes it distinct.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but description provides detailed explanations for all three parameters: agent_id (with example), command (with example list), arguments (with example). Adds substantial meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it executes an active response command on an agent, with specific verb and resource. Examples of commands and agent ID format reinforce purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes a warning about real actions on the agent, advising caution. Lists common commands implying appropriate use. Does not explicitly mention alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_logtestA

Test a log line against OSSEC rules and decoders.

Runs a log line through OSSEC's analysis engine to see how it would be decoded, which rules it matches, and what alert level it would generate. Extremely useful for debugging rules and decoders.

Args: log_line: The log line to test (e.g., a syslog line, auth.log entry, etc.). verbose: If True, include verbose rule matching details.

Returns: JSON object with decoding results, matched rules, and alert info.

Example log lines to test: - 'Mar 12 10:00:00 server sshd[1234]: Failed password for root from 10.0.0.1 port 22' - 'Mar 12 10:00:00 server sudo: user1 : TTY=pts/0 ; PWD=/home ; COMMAND=/bin/su -'

ParametersJSON Schema
NameRequiredDescriptionDefault
log_lineYes
verboseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the tool as a test/analysis engine that does not modify state, which is consistent with its purpose. However, it does not disclose potential prerequisites (e.g., OSSEC must be running), authentication requirements, or any limitations. Given the test nature, the behavioral disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a short lead sentence, then a more detailed explanation, followed by formatted Args and Returns sections, plus example log lines. Every sentence adds value, and there is no wasted text. The structure is front-loaded with the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has an output schema (so return format is largely covered) and is a straightforward diagnostic tool, the description is nearly complete. It explains inputs, outputs, and provides examples. It could be enhanced by mentioning that OSSEC must be active, but that is implicit. Overall, it provides sufficient context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description includes an 'Args' section that explains both parameters: log_line (with example log entries) and verbose (meaning of True). This adds significant meaning beyond the basic schema, especially since schema coverage is 0%. The examples are helpful for users unfamiliar with OSSEC log formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: testing a log line against OSSEC rules and decoders to see decoding, rule matches, and alert level. It uses specific verbs ('Test', 'Runs') and resources ('log line against OSSEC rules and decoders'). Among sibling tools, it stands out as a debugging/testing tool, distinct from management tasks like get_rules or add_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Extremely useful for debugging rules and decoders', providing clear context for when to use the tool. It does not explicitly state when not to use it or name alternatives, but the sibling tools do not directly compete (e.g., get_rules provides rule listings, not testing). The usage guidance is solid but lacks exclusionary criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_rootcheck_scanA

Trigger a rootcheck scan on an agent.

Initiates a new rootcheck scan that will check for rootkits, trojans, and other security issues.

Args: agent_id: Agent ID to scan (default: '000' for the manager).

Returns: JSON object indicating whether the scan was triggered successfully.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNo000

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description mentions initiating a scan and returning success status, but lacks details on whether the scan blocks, requires agent connectivity, or has side effects. Insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is brief but includes an Args and Returns section. Could be more concise without losing clarity, but overall well-structured for a simple trigger tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Has output schema but not shown. Description explains return value. For a simple trigger, it's adequate but lacks error handling or conditions for successful trigger.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides minimal parameter info ('Agent Id' with default). Description adds meaning by explaining 'agent_id' as 'Agent ID to scan' and clarifying default '000' is for the manager.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool triggers a rootcheck scan on an agent, checking for rootkits, trojans, and security issues. Distinguishes from sibling 'run_syscheck_scan' by specifying the scan type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Indicates the action (trigger scan) but does not specify when to use this tool versus alternatives like 'run_syscheck_scan'. No explicit context for appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_syscheck_scanA

Trigger a File Integrity Monitoring scan on an agent.

Initiates a new syscheck scan that will check all monitored files and directories for changes since the last scan.

Args: agent_id: Agent ID to scan (default: '000' for the manager).

Returns: JSON object indicating whether the scan was triggered successfully.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idNo000

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions triggering a scan and returning a JSON success indicator but does not disclose side effects like impact on running scans, performance, or required permissions, leaving behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a front-loaded action statement, followed by an efficient Args section. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists and description mentions returning a JSON success indicator. However, it lacks details on error conditions, agent availability, or behavior when a scan is already running, making it partially complete for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no descriptions in schema), but the description adds meaning by explaining the 'agent_id' parameter, including its default value '000' for the manager. This compensates for the schema's lack of detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Trigger a File Integrity Monitoring scan on an agent' and 'Initiates a new syscheck scan', providing a specific verb and resource. It distinguishes from sibling tools like 'clear_syscheck_database' and 'get_syscheck_results' by focusing on triggering the scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates use for initiating a syscheck scan but does not explicitly state when not to use or provide alternatives. Siblings like 'run_rootcheck_scan' exist, but no guidance on choosing between them is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_alertsA

Search OSSEC alerts using a free-text query.

Searches across all alert fields including rule descriptions, source IPs, agent names, log content, and more.

Args: query: Search string to match across alert content. limit: Maximum number of matching alerts to return (default: 50). time_range: Optional time range filter (e.g., '1h', '24h', '7d').

Returns: JSON array of matching alert objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
time_rangeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explains the tool searches across alert fields and returns a JSON array. It does not explicitly state it is read-only or mention rate limits, but it covers the core behavior comprehensively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a summary line followed by structured argument details. Every sentence adds value, avoiding unnecessary words while covering purpose, parameters, and return type.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters and no nested objects, the description fully addresses input and output. It explains the query behavior, parameter details, and return format (JSON array). With an output schema available externally, no further details are needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully explain parameters. It does so by defining 'query' as a search string, 'limit' with a default, and 'time_range' with examples like '1h'. This adds complete meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches OSSEC alerts with a free-text query across multiple fields. It specifies the resource ('OSSEC alerts') and the action ('search'), differentiating from siblings like 'get_alerts' which likely have different retrieval methods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (free-text search). While it does not explicitly exclude other use cases or mention sibling alternatives, the context of searching across fields is distinct enough to guide correct selection.

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.

  1. 26 tool updatesv1.0.0
    • First observedadd_agent
    • First observedclear_syscheck_database
    • First observedget_active_responses
    • First observedget_agent_info
    • First observedget_alert_summary
    • First observedget_alerts
    • First observedget_decoders
    • First observedget_ossec_configuration
    • First observedget_ossec_configuration_raw
    • First observedget_ossec_logs
    • First observedget_ossec_stats
    • First observedget_ossec_status
    • First observedget_rootcheck_results
    • First observedget_rule_details
    • First observedget_rules
    • First observedget_syscheck_results
    • First observedlist_agents
    • First observedlist_rule_files
    • First observedremove_agent
    • First observedrestart_agent
    • First observedrestart_ossec
    • First observedrun_active_response
    • First observedrun_logtest
    • First observedrun_rootcheck_scan
    • First observedrun_syscheck_scan
    • First observedsearch_alerts

TDQS

A4.1/5.0

Scored across 26 tools

Disambiguation5/5

Each tool targets a distinct OSSEC functionality or resource. Even closely related tools like get_alerts, search_alerts, and get_alert_summary have clearly separate purposes (recent retrieval, free-text search, summary aggregation). There is no meaningful overlap between any tools.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., add_agent, get_alerts, run_syscheck_scan). The verbs are descriptive and the nouns are the OSSEC resources. No mixed conventions or irregular names.

Tool Count5/5

With 26 tools, the server covers the full OSSEC management surface—agents, alerts, rules, syscheck, rootcheck, configuration, active responses, logs, stats, and status. Each tool serves a necessary purpose without redundancy, making the set well-scoped for a security monitoring MCP.

Completeness4/5

The tool set provides comprehensive CRUD-like operations for most OSSEC domains, including agent lifecycle, alert analysis, rule management, and scans. Minor gaps exist (e.g., no agent key revocation, no agent rekeying), but these are not critical for typical management workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that exposes a 60+ tool security and threat-intel stack to AI agents, enabling secret scanning, Sigma rule generation, ransomware lookup, OSINT, and deep research.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    AI-powered MCP server that enables security analysts to query Wazuh SIEM/XDR for alert triage, threat hunting, compliance audits, and incident response through natural language prompts.
    28
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server that exposes multiple OSINT tools to AI assistants like Claude, enabling sophisticated reconnaissance and information gathering tasks using industry-standard OSINT tools.
    237
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables conversational interaction with Wazuh SIEM, allowing users to investigate alerts, hunt threats, tune false positives, edit rules, and run security actions via natural language.
    MIT