Skip to main content
Glama
cyberbalsa

OpenSearch MCP Server

by cyberbalsa

OpenSearch MCP Server

A Model Context Protocol (MCP) server for querying and analyzing Wazuh security logs stored in OpenSearch.

Features

  • Search for security alerts with advanced filtering

  • Get detailed information about specific alerts

  • Generate statistics on security events

  • Visualize alert trends over time

  • Progress reporting for long-running operations

  • Structured error handling

Related MCP server: OpenSearch MCP Server

Prerequisites

  • Node.js v16 or higher

  • Access to an OpenSearch instance containing Wazuh security logs

Installation

You can run this tool directly using npx without cloning the repository:

# Run the latest version from GitHub
npx github:jetbalsa/mcp-opensearch-js

# Run with debug mode enabled
npx github:jetbalsa/mcp-opensearch-js --debug

# You can also specify a specific branch or commit
npx github:jetbalsa/mcp-opensearch-js#main

Option 2: Local Installation

  1. Clone this repository:

git clone https://github.com/jetbalsa/mcp-opensearch-js.git
cd mcp-opensearch-js
  1. Install dependencies:

npm install
  1. Configure your environment variables:

cp .env.example .env
  1. Edit the .env file with your OpenSearch connection details:

OPENSEARCH_URL=https://your-opensearch-endpoint:9200
OPENSEARCH_USERNAME=your-username
OPENSEARCH_PASSWORD=your-password
DEBUG=false

Running the Server

Start the server:

npm start

This will start the server in stdio mode.

Enable debug logging:

npm run stdio:debug

Test with MCP CLI:

npm run dev

This runs the server with the FastMCP CLI tool for interactive testing.

Test with MCP Inspector:

npm run inspect

This starts the server and connects it to the MCP Inspector for visual debugging.

Server Tools

The server provides the following tools:

1. Search Alerts

Search for security alerts in Wazuh data.

Parameters:

  • query: The search query text

  • timeRange: Time range (e.g., 1h, 24h, 7d)

  • maxResults: Maximum number of results to return

  • index: Index pattern to search

2. Get Alert Details

Get detailed information about a specific alert by ID.

Parameters:

  • id: The alert ID

  • index: Index pattern

3. Alert Statistics

Get statistics about security alerts.

Parameters:

  • timeRange: Time range (e.g., 1h, 24h, 7d)

  • field: Field to aggregate by (e.g., rule.level, agent.name)

  • index: Index pattern

4. Visualize Alert Trend

Visualize alert trends over time.

Parameters:

  • timeRange: Time range (e.g., 1h, 24h, 7d)

  • interval: Time interval for grouping (e.g., 1h, 1d)

  • query: Query to filter alerts

  • index: Index pattern

Example Usage

Using the MCP CLI tool:

> tools
Available tools:
- searchAlerts: Search for security alerts in Wazuh data
- getAlertDetails: Get detailed information about a specific alert by ID
- alertStatistics: Get statistics about security alerts
- visualizeAlertTrend: Visualize alert trends over time

> tools.searchAlerts(query: "rule.level:>10", timeRange: "12h", maxResults: 5)

Using with a Client

To use this MCP server with a client implementation:

import { Client } from "@modelcontextprotocol/sdk";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

const client = new Client(
  {
    name: "example-client",
    version: "1.0.0",
  },
  {
    capabilities: {},
  },
);

const transport = new SSEClientTransport(new URL(`http://localhost:3000/sse`));

await client.connect(transport);

// Use tools
const result = await client.executeTool("searchAlerts", {
  query: "rule.level:>10",
  timeRange: "24h",
  maxResults: 10
});

console.log(result);

License

MIT

Available Tools

9 tools
alertStatisticsC

Get statistics about security alerts

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNoField to aggregate byrule.level
indexNoIndex patternwazuh-alerts-*
timeRangeNoTime range (e.g., 1h, 24h, 7d)24h

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a 'Get' operation, implying read-only behavior, but doesn't mention any other traits like authentication requirements, rate limits, or what the statistics output looks like (e.g., aggregated counts, trends). This leaves significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what kind of statistics are returned (e.g., counts, averages, distributions) or how they're formatted, which is critical for a statistical tool. The high schema coverage helps with inputs but not outputs or behavioral context.

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

Parameters3/5

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

The schema description coverage is 100%, with all three parameters clearly documented in the schema itself. The description adds no additional parameter semantics beyond what's already in the schema, so it meets the baseline score of 3 without compensating or detracting.

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 the verb ('Get') and resource ('statistics about security alerts'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools like 'visualizeAlertTrend' or 'searchAlerts' that might also provide statistical insights, which prevents a perfect score.

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 like 'visualizeAlertTrend' or 'searchAlerts'. It lacks any context about use cases, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.

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

exploreFieldValuesC

Explore possible values for a field in an index

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldYesField name to explore
indexYesIndex pattern to search
maxValuesNoMaximum number of values to return
queryNoOptional query to filter documents*

TDQS

C2.9/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 the full burden of behavioral disclosure. It states the tool explores values but doesn't cover critical aspects like whether it's read-only or mutative, performance characteristics (e.g., rate limits), error handling, or output format. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, making it easy to parse quickly while conveying the core functionality.

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

Completeness2/5

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

Given the tool has no annotations, no output schema, and moderate complexity (4 parameters including optional ones), the description is incomplete. It lacks details on behavioral traits, output expectations, and usage context, making it insufficient for an agent to fully understand how to invoke and interpret results without additional inference.

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

Parameters3/5

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

Schema description coverage is 100%, meaning all parameters are documented in the input schema. The description adds minimal value beyond the schema by implying the tool explores values for a field in an index, but it doesn't provide additional context like typical use cases or constraints not in the schema. This meets the baseline for high schema 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 'Explore possible values for a field in an index' clearly states the tool's purpose with specific verbs ('explore') and resources ('field', 'index'), making it understandable. However, it doesn't explicitly distinguish this tool from siblings like 'getIndexMapping' or 'searchLogs', which might also involve field or index operations, leaving some ambiguity about uniqueness.

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 doesn't mention prerequisites, exclusions, or compare it to sibling tools such as 'getIndexMapping' (which might provide field metadata) or 'searchLogs' (which might filter values), leaving the agent to infer usage context without explicit direction.

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

getAlertDetailsB

Get detailed information about a specific alert by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe alert ID
indexNoIndex patternwazuh-alerts-*

TDQS

B3.1/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 the full burden. It states the tool retrieves information (implied read-only), but lacks details on permissions, rate limits, error handling, or return format. For a tool with no annotations, this is insufficient behavioral context.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a simple retrieval tool.

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

Completeness3/5

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

Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks context on usage, behavioral traits, or output, leaving gaps that could hinder effective agent invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters ('id' and 'index'). The description adds no additional meaning beyond implying the 'id' parameter is required for specificity, which is already covered in the schema. Baseline 3 is appropriate when schema does the heavy lifting.

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 the verb ('Get') and resource ('detailed information about a specific alert'), making the purpose understandable. However, it doesn't differentiate from siblings like 'searchAlerts' or 'visualizeAlertTrend', which might also retrieve alert information but with different scopes or formats.

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 doesn't mention prerequisites (e.g., needing an alert ID), exclusions, or compare it to siblings like 'searchAlerts' for broader queries or 'alertStatistics' for aggregated data.

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

getIndexMappingC

Get the field mappings for an index

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesIndex name to inspect

TDQS

C2.9/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 states a read operation ('Get'), implying it's likely non-destructive, but doesn't disclose behavioral traits such as permissions needed, rate limits, error handling, or what the output includes (e.g., format, pagination). This leaves significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, clear sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what 'field mappings' entail, the return format, or any behavioral context needed for effective use. For a read operation with no structured support, more detail is warranted.

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

Parameters3/5

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

The schema description coverage is 100%, with the parameter 'index' documented as 'Index name to inspect'. The description adds no additional meaning beyond this, as it only repeats the concept of inspecting an index without providing extra context like valid index names or examples. Baseline 3 is appropriate when the schema does the heavy lifting.

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 the action ('Get') and resource ('field mappings for an index'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'listIndexes' or 'exploreFieldValues', which might also involve index metadata operations, so it lacks sibling distinction.

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. With siblings like 'listIndexes' and 'exploreFieldValues', there's no indication of whether this is for detailed mapping inspection versus general listing or exploration, leaving usage context unclear.

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

listIndexesC

List all available indexes in OpenSearch

ParametersJSON Schema
NameRequiredDescriptionDefault
patternNoIndex pattern to filter (e.g., 'logs-*')*

TDQS

C2.9/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 the full burden. It states it's a list operation but doesn't disclose behavioral traits like whether it's read-only, if it requires specific permissions, potential rate limits, or what the output format looks like (e.g., pagination, error handling). This is a significant gap for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't address key contextual aspects like return values, error conditions, or behavioral constraints. For a tool with no structured metadata, this leaves the agent under-informed about how to interact with it effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the single parameter 'pattern' with its default and example. The description doesn't add any meaning beyond this, such as explaining when filtering is useful or how patterns work in OpenSearch. Baseline 3 is appropriate when the schema does the heavy lifting.

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 the verb ('List') and resource ('all available indexes in OpenSearch'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'getIndexMapping' or 'searchLogs' that might also involve indexes, so it misses full sibling differentiation.

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 alternatives. For example, it doesn't explain if this is for discovery versus detailed mapping or when filtering with the pattern parameter is preferred over other search methods. This leaves the agent without contextual usage cues.

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

monitorLogsC

Monitor logs in real-time (simulated)

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesIndex pattern to monitor
maxResultsNoNumber of logs to show
queryNoFilter query*
refreshIntervalNoRefresh interval in seconds

TDQS

C2.9/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 the full burden. It mentions 'real-time (simulated)', hinting at a streaming or polling behavior, but lacks details on permissions, rate limits, side effects, or output format. This is inadequate for a tool with potential behavioral complexity.

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

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose and includes a clarifying note ('simulated'), making it highly concise and well-structured for quick understanding.

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

Completeness2/5

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

Given no annotations, no output schema, and a tool with real-time monitoring implications, the description is incomplete. It doesn't cover behavioral traits, output expectations, or integration with sibling tools, leaving significant gaps for the agent to operate effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema, such as explaining how parameters interact or typical use cases. Baseline 3 is appropriate when the schema handles parameter documentation.

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 the verb ('monitor') and resource ('logs'), specifying 'in real-time (simulated)' which indicates the nature of the operation. However, it doesn't explicitly differentiate from sibling tools like 'searchLogs' or 'listIndexes', which might offer similar or 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 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 alternatives such as 'searchLogs' or 'listIndexes'. The description implies real-time monitoring but doesn't specify use cases, prerequisites, or exclusions, leaving the agent to infer usage from context alone.

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

searchAlertsC

Search for security alerts in Wazuh data

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoIndex pattern to searchwazuh-alerts-*
maxResultsNoMaximum number of results to return
queryYesThe search query text
timeRangeNoTime range (e.g., 1h, 24h, 7d)24h

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but only states the basic function. It doesn't mention whether this is a read-only operation, if it requires specific permissions, rate limits, pagination behavior, or what the return format looks like. For a search tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete for a search tool with 4 parameters. It doesn't cover behavioral aspects like safety, performance, or result format, nor does it provide usage context relative to siblings. For a tool in a security data context with multiple alternatives, more guidance is needed.

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

Parameters3/5

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

The description adds no parameter-specific information beyond what the schema already provides (100% coverage). It doesn't explain the semantics of 'query' (e.g., Lucene syntax), 'timeRange' formats, or how 'maxResults' interacts with pagination. Since the schema covers all parameters adequately, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Search for') and resource ('security alerts in Wazuh data'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'searchLogs' or 'getAlertDetails', but the focus on 'alerts' versus 'logs' or 'details' provides some implicit distinction.

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 like 'searchLogs', 'getAlertDetails', or 'alertStatistics'. It lacks any mention of prerequisites, exclusions, or specific contexts that would help an agent choose appropriately among the sibling tools.

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

searchLogsC

Search for logs in any OpenSearch index

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoComma-separated list of fields to return
indexYesIndex pattern to search
maxResultsNoMaximum number of results to return
queryYesThe search query text
timeFieldNoName of the timestamp field@timestamp
timeRangeNoTime range (e.g., 1h, 24h, 7d)24h

TDQS

C2.9/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 the full burden of behavioral disclosure. While 'Search' implies a read-only operation, the description doesn't mention important behavioral aspects like pagination behavior, rate limits, authentication requirements, error handling, or what happens when no results are found. For a search tool with 6 parameters and no annotations, this is a significant gap.

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 at just 6 words, with zero wasted language. It's front-loaded with the core purpose and doesn't contain any unnecessary elaboration or redundant information.

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

Completeness2/5

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

For a search tool with 6 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what format results are returned in, how many results might be expected, whether there's pagination, or any error conditions. The agent would need to guess about important behavioral aspects of this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any meaningful parameter semantics beyond what's already in the schema - it doesn't explain how parameters interact, provide examples of valid values, or clarify the relationship between parameters like 'query' and 'timeRange'.

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 the action ('Search for logs') and target resource ('in any OpenSearch index'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'searchAlerts' or 'monitorLogs', which likely have overlapping domains in log management.

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. With sibling tools like 'searchAlerts', 'exploreFieldValues', and 'monitorLogs' available, there's no indication of what makes this tool distinct or when it should be preferred over those alternatives.

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

visualizeAlertTrendC

Visualize alert trends over time

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoIndex patternwazuh-alerts-*
intervalNoTime interval for grouping (e.g., 1h, 1d)1d
queryNoQuery to filter alerts*
timeRangeNoTime range (e.g., 1h, 24h, 7d)7d

TDQS

C2.9/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 the full burden of behavioral disclosure. It mentions 'visualize' but doesn't clarify what type of visualization (e.g., chart, graph), output format, permissions needed, rate limits, or side effects. This leaves significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

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

Completeness2/5

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

Given the complexity of a visualization tool with no annotations and no output schema, the description is insufficient. It doesn't explain what the visualization output looks like, how it's returned, or any behavioral traits, leaving the agent with incomplete information for proper invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters (index, interval, query, timeRange) with descriptions. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high 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 the verb ('visualize') and resource ('alert trends over time'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'alertStatistics' or 'searchAlerts' that might also analyze alert data, missing the specificity needed for a perfect score.

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 alternatives like 'alertStatistics' or 'searchAlerts'. The description implies it's for trend visualization, but it doesn't specify prerequisites, exclusions, or comparative contexts with siblings.

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. 9 tool updatesv1.0.0
    • First observedalertStatistics
    • First observedexploreFieldValues
    • First observedgetAlertDetails
    • First observedgetIndexMapping
    • First observedlistIndexes
    • First observedmonitorLogs
    • First observedsearchAlerts
    • First observedsearchLogs
    • First observedvisualizeAlertTrend

TDQS

B3.2/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have distinct purposes, but 'searchAlerts' and 'searchLogs' could be confused as both involve searching, though they target different data types (alerts vs. logs). The descriptions clarify this distinction, but the overlap in naming might cause initial ambiguity for an agent.

Naming Consistency3/5

The naming is mixed with some tools using verb_noun patterns (e.g., 'listIndexes', 'searchAlerts') and others using noun_verb or descriptive phrases (e.g., 'alertStatistics', 'exploreFieldValues'). This inconsistency makes the set less predictable, though the names remain readable overall.

Tool Count5/5

With 9 tools, the count is well-scoped for an OpenSearch server, covering key operations like listing, searching, monitoring, and visualizing data. Each tool appears to serve a specific function without redundancy, fitting the domain appropriately.

Completeness4/5

The tool set covers core OpenSearch and Wazuh security alert functionalities, including listing, searching, monitoring, and visualization. Minor gaps might exist, such as lack of CRUD operations for indexes or alerts (e.g., create/update/delete), but agents can likely work around this for common use cases.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that facilitates integration with OpenCTI, allowing users to query and retrieve cyber threat intelligence data via a standardized interface.
    16
    40
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server implementation that enables natural language interactions with OpenSearch clusters, allowing users to search documents, analyze indices, and manage clusters through simple conversational commands.
    14
    11
    Apache 2.0
  • 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