MCP server for core Elasticsearch features
The Elasticsearch server has 5 well-named tools with clear descriptions and valid JSON Schema inputs. Naming follows verb_noun convention (list_indices, get_mappings, search, esql, get_shards). Descriptions are present and reasonably detailed (77-180 chars). All tools have properly typed input schemas with field descriptions. However, output schemas are not documented in the source code provided, we see only that tools return CallToolResult, but the actual response structure is not visible. Parameter descriptions are present but brief. Error handling guidance is minimal. The server uses Streamable HTTP transport and rmcp 0.2.1 with proper tool_router macro registration.
Perform an Elasticsearch ES|QL query.
Get field mappings for a specific Elasticsearch index
Get shard information for all or specific indices.
List all available Elasticsearch indices
Perform an Elasticsearch search with the provided query DSL.
Output schemas not documented. While input schemas are defined via schemars #[derive(JsonSchema)], the response structure for each tool is not visible in the code provided. CallToolResult is returned, but the fields and types of the actual Elasticsearch responses (indices list, mappings, search results, etc.) are not documented for LLM planning.
Parameter descriptions lack format constraints and valid value guidance. For example, 'index_pattern' in list_indices accepts a string but does not document what patterns are valid (wildcard syntax, regex, exact match). 'query_body' description says 'Complete Elasticsearch query DSL object' but does not explain what structure LLMs should construct.
Error handling not documented. No tool description explains what errors might occur or how to recover. For instance, if an index does not exist, what is returned? If an ES|QL query is malformed, is the error actionable? Agents lack guidance on retry vs. user-fixable errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 58 | - | v1 |
Result limits not enforced or documented. The search tool does not document a max result limit. ES returns can be very large, without pagination guidance in the description, LLMs may pass unbounded queries that blow context windows.
Tool annotations present but minimal. The code shows #[tool(annotations(title = "...", read_only_hint = true))] for list_indices, indicating awareness of annotations, but not all tools leverage destructiveHint or idempotentHint where applicable. No evidence of tool_use_confirmation or other advanced annotations.