Elastic MCP
Enables querying, managing, and analyzing Elasticsearch data through natural language interactions, providing tools to search indices, list available indices, and retrieve index mappings.
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., "@Elastic MCPsearch the logs index for recent error messages"
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.
Demo
https://github.com/user-attachments/assets/907c3f6f-807c-4805-879a-649c74804c29
Elastic MCP
Connect to your Elasticsearch cluster from any MCP-compatible client (such as Claude Desktop) using the Model Context Protocol (MCP). This server exposes your Elasticsearch data and operations via the MCP interface, enabling agents and applications to query, manage, and analyze your data through natural language interactions.
1. Setup
Prerequisites
Python 3.8+
Elasticsearch running and accessible
uv or
pipfor dependency management
Install dependencies
Using uv package manager:
uv pip install -r requirements.txtRelated MCP server: Elasticsearch MCP Server
2. Running the MCP Server
Test using MCP Inspector
ELASTIC_URL="http://localhost:9200" ELASTIC_USERNAME="your_username" ELASTIC_PASSWORD="your_password" fastmcp dev tools/elastic_tool.pyor
Run the mcp server by
ELASTIC_URL="http://localhost:9200" ELASTIC_USERNAME="elastic" ELASTIC_PASSWORD="hKsXqDsd" python3 tools/elastic_tool.pyand run mcp client in another terminal by
python3 mcp_client.pyor
Add to the Claude Desktop by editing the claude_desktop_config.json and add the following code snippet
{
"mcpServers": {
"Elastic MCP Server": {
"command": "uv",
"args": [
"run",
"--with-requirements",
"<absolute path to requirements.txt>",
"fastmcp",
"run",
"<absolute path to elastic_tool.py>"
],
"env": {
"ELASTIC_URL": "http://localhost:9200",
"ELASTIC_USERNAME": "your_username",
"ELASTIC_PASSWORD": "your_password"
}
}
}
}
3. Tools Provided
search_index: Search an index with a query string.
list_indices: List all indices (excluding system indices).
get_index_mappings: Get mappings for a specific index.
4. License
MIT License
5. Notes
For production, do not hardcode credentials.
For more info on MCP, see FastMCP documentation.
Available Tools
3 toolsget_index_mappingsC
Get the mappings of a specific Elasticsearch index.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get' implies a read operation, the description doesn't address important behavioral aspects like authentication requirements, rate limits, error conditions, response format, or whether this operation has any side effects. For a tool with zero annotation coverage, this represents a significant gap in behavioral 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 a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's appropriately sized for a simple tool and front-loads the essential information. Every word earns its place in this concise formulation.
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 tool with no annotations, no output schema, and minimal parameter documentation, the description is insufficiently complete. While the purpose is clear, the description doesn't address what 'mappings' are, what format they're returned in, authentication requirements, or error handling. Given the complexity of Elasticsearch operations and the lack of structured documentation, more context would be helpful.
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 mentions 'a specific Elasticsearch index' which provides context for the single 'index' parameter, but with 0% schema description coverage, the schema provides no parameter documentation. The description adds some semantic meaning (it's an Elasticsearch index name) but doesn't specify format requirements, constraints, or examples. This partially compensates for the schema gap but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('mappings of a specific Elasticsearch index'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_indices' or 'search_index' - it's clear this retrieves mappings rather than listing indices or searching content, but no direct comparison 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?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of when this tool is appropriate versus 'list_indices' or 'search_index', nor any prerequisites or constraints for its use. The agent receives no contextual guidance about appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indicesB
List all indices in the Elasticsearch cluster.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists indices but doesn't mention any behavioral traits such as pagination, rate limits, permissions required, or what the output format looks like. This leaves significant gaps for a tool that interacts with a 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?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded and wastes no space, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema), the description is adequate as a minimum viable explanation. However, it lacks details about behavioral aspects like output format or cluster interaction nuances, which could be helpful despite the low complexity.
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 0 parameters with 100% coverage, so the baseline is 4. The description doesn't need to add parameter details, and it correctly doesn't mention any parameters, which is appropriate for this 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 action ('List') and target resource ('all indices in the Elasticsearch cluster'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_index_mappings' or 'search_index', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives like 'get_index_mappings' or 'search_index'. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_indexC
Search an Elasticsearch index with a simple query string.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| query | Yes |
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. While 'search' implies a read operation, it doesn't specify whether this requires authentication, what happens with invalid queries or indices, rate limits, or what format the results will be in. The description mentions 'simple query string' but doesn't explain what that entails behaviorally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core functionality without unnecessary words. It's appropriately sized for a basic search tool and gets straight to the point with zero wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 2 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, error conditions, authentication requirements, or how it differs from sibling tools. The agent would need to guess about important operational aspects.
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?
With 0% schema description coverage and 2 parameters, the description provides minimal parameter context. It mentions 'index' and 'query' but doesn't explain what constitutes a valid index name, what query syntax is supported ('simple query string' is vague), or provide examples. The description doesn't compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('search') and target resource ('an Elasticsearch index') with the method ('with a simple query string'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings (get_index_mappings, list_indices), which would require mentioning that this is for content retrieval rather than metadata 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 provides no guidance on when to use this tool versus its siblings or alternative search methods. There's no mention of prerequisites, limitations, or comparative context that would help an agent choose between search_index, get_index_mappings, and list_indices.
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.
3 tool updates
- First observed
get_index_mappings - First observed
list_indices - First observed
search_index
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_index_mappings retrieves schema information for a specific index, list_indices enumerates all indices, and search_index performs queries on an index. There is no overlap in functionality, making it easy for an agent to select the correct tool.
All tool names follow a consistent verb_noun pattern (get_index_mappings, list_indices, search_index) with clear, descriptive verbs and nouns. This uniformity enhances readability and predictability.
With only 3 tools, the server feels thin for an Elasticsearch domain, which typically involves more operations like creating/deleting indices, updating mappings, or complex queries. While the tools cover basic inspection and search, the scope is limited.
The tool set is severely incomplete for Elasticsearch operations. It lacks essential CRUD actions such as creating or deleting indices, updating mappings, and handling documents (e.g., index, update, delete). This will cause agent failures when trying to perform common tasks beyond listing and searching.
Maintenance
Related MCP Connectors
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Search remote Model Context Protocol servers and tools discovered by BuiltWith, without an API key.
List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.
Related MCP Servers
- AlicenseAqualityAmaintenanceFacilitates interaction with Elasticsearch clusters by allowing users to perform index operations, document searches, and cluster management via a Model Context Protocol server and natural language commands.20307Apache 2.0
- AlicenseBqualityCmaintenanceConnects agents to Elasticsearch data using the Model Context Protocol, allowing natural language interaction with Elasticsearch indices through MCP Clients like Claude Desktop and Cursor.1135 npm23MIT
- 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
- AlicenseNot gradedqualityDmaintenanceConnects agents to Elasticsearch data using the Model Context Protocol, allowing natural language interaction with Elasticsearch indices through tools for listing indices, getting field mappings, performing searches, and viewing shard information.1,413 npmApache 2.0