OpenSearch MCP Server
Provides configuration of OpenSearch connection details through environment variables stored in a .env file.
Allows running the server directly from GitHub using npx without cloning the repository, with options to specify branches or commits.
Serves as the runtime environment for the MCP server, requiring version 16 or higher.
Enables package management and script execution for server operations like starting in various modes (stdio, debug, dev, inspect).
Enables querying and analyzing Wazuh security logs stored in OpenSearch, with features for searching alerts with advanced filtering, retrieving detailed alert information, generating security event statistics, and visualizing alert trends over time.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenSearch MCP Servershow me high severity alerts from the last 24 hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Option 1: Use with npx directly from GitHub (recommended)
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#mainOption 2: Local Installation
Clone this repository:
git clone https://github.com/jetbalsa/mcp-opensearch-js.git
cd mcp-opensearch-jsInstall dependencies:
npm installConfigure your environment variables:
cp .env.example .envEdit the
.envfile with your OpenSearch connection details:
OPENSEARCH_URL=https://your-opensearch-endpoint:9200
OPENSEARCH_USERNAME=your-username
OPENSEARCH_PASSWORD=your-password
DEBUG=falseRunning the Server
Start the server:
npm startThis will start the server in stdio mode.
Enable debug logging:
npm run stdio:debugTest with MCP CLI:
npm run devThis runs the server with the FastMCP CLI tool for interactive testing.
Test with MCP Inspector:
npm run inspectThis 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 texttimeRange: Time range (e.g., 1h, 24h, 7d)maxResults: Maximum number of results to returnindex: Index pattern to search
2. Get Alert Details
Get detailed information about a specific alert by ID.
Parameters:
id: The alert IDindex: 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 alertsindex: 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 toolsalertStatisticsC
Get statistics about security alerts
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | Field to aggregate by | rule.level |
| index | No | Index pattern | wazuh-alerts-* |
| timeRange | No | Time range (e.g., 1h, 24h, 7d) | 24h |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | Field name to explore | |
| index | Yes | Index pattern to search | |
| maxValues | No | Maximum number of values to return | |
| query | No | Optional query to filter documents | * |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The alert ID | |
| index | No | Index pattern | wazuh-alerts-* |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Index name to inspect |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Index pattern to filter (e.g., 'logs-*') | * |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Index pattern to monitor | |
| maxResults | No | Number of logs to show | |
| query | No | Filter query | * |
| refreshInterval | No | Refresh interval in seconds |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Index pattern to search | wazuh-alerts-* |
| maxResults | No | Maximum number of results to return | |
| query | Yes | The search query text | |
| timeRange | No | Time range (e.g., 1h, 24h, 7d) | 24h |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Comma-separated list of fields to return | |
| index | Yes | Index pattern to search | |
| maxResults | No | Maximum number of results to return | |
| query | Yes | The search query text | |
| timeField | No | Name of the timestamp field | @timestamp |
| timeRange | No | Time range (e.g., 1h, 24h, 7d) | 24h |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Index pattern | wazuh-alerts-* |
| interval | No | Time interval for grouping (e.g., 1h, 1d) | 1d |
| query | No | Query to filter alerts | * |
| timeRange | No | Time range (e.g., 1h, 24h, 7d) | 7d |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v1.0.0- First observed
alertStatistics - First observed
exploreFieldValues - First observed
getAlertDetails - First observed
getIndexMapping - First observed
listIndexes - First observed
monitorLogs - First observed
searchAlerts - First observed
searchLogs - First observed
visualizeAlertTrend
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol server that facilitates integration with OpenCTI, allowing users to query and retrieve cyber threat intelligence data via a standardized interface.1640MIT
- AlicenseBqualityDmaintenanceA 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.1411Apache 2.0
- AlicenseAqualityCmaintenanceAI-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.2813MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready Model Context Protocol (MCP) server for seamless integration between Wazuh SIEM and Large Language Models (LLMs).92AGPL 3.0