elasticsearch mcp server
Facilitates 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.
Facilitates 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.
A Model Context Protocol (MCP) server implementation that provides Elasticsearch and OpenSearch interaction. This server enables searching documents, analyzing indices, and managing cluster through a set of tools.
https://github.com/user-attachments/assets/f7409e31-fac4-4321-9c94-b0ff2ea7ff15
list_indices
: List all indices.get_index
: Returns information (mappings, settings, aliases) about one or more indices.create_index
: Create a new index.delete_index
: Delete an index.search_documents
: Search for documents.index_document
: Creates or updates a document in the index.get_document
: Get a document by ID.delete_document
: Delete a document by ID.delete_by_query
: Deletes documents matching the provided query.get_cluster_health
: Returns basic information about the health of the cluster.get_cluster_stats
: Returns high-level overview of cluster statistics.list_aliases
: List all aliases.get_alias
: Get alias information for a specific index.put_alias
: Create or update an alias for a specific index.delete_alias
: Delete an alias for a specific index.Copy the .env.example
file to .env
and update the values accordingly.
Start the Elasticsearch/OpenSearch cluster using Docker Compose:
# For Elasticsearch
docker-compose -f docker-compose-elasticsearch.yml up -d
# For OpenSearch
docker-compose -f docker-compose-opensearch.yml up -d
The default Elasticsearch username is elastic
and password is test123
. The default OpenSearch username is admin
and password is admin
.
You can access Kibana/OpenSearch Dashboards from http://localhost:5601.
To install Elasticsearch Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install elasticsearch-mcp-server --client claude
Using uvx
will automatically install the package from PyPI, no need to clone the repository locally. Add the following configuration to Claude Desktop's config file claude_desktop_config.json
.
// For Elasticsearch
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uvx",
"args": [
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOST": "https://localhost:9200",
"ELASTICSEARCH_USERNAME": "elastic",
"ELASTICSEARCH_PASSWORD": "test123"
}
}
}
}
// For OpenSearch
{
"mcpServers": {
"opensearch-mcp-server": {
"command": "uvx",
"args": [
"opensearch-mcp-server"
],
"env": {
"OPENSEARCH_HOST": "https://localhost:9200",
"OPENSEARCH_USERNAME": "admin",
"OPENSEARCH_PASSWORD": "admin"
}
}
}
}
Using uv
requires cloning the repository locally and specifying the path to the source code. Add the following configuration to Claude Desktop's config file claude_desktop_config.json
.
// For Elasticsearch
{
"mcpServers": {
"elasticsearch-mcp-server": {
"command": "uv",
"args": [
"--directory",
"path/to/src/elasticsearch_mcp_server",
"run",
"elasticsearch-mcp-server"
],
"env": {
"ELASTICSEARCH_HOST": "https://localhost:9200",
"ELASTICSEARCH_USERNAME": "elastic",
"ELASTICSEARCH_PASSWORD": "test123"
}
}
}
}
// For OpenSearch
{
"mcpServers": {
"opensearch-mcp-server": {
"command": "uv",
"args": [
"--directory",
"path/to/src/elasticsearch_mcp_server",
"run",
"opensearch-mcp-server"
],
"env": {
"OPENSEARCH_HOST": "https://localhost:9200",
"OPENSEARCH_USERNAME": "admin",
"OPENSEARCH_PASSWORD": "admin"
}
}
}
}
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%/Claude/claude_desktop_config.json
Restart Claude Desktop to load the new MCP server.
Now you can interact with your Elasticsearch/OpenSearch cluster through Claude using natural language commands like: - "List all indices in the cluster" - "How old is the student Bob?" - "Show me the cluster health status"
uv run mcp_client/client.py src/server.py
This project is licensed under the Apache License Version 2.0 - see the LICENSE file for details.
[
{
"description": "List all indices in the Elasticsearch cluster",
"inputSchema": {
"properties": {},
"title": "list_indicesArguments",
"type": "object"
},
"name": "list_indices"
},
{
"description": "Get index mapping",
"inputSchema": {
"properties": {
"index": {
"title": "Index",
"type": "string"
}
},
"required": [
"index"
],
"title": "get_mappingArguments",
"type": "object"
},
"name": "get_mapping"
},
{
"description": "Get index settings",
"inputSchema": {
"properties": {
"index": {
"title": "Index",
"type": "string"
}
},
"required": [
"index"
],
"title": "get_settingsArguments",
"type": "object"
},
"name": "get_settings"
},
{
"description": "Search documents in an index with a custom query",
"inputSchema": {
"properties": {
"body": {
"title": "Body",
"type": "object"
},
"index": {
"title": "Index",
"type": "string"
}
},
"required": [
"index",
"body"
],
"title": "search_documentsArguments",
"type": "object"
},
"name": "search_documents"
},
{
"description": "Get cluster health status",
"inputSchema": {
"properties": {},
"title": "get_cluster_healthArguments",
"type": "object"
},
"name": "get_cluster_health"
},
{
"description": "Get cluster statistics",
"inputSchema": {
"properties": {},
"title": "get_cluster_statsArguments",
"type": "object"
},
"name": "get_cluster_stats"
}
]