MCP Server for interacting with Elasticsearch and OpenSearch
The server demonstrates solid definition quality with 20 well-organized tools across 6 functional domains (index, document, cluster, alias, data stream, analyzer). All tools have names starting with action verbs (list_, get_, create_, delete_, search_, put_, index_, analyze_), descriptions ranging 20 - 100+ characters, and JSON Schema input parameters with type declarations. However, there are consistent gaps: (1) Output schemas are not documented in the code, the rubric requires documentation of return types, and inspection shows no explicit schema definitions for tool responses; (2) Many parameter descriptions are terse (10 - 30 chars), missing format/constraint details required by the pattern:constrained-input guideline; (3) Error handling guidance is absent, no recovery suggestions, no error classification (retryable vs. fatal), no examples of what LLMs should do on failure; (4) Destructive operations (delete_index, delete_document, delete_by_query, delete_alias, delete_data_stream) lack confirmation/dry-run safeguards. The naming is consistent and clear (verb_noun pattern), and all tools declare the 'cluster' parameter for multi-cluster support, which is a composition strength. But these omissions prevent a higher grade.
Analyze text using the specified analyzer or custom analysis chain.
Create a new data stream.
Create a new index.
Delete an alias for the specified index.
Deletes documents matching the provided query.
Delete one or more data streams.
Removes a document from the index.
Output schemas not documented. No tool response schemas visible in code. Rubric requires 'Document the output schema' so LLMs know what fields to expect. Tools return structured data but the schema is not formally declared anywhere in the server definition.
Destructive operations lack confirmation/dry-run safeguards. Tools delete_index, delete_document, delete_by_query, delete_alias, delete_data_stream can cause data loss. No dry-run option, no confirmation step before execution. Rubric: 'Irreversible operations should support a dry-run or confirmation step.'
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Delete an index.
Get aliases for the specified index.
Get cluster health information from OpenSearch.
Get cluster statistics from OpenSearch.
Get information about one or more data streams.
Get a document by ID.
Returns information (mappings, settings, aliases) about one or more indices.
Creates a new document in the index.
Get all aliases.
List documents in an index using a simple search query.
List all indices.
Creates or updates an alias.
Search for documents in the index.
No error handling guidance. Tool descriptions do not include recovery suggestions, error classification, or examples of what LLMs should do on failure. E.g., delete_index says 'Delete an index' with no guidance on what to do if the index doesn't exist, or what makes the operation fail. Rubric: 'Error responses must tell the LLM what to do next.'
Parameter descriptions are terse and lack constraint details. E.g., 'size' in list_documents says 'Number of documents to return (default: 10)' but does not specify min/max bounds (is 1 - 100 valid? 1 - 10000?). 'query' in search_documents says 'Elasticsearch query DSL' without examples or format requirements. Rubric: 'Describe the expected format, range, and allowed values directly in the parameter description.'
No pagination limits documented for list_ and search_ tools. list_documents accepts 'size' but no max cap mentioned. search_documents returns unbounded results. Rubric: 'Even if the API allows returning thousands of items, cap results at a reasonable limit (e.g. 20 - 50) and offer pagination.'
analyze_text tool has many optional parameters (analyzer, tokenizer, filter, char_filter, explain, attributes) but no guidance on parameter relationships or mutual exclusivity. E.g., if 'index' is provided, must 'analyzer' be omitted? No documentation. Rubric: 'When one parameter's valid values depend on another, document this in both parameter descriptions.'