Elasticsearch MCP Server
The Elasticsearch MCP Server enables interaction with Elasticsearch and OpenSearch clusters for managing indices, documents, and cluster health.
You can:
List indices: Retrieve all indices in the cluster
Create, delete, and manage indices: Perform index operations
Get index mapping and settings: Fetch mappings and configurations
Search documents: Perform custom queries to search documents
Manage documents: Index, retrieve, and delete documents
Get cluster health and stats: Check status and obtain statistics
Manage aliases: Create, update, delete, and list aliases
General operations: Execute any Elasticsearch/OpenSearch API request
Provides Elasticsearch interaction allowing users to search documents, analyze indices, and manage clusters through natural language queries
Mentions that Kibana is accessible as part of the Elasticsearch cluster setup, though interaction is primarily through the Elasticsearch API
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., "@Elasticsearch MCP Serversearch for documents in the logs index from the last hour"
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.
Elasticsearch/OpenSearch MCP Server
Overview
A Model Context Protocol (MCP) server implementation that provides Elasticsearch and OpenSearch interaction. This server enables searching documents, analyzing indices, and managing cluster through a set of tools.
Related MCP server: Elasticsearch MCP Server
Demo
https://github.com/user-attachments/assets/f7409e31-fac4-4321-9c94-b0ff2ea7ff15
Features
General Operations
general_api_request: Perform a general HTTP API request. Use this tool for any Elasticsearch/OpenSearch API that does not have a dedicated tool.
Index Operations
list_indices: List all indices.get_index: Returns information (mappings, settings, aliases) about one or more indices.create_index: Create a new index.delete_index: Delete an index.create_data_stream: Create a new data stream (requires matching index template).get_data_stream: Get information about one or more data streams.delete_data_stream: Delete one or more data streams and their backing indices.
Document Operations
search_documents: Search for documents.index_document: Creates or updates a document in the index.get_document: Get a document by ID.delete_document: Delete a document by ID.delete_by_query: Deletes documents matching the provided query.
Cluster Operations
get_cluster_health: Returns basic information about the health of the cluster.get_cluster_stats: Returns high-level overview of cluster statistics.
Alias Operations
list_aliases: List all aliases.get_alias: Get alias information for a specific index.put_alias: Create or update an alias for a specific index.delete_alias: Delete an alias for a specific index.
Analyzer Operations
analyze_text: Analyze text using a specified analyzer or custom analysis chain. Useful for debugging search queries and understanding how text is tokenized.
Configure Environment Variables
The MCP server supports the following environment variables:
Basic Authentication (Username/Password)
ELASTICSEARCH_USERNAME: Username for basic authenticationELASTICSEARCH_PASSWORD: Password for basic authenticationOPENSEARCH_USERNAME: Username for OpenSearch basic authenticationOPENSEARCH_PASSWORD: Password for OpenSearch basic authentication
API Key Authentication (Elasticsearch only) - Recommended
ELASTICSEARCH_API_KEY: API key for Elasticsearch or Elastic Cloud Authentication.
Connection Settings
ELASTICSEARCH_HOSTS/OPENSEARCH_HOSTS: Comma-separated list of hosts (default:https://localhost:9200)ELASTICSEARCH_CLUSTERS/OPENSEARCH_CLUSTERS: Inline JSON object for named cluster configurations. When set, tools can target a specific cluster with the optionalclusterparameter.ELASTICSEARCH_CLUSTERS_FILE/OPENSEARCH_CLUSTERS_FILE: Path to a JSON file with the clusters object. Recommended when the configuration is embedded inside another JSON file (e.g. the MCP client config) because it avoids JSON-in-JSON escaping. Takes precedence over the inline variable when both are set.DEFAULT_CLUSTER: Default cluster name to use when multi-cluster configuration is set and a tool call omitscluster(defaults to the first configured cluster).VERIFY_CERTS: Whether to verify SSL certificates (default:false)REQUEST_TIMEOUT: Request timeout in seconds (optional, uses client default if not set)
Multiple Cluster Configuration
By default, the server uses a single Elasticsearch cluster from ELASTICSEARCH_HOSTS, ELASTICSEARCH_USERNAME, ELASTICSEARCH_PASSWORD, and ELASTICSEARCH_API_KEY, or a single OpenSearch cluster from OPENSEARCH_HOSTS, OPENSEARCH_USERNAME, and OPENSEARCH_PASSWORD. To configure multiple named clusters, set ELASTICSEARCH_CLUSTERS (or OPENSEARCH_CLUSTERS) to a JSON object inside the MCP server configuration. Because the value is a JSON string embedded in another JSON file, the inner quotes need to be escaped:
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uvx",
"args": [
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_CLUSTERS": "{\"prod\": {\"hosts\": [\"https://prod-es:9200\"], \"api_key\": \"<PROD_API_KEY>\", \"verify_certs\": true}, \"staging\": {\"hosts\": [\"https://staging-es:9200\"], \"username\": \"elastic\", \"password\": \"<STAGING_PASSWORD>\"}}",
"DEFAULT_CLUSTER": "prod"
}
}
}
}For better readability, point ELASTICSEARCH_CLUSTERS_FILE (or OPENSEARCH_CLUSTERS_FILE) at a standalone JSON file instead. The value is just a path so it avoids the JSON-in-JSON escaping:
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uvx",
"args": [
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_CLUSTERS_FILE": "/etc/mcp/es-clusters.json",
"DEFAULT_CLUSTER": "prod"
}
}
}
}/etc/mcp/es-clusters.json:
{
"prod": {
"hosts": ["https://prod-es:9200"],
"api_key": "<PROD_API_KEY>",
"verify_certs": true
},
"staging": {
"hosts": ["https://staging-es:9200"],
"username": "elastic",
"password": "<STAGING_PASSWORD>"
}
}Every tool accepts an optional cluster parameter. If omitted, the server uses DEFAULT_CLUSTER. When DEFAULT_CLUSTER is not set, the first cluster in the JSON object is used as the default. A tool call targeting a specific cluster looks like:
{
"cluster": "staging",
"index": "logs-*",
"body": {
"query": {
"match_all": {}
}
}
}MCP Server Authentication (HTTP Transports Only)
When running the MCP server with HTTP-based transports (SSE or Streamable HTTP), you can enable Bearer token authentication to protect the server from unauthorized access.
MCP_API_KEY: API key for MCP server authentication. Clients must includeAuthorization: Bearer <MCP_API_KEY>header.
Important Security Notes:
Authentication is only applicable for HTTP transports (
sse,streamable-http). Thestdiotransport uses local process communication and doesn't require authentication.If
MCP_API_KEYis not set, the MCP server will be accessible without authentication. This is a security risk when exposing the server over a network.For production deployments with HTTP transports, always set
MCP_API_KEY.
# Generate a secure API key (example using openssl)
export MCP_API_KEY=$(openssl rand -base64 32)
# Or set a custom API key
export MCP_API_KEY="your-secure-api-key-here"Disable High-Risk Operations
DISABLE_HIGH_RISK_OPERATIONS: Set totrueto disable all write operations (default:false)DISABLE_OPERATIONS: Comma-separated list of specific operations to disable (optional, uses default write operations list if not set)
When DISABLE_HIGH_RISK_OPERATIONS is set to true, all MCP tools that perform write operations are completely hidden from the MCP client. In this mode, the following MCP tools are disabled by default.
Index Operations:
create_indexdelete_index
Document Operations:
index_documentdelete_documentdelete_by_query
Data Stream Operations:
create_data_streamdelete_data_stream
Alias Operations:
put_aliasdelete_alias
General API Operations:
general_api_request
Optionally, you can specify a comma-separated list of operations to disable in the DISABLE_OPERATIONS environment variable.
# Disable High-Risk Operations
export DISABLE_HIGH_RISK_OPERATIONS=true
# Disable specific operations only
export DISABLE_OPERATIONS="delete_index,delete_document,delete_by_query"GCF Response Encoding (optional)
Opt in to serialize tool-result payloads as GCF (Graph Compact Format), a token-optimized wire format, in the content block the model reads. Elasticsearch returns large, uniform record sets (search hits, aggregation buckets, mappings), the shape GCF compacts best: on representative responses it is ~39% fewer tokens than compact JSON (40% on search hits), losslessly.
export RESPONSE_FORMAT=gcfstructuredContent is preserved unchanged, so a tool's declared output schema still validates and any non-model client keeps receiving JSON; only the model-facing text block is re-encoded. Encoding is fail-safe: any error, including a value outside GCF's canonical int64 numeric domain (which GCF rejects rather than silently approximating), leaves the original JSON result untouched, so a tool call is never dropped over encoding. Default behavior is unchanged when RESPONSE_FORMAT is unset.
Reproduce the token comparison: uv run --with tiktoken python benchmarks/gcf_benchmark.py.
Start Elasticsearch/OpenSearch Cluster
Start the Elasticsearch/OpenSearch cluster using Docker Compose:
# For Elasticsearch
docker-compose -f docker-compose-elasticsearch.yml up -d
# For OpenSearch
docker-compose -f docker-compose-opensearch.yml up -dThe default Elasticsearch username is elastic and password is test123. The default OpenSearch username is admin and password is admin.
You can access Kibana/OpenSearch Dashboards from http://localhost:5601.
Stdio
Option 1: Using uvx
Using uvx will automatically install the package from PyPI, no need to clone the repository locally. Add the following configuration to 's config file claude_desktop_config.json.
// For Elasticsearch with username/password
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uvx",
"args": [
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOSTS": "https://localhost:9200",
"ELASTICSEARCH_USERNAME": "elastic",
"ELASTICSEARCH_PASSWORD": "test123"
}
}
}
}
// For Elasticsearch with API key
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uvx",
"args": [
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOSTS": "https://localhost:9200",
"ELASTICSEARCH_API_KEY": "<YOUR_ELASTICSEARCH_API_KEY>"
}
}
}
}
// For OpenSearch
{
"mcpServers": {
"opensearch-mcp-server": {
"command": "uvx",
"args": [
"opensearch-mcp-server"
],
"env": {
"OPENSEARCH_HOSTS": "https://localhost:9200",
"OPENSEARCH_USERNAME": "admin",
"OPENSEARCH_PASSWORD": "admin"
}
}
}
}Option 2: Using uv with local development
Using uv requires cloning the repository locally and specifying the path to the source code. Add the following configuration to Claude Desktop's config file claude_desktop_config.json.
// For Elasticsearch with username/password
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uv",
"args": [
"--directory",
"path/to/elasticsearch-mcp-server",
"run",
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOSTS": "https://localhost:9200",
"ELASTICSEARCH_USERNAME": "elastic",
"ELASTICSEARCH_PASSWORD": "test123"
}
}
}
}
// For Elasticsearch with API key
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uv",
"args": [
"--directory",
"path/to/elasticsearch-mcp-server",
"run",
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOSTS": "https://localhost:9200",
"ELASTICSEARCH_API_KEY": "<YOUR_ELASTICSEARCH_API_KEY>"
}
}
}
}
// For OpenSearch
{
"mcpServers": {
"opensearch-mcp-server": {
"command": "uv",
"args": [
"--directory",
"path/to/elasticsearch-mcp-server",
"run",
"opensearch-mcp-server"
],
"env": {
"OPENSEARCH_HOSTS": "https://localhost:9200",
"OPENSEARCH_USERNAME": "admin",
"OPENSEARCH_PASSWORD": "admin"
}
}
}
}SSE
Option 1: Using uvx
# export environment variables (with username/password)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_USERNAME="elastic"
export ELASTICSEARCH_PASSWORD="test123"
# OR export environment variables (with API key)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_API_KEY="<YOUR_ELASTICSEARCH_API_KEY>"
# By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
uvx elasticsearch-mcp-server --transport sse
# The host, port, and path can be specified using the --host, --port, and --path options
uvx elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sseOption 2: Using uv
# By default, the SSE MCP server will serve on http://127.0.0.1:8000/sse
uv run src/server.py elasticsearch-mcp-server --transport sse
# The host, port, and path can be specified using the --host, --port, and --path options
uv run src/server.py elasticsearch-mcp-server --transport sse --host 0.0.0.0 --port 8000 --path /sseStreamable HTTP
Option 1: Using uvx
# export environment variables (with username/password)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_USERNAME="elastic"
export ELASTICSEARCH_PASSWORD="test123"
# OR export environment variables (with API key)
export ELASTICSEARCH_HOSTS="https://localhost:9200"
export ELASTICSEARCH_API_KEY="<YOUR_ELASTICSEARCH_API_KEY>"
# By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
uvx elasticsearch-mcp-server --transport streamable-http
# The host, port, and path can be specified using the --host, --port, and --path options
uvx elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcpOption 2: Using uv
# By default, the Streamable HTTP MCP server will serve on http://127.0.0.1:8000/mcp
uv run src/server.py elasticsearch-mcp-server --transport streamable-http
# The host, port, and path can be specified using the --host, --port, and --path options
uv run src/server.py elasticsearch-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --path /mcpCompatibility
The MCP server is compatible with Elasticsearch 7.x, 8.x, and 9.x. By default, it uses the Elasticsearch 8.x client (without a suffix).
MCP Server | Elasticsearch |
elasticsearch-mcp-server-es7 | Elasticsearch 7.x |
elasticsearch-mcp-server | Elasticsearch 8.x |
elasticsearch-mcp-server-es9 | Elasticsearch 9.x |
opensearch-mcp-server | OpenSearch 1.x, 2.x, 3.x |
To use the Elasticsearch 7.x client, run the elasticsearch-mcp-server-es7 variant. For Elasticsearch 9.x, use elasticsearch-mcp-server-es9. For example:
uvx elasticsearch-mcp-server-es7If you want to run different Elasticsearch variants (e.g., 7.x or 9.x) locally, simply update the elasticsearch dependency version in pyproject.toml, then start the server with:
uv run src/server.py elasticsearch-mcp-serverKubernetes Deployment
The Docker image is published to ghcr.io/cr7258/elasticsearch-mcp-server and the Helm chart is available as an OCI artifact at oci://ghcr.io/cr7258/charts/elasticsearch-mcp-server repository.
For full installation instructions, configuration reference, and usage examples see the Helm chart README.
License
This project is licensed under the Apache License Version 2.0 - see the LICENSE file for details.
Available Tools
20 toolsanalyze_textA
Analyze text to see how it would be tokenized.
Use this tool to understand how Elasticsearch/OpenSearch tokenizes and transforms text using analyzers. This is essential for debugging search queries and understanding why certain documents match or don't match.
Args: text: The text to analyze index: Index name to use its configured analyzer. If not specified, uses cluster-level analysis with built-in analyzers only. analyzer: Name of the analyzer to use (e.g., 'standard', 'korean', 'korean_search'). If index is specified, you can use custom analyzers defined in that index. tokenizer: Tokenizer to use for custom analysis chain. Cannot be used together with 'analyzer'. filter: List of token filters to apply (e.g., ['lowercase', 'stop']). Used with 'tokenizer' for custom analysis chain. char_filter: List of character filters to apply before tokenization. Used with 'tokenizer' for custom analysis chain. explain: If True, returns detailed information about each token including all token attributes and filter transformations. Useful for debugging complex analyzer chains. attributes: List of token attributes to return when explain=True (e.g., ['keyword', 'type']). If not specified, all attributes are returned. cluster: Optional cluster name. Uses the default cluster if omitted.
Returns: Dict containing 'tokens' array. Each token has 'token', 'start_offset', 'end_offset', 'type', and 'position' fields. With explain=True, returns detailed 'detail' object showing each filter's effect.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| index | No | ||
| filter | No | ||
| cluster | No | ||
| explain | No | ||
| analyzer | No | ||
| tokenizer | No | ||
| attributes | No | ||
| char_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral traits. It explains how the tool works (tokenizes using analyzers), mentions conditional behavior (index vs no index, analyzer vs custom chain), and the explain option. It also describes return format. No contradictions, though it could mention that the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro paragraph, a detailed Args list, and Returns section. It is front-loaded with purpose. While slightly lengthy, every sentence adds value, making it concise for the complexity.
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 9 parameters and no annotations, the description covers most aspects: usage, parameter constraints, and return values. It might be missing some edge cases (e.g., behavior when both index and analyzer are omitted), but overall it is sufficiently complete for a complex 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 0%, but the description thoroughly explains all 9 parameters: text, index, analyzer, tokenizer, filter, char_filter, explain, attributes, and cluster. It provides constraints (e.g., tokenizer cannot be used with analyzer) and usage context, adding significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes text to see how it would be tokenized, specifying the purpose for debugging search queries in Elasticsearch/OpenSearch. It distinguishes itself from sibling tools, which are all index/data stream management and search operations, making its unique functionality evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: to understand tokenization and debug search queries. While it does not explicitly state when not to use, the context is clear, and no alternative tools are mentioned among siblings, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_data_streamA
Create a new data stream.
This creates a new data stream with the specified name. The data stream must have a matching index template before creation.
Args: name: Name of the data stream to create cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the prerequisite of a matching index template, but does not mention other behavioral traits like whether the operation is destructive, required permissions, or potential 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise and front-loaded with the core purpose. It is structured with a brief summary and then Arg breakdown. While effective, it could be slightly more streamlined without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters) and the presence of an output schema, the description covers the essential prerequisite and parameter details. However, it lacks mention of error conditions or typical usage scenarios.
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 meaning to both parameters: 'name' is described as required, and 'cluster' is noted as optional with a default, which is not evident from the schema alone. This 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a new data stream.' It specifies the action (create) and the resource (data stream), and distinguishes it from sibling tools like create_index or delete_data_stream.
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 mentions a prerequisite: 'The data stream must have a matching index template before creation.' This provides useful context, but it does not explicitly guide when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_indexA
Create a new index.
Args: index: Name of the index body: Optional index configuration including mappings and settings cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose side effects (e.g., behavior if index exists) or required permissions. Only mentions optional configuration and cluster.
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?
Four brief lines with docstring format; every sentence provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 3-parameter tool; output schema exists so return details are not needed. Lacks mention of behavior on duplicate index.
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?
Adds meaning beyond schema: explains 'index' as name, 'body' as optional configuration with mappings and settings, 'cluster' as optional with default. Schema has 0% documentation 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?
Clearly states 'Create a new index' with a specific verb and resource. Differentiates from sibling tools like delete_index, get_index.
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?
Implied usage when a new index is needed, but no explicit guidance on when to avoid or alternatives such as create_data_stream or index_document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_aliasA
Delete an alias for a specific index.
Args: index: Name of the index name: Name of the alias cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states 'delete' but lacks side effects, permissions, idempotency, or error behavior. Minimal behavioral disclosure beyond the action.
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?
Short and focused: one-line action followed by parameter list. No unnecessary words.
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?
Adequate for a simple delete, but lacks behavioral details (e.g., error handling, return value) despite having an output schema. Could mention idempotency or safety notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds value by explaining each parameter: index, name, and optional cluster. Clear mapping to schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool deletes an alias for an index. It distinguishes from sibling tools like put_alias (create/update) and get_alias (read).
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?
Usage is implied but no explicit when-to-use or alternatives. No guidance on when not to use this tool versus put_alias or other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_by_queryB
Deletes documents matching the provided query.
Args: index: Name of the index body: Query to match documents for deletion cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so description must disclose behavioral traits. It states 'deletes documents' (destructive), but lacks details on atomicity, rollback, permissions, or behavior with large matches. Minimal disclosure beyond the obvious.
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?
Description is very concise with a clear main sentence and bulleted parameter explanations. No extra words; information is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown), the description omits return value info, error cases, and safety considerations for a destructive operation. Annotations absent; description does not fully compensate.
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 0%, but the description provides basic meanings: index is name, body is query object, cluster is optional. This adds value over parameter names alone, but lacks constraints, format, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Deletes documents matching the provided query.' Verb (deletes) and resource (documents) are specific. Sibling tools like delete_document and delete_index handle single document or whole index deletion, distinguishing this tool's bulk-by-query 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 on when to use this tool versus alternatives (delete_document, delete_index). Missing prerequisites (e.g., index must exist, query syntax expectations). Description only lists parameters without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_data_streamA
Delete one or more data streams.
Permanently deletes the specified data streams and all their backing indices.
Args: name: Name of the data stream(s) to delete. Can be a comma-separated list or wildcard pattern. cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that deletion is permanent and includes backing indices, which is important. However, it does not disclose other behavioral traits like authentication requirements, error handling, or performance impact. Since no annotations are provided, the description carries the full burden but only partially fulfills it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences followed by a clean parameter list. The purpose is front-loaded, and every sentence adds value. No 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 deletion tool, the description covers what is deleted, permanence, and parameter details. The output schema exists, so return values are documented elsewhere. The context is complete given the tool's complexity and the presence of sibling tools for related operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are described with additional context beyond the schema. The 'name' parameter clarifies it can be a comma-separated list or wildcard pattern, and 'cluster' explains the default behavior. Since schema description coverage is 0%, the description fully compensates.
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 tool name and description clearly indicate that it deletes data streams. The first sentence 'Delete one or more data streams' directly states the action and resource. It is distinct from sibling tools like 'delete_index' or 'delete_document'.
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 explains that deletion is permanent and supports comma-separated lists or wildcard patterns, but does not provide explicit guidance on when to use this tool versus alternatives or mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_documentA
Delete a document by ID.
Args: index: Name of the index id: Document ID cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the action without mentioning side effects (e.g., permanence, version conflicts), prerequisites, or the nature of the operation beyond deletion. The explanation of the cluster parameter is helpful but 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a single-sentence purpose and a bullet-like argument list. It front-loads the main action and avoids unnecessary details, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, it lacks information about error conditions, idempotency, or prerequisites (e.g., index existence). For a delete operation among similar sibling tools, this leaves some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by providing brief explanations for each parameter: index ('Name of the index'), id ('Document ID'), and cluster ('Optional cluster name. Uses the default cluster if omitted.'). This adds meaning beyond the schema, though the descriptions are minimal.
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 'Delete a document by ID,' specifying the verb 'delete' and the resource 'document by ID'. This effectively distinguishes the tool from sibling tools like delete_index or delete_by_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as delete_by_query or delete_alias. Usage context is only implied by the action 'delete a document by ID,' but no when-not-to-use or prerequisite information is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_indexA
Delete an index.
Args: index: Name of the index cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but fails to. It does not mention whether the operation is irreversible, what happens if the index doesn't exist, or any permission requirements. The optional cluster parameter is noted, but that's more parametric than behavioral.
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, with no redundant information. Every sentence adds value: the action and the two parameters.
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 destructive nature of the tool, the description lacks warnings or preconditions. However, an output schema exists (reducing need to describe return values), and the parameter semantics are handled. It meets minimum adequacy but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions (0% coverage), so the description adds needed context for both parameters: 'Name of the index' and 'Optional cluster name. Uses the default cluster if omitted.' This fills the gap effectively.
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 ('Delete') and the resource ('an index'), making the purpose unambiguous. It effectively distinguishes from sibling tools like delete_alias or delete_by_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., delete_by_query or delete_data_stream). The description lacks any context for appropriate usage or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
general_api_requestA
Perform a general HTTP API request. Use this tool for any Elasticsearch/OpenSearch API that does not have a dedicated tool.
Args: method: HTTP method (GET, POST, PUT, DELETE, etc.) path: API endpoint path params: Query parameters body: Request body cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| path | Yes | ||
| method | Yes | ||
| params | No | ||
| cluster | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It mentions HTTP methods but does not disclose potential side effects, error handling, response format, or auth requirements, leaving gaps for a general request tool.
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 efficiently structured with a one-line summary followed by a bulleted list of arguments. No unnecessary words, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's flexibility and absence of output schema/annotations, the description covers purpose, usage, and parameters adequately. Missing details on output and error behavior, but reasonable for a general 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 0%, but the description provides clear explanations for each parameter (method, path, params, body, cluster), adding meaning beyond the bare schema. Slightly more detail on formats would improve it.
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 it performs a general HTTP API request for Elasticsearch/OpenSearch APIs, and explicitly distinguishes from siblings by noting it is for APIs without a dedicated tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use this tool for any Elasticsearch/OpenSearch API that does not have a dedicated tool,' effectively telling the agent when to use it versus the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aliasA
Get alias information for a specific index.
Args: index: Name of the index cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not mention whether this is a read-only operation, any required permissions, or what happens if no aliases exist. The description only states the action without 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 concise with a front-loaded purpose sentence followed by a clear parameter list. Every sentence adds value; there is no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While parameters are explained and an output schema exists, the description lacks context about what 'alias information' entails (e.g., it returns all aliases pointing to the index). It is minimally complete given the tool's simplicity but could provide more detail about the return value or edge cases.
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 0%, so the description adds essential meaning to both parameters: 'index: Name of the index' and 'cluster: Optional cluster name. Uses the default cluster if omitted.' This clarifies the parameters beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves alias information for a specific index using a clear verb-resource pairing. It distinguishes from sibling tools like list_aliases (which lists all aliases) and put_alias/delete_alias (which modify aliases).
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 list_aliases or get_index. There is no discussion of prerequisites, limitations, or scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_healthB
Returns basic information about the health of the cluster.
Args: cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It states that the tool returns health info but does not disclose any behavioral traits such as side effects, authentication requirements, rate limits, or that it is a read-only operation. The presence of an output schema is not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, just two sentences plus a parameter docstring. The main purpose is front-loaded. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple inputs (one optional parameter) and the presence of an output schema, the description is adequate but minimal. It does not explain what the health information contains (e.g., status color, number of nodes). Could be more complete with a brief description of the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description adds clear semantics for the 'cluster' parameter: it is optional, and omitting it uses a default cluster. This goes beyond the schema's type/default. However, it does not explain what 'default cluster' means or how to specify it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns basic health information about the cluster. The verb 'returns' and resource 'health of the cluster' are specific. However, it doesn't elaborate on what 'basic information' includes, leaving some ambiguity. The sibling 'get_cluster_stats' likely provides more detail, but this is not explicitly stated.
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 'get_cluster_stats'. The description does not mention prerequisites, limitations, or typical use cases. The agent must infer from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_statsB
Returns high-level overview of cluster statistics.
Args: cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies a read operation but does not explicitly state read-only behavior, error handling for missing clusters, or other 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core purpose and then clarifying the parameter. Every word is necessary, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values are covered. However, the description lacks details on what 'high-level statistics' means, and could better differentiate from get_cluster_health.
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 0%, so the parameter info in the description adds significant meaning: it explains that cluster is optional and defaults to the default cluster, which goes beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a high-level overview of cluster statistics, which is a specific verb and resource. It distinguishes it from siblings like get_cluster_health, but could be more precise about what statistics are included.
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 mentions that the cluster parameter is optional and defaults to the default cluster, but provides no guidance on when to use this tool versus alternatives like get_cluster_health or search_documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_streamA
Get information about one or more data streams.
Retrieves configuration, mappings, settings, and other information about the specified data streams.
Args: name: Name of the data stream(s) to retrieve. Can be a comma-separated list or wildcard pattern. If not provided, retrieves all data streams. cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral transparency. It correctly states the tool is read-only (retrieves info), explaining parameter behaviors like wildcard support and defaults. However, it does not address authorization, rate limits, or error conditions, leaving gaps in transparency.
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 front-loaded with the main purpose, then breaks into parameter details. It is efficient, uses clear language, and avoids redundancy. Minor wordiness (e.g., 'and other information') could be trimmed, but overall 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 an output schema, the description does not need to explain return values. It covers input parameters thoroughly, including wildcard and default behaviors. For a retrieval tool, this is complete enough, though additional details on pagination or sorting would strengthen it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds significant meaning. It explains the 'name' parameter accepts comma-separated lists or wildcards and defaults to all, and 'cluster' is optional with a default. This goes well beyond the schema's type-only definitions.
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 'Get information about one or more data streams' and elaborates on retrieving configuration, mappings, settings. It explicitly distinguishes from siblings by focusing on read-only retrieval, contrasting with creation, deletion, and other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving data stream information but does not provide explicit guidance on when to use this tool over siblings like get_alias, get_cluster_health, or get_index. No exclusions or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentA
Get a document by ID.
Args: index: Name of the index id: Document ID cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior fully. It clarifies that 'cluster' is optional with a default, but fails to mention authorization, rate limits, or error behavior (e.g., if document not found). As a read operation, no side effects are stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one clear purpose sentence followed by a focused parameter list. No extraneous words, and the structure front-loads the main action.
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 output schema exists (so return values are documented), the description adequately covers parameter roles. However, it lacks details on error conditions, required permissions, or behavior in edge cases (e.g., non-existent document). For a simple retrieval tool, this is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain all parameters. It does so clearly: 'index', 'id', and 'cluster' with optionality and default. While brief, it adds value beyond the schema by specifying that cluster uses the default if omitted.
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 'Get a document by ID', providing a specific verb and resource. It is easily distinguished from siblings like 'delete_document' and 'index_document', and the retrieval by ID contrasts with 'search_documents'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a document ID, but does not explicitly state when to use this tool over alternatives (e.g., search_documents). No when-not or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexA
Returns information (mappings, settings, aliases) about one or more indices.
Args: index: Name of the index cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It implies a read operation but does not explicitly state read-only nature, permissions, or side effects. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus parameter list. Front-loaded purpose with no wasted words. 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?
For a simple info retrieval tool with an output schema, description is mostly complete. Minor gap: 'one or more indices' conflicts with schema requiring a single string; could clarify if comma-separated allowed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description compensates fully by explaining each parameter: 'index: Name of the index' and 'cluster: Optional cluster name. Uses the default cluster if omitted.' This adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns information (mappings, settings, aliases) about indices. Verb 'get' with resource 'index' is specific. Distinguished from siblings like get_alias or get_document which target specific entities.
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 on when to use this tool versus alternatives. No mention of scenarios where siblings like get_alias or get_document are more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_documentA
Creates or updates a document in the index.
Args: index: Name of the index document: Document data id: Optional document ID cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| index | Yes | ||
| cluster | No | ||
| document | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states 'creates or updates' but does not clarify whether updates are additive, overwrite existing fields, or replace the entire document. No side effects, auth requirements, or error behavior are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using a structured docstring format with args listed. Every sentence serves a purpose, and the main action is front-loaded. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema (not shown), the lack of return value explanation is acceptable. However, the description is missing important context: whether the tool replaces or merges, what happens on duplicate ID, and error conditions. It is minimally complete for a simple operation but could be improved for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful parameter semantics beyond the schema: it names the 'index', 'document', optional 'id', and 'cluster' with a default behavior ('Uses the default cluster if omitted'). This is helpful given the schema has zero property descriptions (0% coverage).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Creates or updates a document in the index.' This specific verb-resource combination effectively distinguishes it from sibling tools like delete_document, get_document, and search_documents.
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 lists arguments but provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, appropriate contexts, or when not to use this tool. Sibling names like create_index and delete_by_query imply some boundaries, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_aliasesA
List all aliases.
Args: cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It only says 'list,' implying read-only, but does not mention authentication, rate limits, pagination, or side effects. The output schema exists but isn't referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two-line description with front-loaded purpose and parameter details. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, a single optional parameter, and an existing output schema, the description covers the essential purpose and parameter. However, it omits any mention of the scope (e.g., user vs. cluster-wide) or differentiation from get_alias.
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 0%, but the description adds meaning: 'Optional cluster name. Uses the default cluster if omitted.' This clarifies the parameter's type, optionality, and default behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'List all aliases,' which is a clear verb+resource combination. It distinguishes from sibling tools like get_alias (single alias) and put_alias (create/update).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_alias or delete_alias. The description lacks when-not-to-use or context for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indicesA
List all indices.
Args: cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states only 'List all indices' without disclosing behavior beyond that, such as whether it is read-only, requires permissions, or has any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short with no wasted words: one sentence plus parameter explanation. It is appropriately sized for a simple 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 presence of an output schema, the description does not need to explain return values. However, it lacks context about the scope of indices (e.g., all indices in the cluster) and does not mention any related concepts like system indices.
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 explains that the 'cluster' parameter is optional and that omitting it uses a default. This adds meaning beyond the input schema, which only defines the parameter type and default as null.
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 'List all indices.' It uses a specific verb ('list') and resource ('indices'), distinguishing it from sibling tools like 'delete_index' or 'get_index'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing indices, but does not explicitly state when to use this tool versus alternatives like 'list_aliases' or 'get_cluster_health'. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_aliasB
Create or update an alias for a specific index.
Args: index: Name of the index name: Name of the alias body: Alias configuration cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| name | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full burden. It mentions 'Create or update' implying idempotency, but does not explain what happens if the alias already exists (e.g., overwrites, merges) or any side effects like permissions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loading the purpose in a single sentence. The parameter list is clear but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists (though not shown), so return values need not be explained. However, the tool has a nested object parameter ('body') and lacks details on cluster behavior. Given the sibling tools context, it is moderately complete.
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 0%, so the description must compensate. It lists all four parameters with brief explanations (e.g., 'Name of the index', 'Alias configuration'). 'body' is vague as 'Alias configuration' without further detail, but it adds some value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create or update an alias for a specific index,' which is a specific verb+resource combination. It distinguishes from siblings like 'delete_alias' and 'get_alias' by indicating the action is creation/update.
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 delete_alias or list_aliases. There is no mention of prerequisites, contexts, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentsC
Search for documents.
Args: index: Name of the index body: Search query cluster: Optional cluster name. Uses the default cluster if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| index | Yes | ||
| cluster | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It does not disclose whether the tool is read-only, destructive, or has rate limits. The term 'search' implies a read operation, but this is not explicit, leaving behavioral uncertainty.
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 short and front-loaded with the action. Parameter descriptions are listed clearly. It is concise without being overly terse, though it could benefit from a bit more structure (e.g., separating the purpose from parameter details).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (therefore return values are covered), the description lacks essential context for a search tool: it does not mention that results are a list, pagination, or size limits. This could mislead an agent expecting a single document or unlimited results.
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 0%, so the description must compensate. It provides brief explanations: 'Name of the index', 'Search query', and 'Optional cluster name. Uses the default cluster if omitted.' These add basic meaning but lack detail on the query format (e.g., Elasticsearch DSL). Partial compensation for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search for documents' clearly states the action and resource. The name itself distinguishes it from sibling tools like 'get_document' (single retrieval) and 'delete_by_query' (destructive search), though no explicit differentiation is provided.
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 on when to use this tool versus alternatives. The description does not indicate preferred use cases or contrast with siblings like 'get_document' or 'delete_by_query'. The agent must infer context solely from the name.
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.
20 tool updates
v2.1.2- Added
analyze_text - Added
create_data_stream - Added
create_index - Added
delete_alias - Added
delete_by_query - Added
delete_data_stream - Added
delete_document - Added
delete_index - Added
general_api_request - Added
get_alias - Added
get_cluster_health - Added
get_cluster_stats - Added
get_data_stream - Added
get_document - Added
get_index - Added
index_document - Added
list_aliases - Added
list_indices - Added
put_alias - Added
search_documents
19 tool updates
v2.1.1- Removed
create_data_stream - Removed
create_index - Removed
delete_alias - Removed
delete_by_query - Removed
delete_data_stream - Removed
delete_document - Removed
delete_index - Removed
general_api_request - Removed
get_alias - Removed
get_cluster_health - Removed
get_cluster_stats - Removed
get_data_stream - Removed
get_document - Removed
get_index - Removed
index_document - Removed
list_aliases - Removed
list_indices - Removed
put_alias - Removed
search_documents
3 tool updates
v1.0.0- Added
create_data_stream - Added
delete_data_stream - Added
get_data_stream
16 tool updates
- First observed
create_index - First observed
delete_alias - First observed
delete_by_query - First observed
delete_document - First observed
delete_index - First observed
general_api_request - First observed
get_alias - First observed
get_cluster_health - First observed
get_cluster_stats - First observed
get_document - First observed
get_index - First observed
index_document - First observed
list_aliases - First observed
list_indices - First observed
put_alias - First observed
search_documents
TDQS
Scored across 20 tools
Each tool targets a distinct resource and action (e.g., create_index, delete_document, get_cluster_health), with no ambiguity between them. Even similar operations like get_alias and list_aliases are clearly separated by singular vs. plural scope.
All tools follow a strict verb_noun pattern in lower_snake_case (e.g., create_data_stream, search_documents), with no mixing of conventions. The verbs are consistent: create, delete, get, list, put, search, analyze, index, general.
With 20 tools, the server is slightly over the ideal 3-15 range but still reasonable for a comprehensive Elasticsearch integration. Each tool covers a meaningful operation without feeling excessive.
Core CRUD operations for indices, documents, data streams, and aliases are covered, but notable gaps exist: no explicit update document (only full replacement via index_document), no update_by_query, and no mapping or settings update tools. The general_api_request can fill gaps but is a workaround.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables LLMs to interact with Elasticsearch clusters, allowing them to manage indices and execute search queries using natural language.2-
- AlicenseBqualityDmaintenanceConnects to Elasticsearch databases using the Model Context Protocol, allowing users to query and interact with their Elasticsearch indices through natural language conversations.412 npmApache 2.0
- FlicenseBqualityDmaintenanceConnects to Elasticsearch clusters through the Model Context Protocol, enabling natural language querying and management of Elasticsearch data. Provides tools to search indices, list available indices, and retrieve index mappings.3-
- AlicenseBqualityDmaintenanceEnables interaction with Elasticsearch clusters for health checks, index management, document CRUD operations, and search via natural language.104 npmMIT