Elastic MCP
# 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](https://www.elastic.co/downloads/elasticsearch) running and accessible
- [uv](https://github.com/astral-sh/uv) or `pip` for dependency management
### Install dependencies
Using `uv` package manager:
```sh
uv pip install -r requirements.txt
```
## 2. Running the MCP Server
Test using MCP Inspector
```sh
ELASTIC_URL="http://localhost:9200" ELASTIC_USERNAME="your_username" ELASTIC_PASSWORD="your_password" fastmcp dev tools/elastic_tool.py
```
or
Run the mcp server by
```sh
ELASTIC_URL="http://localhost:9200" ELASTIC_USERNAME="elastic" ELASTIC_PASSWORD="hKsXqDsd" python3 tools/elastic_tool.py
```
and run mcp client in another terminal by
```sh
python3 mcp_client.py
```
or
Add to the Claude Desktop by editing the claude_desktop_config.json and add the following code snippet
```sh
{
"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](https://github.com/ai-llm/fastmcp).
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.