MCP Server for interacting with Elasticsearch
Server has 6 tools with basic descriptions but critical gaps in schema completeness, parameter documentation, and error handling. All tools lack input parameter descriptions (e.g., 'index' param in get_mapping has no description of format/constraints). Output schemas are undocumented, responses are raw TextContent strings with no structured field definitions. Error handling is minimal: catch-all exceptions return plain error text without recovery guidance. No tool annotations (readOnlyHint, etc.). Naming is acceptable (verb_noun pattern) but descriptions are generic and under 100 chars, missing context on when/why to use each tool. No pagination support despite search_documents accepting arbitrary DSL queries that could return thousands of results.
Get health status of the Elasticsearch cluster. Returns information about the number of nodes, shards, etc.
Get statistics from a cluster wide perspective. The API returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins). https://www.elastic.co/guide/en/elasticsearch/reference/8.17/cluster-stats.html
Get the mapping for an index.
Get the settings for an index.
List all indices in the Elasticsearch cluster
Search documents in a specified index using a custom query.
Input parameters lack descriptions. 'index' param in get_mapping, get_settings, search_documents has no description of expected format, constraints, or examples. LLMs cannot infer whether to pass 'my-index', 'my_index', or an ID.
Output schemas are undocumented. All tools return list[TextContent] with raw string responses (e.g., str(indices), str(response)). No structured field definitions, no pagination info, no chaining IDs. LLMs cannot parse or extract data reliably.
search_documents accepts arbitrary 'body' dict (Elasticsearch DSL) with no validation, pagination, or result limits. A query returning 10,000 documents will be stringified and returned in full, exhausting context window. No limit parameter or pagination support.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Error handling is generic. All tools catch Exception and return 'Error: {str(e)}' with no recovery guidance. LLMs cannot determine if error is retryable, user-fixable, or fatal. No actionable error messages.
Tool descriptions are generic and under 100 chars. 'Get the mapping for an index' does not explain when to use this vs get_settings, what the response contains, or how to interpret mapping structure. Missing context for LLM tool selection.